diff --git a/processor/src/main/java/org/mapstruct/ap/model/AnnotationMapperReference.java b/processor/src/main/java/org/mapstruct/ap/model/AnnotationMapperReference.java index 055bb0707..8cfd21d53 100644 --- a/processor/src/main/java/org/mapstruct/ap/model/AnnotationMapperReference.java +++ b/processor/src/main/java/org/mapstruct/ap/model/AnnotationMapperReference.java @@ -33,8 +33,8 @@ public class AnnotationMapperReference extends MapperReference { private final Annotation annotation; - public AnnotationMapperReference(Type type, String variableName, Annotation annotation) { - super( type, variableName ); + public AnnotationMapperReference(Type type, String variableName, Annotation annotation, boolean isUsed) { + super( type, variableName, isUsed ); this.annotation = annotation; } diff --git a/processor/src/main/java/org/mapstruct/ap/model/AssignmentFactory.java b/processor/src/main/java/org/mapstruct/ap/model/AssignmentFactory.java index ba5088661..3cb763a8c 100644 --- a/processor/src/main/java/org/mapstruct/ap/model/AssignmentFactory.java +++ b/processor/src/main/java/org/mapstruct/ap/model/AssignmentFactory.java @@ -96,6 +96,7 @@ public class AssignmentFactory { private static MapperReference findMapperReference( List mapperReferences, SourceMethod method ) { for ( MapperReference ref : mapperReferences ) { if ( ref.getType().equals( method.getDeclaringMapper() ) ) { + ref.setUsed( !method.isStatic() ); return ref; } } diff --git a/processor/src/main/java/org/mapstruct/ap/model/Decorator.java b/processor/src/main/java/org/mapstruct/ap/model/Decorator.java index 680d417e7..42caa9982 100644 --- a/processor/src/main/java/org/mapstruct/ap/model/Decorator.java +++ b/processor/src/main/java/org/mapstruct/ap/model/Decorator.java @@ -70,7 +70,7 @@ public class Decorator extends GeneratedType { mapperElement.getKind() == ElementKind.INTERFACE ? mapperElement.getSimpleName().toString() : null, methods, Arrays.asList( - new Field( typeFactory.getType( mapperElement ), "delegate" ), + new Field( typeFactory.getType( mapperElement ), "delegate", true ), new DecoratorConstructor( mapperElement.getSimpleName().toString() + IMPLEMENTATION_SUFFIX, mapperElement.getSimpleName().toString() + "Impl_", diff --git a/processor/src/main/java/org/mapstruct/ap/model/Field.java b/processor/src/main/java/org/mapstruct/ap/model/Field.java index 24870ce2b..1ba5a526b 100644 --- a/processor/src/main/java/org/mapstruct/ap/model/Field.java +++ b/processor/src/main/java/org/mapstruct/ap/model/Field.java @@ -33,10 +33,17 @@ public class Field extends ModelElement { private final Type type; private final String variableName; + private boolean used; + public Field(Type type, String variableName, boolean used) { + this.type = type; + this.variableName = variableName; + this.used = used; + } public Field(Type type, String variableName) { this.type = type; this.variableName = variableName; + this.used = false; } /** @@ -51,7 +58,7 @@ public class Field extends ModelElement { /** * Returns the variable name of this field. * - * @return the variable name of this referfieldence + * @return the variable name of this reference */ public String getVariableName() { return variableName; @@ -61,4 +68,21 @@ public class Field extends ModelElement { public Set getImportTypes() { return Collections.emptySet(); } + + /** + * indicates whether the field is indeed used + * @return true when field is used + */ + public boolean isUsed() { + return used; + } + + /** + * sets the field as being used + * @param isUsed must be true when being used. + */ + public void setUsed(boolean isUsed) { + this.used = isUsed; + } + } diff --git a/processor/src/main/java/org/mapstruct/ap/model/MapperReference.java b/processor/src/main/java/org/mapstruct/ap/model/MapperReference.java index 2d2be1ff5..83f070feb 100644 --- a/processor/src/main/java/org/mapstruct/ap/model/MapperReference.java +++ b/processor/src/main/java/org/mapstruct/ap/model/MapperReference.java @@ -30,4 +30,8 @@ public abstract class MapperReference extends Field { public MapperReference(Type type, String variableName) { super( type, variableName ); } + + public MapperReference(Type type, String variableName, boolean isUsed) { + super( type, variableName, isUsed ); + } } diff --git a/processor/src/main/java/org/mapstruct/ap/processor/AnnotationBasedComponentModelProcessor.java b/processor/src/main/java/org/mapstruct/ap/processor/AnnotationBasedComponentModelProcessor.java index 22bfb580f..0638cb32f 100644 --- a/processor/src/main/java/org/mapstruct/ap/processor/AnnotationBasedComponentModelProcessor.java +++ b/processor/src/main/java/org/mapstruct/ap/processor/AnnotationBasedComponentModelProcessor.java @@ -76,7 +76,8 @@ public abstract class AnnotationBasedComponentModelProcessor implements ModelEle return new AnnotationMapperReference( originalReference.getType(), originalReference.getVariableName(), - getMapperReferenceAnnotation() + getMapperReferenceAnnotation(), + originalReference.isUsed() ); } diff --git a/processor/src/main/java/org/mapstruct/ap/processor/creation/MappingResolverImpl.java b/processor/src/main/java/org/mapstruct/ap/processor/creation/MappingResolverImpl.java index a47503a98..a25bde816 100755 --- a/processor/src/main/java/org/mapstruct/ap/processor/creation/MappingResolverImpl.java +++ b/processor/src/main/java/org/mapstruct/ap/processor/creation/MappingResolverImpl.java @@ -459,6 +459,7 @@ public class MappingResolverImpl implements MappingResolver { private MapperReference findMapperReference(SourceMethod method) { for ( MapperReference ref : mapperReferences ) { if ( ref.getType().equals( method.getDeclaringMapper() ) ) { + ref.setUsed( !method.isStatic() ); return ref; } } diff --git a/processor/src/main/resources/org.mapstruct.ap.model.AnnotationMapperReference.ftl b/processor/src/main/resources/org.mapstruct.ap.model.AnnotationMapperReference.ftl index 1898e51ac..649107d6c 100644 --- a/processor/src/main/resources/org.mapstruct.ap.model.AnnotationMapperReference.ftl +++ b/processor/src/main/resources/org.mapstruct.ap.model.AnnotationMapperReference.ftl @@ -18,5 +18,5 @@ limitations under the License. --> -<#nt><@includeModel object=annotation/> -private <@includeModel object=type/> ${variableName}; \ No newline at end of file +<#if used><#nt><@includeModel object=annotation/> +private <@includeModel object=type/> ${variableName}; \ No newline at end of file diff --git a/processor/src/main/resources/org.mapstruct.ap.model.DefaultMapperReference.ftl b/processor/src/main/resources/org.mapstruct.ap.model.DefaultMapperReference.ftl index 176916cec..91a1ce21e 100644 --- a/processor/src/main/resources/org.mapstruct.ap.model.DefaultMapperReference.ftl +++ b/processor/src/main/resources/org.mapstruct.ap.model.DefaultMapperReference.ftl @@ -18,4 +18,4 @@ limitations under the License. --> -private final <@includeModel object=type/> ${variableName} = <#if annotatedMapper>Mappers.getMapper( <@includeModel object=type/>.class );<#else>new <@includeModel object=type/>(); \ No newline at end of file +<#if used>private final <@includeModel object=type/> ${variableName} = <#if annotatedMapper>Mappers.getMapper( <@includeModel object=type/>.class );<#else>new <@includeModel object=type/>(); \ No newline at end of file diff --git a/processor/src/main/resources/org.mapstruct.ap.model.Field.ftl b/processor/src/main/resources/org.mapstruct.ap.model.Field.ftl index aa81400e1..1c2bd07fe 100644 --- a/processor/src/main/resources/org.mapstruct.ap.model.Field.ftl +++ b/processor/src/main/resources/org.mapstruct.ap.model.Field.ftl @@ -18,4 +18,4 @@ limitations under the License. --> -private final <@includeModel object=type/> ${variableName}; \ No newline at end of file +<#if used>private final <@includeModel object=type/> ${variableName}; \ No newline at end of file diff --git a/processor/src/test/java/org/mapstruct/ap/test/references/statics/CustomMapper.java b/processor/src/test/java/org/mapstruct/ap/test/references/statics/CustomMapper.java index fdb94d087..d25c704e7 100644 --- a/processor/src/test/java/org/mapstruct/ap/test/references/statics/CustomMapper.java +++ b/processor/src/test/java/org/mapstruct/ap/test/references/statics/CustomMapper.java @@ -22,9 +22,11 @@ package org.mapstruct.ap.test.references.statics; * * @author Sjaak Derksen */ -//@CHECKSTYLE:OFF public class CustomMapper { + private CustomMapper() { + } + public static Category toCategory(float in) { if ( in < 2.5 ) {