Skip to content

Commit 3632bea

Browse files
committed
Polishing
1 parent 1efa162 commit 3632bea

File tree

4 files changed

+45
-75
lines changed

4 files changed

+45
-75
lines changed

spring-beans/src/main/java/org/springframework/beans/factory/aot/BeanRegistrationKey.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2022 the original author or authors.
2+
* Copyright 2002-2023 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -18,10 +18,11 @@
1818

1919
/**
2020
* Record class holding key information for beans registered in a bean factory.
21+
*
2122
* @param beanName the name of the registered bean
2223
* @param beanClass the type of the registered bean
2324
* @author Brian Clozel
24-
* @since 6.0
25+
* @since 6.0.8
2526
*/
2627
record BeanRegistrationKey(String beanName, Class<?> beanClass) {
2728
}

spring-beans/src/main/java/org/springframework/beans/factory/aot/BeanRegistrationsAotContribution.java

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,7 @@ class BeanRegistrationsAotContribution
5252
private final Map<BeanRegistrationKey, Registration> registrations;
5353

5454

55-
BeanRegistrationsAotContribution(
56-
Map<BeanRegistrationKey, Registration> registrations) {
55+
BeanRegistrationsAotContribution(Map<BeanRegistrationKey, Registration> registrations) {
5756
this.registrations = registrations;
5857
}
5958

@@ -78,37 +77,32 @@ public void applyTo(GenerationContext generationContext,
7877
}
7978

8079
private void generateRegisterBeanDefinitionsMethod(MethodSpec.Builder method,
81-
GenerationContext generationContext,
82-
BeanRegistrationsCode beanRegistrationsCode) {
80+
GenerationContext generationContext, BeanRegistrationsCode beanRegistrationsCode) {
8381

8482
method.addJavadoc("Register the bean definitions.");
8583
method.addModifiers(Modifier.PUBLIC);
86-
method.addParameter(DefaultListableBeanFactory.class,
87-
BEAN_FACTORY_PARAMETER_NAME);
84+
method.addParameter(DefaultListableBeanFactory.class, BEAN_FACTORY_PARAMETER_NAME);
8885
CodeBlock.Builder code = CodeBlock.builder();
8986
this.registrations.forEach((registeredBean, registration) -> {
9087
MethodReference beanDefinitionMethod = registration.methodGenerator
91-
.generateBeanDefinitionMethod(generationContext,
92-
beanRegistrationsCode);
88+
.generateBeanDefinitionMethod(generationContext, beanRegistrationsCode);
9389
CodeBlock methodInvocation = beanDefinitionMethod.toInvokeCodeBlock(
9490
ArgumentCodeGenerator.none(), beanRegistrationsCode.getClassName());
9591
code.addStatement("$L.registerBeanDefinition($S, $L)",
96-
BEAN_FACTORY_PARAMETER_NAME, registeredBean.beanName(),
97-
methodInvocation);
92+
BEAN_FACTORY_PARAMETER_NAME, registeredBean.beanName(), methodInvocation);
9893
});
9994
method.addCode(code.build());
10095
}
10196

10297
private void generateRegisterAliasesMethod(MethodSpec.Builder method) {
10398
method.addJavadoc("Register the aliases.");
10499
method.addModifiers(Modifier.PUBLIC);
105-
method.addParameter(DefaultListableBeanFactory.class,
106-
BEAN_FACTORY_PARAMETER_NAME);
100+
method.addParameter(DefaultListableBeanFactory.class, BEAN_FACTORY_PARAMETER_NAME);
107101
CodeBlock.Builder code = CodeBlock.builder();
108102
this.registrations.forEach((registeredBean, registration) -> {
109103
for (String alias : registration.aliases) {
110-
code.addStatement("$L.registerAlias($S, $S)",
111-
BEAN_FACTORY_PARAMETER_NAME, registeredBean.beanName(), alias);
104+
code.addStatement("$L.registerAlias($S, $S)", BEAN_FACTORY_PARAMETER_NAME,
105+
registeredBean.beanName(), alias);
112106
}
113107
});
114108
method.addCode(code.build());

spring-beans/src/test/java/org/springframework/beans/factory/aot/BeanRegistrationsAotContributionTests.java

Lines changed: 32 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
package org.springframework.beans.factory.aot;
1818

1919
import java.util.ArrayList;
20-
import java.util.Collections;
2120
import java.util.List;
2221
import java.util.Map;
2322
import java.util.function.BiConsumer;
@@ -32,8 +31,8 @@
3231
import org.springframework.aot.generate.MethodReference;
3332
import org.springframework.aot.generate.MethodReference.ArgumentCodeGenerator;
3433
import org.springframework.aot.hint.MemberCategory;
35-
import org.springframework.aot.hint.predicate.RuntimeHintsPredicates;
3634
import org.springframework.aot.test.generate.TestGenerationContext;
35+
import org.springframework.beans.factory.aot.BeanRegistrationsAotContribution.Registration;
3736
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
3837
import org.springframework.beans.factory.support.RegisteredBean;
3938
import org.springframework.beans.factory.support.RootBeanDefinition;
@@ -49,7 +48,7 @@
4948
import org.springframework.javapoet.ParameterizedTypeName;
5049

5150
import static org.assertj.core.api.Assertions.assertThat;
52-
import static org.springframework.beans.factory.aot.BeanRegistrationsAotContribution.Registration;
51+
import static org.springframework.aot.hint.predicate.RuntimeHintsPredicates.reflection;
5352

5453
/**
5554
* Tests for {@link BeanRegistrationsAotContribution}.
@@ -61,32 +60,21 @@
6160
*/
6261
class BeanRegistrationsAotContributionTests {
6362

64-
private final DefaultListableBeanFactory beanFactory;
63+
private final DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
6564

66-
private final BeanDefinitionMethodGeneratorFactory methodGeneratorFactory;
65+
private final BeanDefinitionMethodGeneratorFactory methodGeneratorFactory = new BeanDefinitionMethodGeneratorFactory(
66+
AotServices.factoriesAndBeans(new MockSpringFactoriesLoader(), this.beanFactory));
6767

68-
private TestGenerationContext generationContext;
68+
private TestGenerationContext generationContext = new TestGenerationContext();
6969

70-
private MockBeanFactoryInitializationCode beanFactoryInitializationCode;
71-
72-
73-
BeanRegistrationsAotContributionTests() {
74-
MockSpringFactoriesLoader springFactoriesLoader = new MockSpringFactoriesLoader();
75-
this.beanFactory = new DefaultListableBeanFactory();
76-
this.methodGeneratorFactory = new BeanDefinitionMethodGeneratorFactory(
77-
AotServices.factoriesAndBeans(springFactoriesLoader, this.beanFactory));
78-
this.generationContext = new TestGenerationContext();
79-
this.beanFactoryInitializationCode = new MockBeanFactoryInitializationCode(this.generationContext);
80-
}
70+
private MockBeanFactoryInitializationCode beanFactoryInitializationCode = new MockBeanFactoryInitializationCode(this.generationContext);
8171

8272

8373
@Test
8474
void applyToAppliesContribution() {
85-
RegisteredBean registeredBean = registerBean(
86-
new RootBeanDefinition(TestBean.class));
87-
BeanDefinitionMethodGenerator generator = new BeanDefinitionMethodGenerator(
88-
this.methodGeneratorFactory, registeredBean, null,
89-
Collections.emptyList());
75+
RegisteredBean registeredBean = registerBean(new RootBeanDefinition(TestBean.class));
76+
BeanDefinitionMethodGenerator generator = new BeanDefinitionMethodGenerator(this.methodGeneratorFactory,
77+
registeredBean, null, List.of());
9078
BeanRegistrationsAotContribution contribution = createContribution(generator);
9179
contribution.applyTo(this.generationContext, this.beanFactoryInitializationCode);
9280
compile((consumer, compiled) -> {
@@ -98,11 +86,9 @@ void applyToAppliesContribution() {
9886

9987
@Test
10088
void applyToAppliesContributionWithAliases() {
101-
RegisteredBean registeredBean = registerBean(
102-
new RootBeanDefinition(TestBean.class));
103-
BeanDefinitionMethodGenerator generator = new BeanDefinitionMethodGenerator(
104-
this.methodGeneratorFactory, registeredBean, null,
105-
Collections.emptyList());
89+
RegisteredBean registeredBean = registerBean(new RootBeanDefinition(TestBean.class));
90+
BeanDefinitionMethodGenerator generator = new BeanDefinitionMethodGenerator(this.methodGeneratorFactory,
91+
registeredBean, null, List.of());
10692
BeanRegistrationsAotContribution contribution = createContribution(generator, "testAlias");
10793
contribution.applyTo(this.generationContext, this.beanFactoryInitializationCode);
10894
compile((consumer, compiled) -> {
@@ -117,11 +103,9 @@ void applyToWhenHasNameGeneratesPrefixedFeatureName() {
117103
this.generationContext = new TestGenerationContext(
118104
new ClassNameGenerator(TestGenerationContext.TEST_TARGET, "Management"));
119105
this.beanFactoryInitializationCode = new MockBeanFactoryInitializationCode(this.generationContext);
120-
RegisteredBean registeredBean = registerBean(
121-
new RootBeanDefinition(TestBean.class));
122-
BeanDefinitionMethodGenerator generator = new BeanDefinitionMethodGenerator(
123-
this.methodGeneratorFactory, registeredBean, null,
124-
Collections.emptyList());
106+
RegisteredBean registeredBean = registerBean(new RootBeanDefinition(TestBean.class));
107+
BeanDefinitionMethodGenerator generator = new BeanDefinitionMethodGenerator(this.methodGeneratorFactory,
108+
registeredBean, null, List.of());
125109
BeanRegistrationsAotContribution contribution = createContribution(generator);
126110
contribution.applyTo(this.generationContext, this.beanFactoryInitializationCode);
127111
compile((consumer, compiled) -> {
@@ -133,19 +117,15 @@ void applyToWhenHasNameGeneratesPrefixedFeatureName() {
133117
@Test
134118
void applyToCallsRegistrationsWithBeanRegistrationsCode() {
135119
List<BeanRegistrationsCode> beanRegistrationsCodes = new ArrayList<>();
136-
RegisteredBean registeredBean = registerBean(
137-
new RootBeanDefinition(TestBean.class));
138-
BeanDefinitionMethodGenerator generator = new BeanDefinitionMethodGenerator(
139-
this.methodGeneratorFactory, registeredBean, null,
140-
Collections.emptyList()) {
120+
RegisteredBean registeredBean = registerBean(new RootBeanDefinition(TestBean.class));
121+
BeanDefinitionMethodGenerator generator = new BeanDefinitionMethodGenerator(this.methodGeneratorFactory,
122+
registeredBean, null, List.of()) {
141123

142124
@Override
143-
MethodReference generateBeanDefinitionMethod(
144-
GenerationContext generationContext,
125+
MethodReference generateBeanDefinitionMethod(GenerationContext generationContext,
145126
BeanRegistrationsCode beanRegistrationsCode) {
146127
beanRegistrationsCodes.add(beanRegistrationsCode);
147-
return super.generateBeanDefinitionMethod(generationContext,
148-
beanRegistrationsCode);
128+
return super.generateBeanDefinitionMethod(generationContext, beanRegistrationsCode);
149129
}
150130

151131
};
@@ -158,15 +138,12 @@ MethodReference generateBeanDefinitionMethod(
158138

159139
@Test
160140
void applyToRegisterReflectionHints() {
161-
List<BeanRegistrationsCode> beanRegistrationsCodes = new ArrayList<>();
162-
RegisteredBean registeredBean = registerBean(
163-
new RootBeanDefinition(TestBean.class));
164-
BeanDefinitionMethodGenerator generator = new BeanDefinitionMethodGenerator(
165-
this.methodGeneratorFactory, registeredBean, null,
166-
Collections.emptyList());
141+
RegisteredBean registeredBean = registerBean(new RootBeanDefinition(TestBean.class));
142+
BeanDefinitionMethodGenerator generator = new BeanDefinitionMethodGenerator(this.methodGeneratorFactory,
143+
registeredBean, null, List.of());
167144
BeanRegistrationsAotContribution contribution = createContribution(generator);
168145
contribution.applyTo(this.generationContext, this.beanFactoryInitializationCode);
169-
assertThat(RuntimeHintsPredicates.reflection().onType(TestBean.class)
146+
assertThat(reflection().onType(TestBean.class)
170147
.withMemberCategory(MemberCategory.INTROSPECT_DECLARED_METHODS))
171148
.accepts(this.generationContext.getRuntimeHints());
172149
}
@@ -178,20 +155,18 @@ private RegisteredBean registerBean(RootBeanDefinition rootBeanDefinition) {
178155
}
179156

180157
@SuppressWarnings({ "unchecked", "cast" })
181-
private void compile(
182-
BiConsumer<Consumer<DefaultListableBeanFactory>, Compiled> result) {
183-
MethodReference beanRegistrationsMethodReference = this.beanFactoryInitializationCode
184-
.getInitializers().get(0);
185-
MethodReference aliasesMethodReference = this.beanFactoryInitializationCode
186-
.getInitializers().get(1);
158+
private void compile(BiConsumer<Consumer<DefaultListableBeanFactory>, Compiled> result) {
159+
MethodReference beanRegistrationsMethodReference = this.beanFactoryInitializationCode.getInitializers().get(0);
160+
MethodReference aliasesMethodReference = this.beanFactoryInitializationCode.getInitializers().get(1);
187161
this.beanFactoryInitializationCode.getTypeBuilder().set(type -> {
188162
ArgumentCodeGenerator beanFactory = ArgumentCodeGenerator.of(DefaultListableBeanFactory.class, "beanFactory");
189163
ClassName className = this.beanFactoryInitializationCode.getClassName();
190164
CodeBlock beanRegistrationsMethodInvocation = beanRegistrationsMethodReference.toInvokeCodeBlock(beanFactory, className);
191165
CodeBlock aliasesMethodInvocation = aliasesMethodReference.toInvokeCodeBlock(beanFactory, className);
192166
type.addModifiers(Modifier.PUBLIC);
193167
type.addSuperinterface(ParameterizedTypeName.get(Consumer.class, DefaultListableBeanFactory.class));
194-
type.addMethod(MethodSpec.methodBuilder("accept").addModifiers(Modifier.PUBLIC)
168+
type.addMethod(MethodSpec.methodBuilder("accept")
169+
.addModifiers(Modifier.PUBLIC)
195170
.addParameter(DefaultListableBeanFactory.class, "beanFactory")
196171
.addStatement(beanRegistrationsMethodInvocation)
197172
.addStatement(aliasesMethodInvocation)
@@ -204,7 +179,8 @@ private void compile(
204179

205180
private BeanRegistrationsAotContribution createContribution(
206181
BeanDefinitionMethodGenerator methodGenerator,String... aliases) {
207-
return new BeanRegistrationsAotContribution(Map.of(new BeanRegistrationKey("testBean", TestBean.class), new Registration(methodGenerator, aliases)));
182+
return new BeanRegistrationsAotContribution(
183+
Map.of(new BeanRegistrationKey("testBean", TestBean.class), new Registration(methodGenerator, aliases)));
208184
}
209185

210186
}

spring-core/src/main/java/org/springframework/core/convert/support/CollectionToStringConverter.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2016 the original author or authors.
2+
* Copyright 2002-2023 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -58,10 +58,9 @@ public boolean matches(TypeDescriptor sourceType, TypeDescriptor targetType) {
5858
@Override
5959
@Nullable
6060
public Object convert(@Nullable Object source, TypeDescriptor sourceType, TypeDescriptor targetType) {
61-
if (source == null) {
61+
if (!(source instanceof Collection<?> sourceCollection)) {
6262
return null;
6363
}
64-
Collection<?> sourceCollection = (Collection<?>) source;
6564
if (sourceCollection.isEmpty()) {
6665
return "";
6766
}

0 commit comments

Comments
 (0)