Skip to content

Commit

Permalink
Avoid unnecessary parameter name inspection for constructor-arg resol…
Browse files Browse the repository at this point in the history
…ution

Closes gh-29612
  • Loading branch information
jhoeller committed Dec 1, 2022
1 parent 52e967a commit e47978e
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 9 deletions.
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2021 the original author or authors.
* Copyright 2002-2022 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -360,6 +360,25 @@ public ValueHolder getArgumentValue(int index, @Nullable Class<?> requiredType,
return valueHolder;
}

/**
* Determine whether at least one argument value refers to a name.
* @since 6.0.3
* @see ValueHolder#getName()
*/
public boolean containsNamedArgument() {
for (ValueHolder valueHolder : this.indexedArgumentValues.values()) {
if (valueHolder.getName() != null) {
return true;
}
}
for (ValueHolder valueHolder : this.genericArgumentValues) {
if (valueHolder.getName() != null) {
return true;
}
}
return false;
}

/**
* Return the number of argument values held in this instance,
* counting both indexed and generic argument values.
Expand Down
Expand Up @@ -232,11 +232,14 @@ public BeanWrapper autowireConstructor(String beanName, RootBeanDefinition mbd,
Class<?>[] paramTypes = candidate.getParameterTypes();
if (resolvedValues != null) {
try {
String[] paramNames = ConstructorPropertiesChecker.evaluate(candidate, parameterCount);
if (paramNames == null) {
ParameterNameDiscoverer pnd = this.beanFactory.getParameterNameDiscoverer();
if (pnd != null) {
paramNames = pnd.getParameterNames(candidate);
String[] paramNames = null;
if (resolvedValues.containsNamedArgument()) {
paramNames = ConstructorPropertiesChecker.evaluate(candidate, parameterCount);
if (paramNames == null) {
ParameterNameDiscoverer pnd = this.beanFactory.getParameterNameDiscoverer();
if (pnd != null) {
paramNames = pnd.getParameterNames(candidate);
}
}
}
argsHolder = createArgumentArray(beanName, mbd, resolvedValues, bw, paramTypes, paramNames,
Expand Down Expand Up @@ -536,9 +539,11 @@ public BeanWrapper instantiateUsingFactoryMethod(
// Resolved constructor arguments: type conversion and/or autowiring necessary.
try {
String[] paramNames = null;
ParameterNameDiscoverer pnd = this.beanFactory.getParameterNameDiscoverer();
if (pnd != null) {
paramNames = pnd.getParameterNames(candidate);
if (resolvedValues != null && resolvedValues.containsNamedArgument()) {
ParameterNameDiscoverer pnd = this.beanFactory.getParameterNameDiscoverer();
if (pnd != null) {
paramNames = pnd.getParameterNames(candidate);
}
}
argsHolder = createArgumentArray(beanName, mbd, resolvedValues, bw,
paramTypes, paramNames, candidate, autowiring, candidates.size() == 1);
Expand Down

0 comments on commit e47978e

Please sign in to comment.