Skip to content

Commit

Permalink
Polishing
Browse files Browse the repository at this point in the history
  • Loading branch information
jhoeller committed May 10, 2023
1 parent e228f4b commit c8927ae
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 36 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -237,33 +237,28 @@ AutowiredArguments resolveArguments(RegisteredBean registeredBean) {

private AutowiredArguments resolveArguments(RegisteredBean registeredBean, Executable executable) {
Assert.isInstanceOf(AbstractAutowireCapableBeanFactory.class, registeredBean.getBeanFactory());
String beanName = registeredBean.getBeanName();
Class<?> beanClass = registeredBean.getBeanClass();
AbstractAutowireCapableBeanFactory beanFactory =
(AbstractAutowireCapableBeanFactory) registeredBean.getBeanFactory();
RootBeanDefinition mergedBeanDefinition = registeredBean.getMergedBeanDefinition();

int startIndex = (executable instanceof Constructor<?> constructor &&
ClassUtils.isInnerClass(constructor.getDeclaringClass())) ? 1 : 0;
int parameterCount = executable.getParameterCount();
Object[] resolved = new Object[parameterCount - startIndex];
Assert.isTrue(this.shortcuts == null || this.shortcuts.length == resolved.length,
() -> "'shortcuts' must contain " + resolved.length + " elements");

ConstructorArgumentValues argumentValues = resolveArgumentValues(registeredBean);
Set<String> autowiredBeans = new LinkedHashSet<>(resolved.length);
ConstructorArgumentValues argumentValues = resolveArgumentValues(beanFactory,
beanName, mergedBeanDefinition);
for (int i = startIndex; i < parameterCount; i++) {
MethodParameter parameter = getMethodParameter(executable, i);
DependencyDescriptor dependencyDescriptor = new DependencyDescriptor(parameter, true);
String shortcut = (this.shortcuts != null) ? this.shortcuts[i - startIndex] : null;
DependencyDescriptor descriptor = new DependencyDescriptor(parameter, true);
String shortcut = (this.shortcuts != null ? this.shortcuts[i - startIndex] : null);
if (shortcut != null) {
dependencyDescriptor = new ShortcutDependencyDescriptor(
dependencyDescriptor, shortcut, beanClass);
descriptor = new ShortcutDependencyDescriptor(descriptor, shortcut, registeredBean.getBeanClass());
}
ValueHolder argumentValue = argumentValues.getIndexedArgumentValue(i, null);
resolved[i - startIndex] = resolveArgument(registeredBean,autowiredBeans,
dependencyDescriptor, argumentValue);
resolved[i - startIndex] = resolveArgument(registeredBean, descriptor, argumentValue, autowiredBeans);
}
registerDependentBeans(beanFactory, beanName, autowiredBeans);
registerDependentBeans(registeredBean.getBeanFactory(), registeredBean.getBeanName(), autowiredBeans);

return AutowiredArguments.of(resolved);
}

Expand All @@ -277,15 +272,14 @@ private MethodParameter getMethodParameter(Executable executable, int index) {
throw new IllegalStateException("Unsupported executable: " + executable.getClass().getName());
}

private ConstructorArgumentValues resolveArgumentValues(
AbstractAutowireCapableBeanFactory beanFactory, String beanName,
RootBeanDefinition mergedBeanDefinition) {

private ConstructorArgumentValues resolveArgumentValues(RegisteredBean registeredBean) {
ConstructorArgumentValues resolved = new ConstructorArgumentValues();
if (mergedBeanDefinition.hasConstructorArgumentValues()) {
RootBeanDefinition beanDefinition = registeredBean.getMergedBeanDefinition();
if (beanDefinition.hasConstructorArgumentValues() &&
registeredBean.getBeanFactory() instanceof AbstractAutowireCapableBeanFactory beanFactory) {
BeanDefinitionValueResolver valueResolver = new BeanDefinitionValueResolver(
beanFactory, beanName, mergedBeanDefinition, beanFactory.getTypeConverter());
ConstructorArgumentValues values = mergedBeanDefinition.getConstructorArgumentValues();
beanFactory, registeredBean.getBeanName(), beanDefinition, beanFactory.getTypeConverter());
ConstructorArgumentValues values = beanDefinition.getConstructorArgumentValues();
values.getIndexedArgumentValues().forEach((index, valueHolder) -> {
ValueHolder resolvedValue = resolveArgumentValue(valueResolver, valueHolder);
resolved.addIndexedArgumentValue(index, resolvedValue);
Expand All @@ -298,30 +292,27 @@ private ValueHolder resolveArgumentValue(BeanDefinitionValueResolver resolver, V
if (valueHolder.isConverted()) {
return valueHolder;
}
Object resolvedValue = resolver.resolveValueIfNecessary("constructor argument",
valueHolder.getValue());
ValueHolder resolvedValueHolder = new ValueHolder(resolvedValue,
valueHolder.getType(), valueHolder.getName());
resolvedValueHolder.setSource(valueHolder);
return resolvedValueHolder;
Object value = resolver.resolveValueIfNecessary("constructor argument", valueHolder.getValue());
ValueHolder resolvedHolder = new ValueHolder(value, valueHolder.getType(), valueHolder.getName());
resolvedHolder.setSource(valueHolder);
return resolvedHolder;
}

@Nullable
private Object resolveArgument(RegisteredBean registeredBean, Set<String> autowiredBeans,
DependencyDescriptor dependencyDescriptor, @Nullable ValueHolder argumentValue) {
private Object resolveArgument(RegisteredBean registeredBean, DependencyDescriptor descriptor,
@Nullable ValueHolder argumentValue, Set<String> autowiredBeans) {

TypeConverter typeConverter = registeredBean.getBeanFactory().getTypeConverter();
Class<?> parameterType = dependencyDescriptor.getMethodParameter().getParameterType();
if (argumentValue != null) {
return (!argumentValue.isConverted()) ?
typeConverter.convertIfNecessary(argumentValue.getValue(), parameterType) :
argumentValue.getConvertedValue();
return (argumentValue.isConverted() ? argumentValue.getConvertedValue() :
typeConverter.convertIfNecessary(argumentValue.getValue(),
descriptor.getDependencyType(), descriptor.getMethodParameter()));
}
try {
return registeredBean.resolveAutowiredArgument(dependencyDescriptor, typeConverter, autowiredBeans);
return registeredBean.resolveAutowiredArgument(descriptor, typeConverter, autowiredBeans);
}
catch (BeansException ex) {
throw new UnsatisfiedDependencyException(null, registeredBean.getBeanName(), dependencyDescriptor, ex);
throw new UnsatisfiedDependencyException(null, registeredBean.getBeanName(), descriptor, ex);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,9 @@ public abstract class AbstractApplicationContextTests extends AbstractListableBe

protected TestApplicationListener parentListener = new TestApplicationListener();


@BeforeEach
public void setUp() throws Exception {
public void setup() throws Exception {
this.applicationContext = createContext();
}

Expand All @@ -79,6 +80,7 @@ protected ApplicationContext getApplicationContext() {
*/
protected abstract ConfigurableApplicationContext createContext() throws Exception;


@Test
public void contextAwareSingletonWasCalledBack() throws Exception {
ACATester aca = (ACATester) applicationContext.getBean("aca");
Expand Down

0 comments on commit c8927ae

Please sign in to comment.