All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.hibernate.validator.parameternameprovider.ParanamerParameterNameProvider Maven / Gradle / Ivy

Go to download

Following the DRY (Don't Repeat Yourself) principle, Hibernate Validator let's you express your domain constraints once (and only once) and ensure their compliance at various level of your system automatically.

There is a newer version: 9.0.0.Beta3
Show newest version
/*
 * Hibernate Validator, declare and validate application constraints
 *
 * License: Apache License, Version 2.0
 * See the license.txt file in the root directory or .
 */
package org.hibernate.validator.parameternameprovider;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.List;
import javax.validation.ParameterNameProvider;

import com.thoughtworks.paranamer.AdaptiveParanamer;
import com.thoughtworks.paranamer.CachingParanamer;
import com.thoughtworks.paranamer.Paranamer;

import org.hibernate.validator.internal.engine.DefaultParameterNameProvider;

/**
 * A {@link ParameterNameProvider} implementation backed by the ParaNamer
 * library.
 * 

* The {@link Paranamer} implementation to use can be passed when creating a {@code ParanamerParameterNameProvider}. By * default a {@link AdaptiveParanamer} will be used which is wrapped into a {@link CachingParanamer}. If no parameter * names can be obtained from the configured {@code Paranamer}, the default parameter name provider will be used as * fall back. *

* The ParaNamer library must be present on the classpath when using this parameter name provider. * * @author Gunnar Morling * @see ParaNamer web site */ public class ParanamerParameterNameProvider implements ParameterNameProvider { private final ParameterNameProvider fallBackProvider; private final Paranamer paranamer; public ParanamerParameterNameProvider() { this( null ); } public ParanamerParameterNameProvider(Paranamer paranamer) { this.paranamer = paranamer != null ? paranamer : new CachingParanamer( new AdaptiveParanamer() ); fallBackProvider = new DefaultParameterNameProvider(); } @Override public List getParameterNames(Constructor constructor) { String[] parameterNames; //there are no guarantees regarding thread-safety synchronized ( paranamer ) { parameterNames = paranamer.lookupParameterNames( constructor, false ); } //either null or an empty array is returned if no names could be retrieved if ( parameterNames != null && parameterNames.length == constructor.getParameterTypes().length ) { return Arrays.asList( parameterNames ); } return fallBackProvider.getParameterNames( constructor ); } @Override public List getParameterNames(Method method) { String[] parameterNames; synchronized ( paranamer ) { parameterNames = paranamer.lookupParameterNames( method, false ); } if ( parameterNames != null && parameterNames.length == method.getParameterTypes().length ) { return Arrays.asList( parameterNames ); } return fallBackProvider.getParameterNames( method ); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy