From c0bc36ad88407a0c617935942e17f4a18e3fde2d Mon Sep 17 00:00:00 2001 From: Guillaume Smet Date: Mon, 11 Jun 2018 10:17:11 +0200 Subject: [PATCH] HV-1623 Reduce the memory footprint of the new reflection abstraction --- .../provider/AnnotationMetaDataProvider.java | 9 +++++---- .../properties/javabean/JavaBeanExecutable.java | 12 +++--------- .../internal/properties/javabean/JavaBeanField.java | 8 +------- .../properties/javabean/JavaBeanParameter.java | 9 +-------- 4 files changed, 10 insertions(+), 28 deletions(-) diff --git a/engine/src/main/java/org/hibernate/validator/internal/metadata/provider/AnnotationMetaDataProvider.java b/engine/src/main/java/org/hibernate/validator/internal/metadata/provider/AnnotationMetaDataProvider.java index cac8cb06e7..bb78e18691 100644 --- a/engine/src/main/java/org/hibernate/validator/internal/metadata/provider/AnnotationMetaDataProvider.java +++ b/engine/src/main/java/org/hibernate/validator/internal/metadata/provider/AnnotationMetaDataProvider.java @@ -424,7 +424,7 @@ private List getParameterMetaData(JavaBeanExecutable ja } } - Set> typeArgumentsConstraints = findTypeAnnotationConstraintsForExecutableParameter( parameter ); + Set> typeArgumentsConstraints = findTypeAnnotationConstraintsForExecutableParameter( javaBeanExecutable, parameter ); CascadingMetaDataBuilder cascadingMetaData = findCascadingMetaData( parameter ); metaData.add( @@ -691,11 +691,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> findTypeAnnotationConstraintsForExecutableParameter(JavaBeanParameter javaBeanParameter) { + protected Set> findTypeAnnotationConstraintsForExecutableParameter(JavaBeanExecutable javaBeanExecutable, + JavaBeanParameter javaBeanParameter) { try { return findTypeArgumentsConstraints( - javaBeanParameter.getExecutable(), - new TypeArgumentExecutableParameterLocation( javaBeanParameter.getExecutable(), javaBeanParameter.getIndex() ), + javaBeanExecutable, + new TypeArgumentExecutableParameterLocation( javaBeanExecutable, javaBeanParameter.getIndex() ), javaBeanParameter.getAnnotatedType() ); } diff --git a/engine/src/main/java/org/hibernate/validator/internal/properties/javabean/JavaBeanExecutable.java b/engine/src/main/java/org/hibernate/validator/internal/properties/javabean/JavaBeanExecutable.java index 25e181ba23..baec5ef197 100644 --- a/engine/src/main/java/org/hibernate/validator/internal/properties/javabean/JavaBeanExecutable.java +++ b/engine/src/main/java/org/hibernate/validator/internal/properties/javabean/JavaBeanExecutable.java @@ -34,14 +34,12 @@ public abstract class JavaBeanExecutable implements Callab protected final T executable; private final Type typeForValidatorResolution; - private final String name; private final boolean hasReturnValue; private final Type type; private final List parameters; JavaBeanExecutable(T executable, boolean hasReturnValue) { this.executable = executable; - this.name = executable.getName(); this.type = ReflectionHelper.typeOf( executable ); this.typeForValidatorResolution = ReflectionHelper.boxedType( type ); this.hasReturnValue = hasReturnValue; @@ -54,7 +52,7 @@ public abstract class JavaBeanExecutable implements Callab Type[] genericParameterTypes = executable.getGenericParameterTypes(); for ( int i = 0; i < parameterArray.length; i++ ) { - parameters.add( new JavaBeanParameter( this, i, parameterArray[i], parameterTypes[i], + parameters.add( new JavaBeanParameter( i, parameterArray[i], parameterTypes[i], getParameterGenericType( parameterTypes, genericParameterTypes, i ) ) ); } this.parameters = CollectionHelper.toImmutableList( parameters ); @@ -92,7 +90,7 @@ public boolean hasParameters() { @Override public String getName() { - return name; + return executable.getName(); } @Override @@ -194,9 +192,6 @@ public boolean equals(Object o) { if ( !this.typeForValidatorResolution.equals( that.typeForValidatorResolution ) ) { return false; } - if ( !this.name.equals( that.name ) ) { - return false; - } return this.type.equals( that.type ); } @@ -204,7 +199,6 @@ public boolean equals(Object o) { public int hashCode() { int result = this.executable.hashCode(); result = 31 * result + this.typeForValidatorResolution.hashCode(); - result = 31 * result + this.name.hashCode(); result = 31 * result + ( this.hasReturnValue ? 1 : 0 ); result = 31 * result + this.type.hashCode(); return result; @@ -213,7 +207,7 @@ public int hashCode() { @Override public String toString() { return ExecutableHelper.getExecutableAsString( - getDeclaringClass().getSimpleName() + "#" + name, + getDeclaringClass().getSimpleName() + "#" + executable.getName(), executable.getParameterTypes() ); } diff --git a/engine/src/main/java/org/hibernate/validator/internal/properties/javabean/JavaBeanField.java b/engine/src/main/java/org/hibernate/validator/internal/properties/javabean/JavaBeanField.java index 11b15d7542..647a33a3de 100644 --- a/engine/src/main/java/org/hibernate/validator/internal/properties/javabean/JavaBeanField.java +++ b/engine/src/main/java/org/hibernate/validator/internal/properties/javabean/JavaBeanField.java @@ -25,20 +25,18 @@ public class JavaBeanField implements org.hibernate.validator.internal.properties.Field, JavaBeanAnnotatedConstrainable { private final Field field; - private final String name; private final Type typeForValidatorResolution; private final Type type; public JavaBeanField(Field field) { this.field = field; - this.name = field.getName(); this.type = ReflectionHelper.typeOf( field ); this.typeForValidatorResolution = ReflectionHelper.boxedType( this.type ); } @Override public String getName() { - return name; + return field.getName(); } @Override @@ -105,9 +103,6 @@ public boolean equals(Object o) { if ( !this.field.equals( that.field ) ) { return false; } - if ( !this.name.equals( that.name ) ) { - return false; - } if ( !this.typeForValidatorResolution.equals( that.typeForValidatorResolution ) ) { return false; } @@ -117,7 +112,6 @@ public boolean equals(Object o) { @Override public int hashCode() { int result = this.field.hashCode(); - result = 31 * result + this.name.hashCode(); result = 31 * result + this.typeForValidatorResolution.hashCode(); result = 31 * result + this.type.hashCode(); return result; diff --git a/engine/src/main/java/org/hibernate/validator/internal/properties/javabean/JavaBeanParameter.java b/engine/src/main/java/org/hibernate/validator/internal/properties/javabean/JavaBeanParameter.java index 416b842c79..aae74c8e8d 100644 --- a/engine/src/main/java/org/hibernate/validator/internal/properties/javabean/JavaBeanParameter.java +++ b/engine/src/main/java/org/hibernate/validator/internal/properties/javabean/JavaBeanParameter.java @@ -17,8 +17,6 @@ */ public class JavaBeanParameter implements JavaBeanAnnotatedElement { - private final JavaBeanExecutable executable; - private final int index; private final Parameter parameter; @@ -27,18 +25,13 @@ public class JavaBeanParameter implements JavaBeanAnnotatedElement { private final Type genericType; - JavaBeanParameter(JavaBeanExecutable executable, int index, Parameter parameter, Class type, Type genericType) { - this.executable = executable; + JavaBeanParameter(int index, Parameter parameter, Class type, Type genericType) { this.index = index; this.parameter = parameter; this.type = type; this.genericType = genericType; } - public JavaBeanExecutable getExecutable() { - return executable; - } - public int getIndex() { return index; }