@@ -127,6 +127,10 @@ static class ManagedTypesInstanceCodeFragment extends BeanRegistrationCodeFragme
127
127
private final RegisteredBean source ;
128
128
private final Lazy <Method > instanceMethod = Lazy .of (this ::findInstanceFactory );
129
129
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
+
130
134
protected ManagedTypesInstanceCodeFragment (List <Class <?>> sourceTypes , RegisteredBean source ,
131
135
BeanRegistrationCodeFragments codeFragments ) {
132
136
@@ -161,8 +165,7 @@ boolean canGenerateCode() {
161
165
162
166
void generateInstanceFactory (Builder method ) {
163
167
164
- boolean allSourceTypesVisible = sourceTypes .stream ()
165
- .allMatch (it -> AccessControl .forClass (it ).isPublic ());
168
+ boolean allSourceTypesVisible = sourceTypes .stream ().allMatch (it -> AccessControl .forClass (it ).isPublic ());
166
169
167
170
ParameterizedTypeName targetTypeName = ParameterizedTypeName .get (InstanceSupplier .class , source .getBeanClass ());
168
171
@@ -171,21 +174,25 @@ void generateInstanceFactory(Builder method) {
171
174
172
175
CodeBlock .Builder builder = CodeBlock .builder ().add ("return " ).beginControlFlow ("(registeredBean -> " );
173
176
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 );
180
179
} 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
+ }
182
188
}
183
189
184
190
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" );
186
192
} else {
187
193
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 )
189
196
.beginControlFlow ("try" )
190
197
.addStatement ("return $T.forName(it, registeredBean.getBeanFactory().getBeanClassLoader())" ,
191
198
ClassUtils .class )
0 commit comments