Use Method::getParameterCount where possible
This commit is contained in:
committed by
Juergen Hoeller
parent
55f3f128c9
commit
f5ae3c77c6
@@ -145,11 +145,10 @@ class ExtendedBeanInfo implements BeanInfo {
|
||||
|
||||
public static boolean isCandidateWriteMethod(Method method) {
|
||||
String methodName = method.getName();
|
||||
Class<?>[] parameterTypes = method.getParameterTypes();
|
||||
int nParams = parameterTypes.length;
|
||||
int nParams = method.getParameterCount();
|
||||
return (methodName.length() > 3 && methodName.startsWith("set") && Modifier.isPublic(method.getModifiers()) &&
|
||||
(!void.class.isAssignableFrom(method.getReturnType()) || Modifier.isStatic(method.getModifiers())) &&
|
||||
(nParams == 1 || (nParams == 2 && int.class == parameterTypes[0])));
|
||||
(nParams == 1 || (nParams == 2 && int.class == method.getParameterTypes()[0])));
|
||||
}
|
||||
|
||||
private void handleCandidateWriteMethod(Method method) throws IntrospectionException {
|
||||
|
||||
@@ -66,8 +66,8 @@ abstract class PropertyDescriptorUtils {
|
||||
Class<?> propertyType = null;
|
||||
|
||||
if (readMethod != null) {
|
||||
Class<?>[] params = readMethod.getParameterTypes();
|
||||
if (params.length != 0) {
|
||||
int parameterCount = readMethod.getParameterCount();
|
||||
if (parameterCount != 0) {
|
||||
throw new IntrospectionException("Bad read method arg count: " + readMethod);
|
||||
}
|
||||
propertyType = readMethod.getReturnType();
|
||||
|
||||
@@ -696,10 +696,10 @@ public class AutowiredAnnotationBeanPostProcessor extends InstantiationAwareBean
|
||||
arguments = resolveCachedArguments(beanName);
|
||||
}
|
||||
else {
|
||||
Class<?>[] paramTypes = method.getParameterTypes();
|
||||
arguments = new Object[paramTypes.length];
|
||||
DependencyDescriptor[] descriptors = new DependencyDescriptor[paramTypes.length];
|
||||
Set<String> autowiredBeans = new LinkedHashSet<>(paramTypes.length);
|
||||
int argumentCount = method.getParameterCount();
|
||||
arguments = new Object[argumentCount];
|
||||
DependencyDescriptor[] descriptors = new DependencyDescriptor[argumentCount];
|
||||
Set<String> autowiredBeans = new LinkedHashSet<>(argumentCount);
|
||||
Assert.state(beanFactory != null, "No BeanFactory available");
|
||||
TypeConverter typeConverter = beanFactory.getTypeConverter();
|
||||
for (int i = 0; i < arguments.length; i++) {
|
||||
@@ -724,8 +724,9 @@ public class AutowiredAnnotationBeanPostProcessor extends InstantiationAwareBean
|
||||
if (arguments != null) {
|
||||
DependencyDescriptor[] cachedMethodArguments = Arrays.copyOf(descriptors, arguments.length);
|
||||
registerDependentBeans(beanName, autowiredBeans);
|
||||
if (autowiredBeans.size() == paramTypes.length) {
|
||||
if (autowiredBeans.size() == argumentCount) {
|
||||
Iterator<String> it = autowiredBeans.iterator();
|
||||
Class<?>[] paramTypes = method.getParameterTypes();
|
||||
for (int i = 0; i < paramTypes.length; i++) {
|
||||
String autowiredBeanName = it.next();
|
||||
if (beanFactory.containsBean(autowiredBeanName) &&
|
||||
|
||||
@@ -202,21 +202,23 @@ class ConstructorResolver {
|
||||
LinkedList<UnsatisfiedDependencyException> causes = null;
|
||||
|
||||
for (Constructor<?> candidate : candidates) {
|
||||
Class<?>[] paramTypes = candidate.getParameterTypes();
|
||||
|
||||
if (constructorToUse != null && argsToUse != null && argsToUse.length > paramTypes.length) {
|
||||
int parameterCount = candidate.getParameterCount();
|
||||
|
||||
if (constructorToUse != null && argsToUse != null && argsToUse.length > parameterCount) {
|
||||
// Already found greedy constructor that can be satisfied ->
|
||||
// do not look any further, there are only less greedy constructors left.
|
||||
break;
|
||||
}
|
||||
if (paramTypes.length < minNrOfArgs) {
|
||||
if (parameterCount < minNrOfArgs) {
|
||||
continue;
|
||||
}
|
||||
|
||||
ArgumentsHolder argsHolder;
|
||||
Class<?>[] paramTypes = candidate.getParameterTypes();
|
||||
if (resolvedValues != null) {
|
||||
try {
|
||||
String[] paramNames = ConstructorPropertiesChecker.evaluate(candidate, paramTypes.length);
|
||||
String[] paramNames = ConstructorPropertiesChecker.evaluate(candidate, parameterCount);
|
||||
if (paramNames == null) {
|
||||
ParameterNameDiscoverer pnd = this.beanFactory.getParameterNameDiscoverer();
|
||||
if (pnd != null) {
|
||||
@@ -240,7 +242,7 @@ class ConstructorResolver {
|
||||
}
|
||||
else {
|
||||
// Explicit arguments given -> arguments length must match exactly.
|
||||
if (paramTypes.length != explicitArgs.length) {
|
||||
if (parameterCount != explicitArgs.length) {
|
||||
continue;
|
||||
}
|
||||
argsHolder = new ArgumentsHolder(explicitArgs);
|
||||
@@ -340,15 +342,24 @@ class ConstructorResolver {
|
||||
if (uniqueCandidate == null) {
|
||||
uniqueCandidate = candidate;
|
||||
}
|
||||
else if (!Arrays.equals(uniqueCandidate.getParameterTypes(), candidate.getParameterTypes())) {
|
||||
uniqueCandidate = null;
|
||||
break;
|
||||
else {
|
||||
boolean paramsNotMatch = isParamsNotMatch(uniqueCandidate, candidate);
|
||||
if (paramsNotMatch) {
|
||||
uniqueCandidate = null;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
mbd.factoryMethodToIntrospect = uniqueCandidate;
|
||||
}
|
||||
|
||||
private boolean isParamsNotMatch(Method uniqueCandidate, Method candidate) {
|
||||
int uniqueCandidateParameterCount = uniqueCandidate.getParameterCount();
|
||||
int candidateParameterCount = candidate.getParameterCount();
|
||||
return uniqueCandidateParameterCount != candidateParameterCount || !Arrays.equals(uniqueCandidate.getParameterTypes(), candidate.getParameterTypes());
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve all candidate methods for the given class, considering
|
||||
* the {@link RootBeanDefinition#isNonPublicAccessAllowed()} flag.
|
||||
@@ -505,11 +516,12 @@ class ConstructorResolver {
|
||||
LinkedList<UnsatisfiedDependencyException> causes = null;
|
||||
|
||||
for (Method candidate : candidates) {
|
||||
Class<?>[] paramTypes = candidate.getParameterTypes();
|
||||
|
||||
if (paramTypes.length >= minNrOfArgs) {
|
||||
int parameterCount = candidate.getParameterCount();
|
||||
if (parameterCount >= minNrOfArgs) {
|
||||
ArgumentsHolder argsHolder;
|
||||
|
||||
Class<?>[] paramTypes = candidate.getParameterTypes();
|
||||
if (explicitArgs != null) {
|
||||
// Explicit arguments given -> arguments length must match exactly.
|
||||
if (paramTypes.length != explicitArgs.length) {
|
||||
|
||||
@@ -311,9 +311,9 @@ class DisposableBeanAdapter implements DisposableBean, Runnable, Serializable {
|
||||
* assuming a "force" parameter), else logging an error.
|
||||
*/
|
||||
private void invokeCustomDestroyMethod(final Method destroyMethod) {
|
||||
Class<?>[] paramTypes = destroyMethod.getParameterTypes();
|
||||
final Object[] args = new Object[paramTypes.length];
|
||||
if (paramTypes.length == 1) {
|
||||
int paramCount = destroyMethod.getParameterCount();
|
||||
final Object[] args = new Object[paramCount];
|
||||
if (paramCount == 1) {
|
||||
args[0] = Boolean.TRUE;
|
||||
}
|
||||
if (logger.isTraceEnabled()) {
|
||||
|
||||
Reference in New Issue
Block a user