private static void markMapperReferenceAsUsed(List<MapperReference> references, Method method) { for (MapperReference ref : references) { if (ref.getType().equals(method.getDeclaringMapper())) { if (!ref.isUsed() && !method.isStatic()) { ref.setUsed(true); } ref.setTypeRequiresImport(true); return; } } }
private static boolean isValidCandidate( SourceMethod candidate, Method method, List<Parameter> parameterAssignments) { if (parameterAssignments == null) { return false; } if (!candidate.matches(extractSourceTypes(parameterAssignments), method.getResultType())) { return false; } return (candidate.getReturnType().isVoid() || candidate.getReturnType().isTypeVar() || candidate.getReturnType().isAssignableTo(method.getResultType())); }
private static List<Parameter> getAvailableParameters(Method method, MappingBuilderContext ctx) { List<Parameter> availableParams = new ArrayList<Parameter>(method.getParameters()); if (method.getMappingTargetParameter() == null) { availableParams.add(new Parameter(null, method.getResultType(), true, false, false)); } Parameter targetTypeParameter = new Parameter( null, ctx.getTypeFactory().classTypeOf(method.getResultType()), false, true, false); availableParams.add(targetTypeParameter); return availableParams; }
private static List<LifecycleCallbackMethodReference> toLifecycleCallbackMethodRefs( Method method, List<SourceMethod> candidates, Map<SourceMethod, List<Parameter>> parameterAssignmentsForSourceMethod, MappingBuilderContext ctx, Set<String> existingVariableNames) { List<LifecycleCallbackMethodReference> result = new ArrayList<LifecycleCallbackMethodReference>(); for (SourceMethod candidate : candidates) { markMapperReferenceAsUsed(ctx.getMapperReferences(), candidate); result.add( new LifecycleCallbackMethodReference( candidate, parameterAssignmentsForSourceMethod.get(candidate), method.getReturnType(), method.getResultType(), existingVariableNames)); } return result; }
private IterableMappingMethod( Method method, Assignment parameterAssignment, MethodReference factoryMethod, boolean mapNullToDefault, String loopVariableName, List<LifecycleCallbackMethodReference> beforeMappingReferences, List<LifecycleCallbackMethodReference> afterMappingReferences) { super(method, beforeMappingReferences, afterMappingReferences); this.elementAssignment = parameterAssignment; this.factoryMethod = factoryMethod; this.overridden = method.overridesMethod(); this.mapNullToDefault = mapNullToDefault; this.loopVariableName = loopVariableName; }
public IterableMappingMethod build() { Type sourceParameterType = first(method.getSourceParameters()).getType(); Type resultType = method.getResultType(); Type sourceElementType = sourceParameterType.isArrayType() ? sourceParameterType.getComponentType() : first(sourceParameterType.getTypeParameters()).getTypeBound(); Type targetElementType = resultType.isArrayType() ? resultType.getComponentType() : first(resultType.getTypeParameters()).getTypeBound(); String loopVariableName = Strings.getSaveVariableName(sourceElementType.getName(), method.getParameterNames()); Assignment assignment = ctx.getMappingResolver() .getTargetAssignment( method, "collection element", sourceElementType, targetElementType, null, // there is no targetPropertyName formattingParameters, selectionParameters, loopVariableName, false); if (assignment == null) { if (method instanceof ForgedMethod) { // leave messaging to calling property mapping return null; } else { ctx.getMessager() .printMessage(method.getExecutable(), Message.ITERABLEMAPPING_MAPPING_NOT_FOUND); } } else { if (method instanceof ForgedMethod) { ForgedMethod forgedMethod = (ForgedMethod) method; forgedMethod.addThrownTypes(assignment.getThrownTypes()); } } // target accessor is setter, so decorate assignment as setter if (resultType.isArrayType()) { assignment = new LocalVarWrapper(assignment, method.getThrownTypes()); } else { assignment = new SetterWrapper(assignment, method.getThrownTypes()); } // mapNullToDefault boolean mapNullToDefault = false; if (method.getMapperConfiguration() != null) { mapNullToDefault = method.getMapperConfiguration().isMapToDefault(nullValueMappingStrategy); } MethodReference factoryMethod = null; if (!method.isUpdateMethod()) { factoryMethod = ctx.getMappingResolver().getFactoryMethod(method, method.getResultType(), null); } List<LifecycleCallbackMethodReference> beforeMappingMethods = LifecycleCallbackFactory.beforeMappingMethods(method, selectionParameters, ctx); List<LifecycleCallbackMethodReference> afterMappingMethods = LifecycleCallbackFactory.afterMappingMethods(method, selectionParameters, ctx); return new IterableMappingMethod( method, assignment, factoryMethod, mapNullToDefault, loopVariableName, beforeMappingMethods, afterMappingMethods); }