Skip to content

Commit 529f88c

Browse files
christophstroblmp911de
authored andcommitted
Use explicit type declarations for generated code.
See #2704 Original pull request: #2705.
1 parent 1fde452 commit 529f88c

File tree

1 file changed

+18
-11
lines changed

1 file changed

+18
-11
lines changed

src/main/java/org/springframework/data/aot/ManagedTypesRegistrationAotContribution.java

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,10 @@ static class ManagedTypesInstanceCodeFragment extends BeanRegistrationCodeFragme
127127
private final RegisteredBean source;
128128
private final Lazy<Method> instanceMethod = Lazy.of(this::findInstanceFactory);
129129

130+
private static final TypeName WILDCARD = WildcardTypeName.subtypeOf(Object.class);
131+
private static final TypeName CLASS_OF_ANY = ParameterizedTypeName.get(ClassName.get(Class.class), WILDCARD);
132+
private static final TypeName LIST_OF_ANY = ParameterizedTypeName.get(ClassName.get(List.class), CLASS_OF_ANY);
133+
130134
protected ManagedTypesInstanceCodeFragment(List<Class<?>> sourceTypes, RegisteredBean source,
131135
BeanRegistrationCodeFragments codeFragments) {
132136

@@ -161,8 +165,7 @@ boolean canGenerateCode() {
161165

162166
void generateInstanceFactory(Builder method) {
163167

164-
boolean allSourceTypesVisible = sourceTypes.stream()
165-
.allMatch(it -> AccessControl.forClass(it).isPublic());
168+
boolean allSourceTypesVisible = sourceTypes.stream().allMatch(it -> AccessControl.forClass(it).isPublic());
166169

167170
ParameterizedTypeName targetTypeName = ParameterizedTypeName.get(InstanceSupplier.class, source.getBeanClass());
168171

@@ -171,21 +174,25 @@ void generateInstanceFactory(Builder method) {
171174

172175
CodeBlock.Builder builder = CodeBlock.builder().add("return ").beginControlFlow("(registeredBean -> ");
173176

174-
if(sourceTypes.isEmpty()) {
175-
176-
TypeName wildcard = WildcardTypeName.subtypeOf(Object.class);
177-
TypeName classOfAny = ParameterizedTypeName.get(ClassName.get(Class.class), wildcard);
178-
179-
builder.addStatement("var types = $T.<$T>emptyList()", Collections.class, classOfAny);
177+
if (sourceTypes.isEmpty()) {
178+
builder.addStatement("$T types = $T.emptyList()", LIST_OF_ANY, Collections.class);
180179
} else {
181-
builder.addStatement("var types = $T.of($L)", List.class, toCodeBlock(sourceTypes, allSourceTypesVisible));
180+
if (allSourceTypesVisible) {
181+
builder.addStatement("$T types = $T.of($L)", LIST_OF_ANY, List.class,
182+
toCodeBlock(sourceTypes, allSourceTypesVisible));
183+
} else {
184+
TypeName listOfString = ParameterizedTypeName.get(ClassName.get(List.class), ClassName.get(String.class));
185+
builder.addStatement("$T types = $T.of($L)", listOfString, List.class,
186+
toCodeBlock(sourceTypes, allSourceTypesVisible));
187+
}
182188
}
183189

184190
if (allSourceTypesVisible) {
185-
builder.addStatement("var managedTypes = $T.fromIterable($L)", ManagedTypes.class, "types");
191+
builder.addStatement("$T managedTypes = $T.fromIterable($L)", ManagedTypes.class, ManagedTypes.class, "types");
186192
} else {
187193
builder.add(CodeBlock.builder()
188-
.beginControlFlow("var managedTypes = $T.fromStream(types.stream().map(it ->", ManagedTypes.class)
194+
.beginControlFlow("$T managedTypes = $T.fromStream(types.stream().map(it ->", ManagedTypes.class,
195+
ManagedTypes.class)
189196
.beginControlFlow("try")
190197
.addStatement("return $T.forName(it, registeredBean.getBeanFactory().getBeanClassLoader())",
191198
ClassUtils.class)

0 commit comments

Comments
 (0)