Skip to content

Commit

Permalink
HV-1148 Centralizing instantiation of ExecutableParameterNameProvider
Browse files Browse the repository at this point in the history
  • Loading branch information
gunnarmorling committed Nov 8, 2016
1 parent d290afe commit f3b9cc8
Show file tree
Hide file tree
Showing 15 changed files with 63 additions and 63 deletions.
Expand Up @@ -16,6 +16,7 @@
import javax.validation.Validator;

import org.hibernate.validator.HibernateValidatorContext;
import org.hibernate.validator.internal.util.ExecutableParameterNameProvider;
import org.hibernate.validator.spi.time.TimeProvider;
import org.hibernate.validator.spi.valuehandling.ValidatedValueUnwrapper;

Expand All @@ -33,7 +34,7 @@ public class ValidatorContextImpl implements HibernateValidatorContext {
private MessageInterpolator messageInterpolator;
private TraversableResolver traversableResolver;
private ConstraintValidatorFactory constraintValidatorFactory;
private ParameterNameProvider parameterNameProvider;
private ExecutableParameterNameProvider parameterNameProvider;
private boolean failFast;
private final List<ValidatedValueUnwrapper<?>> validatedValueHandlers;
private TimeProvider timeProvider;
Expand All @@ -45,7 +46,7 @@ public ValidatorContextImpl(ValidatorFactoryImpl validatorFactory) {
this.messageInterpolator = validatorFactory.getMessageInterpolator();
this.traversableResolver = validatorFactory.getTraversableResolver();
this.constraintValidatorFactory = validatorFactory.getConstraintValidatorFactory();
this.parameterNameProvider = validatorFactory.getParameterNameProvider();
this.parameterNameProvider = validatorFactory.getExecutableParameterNameProvider();
this.failFast = validatorFactory.isFailFast();
this.validatedValueHandlers = new ArrayList<>(
validatorFactory.getValidatedValueHandlers()
Expand Down Expand Up @@ -89,10 +90,10 @@ public HibernateValidatorContext constraintValidatorFactory(ConstraintValidatorF
@Override
public HibernateValidatorContext parameterNameProvider(ParameterNameProvider parameterNameProvider) {
if ( parameterNameProvider == null ) {
this.parameterNameProvider = validatorFactory.getParameterNameProvider();
this.parameterNameProvider = validatorFactory.getExecutableParameterNameProvider();
}
else {
this.parameterNameProvider = parameterNameProvider;
this.parameterNameProvider = new ExecutableParameterNameProvider( parameterNameProvider );
}
return this;
}
Expand Down
Expand Up @@ -39,6 +39,7 @@
import org.hibernate.validator.internal.metadata.provider.ProgrammaticMetaDataProvider;
import org.hibernate.validator.internal.metadata.provider.XmlMetaDataProvider;
import org.hibernate.validator.internal.util.ExecutableHelper;
import org.hibernate.validator.internal.util.ExecutableParameterNameProvider;
import org.hibernate.validator.internal.util.StringHelper;
import org.hibernate.validator.internal.util.TypeResolutionHelper;
import org.hibernate.validator.internal.util.logging.Log;
Expand Down Expand Up @@ -76,7 +77,7 @@ public class ValidatorFactoryImpl implements HibernateValidatorFactory {
/**
* The default parameter name provider for this factory.
*/
private final ParameterNameProvider parameterNameProvider;
private final ExecutableParameterNameProvider parameterNameProvider;

/**
* Provider for the current time when validating {@code @Future} or code @Past}
Expand Down Expand Up @@ -131,7 +132,7 @@ public class ValidatorFactoryImpl implements HibernateValidatorFactory {
* could be used. To still have the metadata static we create a {@code BeanMetaDataManager} per parameter name
* provider. See also HV-659.
*/
private final Map<ParameterNameProvider, BeanMetaDataManager> beanMetaDataManagerMap;
private final Map<ExecutableParameterNameProvider, BeanMetaDataManager> beanMetaDataManagerMap;

/**
* Contains handlers to be applied to the validated value when validating elements.
Expand All @@ -143,9 +144,9 @@ public ValidatorFactoryImpl(ConfigurationState configurationState) {

this.messageInterpolator = configurationState.getMessageInterpolator();
this.traversableResolver = configurationState.getTraversableResolver();
this.parameterNameProvider = configurationState.getParameterNameProvider();
this.parameterNameProvider = new ExecutableParameterNameProvider( configurationState.getParameterNameProvider() );
this.timeProvider = getTimeProvider( configurationState, externalClassLoader );
this.beanMetaDataManagerMap = Collections.synchronizedMap( new IdentityHashMap<ParameterNameProvider, BeanMetaDataManager>() );
this.beanMetaDataManagerMap = Collections.synchronizedMap( new IdentityHashMap<ExecutableParameterNameProvider, BeanMetaDataManager>() );
this.constraintHelper = new ConstraintHelper();
this.typeResolutionHelper = new TypeResolutionHelper();
this.executableHelper = new ExecutableHelper( typeResolutionHelper );
Expand Down Expand Up @@ -334,6 +335,10 @@ public ConstraintValidatorFactory getConstraintValidatorFactory() {

@Override
public ParameterNameProvider getParameterNameProvider() {
return parameterNameProvider.getDelegate();
}

public ExecutableParameterNameProvider getExecutableParameterNameProvider() {
return parameterNameProvider;
}

Expand Down Expand Up @@ -377,7 +382,7 @@ public void close() {
Validator createValidator(ConstraintValidatorFactory constraintValidatorFactory,
MessageInterpolator messageInterpolator,
TraversableResolver traversableResolver,
ParameterNameProvider parameterNameProvider,
ExecutableParameterNameProvider parameterNameProvider,
boolean failFast,
List<ValidatedValueUnwrapper<?>> validatedValueHandlers,
TimeProvider timeProvider,
Expand Down Expand Up @@ -412,7 +417,7 @@ Validator createValidator(ConstraintValidatorFactory constraintValidatorFactory,
);
}

private List<MetaDataProvider> buildDataProviders(ParameterNameProvider parameterNameProvider) {
private List<MetaDataProvider> buildDataProviders(ExecutableParameterNameProvider parameterNameProvider) {
List<MetaDataProvider> metaDataProviders = newArrayList();
if ( xmlMetaDataProvider != null ) {
metaDataProviders.add( xmlMetaDataProvider );
Expand Down
Expand Up @@ -33,7 +33,6 @@
import javax.validation.ConstraintViolation;
import javax.validation.ElementKind;
import javax.validation.MessageInterpolator;
import javax.validation.ParameterNameProvider;
import javax.validation.Path;
import javax.validation.TraversableResolver;
import javax.validation.Validator;
Expand Down Expand Up @@ -158,7 +157,7 @@ public ValidatorImpl(ConstraintValidatorFactory constraintValidatorFactory,
MessageInterpolator messageInterpolator,
TraversableResolver traversableResolver,
BeanMetaDataManager beanMetaDataManager,
ParameterNameProvider parameterNameProvider,
ExecutableParameterNameProvider parameterNameProvider,
TimeProvider timeProvider,
TypeResolutionHelper typeResolutionHelper,
List<ValidatedValueUnwrapper<?>> validatedValueHandlers,
Expand All @@ -168,7 +167,7 @@ public ValidatorImpl(ConstraintValidatorFactory constraintValidatorFactory,
this.messageInterpolator = messageInterpolator;
this.traversableResolver = traversableResolver;
this.beanMetaDataManager = beanMetaDataManager;
this.parameterNameProvider = new ExecutableParameterNameProvider( parameterNameProvider );
this.parameterNameProvider = parameterNameProvider;
this.timeProvider = timeProvider;
this.typeResolutionHelper = typeResolutionHelper;
this.validatedValueHandlers = validatedValueHandlers;
Expand Down
Expand Up @@ -11,13 +11,9 @@
import static org.hibernate.validator.internal.util.ConcurrentReferenceHashMap.ReferenceType.SOFT;
import static org.hibernate.validator.internal.util.logging.Messages.MESSAGES;

import java.util.Collections;
import java.util.EnumSet;
import java.util.List;

import javax.validation.ParameterNameProvider;

import org.hibernate.validator.internal.engine.DefaultParameterNameProvider;
import org.hibernate.validator.internal.engine.MethodValidationConfiguration;
import org.hibernate.validator.internal.engine.groups.ValidationOrderGenerator;
import org.hibernate.validator.internal.metadata.aggregated.BeanMetaData;
Expand All @@ -33,6 +29,7 @@
import org.hibernate.validator.internal.util.ConcurrentReferenceHashMap;
import org.hibernate.validator.internal.util.Contracts;
import org.hibernate.validator.internal.util.ExecutableHelper;
import org.hibernate.validator.internal.util.ExecutableParameterNameProvider;

/**
* This manager is in charge of providing all constraint related meta data
Expand Down Expand Up @@ -98,17 +95,6 @@ public class BeanMetaDataManager {
*/
private final MethodValidationConfiguration methodValidationConfiguration;

/**
* Creates a new {@code BeanMetaDataManager}. {@link DefaultParameterNameProvider} is used as parameter name
* provider, no meta data providers besides the annotation-based providers are used.
*
* @param constraintHelper the constraint helper
* @param executableHelper the executable helper
*/
public BeanMetaDataManager(ConstraintHelper constraintHelper, ExecutableHelper executableHelper) {
this( constraintHelper, executableHelper, new DefaultParameterNameProvider(), Collections.<MetaDataProvider>emptyList() );
}

/**
* Creates a new {@code BeanMetaDataManager}.
*
Expand All @@ -119,7 +105,7 @@ public BeanMetaDataManager(ConstraintHelper constraintHelper, ExecutableHelper e
*/
public BeanMetaDataManager(ConstraintHelper constraintHelper,
ExecutableHelper executableHelper,
ParameterNameProvider parameterNameProvider,
ExecutableParameterNameProvider parameterNameProvider,
List<MetaDataProvider> optionalMetaDataProviders) {
this(
constraintHelper, executableHelper,
Expand All @@ -130,7 +116,7 @@ public BeanMetaDataManager(ConstraintHelper constraintHelper,

public BeanMetaDataManager(ConstraintHelper constraintHelper,
ExecutableHelper executableHelper,
ParameterNameProvider parameterNameProvider,
ExecutableParameterNameProvider parameterNameProvider,
List<MetaDataProvider> optionalMetaDataProviders,
MethodValidationConfiguration methodValidationConfiguration) {
this.constraintHelper = constraintHelper;
Expand Down
Expand Up @@ -35,7 +35,6 @@
import java.util.stream.Collectors;

import javax.validation.GroupSequence;
import javax.validation.ParameterNameProvider;
import javax.validation.Valid;
import javax.validation.groups.ConvertGroup;

Expand Down Expand Up @@ -91,10 +90,10 @@ public class AnnotationMetaDataProvider implements MetaDataProvider {
protected final ExecutableParameterNameProvider parameterNameProvider;

public AnnotationMetaDataProvider(ConstraintHelper constraintHelper,
ParameterNameProvider parameterNameProvider,
ExecutableParameterNameProvider parameterNameProvider,
AnnotationProcessingOptions annotationProcessingOptions) {
this.constraintHelper = constraintHelper;
this.parameterNameProvider = new ExecutableParameterNameProvider( parameterNameProvider );
this.parameterNameProvider = parameterNameProvider;
this.annotationProcessingOptions = annotationProcessingOptions;
configuredBeans = new ConcurrentReferenceHashMap<>(
DEFAULT_INITIAL_CAPACITY,
Expand Down
Expand Up @@ -12,8 +12,6 @@
import java.util.Map;
import java.util.Set;

import javax.validation.ParameterNameProvider;

import org.hibernate.validator.internal.cfg.context.DefaultConstraintMapping;
import org.hibernate.validator.internal.metadata.core.AnnotationProcessingOptions;
import org.hibernate.validator.internal.metadata.core.AnnotationProcessingOptionsImpl;
Expand All @@ -36,10 +34,9 @@ public class ProgrammaticMetaDataProvider extends MetaDataProviderKeyedByClassNa
private final AnnotationProcessingOptions annotationProcessingOptions;

public ProgrammaticMetaDataProvider(ConstraintHelper constraintHelper,
ParameterNameProvider parameterNameProvider,
ExecutableParameterNameProvider parameterNameProvider,
Set<DefaultConstraintMapping> constraintMappings) {
super( constraintHelper,
createBeanConfigurations( constraintMappings, constraintHelper, new ExecutableParameterNameProvider( parameterNameProvider ) ) );
super( constraintHelper, createBeanConfigurations( constraintMappings, constraintHelper, parameterNameProvider ) );
Contracts.assertNotNull( constraintMappings );

assertUniquenessOfConfiguredTypes( constraintMappings );
Expand Down
Expand Up @@ -11,8 +11,6 @@
import java.util.Map;
import java.util.Set;

import javax.validation.ParameterNameProvider;

import org.hibernate.validator.internal.metadata.core.AnnotationProcessingOptions;
import org.hibernate.validator.internal.metadata.core.ConstraintHelper;
import org.hibernate.validator.internal.metadata.raw.BeanConfiguration;
Expand Down Expand Up @@ -41,7 +39,7 @@ public class XmlMetaDataProvider extends MetaDataProviderKeyedByClassName {
* @param externalClassLoader user provided class loader for the loading of XML mapping files
*/
public XmlMetaDataProvider(ConstraintHelper constraintHelper,
ParameterNameProvider parameterNameProvider,
ExecutableParameterNameProvider parameterNameProvider,
Set<InputStream> mappingStreams,
ClassLoader externalClassLoader) {
this( constraintHelper, createMappingParser( constraintHelper, parameterNameProvider, mappingStreams, externalClassLoader ) );
Expand All @@ -52,10 +50,9 @@ private XmlMetaDataProvider(ConstraintHelper constraintHelper, MappingXmlParser
annotationProcessingOptions = mappingParser.getAnnotationProcessingOptions();
}

private static MappingXmlParser createMappingParser(ConstraintHelper constraintHelper, ParameterNameProvider parameterNameProvider, Set<InputStream> mappingStreams,
private static MappingXmlParser createMappingParser(ConstraintHelper constraintHelper, ExecutableParameterNameProvider parameterNameProvider, Set<InputStream> mappingStreams,
ClassLoader externalClassLoader) {
MappingXmlParser mappingParser = new MappingXmlParser( constraintHelper, new ExecutableParameterNameProvider( parameterNameProvider ),
externalClassLoader );
MappingXmlParser mappingParser = new MappingXmlParser( constraintHelper, parameterNameProvider, externalClassLoader );
mappingParser.parse( mappingStreams );
return mappingParser;
}
Expand Down
Expand Up @@ -35,4 +35,13 @@ public List<String> getParameterNames(Executable executable) {
return delegate.getParameterNames( (Constructor<?>) executable );
}
}

public ParameterNameProvider getDelegate() {
return delegate;
}

@Override
public String toString() {
return "ExecutableParameterNameProvider [delegate=" + delegate + "]";
}
}
Expand Up @@ -32,6 +32,7 @@
import org.hibernate.validator.internal.metadata.core.ConstraintHelper;
import org.hibernate.validator.internal.metadata.provider.MetaDataProvider;
import org.hibernate.validator.internal.util.ExecutableHelper;
import org.hibernate.validator.internal.util.ExecutableParameterNameProvider;
import org.hibernate.validator.internal.util.TypeResolutionHelper;
import org.hibernate.validator.testutils.ValidatorUtil;
import org.testng.annotations.Test;
Expand Down Expand Up @@ -181,7 +182,7 @@ public void testCreationOfExecutablePath() throws Exception {
BeanMetaDataManager beanMetaDataManager = new BeanMetaDataManager(
new ConstraintHelper(),
new ExecutableHelper( new TypeResolutionHelper() ),
new DefaultParameterNameProvider(),
new ExecutableParameterNameProvider( new DefaultParameterNameProvider() ),
Collections.<MetaDataProvider>emptyList()
);

Expand Down
Expand Up @@ -6,6 +6,11 @@
*/
package org.hibernate.validator.test.internal.metadata;

import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertNotSame;
import static org.testng.Assert.assertTrue;
import static org.testng.Assert.fail;

import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
Expand All @@ -14,23 +19,19 @@
import java.util.Collections;
import java.util.List;

import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import org.hibernate.validator.internal.engine.DefaultParameterNameProvider;
import org.hibernate.validator.internal.metadata.BeanMetaDataManager;
import org.hibernate.validator.internal.metadata.aggregated.BeanMetaData;
import org.hibernate.validator.internal.metadata.aggregated.BeanMetaDataImpl;
import org.hibernate.validator.internal.metadata.core.ConstraintHelper;
import org.hibernate.validator.internal.metadata.provider.MetaDataProvider;
import org.hibernate.validator.internal.util.ExecutableHelper;
import org.hibernate.validator.internal.util.ExecutableParameterNameProvider;
import org.hibernate.validator.internal.util.TypeResolutionHelper;
import org.hibernate.validator.internal.util.logging.Log;
import org.hibernate.validator.internal.util.logging.LoggerFactory;

import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertNotSame;
import static org.testng.Assert.assertTrue;
import static org.testng.Assert.fail;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

/**
* @author Hardy Ferentschik
Expand All @@ -47,7 +48,7 @@ public void setUpBeanMetaDataManager() {
metaDataManager = new BeanMetaDataManager(
new ConstraintHelper(),
new ExecutableHelper( new TypeResolutionHelper() ),
new DefaultParameterNameProvider(),
new ExecutableParameterNameProvider( new DefaultParameterNameProvider() ),
Collections.<MetaDataProvider>emptyList()
);
}
Expand All @@ -60,7 +61,7 @@ public void testBeanMetaDataCanBeGarbageCollected() throws Exception {

try {
// help along the OutOfMemoryError by allocating extra memory and holding on to it in this list
List<Object> memoryConsumer = new ArrayList<Object>();
List<Object> memoryConsumer = new ArrayList<>();
for ( int i = 0; i < LOOP_COUNT; i++ ) {
Class<?> c = new CustomClassLoader().loadClass( Engine.class.getName() );
BeanMetaData<?> meta = metaDataManager.getBeanMetaData( c );
Expand Down
Expand Up @@ -30,6 +30,7 @@
import org.hibernate.validator.internal.metadata.descriptor.ConstraintDescriptorImpl;
import org.hibernate.validator.internal.metadata.provider.MetaDataProvider;
import org.hibernate.validator.internal.util.ExecutableHelper;
import org.hibernate.validator.internal.util.ExecutableParameterNameProvider;
import org.hibernate.validator.internal.util.TypeResolutionHelper;
import org.hibernate.validator.test.internal.metadata.ConsistentDateParameters;
import org.hibernate.validator.test.internal.metadata.Customer;
Expand All @@ -55,7 +56,7 @@ public void setupBeanMetaData() {
beanMetaDataManager = new BeanMetaDataManager(
new ConstraintHelper(),
new ExecutableHelper( new TypeResolutionHelper() ),
new DefaultParameterNameProvider(),
new ExecutableParameterNameProvider( new DefaultParameterNameProvider() ),
Collections.<MetaDataProvider>emptyList()
);

Expand Down
Expand Up @@ -32,6 +32,7 @@
import org.hibernate.validator.internal.metadata.core.ConstraintHelper;
import org.hibernate.validator.internal.metadata.provider.MetaDataProvider;
import org.hibernate.validator.internal.util.ExecutableHelper;
import org.hibernate.validator.internal.util.ExecutableParameterNameProvider;
import org.hibernate.validator.internal.util.TypeResolutionHelper;
import org.hibernate.validator.test.internal.metadata.Customer;
import org.hibernate.validator.test.internal.metadata.CustomerRepository;
Expand All @@ -55,7 +56,7 @@ public void setupBeanMetaData() {
BeanMetaDataManager beanMetaDataManager = new BeanMetaDataManager(
new ConstraintHelper(),
new ExecutableHelper( new TypeResolutionHelper() ),
new DefaultParameterNameProvider(),
new ExecutableParameterNameProvider( new DefaultParameterNameProvider() ),
Collections.<MetaDataProvider>emptyList()
);

Expand Down Expand Up @@ -138,7 +139,7 @@ public void parameterNameInInheritanceHierarchy() throws Exception {
BeanMetaDataManager beanMetaDataManager = new BeanMetaDataManager(
new ConstraintHelper(),
new ExecutableHelper( new TypeResolutionHelper() ),
new SkewedParameterNameProvider(),
new ExecutableParameterNameProvider( new SkewedParameterNameProvider() ),
Collections.<MetaDataProvider>emptyList()
);
BeanMetaData<ServiceImpl> localBeanMetaData = beanMetaDataManager.getBeanMetaData( ServiceImpl.class );
Expand Down

0 comments on commit f3b9cc8

Please sign in to comment.