Class MethodRetrievalProcessor
- java.lang.Object
-
- org.mapstruct.ap.internal.processor.MethodRetrievalProcessor
-
- All Implemented Interfaces:
ModelElementProcessor<java.lang.Void,java.util.List<SourceMethod>>
public class MethodRetrievalProcessor extends java.lang.Object implements ModelElementProcessor<java.lang.Void,java.util.List<SourceMethod>>
AModelElementProcessorwhich retrieves a list ofSourceMethods representing all the mapping methods of the given bean mapper type as well as all referenced mapper methods declared by other mappers referenced by the current mapper.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private classMethodRetrievalProcessor.RepeatableMappingAnnotations<SINGULAR extends org.mapstruct.tools.gem.Gem,MULTIPLE extends org.mapstruct.tools.gem.Gem,OPTIONS>private classMethodRetrievalProcessor.RepeatableMappingsprivate classMethodRetrievalProcessor.RepeatableSubclassMappings-
Nested classes/interfaces inherited from interface org.mapstruct.ap.internal.processor.ModelElementProcessor
ModelElementProcessor.ProcessorContext
-
-
Field Summary
Fields Modifier and Type Field Description private AccessorNamingUtilsaccessorNamingprivate ElementUtilselementUtilsprivate java.util.Map<java.lang.String,EnumTransformationStrategy>enumTransformationStrategiesprivate static java.lang.StringJAVA_LANG_ANNOTATION_PGKprivate static java.lang.StringMAPPING_FQNprivate static java.lang.StringMAPPINGS_FQNprivate FormattingMessagermessagerprivate Optionsoptionsprivate static java.lang.StringORG_MAPSTRUCT_PKGprivate static java.lang.StringSUB_CLASS_MAPPING_FQNprivate static java.lang.StringSUB_CLASS_MAPPINGS_FQNprivate TypeFactorytypeFactoryprivate TypeUtilstypeUtils
-
Constructor Summary
Constructors Constructor Description MethodRetrievalProcessor()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private javax.lang.model.element.TypeElementasTypeElement(javax.lang.model.type.DeclaredType type)private booleancheckParameterAndReturnType(javax.lang.model.element.ExecutableElement method, java.util.List<Parameter> sourceParameters, Parameter targetParameter, java.util.List<Parameter> contextParameters, Type resultType, Type returnType, boolean containsTargetTypeParameter)private ParameterextractTargetParameter(java.util.List<Parameter> parameters)private java.util.Set<MappingOptions>getMappings(javax.lang.model.element.ExecutableElement method, BeanMappingOptions beanMapping)Retrieves the mappings configured via@Mappingfrom the given method.private SourceMethodgetMethod(javax.lang.model.element.TypeElement usedMapper, javax.lang.model.element.ExecutableElement method, javax.lang.model.element.TypeElement mapperToImplement, MapperOptions mapperOptions, java.util.List<SourceMethod> prototypeMethods)private SourceMethodgetMethodRequiringImplementation(javax.lang.model.type.ExecutableType methodType, javax.lang.model.element.ExecutableElement method, java.util.List<Parameter> parameters, boolean containsTargetTypeParameter, MapperOptions mapperOptions, java.util.List<SourceMethod> prototypeMethods, javax.lang.model.element.TypeElement mapperToImplement)intgetPriority()Returns the priority value of this processor which must be between 1 (highest priority) and 10000 (lowest priority).private SourceMethodgetReferencedMethod(javax.lang.model.element.TypeElement usedMapper, javax.lang.model.type.ExecutableType methodType, javax.lang.model.element.ExecutableElement method, javax.lang.model.element.TypeElement mapperToImplement, java.util.List<Parameter> parameters)private java.util.Set<SubclassMappingOptions>getSubclassMappings(java.util.List<Parameter> sourceParameters, Type resultType, javax.lang.model.element.ExecutableElement method, BeanMappingOptions beanMapping, SubclassValidator validator)Retrieves the subclass mappings configured via@SubclassMappingfrom the given method.private java.util.List<ValueMappingOptions>getValueMappings(javax.lang.model.element.ExecutableElement method)Retrieves the mappings configured via@ValueMappingfrom the given method.private booleanhasConditionAnnotation(javax.lang.model.element.ExecutableElement method)private booleanhasFactoryAnnotation(javax.lang.model.element.ExecutableElement method)private booleanisBoolean(Type returnType)private booleanisStreamTypeOrIterableFromJavaStdLib(Type type)private booleanisValidFactoryMethod(javax.lang.model.element.ExecutableElement method, java.util.List<Parameter> parameters, Type returnType)private booleanisValidLifecycleCallbackMethod(javax.lang.model.element.ExecutableElement method)private booleanisValidPresenceCheckMethod(javax.lang.model.element.ExecutableElement method, Type returnType)private booleanisValidReferencedMethod(java.util.List<Parameter> parameters)private booleanisValidReferencedOrFactoryMethod(int sourceParamCount, int targetParamCount, java.util.List<Parameter> parameters)private booleanisVoid(Type returnType)java.util.List<SourceMethod>process(ModelElementProcessor.ProcessorContext context, javax.lang.model.element.TypeElement mapperTypeElement, java.lang.Void sourceModel)Processes the given source element, representing a Java bean mapper in one form or another.private ParameterProvidedMethodsretrieveContextProvidedMethods(java.util.List<Parameter> contextParameters, javax.lang.model.element.TypeElement mapperToImplement, MapperOptions mapperConfig)private java.util.List<SourceMethod>retrieveMethods(javax.lang.model.element.TypeElement usedMapper, javax.lang.model.element.TypeElement mapperToImplement, MapperOptions mapperOptions, java.util.List<SourceMethod> prototypeMethods)Retrieves the mapping methods declared by the given mapper type.private java.util.List<SourceMethod>retrievePrototypeMethods(javax.lang.model.element.TypeElement mapperTypeElement, MapperOptions mapperAnnotation)private TypeselectResultType(Type returnType, Parameter targetParameter)
-
-
-
Field Detail
-
JAVA_LANG_ANNOTATION_PGK
private static final java.lang.String JAVA_LANG_ANNOTATION_PGK
- See Also:
- Constant Field Values
-
ORG_MAPSTRUCT_PKG
private static final java.lang.String ORG_MAPSTRUCT_PKG
- See Also:
- Constant Field Values
-
MAPPING_FQN
private static final java.lang.String MAPPING_FQN
- See Also:
- Constant Field Values
-
MAPPINGS_FQN
private static final java.lang.String MAPPINGS_FQN
- See Also:
- Constant Field Values
-
SUB_CLASS_MAPPING_FQN
private static final java.lang.String SUB_CLASS_MAPPING_FQN
- See Also:
- Constant Field Values
-
SUB_CLASS_MAPPINGS_FQN
private static final java.lang.String SUB_CLASS_MAPPINGS_FQN
- See Also:
- Constant Field Values
-
messager
private FormattingMessager messager
-
typeFactory
private TypeFactory typeFactory
-
accessorNaming
private AccessorNamingUtils accessorNaming
-
enumTransformationStrategies
private java.util.Map<java.lang.String,EnumTransformationStrategy> enumTransformationStrategies
-
typeUtils
private TypeUtils typeUtils
-
elementUtils
private ElementUtils elementUtils
-
options
private Options options
-
-
Method Detail
-
process
public java.util.List<SourceMethod> process(ModelElementProcessor.ProcessorContext context, javax.lang.model.element.TypeElement mapperTypeElement, java.lang.Void sourceModel)
Description copied from interface:ModelElementProcessorProcesses the given source element, representing a Java bean mapper in one form or another.- Specified by:
processin interfaceModelElementProcessor<java.lang.Void,java.util.List<SourceMethod>>- Parameters:
context- Context providing common infrastructure objects.mapperTypeElement- The original type element from which the given mapper object is derived.sourceModel- The current representation of the bean mapper. Nevernull(the very first processor receives the original type element).- Returns:
- The resulting representation of the bean mapper; may be the same
as the source representation, e.g. if a given implementation just
performs some sort of validity check. Implementations must never
return
nullexcept for the very last processor which generates the resulting Java source file.
-
getPriority
public int getPriority()
Description copied from interface:ModelElementProcessorReturns the priority value of this processor which must be between 1 (highest priority) and 10000 (lowest priority). Processors are invoked in order from highest to lowest priority, starting with the mapping method retrieval processor (priority 1) and finishing with the code generation processor (priority 10000). Processors working on the builtMappermodel must have a priority > 1000.- Specified by:
getPriorityin interfaceModelElementProcessor<java.lang.Void,java.util.List<SourceMethod>>- Returns:
- The priority value of this processor.
-
retrievePrototypeMethods
private java.util.List<SourceMethod> retrievePrototypeMethods(javax.lang.model.element.TypeElement mapperTypeElement, MapperOptions mapperAnnotation)
-
retrieveMethods
private java.util.List<SourceMethod> retrieveMethods(javax.lang.model.element.TypeElement usedMapper, javax.lang.model.element.TypeElement mapperToImplement, MapperOptions mapperOptions, java.util.List<SourceMethod> prototypeMethods)
Retrieves the mapping methods declared by the given mapper type.- Parameters:
usedMapper- The type of interest (either the mapper to implement or a used mapper via @uses annotation)mapperToImplement- the top level type (mapper) that requires implementationmapperOptions- the mapper configprototypeMethods- prototype methods defined in mapper config type- Returns:
- All mapping methods declared by the given type
-
asTypeElement
private javax.lang.model.element.TypeElement asTypeElement(javax.lang.model.type.DeclaredType type)
-
getMethod
private SourceMethod getMethod(javax.lang.model.element.TypeElement usedMapper, javax.lang.model.element.ExecutableElement method, javax.lang.model.element.TypeElement mapperToImplement, MapperOptions mapperOptions, java.util.List<SourceMethod> prototypeMethods)
-
getMethodRequiringImplementation
private SourceMethod getMethodRequiringImplementation(javax.lang.model.type.ExecutableType methodType, javax.lang.model.element.ExecutableElement method, java.util.List<Parameter> parameters, boolean containsTargetTypeParameter, MapperOptions mapperOptions, java.util.List<SourceMethod> prototypeMethods, javax.lang.model.element.TypeElement mapperToImplement)
-
retrieveContextProvidedMethods
private ParameterProvidedMethods retrieveContextProvidedMethods(java.util.List<Parameter> contextParameters, javax.lang.model.element.TypeElement mapperToImplement, MapperOptions mapperConfig)
-
getReferencedMethod
private SourceMethod getReferencedMethod(javax.lang.model.element.TypeElement usedMapper, javax.lang.model.type.ExecutableType methodType, javax.lang.model.element.ExecutableElement method, javax.lang.model.element.TypeElement mapperToImplement, java.util.List<Parameter> parameters)
-
isValidLifecycleCallbackMethod
private boolean isValidLifecycleCallbackMethod(javax.lang.model.element.ExecutableElement method)
-
isValidReferencedMethod
private boolean isValidReferencedMethod(java.util.List<Parameter> parameters)
-
isValidFactoryMethod
private boolean isValidFactoryMethod(javax.lang.model.element.ExecutableElement method, java.util.List<Parameter> parameters, Type returnType)
-
hasFactoryAnnotation
private boolean hasFactoryAnnotation(javax.lang.model.element.ExecutableElement method)
-
isValidPresenceCheckMethod
private boolean isValidPresenceCheckMethod(javax.lang.model.element.ExecutableElement method, Type returnType)
-
hasConditionAnnotation
private boolean hasConditionAnnotation(javax.lang.model.element.ExecutableElement method)
-
isVoid
private boolean isVoid(Type returnType)
-
isBoolean
private boolean isBoolean(Type returnType)
-
isValidReferencedOrFactoryMethod
private boolean isValidReferencedOrFactoryMethod(int sourceParamCount, int targetParamCount, java.util.List<Parameter> parameters)
-
extractTargetParameter
private Parameter extractTargetParameter(java.util.List<Parameter> parameters)
-
checkParameterAndReturnType
private boolean checkParameterAndReturnType(javax.lang.model.element.ExecutableElement method, java.util.List<Parameter> sourceParameters, Parameter targetParameter, java.util.List<Parameter> contextParameters, Type resultType, Type returnType, boolean containsTargetTypeParameter)
-
isStreamTypeOrIterableFromJavaStdLib
private boolean isStreamTypeOrIterableFromJavaStdLib(Type type)
-
getMappings
private java.util.Set<MappingOptions> getMappings(javax.lang.model.element.ExecutableElement method, BeanMappingOptions beanMapping)
Retrieves the mappings configured via@Mappingfrom the given method.- Parameters:
method- The method of interestbeanMapping- options coming from bean mapping method- Returns:
- The mappings for the given method, keyed by target property name
-
getSubclassMappings
private java.util.Set<SubclassMappingOptions> getSubclassMappings(java.util.List<Parameter> sourceParameters, Type resultType, javax.lang.model.element.ExecutableElement method, BeanMappingOptions beanMapping, SubclassValidator validator)
Retrieves the subclass mappings configured via@SubclassMappingfrom the given method.- Parameters:
method- The method of interestbeanMapping- options coming from bean mapping method- Returns:
- The subclass mappings for the given method
-
getValueMappings
private java.util.List<ValueMappingOptions> getValueMappings(javax.lang.model.element.ExecutableElement method)
Retrieves the mappings configured via@ValueMappingfrom the given method.- Parameters:
method- The method of interest- Returns:
- The mappings for the given method, keyed by target property name
-
-