private ExecutableElement(String name, Class<?>[]parameterTypes) { this.signature = ExecutableHelper.getSignature( name, parameterTypes ); }
@Override public Optional<ExecutableMetaData> getMetaDataFor(Executable executable) { String signature = ExecutableHelper.getSignature( executable ); if ( unconstrainedExecutables.contains( signature ) ) { return Optional.empty(); } ExecutableMetaData executableMetaData = executableMetaDataMap.get( ExecutableHelper.getSignature( executable ) ); if ( executableMetaData == null ) { // there is no executable metadata - specified object and method do not match throw LOG.getMethodOrConstructorNotDefinedByValidatedTypeException( beanClass, executable ); } return Optional.of( executableMetaData ); }
@Override public ConstructorDescriptor getConstraintsForConstructor(Class<?>... parameterTypes) { return constrainedConstructors.get( ExecutableHelper.getSignature( getElementClass().getSimpleName(), parameterTypes ) ); }
@Override public ConstructorDescriptor getConstraintsForConstructor(Class<?>... parameterTypes) { return constrainedConstructors.get( ExecutableHelper.getSignature( getElementClass().getSimpleName(), parameterTypes ) ); }
@Override public MethodDescriptor getConstraintsForMethod(String methodName, Class<?>... parameterTypes) { Contracts.assertNotNull( methodName, MESSAGES.methodNameMustNotBeNull() ); return constrainedMethods.get( ExecutableHelper.getSignature( methodName, parameterTypes ) ); }
@Override public MethodDescriptor getConstraintsForMethod(String methodName, Class<?>... parameterTypes) { Contracts.assertNotNull( methodName, MESSAGES.methodNameMustNotBeNull() ); return constrainedMethods.get( ExecutableHelper.getSignature( methodName, parameterTypes ) ); }
public static String getSignature(Executable executable) { return getSignature( getSimpleName( executable ), executable.getParameterTypes() ); }
@Override public final void add(ConstrainedElement constrainedElement) { super.add( constrainedElement ); ConstrainedExecutable constrainedExecutable = (ConstrainedExecutable) constrainedElement; signatures.add( ExecutableHelper.getSignature( constrainedExecutable.getExecutable() ) ); constrainedExecutables.add( constrainedExecutable ); isConstrained = isConstrained || constrainedExecutable.isConstrained(); crossParameterConstraints.addAll( constrainedExecutable.getCrossParameterConstraints() ); if ( cascadingMetaDataBuilder == null ) { cascadingMetaDataBuilder = constrainedExecutable.getCascadingMetaDataBuilder(); } else { cascadingMetaDataBuilder = cascadingMetaDataBuilder.merge( constrainedExecutable.getCascadingMetaDataBuilder() ); } addToExecutablesByDeclaringType( constrainedExecutable ); // keep the "lowest" executable in hierarchy to make sure any type parameters declared on super-types (and // used in overridden methods) are resolved for the specific sub-type we are interested in if ( executable != null && overrides( constrainedExecutable.getExecutable(), executable ) ) { executable = constrainedExecutable.getExecutable(); } }
@Override public ExecutableMetaData build() { assertCorrectnessOfConfiguration(); return new ExecutableMetaData( kind == ConstrainedElement.ConstrainedElementKind.CONSTRUCTOR ? executable.getDeclaringClass().getSimpleName() : executable.getName(), ReflectionHelper.typeOf( executable ), executable.getParameterTypes(), kind == ConstrainedElement.ConstrainedElementKind.CONSTRUCTOR ? ElementKind.CONSTRUCTOR : ElementKind.METHOD, kind == ConstrainedElement.ConstrainedElementKind.CONSTRUCTOR ? Collections.singleton( ExecutableHelper.getSignature( executable ) ) : CollectionHelper.toImmutableSet( signatures ), adaptOriginsAndImplicitGroups( getDirectConstraints() ), adaptOriginsAndImplicitGroups( getContainerElementConstraints() ), findParameterMetaData(), adaptOriginsAndImplicitGroups( crossParameterConstraints ), cascadingMetaDataBuilder.build( valueExtractorManager, executable ), isConstrained, isGetterMethod ); }