Skip to content

Commit d70ad53

Browse files
authored
Add support for single GemDefinition annotation (#29)
1 parent 419a721 commit d70ad53

2 files changed

Lines changed: 39 additions & 19 deletions

File tree

processor/src/main/java/org/mapstruct/tools/gem/processor/GemProcessor.java

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
/**
4040
* @author sjaakd
4141
*/
42-
@SupportedAnnotationTypes( "org.mapstruct.tools.gem.GemDefinitions" )
42+
@SupportedAnnotationTypes( {"org.mapstruct.tools.gem.GemDefinitions", "org.mapstruct.tools.gem.GemDefinition"} )
4343
public class GemProcessor extends AbstractProcessor {
4444

4545
private Util util;
@@ -55,24 +55,28 @@ public boolean process(Set<? extends TypeElement> annotationTypes, RoundEnvironm
5555
try {
5656
util = new Util( processingEnv.getTypeUtils(), processingEnv.getElementUtils() );
5757
for ( TypeElement annotationType : annotationTypes ) {
58-
58+
String annotationName = annotationType.getQualifiedName().toString();
5959
for ( Element definingElement : roundEnv.getElementsAnnotatedWith( annotationType ) ) {
6060

6161
// get an annotation mirror on @GemDefinitions
6262
AnnotationMirror gemDefinitionsMirror = definingElement
6363
.getAnnotationMirrors()
6464
.stream()
65-
.filter( t -> util.isSame( t.getAnnotationType(), "org.mapstruct.tools.gem.GemDefinitions" ) )
65+
.filter( t -> util.isSame( t.getAnnotationType(), annotationName ) )
6666
.findFirst()
6767
.orElseThrow( IllegalStateException::new );
68-
69-
// get annotation mirrors on each @GemDefinitions#value
70-
List<AnnotationMirror> gemDefinitionMirrors = util.getAnnotationValue(
71-
gemDefinitionsMirror,
72-
"value",
73-
List.class
74-
);
75-
gemDefinitionMirrors.forEach( m -> addGemInfo( m, definingElement ) );
68+
if ( annotationName.endsWith( "s" ) ) {
69+
// get annotation mirrors on each @GemDefinitions#value
70+
List<AnnotationMirror> gemDefinitionMirrors = util.getAnnotationValue(
71+
gemDefinitionsMirror,
72+
"value",
73+
List.class
74+
);
75+
gemDefinitionMirrors.forEach( m -> addGemInfo( m, definingElement ) );
76+
}
77+
else {
78+
addGemInfo( gemDefinitionsMirror, definingElement );
79+
}
7680
}
7781
}
7882
postProcessGemInfo();

processor/src/test/java/org/mapstruct/tools/gem/processor/ProcessorTest.java

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,31 @@ void example() throws IOException {
4040
"org.mapstruct.annotations.processor.GemGenerator",
4141
getSource()
4242
);
43-
compile( new GemProcessor(), src );
43+
File generatedDir = compile( new GemProcessor(), src );
44+
assertGeneratedFileContent( "BuilderGem", generatedDir );
45+
assertGeneratedFileContent( "SomeAnnotationGem", generatedDir );
46+
assertGeneratedFileContent( "SomeAnnotationsGem", generatedDir );
47+
assertGeneratedFileContent( "SomeArrayAnnotationGem", generatedDir );
48+
}
49+
50+
@Test
51+
void singleAnnotation() throws IOException {
52+
StringJavaFileObject src = new StringJavaFileObject(
53+
"org.mapstruct.annotations.processor.GemGenerator",
54+
"package org.mapstruct.tools.gem.processor;\n" +
55+
"\n" +
56+
"import org.mapstruct.tools.gem.GemDefinition;\n" +
57+
"import org.mapstruct.tools.gem.test.Builder;\n" +
58+
"\n" +
59+
"@GemDefinition(value = Builder.class)\n" +
60+
"public class GemGenerator {\n" +
61+
"}"
62+
);
63+
File generatedDir = compile( new GemProcessor(), src );
64+
assertGeneratedFileContent( "BuilderGem", generatedDir );
4465
}
4566

46-
private void compile(Processor processor, JavaFileObject... compilationUnits) throws IOException {
67+
private File compile(Processor processor, JavaFileObject... compilationUnits) throws IOException {
4768
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
4869

4970
DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<JavaFileObject>();
@@ -71,12 +92,7 @@ private void compile(Processor processor, JavaFileObject... compilationUnits) th
7192
System.err.println( diagnostic );
7293
}
7394
assertThat( success ).isTrue();
74-
75-
76-
assertGeneratedFileContent( "BuilderGem", generatedDir );
77-
assertGeneratedFileContent( "SomeAnnotationGem", generatedDir );
78-
assertGeneratedFileContent( "SomeAnnotationsGem", generatedDir );
79-
assertGeneratedFileContent( "SomeArrayAnnotationGem", generatedDir );
95+
return generatedDir;
8096
}
8197

8298
protected void assertGeneratedFileContent(String gemName, File generatedDir) {

0 commit comments

Comments
 (0)