Skip to content

Commit

Permalink
HV-1439 Avoid calling reflection methods multiple times
Browse files Browse the repository at this point in the history
  • Loading branch information
gsmet committed Aug 3, 2017
1 parent 567cbe9 commit 82167c7
Showing 1 changed file with 21 additions and 24 deletions.
Expand Up @@ -324,12 +324,14 @@ private ConstrainedExecutable findExecutableMetaData(Executable executable) {
cascadingMetaDataBuilder = CascadingMetaDataBuilder.nonCascading();
}
else {
typeArgumentsConstraints = findTypeAnnotationConstraints( executable );
AnnotatedType annotatedReturnType = executable.getAnnotatedReturnType();

typeArgumentsConstraints = findTypeAnnotationConstraints( executable, annotatedReturnType );
returnValueConstraints = convertToMetaConstraints(
executableConstraints.get( ConstraintType.GENERIC ),
executable
);
cascadingMetaDataBuilder = findCascadingMetaData( executable );
cascadingMetaDataBuilder = findCascadingMetaData( executable, annotatedReturnType );
}

return new ConstrainedExecutable(
Expand Down Expand Up @@ -416,8 +418,10 @@ private List<ConstrainedParameter> getParameterMetaData(Executable executable) {
}
}

Set<MetaConstraint<?>> typeArgumentsConstraints = findTypeAnnotationConstraintsForExecutableParameter( executable, i );
CascadingMetaDataBuilder cascadingMetaData = findCascadingMetaData( executable, i );
AnnotatedType parameterAnnotatedType = parameter.getAnnotatedType();

Set<MetaConstraint<?>> typeArgumentsConstraints = findTypeAnnotationConstraintsForExecutableParameter( executable, i, parameterAnnotatedType );
CascadingMetaDataBuilder cascadingMetaData = findCascadingMetaData( executable, i, parameterAnnotatedType );

metaData.add(
new ConstrainedParameter(
Expand Down Expand Up @@ -492,8 +496,6 @@ protected <A extends Annotation> List<ConstraintDescriptorImpl<?>> findConstrain
return Collections.emptyList();
}

List<ConstraintDescriptorImpl<?>> constraintDescriptors = newArrayList();

List<Annotation> constraints = newArrayList();
Class<? extends Annotation> annotationType = annotation.annotationType();
if ( constraintHelper.isConstraintAnnotation( annotationType ) ) {
Expand All @@ -503,13 +505,9 @@ else if ( constraintHelper.isMultiValueConstraint( annotationType ) ) {
constraints.addAll( constraintHelper.getConstraintsFromMultiValueConstraint( annotation ) );
}

for ( Annotation constraint : constraints ) {
final ConstraintDescriptorImpl<?> constraintDescriptor = buildConstraintDescriptor(
member, constraint, type
);
constraintDescriptors.add( constraintDescriptor );
}
return constraintDescriptors;
return constraints.stream()
.map( c -> buildConstraintDescriptor( member, c, type ) )
.collect( Collectors.toList() );
}

private Map<Class<?>, Class<?>> getGroupConversions(AnnotatedElement annotatedElement) {
Expand Down Expand Up @@ -580,20 +578,20 @@ protected Set<MetaConstraint<?>> findTypeAnnotationConstraints(Field field) {
/**
* Finds type arguments constraints for method return values.
*/
protected Set<MetaConstraint<?>> findTypeAnnotationConstraints(Executable executable) {
protected Set<MetaConstraint<?>> findTypeAnnotationConstraints(Executable executable, AnnotatedType annotatedReturnType) {
return findTypeArgumentsConstraints(
executable,
new TypeArgumentReturnValueLocation( executable ),
executable.getAnnotatedReturnType()
annotatedReturnType
);
}

private CascadingMetaDataBuilder findCascadingMetaData(Executable executable, int i) {
private CascadingMetaDataBuilder findCascadingMetaData(Executable executable, int i, AnnotatedType parameterAnnotatedType) {
Parameter parameter = executable.getParameters()[i];
TypeVariable<?>[] typeParameters = parameter.getType().getTypeParameters();
AnnotatedType annotatedType = parameter.getAnnotatedType();

Map<TypeVariable<?>, CascadingMetaDataBuilder> containerElementTypesCascadingMetaData = getTypeParametersCascadingMetadata( annotatedType, typeParameters );
Map<TypeVariable<?>, CascadingMetaDataBuilder> containerElementTypesCascadingMetaData = getTypeParametersCascadingMetadata( parameterAnnotatedType,
typeParameters );

try {
return getCascadingMetaData( ReflectionHelper.typeOf( parameter.getDeclaringExecutable(), i ),
Expand All @@ -614,7 +612,7 @@ private CascadingMetaDataBuilder findCascadingMetaData(Field field) {
return getCascadingMetaData( ReflectionHelper.typeOf( field ), field, containerElementTypesCascadingMetaData );
}

private CascadingMetaDataBuilder findCascadingMetaData(Executable executable) {
private CascadingMetaDataBuilder findCascadingMetaData(Executable executable, AnnotatedType annotatedReturnType) {
TypeVariable<?>[] typeParameters;

if ( executable instanceof Method ) {
Expand All @@ -623,9 +621,9 @@ private CascadingMetaDataBuilder findCascadingMetaData(Executable executable) {
else {
typeParameters = ( (Constructor<?>) executable ).getDeclaringClass().getTypeParameters();
}
AnnotatedType annotatedType = executable.getAnnotatedReturnType();

Map<TypeVariable<?>, CascadingMetaDataBuilder> containerElementTypesCascadingMetaData = getTypeParametersCascadingMetadata( annotatedType, typeParameters );
Map<TypeVariable<?>, CascadingMetaDataBuilder> containerElementTypesCascadingMetaData = getTypeParametersCascadingMetadata( annotatedReturnType,
typeParameters );

return getCascadingMetaData( ReflectionHelper.typeOf( executable ), executable, containerElementTypesCascadingMetaData );
}
Expand Down Expand Up @@ -703,13 +701,12 @@ else if ( annotatedType instanceof AnnotatedParameterizedType ) {
*
* @return a set of type arguments constraints, or an empty set if no constrained type arguments are found
*/
protected Set<MetaConstraint<?>> findTypeAnnotationConstraintsForExecutableParameter(Executable executable, int i) {
Parameter parameter = executable.getParameters()[i];
protected Set<MetaConstraint<?>> findTypeAnnotationConstraintsForExecutableParameter(Executable executable, int i, AnnotatedType parameterAnnotatedType) {
try {
return findTypeArgumentsConstraints(
executable,
new TypeArgumentExecutableParameterLocation( executable, i ),
parameter.getAnnotatedType()
parameterAnnotatedType
);
}
catch (ArrayIndexOutOfBoundsException ex) {
Expand Down

0 comments on commit 82167c7

Please sign in to comment.