private void assignConstructor(TypeDescriptor type) { type.getConstructors().values().forEach(this::add); type.getMethods().values().forEach(this::add); if (!type.isAbstract()) { Check.that(creator.isPreset(), "%s: creator method or constructor not found.", type.getSimpleName()); creatorParameters = ImmutableSet.copyOf(getCreatorParameters()); } }
private MethodDescriptor getValueMethod(TypeDescriptor type, MappingResolver mappingResolver) { final String samePriorityError = "Found two @VersionValue/@JsonValue methods from " + type; Result<MethodDescriptor> valueMethod = Result.notFound(); for (MethodDescriptor method : type.getMethods().values()) { valueMethod = MappingResolver.higherOf(valueMethod, mappingResolver.delegateValue(method), samePriorityError); } if (valueMethod.isPreset()) { validateValueMethod(valueMethod.value); return valueMethod.value; } return null; }
private StaticExecutable getCreator(TypeDescriptor type, Class<?> delegateType, MappingResolver mappingResolver) { final String samePriorityError = "Found two @VersionCreator/@JsonCreator methods from " + type; Result<StaticExecutable> creator = Result.notFound(); for (MethodDescriptor method : type.getMethods().values()) { creator = MappingResolver.higherOf(creator, mappingResolver.creator(method), samePriorityError); } ConstructorDescriptor constructor = getConstructor(type, delegateType); if (constructor != null) { if (creator.isPreset()) { creator = MappingResolver.higherOf(creator, mappingResolver.creator(constructor), samePriorityError); } else { creator = Result.of(constructor); } } if (creator.isAbsent()) { throw new IllegalArgumentException("Could not find mathing constructor or creator method for " + type); } validateCreator(creator.value, type, ImmutableList.of(delegateType)); return creator.value; }