diff --git a/processor/src/main/java/org/mapstruct/tools/gem/processor/GemInfo.java b/processor/src/main/java/org/mapstruct/tools/gem/processor/GemInfo.java index 565c644..e6ead37 100644 --- a/processor/src/main/java/org/mapstruct/tools/gem/processor/GemInfo.java +++ b/processor/src/main/java/org/mapstruct/tools/gem/processor/GemInfo.java @@ -63,6 +63,7 @@ public Set getImports() { .map( GemValueInfo::getValueType ) .filter( this::isNotJavaLang ) .filter( this::isNotSamePackage ) + .filter( this::isNotTypeMirror ) .map( GemValueType::getFqn ) .collect( Collectors.toSet() ); } @@ -86,4 +87,8 @@ private boolean isNotSamePackage(GemValueType valueType ) { private boolean isNotJavaLang( GemValueType valueType ) { return !"java.lang".equals( valueType.getPacakage() ); } + + private boolean isNotTypeMirror( GemValueType valueType ) { + return !"javax.lang.model.type.TypeMirror".equals( valueType.getFqn() ); + } } diff --git a/processor/src/main/resources/org/mapstruct/tools/gem/processor/Gem.ftl b/processor/src/main/resources/org/mapstruct/tools/gem/processor/Gem.ftl index c05d2d6..b110ce5 100644 --- a/processor/src/main/resources/org/mapstruct/tools/gem/processor/Gem.ftl +++ b/processor/src/main/resources/org/mapstruct/tools/gem/processor/Gem.ftl @@ -8,23 +8,30 @@ <#-- @ftlvariable name="gemInfo" type="org.mapstruct.tools.gem.processor.GemInfo" --> package ${gemInfo.gemPackageName}; -import java.util.ArrayList; +<#assign hasGemInfoValues = gemInfo.gemValueInfos?size > 0> +<#if hasGemInfoValues> import java.util.HashMap; import java.util.List; import java.util.Map; + import javax.lang.model.element.AnnotationMirror; +<#if hasGemInfoValues> import javax.lang.model.element.AnnotationValue; + import javax.lang.model.element.Element; -import javax.lang.model.element.ElementKind; +<#if hasGemInfoValues> import javax.lang.model.element.ExecutableElement; + import javax.lang.model.element.TypeElement; -import javax.lang.model.element.VariableElement; +<#if hasGemInfoValues> import javax.lang.model.type.TypeMirror; -import javax.lang.model.util.AbstractAnnotationValueVisitor8; import javax.lang.model.util.ElementFilter; + import org.mapstruct.tools.gem.Gem; +<#if hasGemInfoValues> import org.mapstruct.tools.gem.GemValue; + <#list gemInfo.imports as importItem> import ${importItem}; @@ -35,7 +42,7 @@ public class ${gemInfo.gemName} implements Gem { <#list gemInfo.gemValueInfos as gemValueInfo> private final GemValue<${gemValueInfo.valueType.name}> ${gemValueInfo.name}; -<#if (gemInfo.gemValueInfos?size > 0) > +<#if hasGemInfoValues> private final boolean isValid; private final AnnotationMirror mirror; @@ -68,10 +75,10 @@ public class ${gemInfo.gemName} implements Gem { @Override public boolean isValid( ) { - <#if gemInfo.gemValueInfos?size == 0> - return true; - <#else> + <#if hasGemInfoValues> return isValid; + <#else> + return true; } @@ -97,7 +104,7 @@ public class ${gemInfo.gemName} implements Gem { if ( mirror == null || builder == null ) { return null; } - <#if gemInfo.gemValueInfos?size != 0> + <#if hasGemInfoValues> // fetch defaults from all defined values in the annotation type List enclosed = ElementFilter.methodsIn( mirror.getAnnotationType().asElement().getEnclosedElements() ); diff --git a/processor/src/test/resources/fixtures/org/mapstruct/tools/gem/processor/BuilderGem.java b/processor/src/test/resources/fixtures/org/mapstruct/tools/gem/processor/BuilderGem.java index 6e393e7..fd65ac0 100644 --- a/processor/src/test/resources/fixtures/org/mapstruct/tools/gem/processor/BuilderGem.java +++ b/processor/src/test/resources/fixtures/org/mapstruct/tools/gem/processor/BuilderGem.java @@ -1,22 +1,9 @@ package org.mapstruct.tools.gem.processor; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - import javax.lang.model.element.AnnotationMirror; -import javax.lang.model.element.AnnotationValue; import javax.lang.model.element.Element; -import javax.lang.model.element.ElementKind; -import javax.lang.model.element.ExecutableElement; import javax.lang.model.element.TypeElement; -import javax.lang.model.element.VariableElement; -import javax.lang.model.type.TypeMirror; -import javax.lang.model.util.AbstractAnnotationValueVisitor8; -import javax.lang.model.util.ElementFilter; import org.mapstruct.tools.gem.Gem; -import org.mapstruct.tools.gem.GemValue; public class BuilderGem implements Gem { diff --git a/processor/src/test/resources/fixtures/org/mapstruct/tools/gem/processor/SomeAnnotationGem.java b/processor/src/test/resources/fixtures/org/mapstruct/tools/gem/processor/SomeAnnotationGem.java index 8a34b46..e86267e 100644 --- a/processor/src/test/resources/fixtures/org/mapstruct/tools/gem/processor/SomeAnnotationGem.java +++ b/processor/src/test/resources/fixtures/org/mapstruct/tools/gem/processor/SomeAnnotationGem.java @@ -1,6 +1,5 @@ package org.mapstruct.tools.gem.processor; -import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -8,17 +7,13 @@ import javax.lang.model.element.AnnotationMirror; import javax.lang.model.element.AnnotationValue; import javax.lang.model.element.Element; -import javax.lang.model.element.ElementKind; import javax.lang.model.element.ExecutableElement; import javax.lang.model.element.TypeElement; -import javax.lang.model.element.VariableElement; import javax.lang.model.type.TypeMirror; -import javax.lang.model.util.AbstractAnnotationValueVisitor8; import javax.lang.model.util.ElementFilter; import org.mapstruct.tools.gem.Gem; import org.mapstruct.tools.gem.GemValue; -import javax.lang.model.type.TypeMirror; public class SomeAnnotationGem implements Gem { diff --git a/processor/src/test/resources/fixtures/org/mapstruct/tools/gem/processor/SomeAnnotationsGem.java b/processor/src/test/resources/fixtures/org/mapstruct/tools/gem/processor/SomeAnnotationsGem.java index d372cc1..6b806be 100644 --- a/processor/src/test/resources/fixtures/org/mapstruct/tools/gem/processor/SomeAnnotationsGem.java +++ b/processor/src/test/resources/fixtures/org/mapstruct/tools/gem/processor/SomeAnnotationsGem.java @@ -1,6 +1,5 @@ package org.mapstruct.tools.gem.processor; -import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -8,12 +7,9 @@ import javax.lang.model.element.AnnotationMirror; import javax.lang.model.element.AnnotationValue; import javax.lang.model.element.Element; -import javax.lang.model.element.ElementKind; import javax.lang.model.element.ExecutableElement; import javax.lang.model.element.TypeElement; -import javax.lang.model.element.VariableElement; import javax.lang.model.type.TypeMirror; -import javax.lang.model.util.AbstractAnnotationValueVisitor8; import javax.lang.model.util.ElementFilter; import org.mapstruct.tools.gem.Gem; import org.mapstruct.tools.gem.GemValue; diff --git a/processor/src/test/resources/fixtures/org/mapstruct/tools/gem/processor/SomeArrayAnnotationGem.java b/processor/src/test/resources/fixtures/org/mapstruct/tools/gem/processor/SomeArrayAnnotationGem.java index 5402cd2..1fc1be5 100644 --- a/processor/src/test/resources/fixtures/org/mapstruct/tools/gem/processor/SomeArrayAnnotationGem.java +++ b/processor/src/test/resources/fixtures/org/mapstruct/tools/gem/processor/SomeArrayAnnotationGem.java @@ -1,6 +1,5 @@ package org.mapstruct.tools.gem.processor; -import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -8,17 +7,13 @@ import javax.lang.model.element.AnnotationMirror; import javax.lang.model.element.AnnotationValue; import javax.lang.model.element.Element; -import javax.lang.model.element.ElementKind; import javax.lang.model.element.ExecutableElement; import javax.lang.model.element.TypeElement; -import javax.lang.model.element.VariableElement; import javax.lang.model.type.TypeMirror; -import javax.lang.model.util.AbstractAnnotationValueVisitor8; import javax.lang.model.util.ElementFilter; import org.mapstruct.tools.gem.Gem; import org.mapstruct.tools.gem.GemValue; -import javax.lang.model.type.TypeMirror; public class SomeArrayAnnotationGem implements Gem {