From 158cae4207c375ec82a542e5bf9b8583a81cd878 Mon Sep 17 00:00:00 2001 From: Guillaume Smet Date: Tue, 1 Aug 2017 18:12:12 +0200 Subject: [PATCH] HV-1445 Remove the metadata cache in AnnotationMetaDataProvider We only keep the Object metadata handy. --- .../provider/AnnotationMetaDataProvider.java | 34 ++++++++----------- 1 file changed, 14 insertions(+), 20 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 ad795e10ca..af650e6f9f 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 @@ -9,7 +9,6 @@ import static org.hibernate.validator.internal.util.CollectionHelper.newArrayList; import static org.hibernate.validator.internal.util.CollectionHelper.newHashMap; import static org.hibernate.validator.internal.util.CollectionHelper.newHashSet; -import static org.hibernate.validator.internal.util.ConcurrentReferenceHashMap.ReferenceType.SOFT; import static org.hibernate.validator.internal.util.logging.Messages.MESSAGES; import java.lang.annotation.Annotation; @@ -64,7 +63,6 @@ import org.hibernate.validator.internal.metadata.raw.ConstrainedParameter; import org.hibernate.validator.internal.metadata.raw.ConstrainedType; import org.hibernate.validator.internal.util.CollectionHelper; -import org.hibernate.validator.internal.util.ConcurrentReferenceHashMap; import org.hibernate.validator.internal.util.ExecutableHelper; import org.hibernate.validator.internal.util.ReflectionHelper; import org.hibernate.validator.internal.util.TypeResolutionHelper; @@ -82,19 +80,17 @@ * * @author Gunnar Morling * @author Hardy Ferentschik + * @author Guillaume Smet */ public class AnnotationMetaDataProvider implements MetaDataProvider { private static final Log log = LoggerFactory.make(); - /** - * The default initial capacity for this cache. - */ - static final int DEFAULT_INITIAL_CAPACITY = 16; - protected final ConstraintHelper constraintHelper; - protected final TypeResolutionHelper typeResolutionHelper; - protected final ConcurrentReferenceHashMap, BeanConfiguration> configuredBeans; - protected final AnnotationProcessingOptions annotationProcessingOptions; - protected final ValueExtractorManager valueExtractorManager; + private final ConstraintHelper constraintHelper; + private final TypeResolutionHelper typeResolutionHelper; + private final AnnotationProcessingOptions annotationProcessingOptions; + private final ValueExtractorManager valueExtractorManager; + + private final BeanConfiguration objectBeanConfiguration; public AnnotationMetaDataProvider(ConstraintHelper constraintHelper, TypeResolutionHelper typeResolutionHelper, @@ -104,11 +100,8 @@ public AnnotationMetaDataProvider(ConstraintHelper constraintHelper, this.typeResolutionHelper = typeResolutionHelper; this.valueExtractorManager = valueExtractorManager; this.annotationProcessingOptions = annotationProcessingOptions; - this.configuredBeans = new ConcurrentReferenceHashMap<>( - DEFAULT_INITIAL_CAPACITY, - SOFT, - SOFT - ); + + this.objectBeanConfiguration = retrieveBeanConfiguration( Object.class ); } @Override @@ -117,12 +110,13 @@ public AnnotationProcessingOptions getAnnotationProcessingOptions() { } @Override + @SuppressWarnings("unchecked") public BeanConfiguration getBeanConfiguration(Class beanClass) { - @SuppressWarnings("unchecked") - BeanConfiguration configuration = (BeanConfiguration) configuredBeans. - computeIfAbsent( beanClass, bc -> retrieveBeanConfiguration( beanClass ) ); + if ( Object.class.equals( beanClass ) ) { + return (BeanConfiguration) objectBeanConfiguration; + } - return configuration; + return retrieveBeanConfiguration( beanClass ); } /**