Skip to content

Commit 1daa88c

Browse files
Merge pull request #64 from ZeroErrors/master
Add annotationFilters and displaySerializerWarning settings
2 parents bee5ec1 + 6624efe commit 1daa88c

File tree

6 files changed

+60
-1
lines changed

6 files changed

+60
-1
lines changed

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,7 @@ release.properties
1010
**.classpath
1111
**.project
1212
**.settings
13+
14+
# JetBrain IntelliJ
15+
.idea/
16+
**.iml

typescript-generator-core/src/main/java/cz/habarta/typescript/generator/Settings.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,10 @@ public class Settings {
3838
public boolean noFileComment = false;
3939
public List<File> javadocXmlFiles = null;
4040
public List<EmitterExtension> extensions = new ArrayList<>();
41+
public List<Class<? extends Annotation>> includePropertyAnnotations = new ArrayList<>();
4142
public List<Class<? extends Annotation>> optionalAnnotations = new ArrayList<>();
4243
public boolean experimentalInlineEnums = false;
44+
public boolean displaySerializerWarning = true;
4345

4446

4547
public void loadCustomTypeProcessor(ClassLoader classLoader, String customTypeProcessor) {
@@ -54,6 +56,12 @@ public void loadExtensions(ClassLoader classLoader, List<String> extensions) {
5456
}
5557
}
5658

59+
public void loadIncludePropertyAnnotations(ClassLoader classLoader, List<String> includePropertyAnnotations) {
60+
if (includePropertyAnnotations != null) {
61+
this.includePropertyAnnotations = loadClasses(classLoader, includePropertyAnnotations, Annotation.class);
62+
}
63+
}
64+
5765
public void loadOptionalAnnotations(ClassLoader classLoader, List<String> optionalAnnotations) {
5866
if (optionalAnnotations != null) {
5967
this.optionalAnnotations = loadClasses(classLoader, optionalAnnotations, Annotation.class);

typescript-generator-core/src/main/java/cz/habarta/typescript/generator/parser/Jackson1Parser.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,19 @@ protected BeanModel parseBean(SourceType<Class<?>> sourceClass) {
4545
if (propertyType == JsonNode.class) {
4646
propertyType = Object.class;
4747
}
48+
boolean isInAnnotationFilter = settings.includePropertyAnnotations.isEmpty();
49+
if (!isInAnnotationFilter) {
50+
for (Class<? extends Annotation> optionalAnnotation : settings.includePropertyAnnotations) {
51+
if (beanPropertyWriter.getAnnotation(optionalAnnotation) != null) {
52+
isInAnnotationFilter = true;
53+
break;
54+
}
55+
}
56+
if (!isInAnnotationFilter) {
57+
System.out.println("Skipping " + sourceClass.type + "." + beanPropertyWriter.getName() + " because it is missing an annotation from includePropertyAnnotations!");
58+
continue;
59+
}
60+
}
4861
boolean optional = false;
4962
for (Class<? extends Annotation> optionalAnnotation : settings.optionalAnnotations) {
5063
if (beanPropertyWriter.getAnnotation(optionalAnnotation) != null) {

typescript-generator-core/src/main/java/cz/habarta/typescript/generator/parser/Jackson2Parser.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,19 @@ protected BeanModel parseBean(SourceType<Class<?>> sourceClass) {
3232
if (propertyType == JsonNode.class) {
3333
propertyType = Object.class;
3434
}
35+
boolean isInAnnotationFilter = settings.includePropertyAnnotations.isEmpty();
36+
if (!isInAnnotationFilter) {
37+
for (Class<? extends Annotation> optionalAnnotation : settings.includePropertyAnnotations) {
38+
if (beanPropertyWriter.getAnnotation(optionalAnnotation) != null) {
39+
isInAnnotationFilter = true;
40+
break;
41+
}
42+
}
43+
if (!isInAnnotationFilter) {
44+
System.out.println("Skipping " + sourceClass.type + "." + beanPropertyWriter.getName() + " because it is missing an annotation from includePropertyAnnotations!");
45+
continue;
46+
}
47+
}
3548
boolean optional = false;
3649
for (Class<? extends Annotation> optionalAnnotation : settings.optionalAnnotations) {
3750
if (beanPropertyWriter.getAnnotation(optionalAnnotation) != null) {
@@ -104,7 +117,9 @@ private BeanHelper getBeanHelper(Class<?> beanClass) {
104117
return new BeanHelper((BeanSerializer) jsonSerializer);
105118
} else {
106119
final String jsonSerializerName = jsonSerializer.getClass().getName();
107-
System.out.println(String.format("Warning: Unknown serializer '%s' for class '%s'", jsonSerializerName, beanClass));
120+
if (settings.displaySerializerWarning) {
121+
System.out.println(String.format("Warning: Unknown serializer '%s' for class '%s'", jsonSerializerName, beanClass));
122+
}
108123
return null;
109124
}
110125
} catch (JsonMappingException e) {

typescript-generator-gradle-plugin/src/main/java/cz/habarta/typescript/generator/gradle/GenerateTask.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ public class GenerateTask extends DefaultTask {
2222
public String classesFromJaxrsApplication;
2323
public boolean classesFromAutomaticJaxrsApplication;
2424
public List<String> excludeClasses;
25+
public List<String> includePropertyAnnotations;
2526
public JsonLibrary jsonLibrary;
2627
public boolean declarePropertiesAsOptional;
2728
public String removeTypeNamePrefix;
@@ -41,6 +42,7 @@ public class GenerateTask extends DefaultTask {
4142
public List<String> extensionClasses;
4243
public List<String> optionalAnnotations;
4344
public boolean experimentalInlineEnums;
45+
public boolean displaySerializerWarning = true;
4446

4547
@TaskAction
4648
public void generate() throws Exception {
@@ -91,8 +93,10 @@ public void generate() throws Exception {
9193
settings.noFileComment = noFileComment;
9294
settings.javadocXmlFiles = javadocXmlFiles;
9395
settings.loadExtensions(classLoader, extensionClasses);
96+
settings.loadIncludePropertyAnnotations(classLoader, includePropertyAnnotations);
9497
settings.loadOptionalAnnotations(classLoader, optionalAnnotations);
9598
settings.experimentalInlineEnums = experimentalInlineEnums;
99+
settings.displaySerializerWarning = displaySerializerWarning;
96100
settings.validateFileName(new File(outputFile));
97101

98102
// TypeScriptGenerator

typescript-generator-maven-plugin/src/main/java/cz/habarta/typescript/generator/maven/GenerateMojo.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,13 @@ public class GenerateMojo extends AbstractMojo {
9494
@Parameter
9595
private List<String> excludeClasses;
9696

97+
/**
98+
* If this list is not empty then TypeScript will only be generated for
99+
* methods with one of the annotations defined in this list
100+
*/
101+
@Parameter
102+
private List<String> includePropertyAnnotations;
103+
97104
/**
98105
* Library used in JSON classes.
99106
* Supported values are 'jackson1', 'jackson2'.
@@ -237,6 +244,12 @@ public class GenerateMojo extends AbstractMojo {
237244
@Parameter
238245
private boolean experimentalInlineEnums;
239246

247+
/**
248+
* Display warnings when bean serializer is not found.
249+
*/
250+
@Parameter(defaultValue = "true")
251+
private boolean displaySerializerWarning;
252+
240253
@Parameter(defaultValue = "${project}", readonly = true, required = true)
241254
private MavenProject project;
242255

@@ -278,8 +291,10 @@ public void execute() {
278291
settings.noFileComment = noFileComment;
279292
settings.javadocXmlFiles = javadocXmlFiles;
280293
settings.loadExtensions(classLoader, extensions);
294+
settings.loadIncludePropertyAnnotations(classLoader, includePropertyAnnotations);
281295
settings.loadOptionalAnnotations(classLoader, optionalAnnotations);
282296
settings.experimentalInlineEnums = experimentalInlineEnums;
297+
settings.displaySerializerWarning = displaySerializerWarning;
283298
settings.validateFileName(outputFile);
284299

285300
// TypeScriptGenerator

0 commit comments

Comments
 (0)