Polishing

This commit is contained in:
Sam Brannen
2022-05-10 12:18:45 +02:00
parent 7cb6ac0a02
commit d8f650e3ca
3 changed files with 48 additions and 52 deletions

View File

@@ -878,7 +878,7 @@ public class AutowiredAnnotationBeanPostProcessor implements SmartInstantiationA
/** /**
* {@link BeanRegistrationAotContribution} to autowire fields and methods. * {@link BeanRegistrationAotContribution} to autowire fields and methods.
*/ */
private class AotContribution implements BeanRegistrationAotContribution { private static class AotContribution implements BeanRegistrationAotContribution {
private static final String APPLY_METHOD = "apply"; private static final String APPLY_METHOD = "apply";

View File

@@ -17,10 +17,8 @@
package org.springframework.beans.factory.aot; package org.springframework.beans.factory.aot;
import java.lang.reflect.Array; import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.LinkedHashSet; import java.util.LinkedHashSet;
@@ -61,25 +59,25 @@ class BeanDefinitionPropertyValueCodeGenerator {
private final MethodGenerator methodGenerator; private final MethodGenerator methodGenerator;
private final List<Delegate> delegates; private final List<Delegate> delegates = List.of(
new PrimitiveDelegate(),
new StringDelegate(),
new EnumDelegate(),
new ClassDelegate(),
new ResolvableTypeDelegate(),
new ArrayDelegate(),
new ManagedListDelegate(),
new ManagedSetDelegate(),
new ManagedMapDelegate(),
new ListDelegate(),
new SetDelegate(),
new MapDelegate(),
new BeanReferenceDelegate()
);
BeanDefinitionPropertyValueCodeGenerator(MethodGenerator methodGenerator) { BeanDefinitionPropertyValueCodeGenerator(MethodGenerator methodGenerator) {
this.methodGenerator = methodGenerator; this.methodGenerator = methodGenerator;
this.delegates = new ArrayList<>();
this.delegates.add(new PrimitiveDelegate());
this.delegates.add(new StringDelegate());
this.delegates.add(new EnumDelegate());
this.delegates.add(new ClassDelegate());
this.delegates.add(new ResolvableTypeDelegate());
this.delegates.add(new ArrayDelegate());
this.delegates.add(new ManagedListDelegate());
this.delegates.add(new ManagedSetDelegate());
this.delegates.add(new ManagedMapDelegate());
this.delegates.add(new ListDelegate());
this.delegates.add(new SetDelegate());
this.delegates.add(new MapDelegate());
this.delegates.add(new BeanReferenceDelegate());
} }
@@ -121,20 +119,17 @@ class BeanDefinitionPropertyValueCodeGenerator {
*/ */
private static class PrimitiveDelegate implements Delegate { private static class PrimitiveDelegate implements Delegate {
private static final Map<Character, String> CHAR_ESCAPES; private static final Map<Character, String> CHAR_ESCAPES = Map.of(
'\b', "\\b",
'\t', "\\t",
'\n', "\\n",
'\f', "\\f",
'\r', "\\r",
'\"', "\"",
'\'', "\\'",
'\\', "\\\\"
);
static {
Map<Character, String> escapes = new HashMap<>();
escapes.put('\b', "\\b");
escapes.put('\t', "\\t");
escapes.put('\n', "\\n");
escapes.put('\f', "\\f");
escapes.put('\r', "\\r");
escapes.put('\"', "\"");
escapes.put('\'', "\\'");
escapes.put('\\', "\\\\");
CHAR_ESCAPES = Collections.unmodifiableMap(escapes);
}
@Override @Override
@Nullable @Nullable
@@ -258,7 +253,9 @@ class BeanDefinitionPropertyValueCodeGenerator {
builder.add("new $T {", type.toClass()); builder.add("new $T {", type.toClass());
for (int i = 0; i < length; i++) { for (int i = 0; i < length; i++) {
Object component = Array.get(value, i); Object component = Array.get(value, i);
builder.add((i != 0) ? ", " : ""); if (i != 0) {
builder.add(", ");
}
builder.add("$L", BeanDefinitionPropertyValueCodeGenerator.this builder.add("$L", BeanDefinitionPropertyValueCodeGenerator.this
.generateCode(component, componentType)); .generateCode(component, componentType));
} }
@@ -274,8 +271,7 @@ class BeanDefinitionPropertyValueCodeGenerator {
/** /**
* Abstract {@link Delegate} for {@code Collection} types. * Abstract {@link Delegate} for {@code Collection} types.
*/ */
private abstract class CollectionDelegate<T extends Collection<?>> private abstract class CollectionDelegate<T extends Collection<?>> implements Delegate {
implements Delegate {
private final Class<?> collectionType; private final Class<?> collectionType;
@@ -301,8 +297,7 @@ class BeanDefinitionPropertyValueCodeGenerator {
return null; return null;
} }
protected CodeBlock generateCollectionCode(ResolvableType elementType, protected CodeBlock generateCollectionCode(ResolvableType elementType, T collection) {
T collection) {
return generateCollectionOf(collection, this.collectionType, elementType); return generateCollectionOf(collection, this.collectionType, elementType);
} }
@@ -315,7 +310,9 @@ class BeanDefinitionPropertyValueCodeGenerator {
Object element = iterator.next(); Object element = iterator.next();
builder.add("$L", BeanDefinitionPropertyValueCodeGenerator.this builder.add("$L", BeanDefinitionPropertyValueCodeGenerator.this
.generateCode(element, elementType)); .generateCode(element, elementType));
builder.add((!iterator.hasNext()) ? "" : ", "); if (iterator.hasNext()) {
builder.add(", ");
}
} }
builder.add(")"); builder.add(")");
return builder.build(); return builder.build();
@@ -382,7 +379,9 @@ class BeanDefinitionPropertyValueCodeGenerator {
.generateCode(entry.getKey(), keyType), .generateCode(entry.getKey(), keyType),
BeanDefinitionPropertyValueCodeGenerator.this BeanDefinitionPropertyValueCodeGenerator.this
.generateCode(entry.getValue(), valueType)); .generateCode(entry.getValue(), valueType));
builder.add((!iterator.hasNext()) ? "" : ", "); if (iterator.hasNext()) {
builder.add(", ");
}
} }
builder.add(")"); builder.add(")");
return builder.build(); return builder.build();
@@ -413,8 +412,7 @@ class BeanDefinitionPropertyValueCodeGenerator {
} }
@Override @Override
protected CodeBlock generateCollectionCode(ResolvableType elementType, protected CodeBlock generateCollectionCode(ResolvableType elementType, Set<?> set) {
Set<?> set) {
if (set instanceof LinkedHashSet) { if (set instanceof LinkedHashSet) {
return CodeBlock.of("new $T($L)", LinkedHashSet.class, return CodeBlock.of("new $T($L)", LinkedHashSet.class,
generateCollectionOf(set, List.class, elementType)); generateCollectionOf(set, List.class, elementType));
@@ -473,7 +471,9 @@ class BeanDefinitionPropertyValueCodeGenerator {
else { else {
builder.add("$T.entry($L,$L)", Map.class, keyCode, valueCode); builder.add("$T.entry($L,$L)", Map.class, keyCode, valueCode);
} }
builder.add((!iterator.hasNext()) ? "" : ", "); if (iterator.hasNext()) {
builder.add(", ");
}
} }
builder.add(")"); builder.add(")");
return builder.build(); return builder.build();
@@ -495,12 +495,11 @@ class BeanDefinitionPropertyValueCodeGenerator {
builder.returns(Map.class); builder.returns(Map.class);
builder.addStatement("$T map = new $T($L)", Map.class, builder.addStatement("$T map = new $T($L)", Map.class,
LinkedHashMap.class, map.size()); LinkedHashMap.class, map.size());
map.forEach( map.forEach((key, value) -> builder.addStatement("map.put($L, $L)",
(key, value) -> builder.addStatement("map.put($L, $L)", BeanDefinitionPropertyValueCodeGenerator.this
BeanDefinitionPropertyValueCodeGenerator.this .generateCode(key, keyType),
.generateCode(key, keyType), BeanDefinitionPropertyValueCodeGenerator.this
BeanDefinitionPropertyValueCodeGenerator.this .generateCode(value, valueType)));
.generateCode(value, valueType)));
builder.addStatement("return map"); builder.addStatement("return map");
}); });
return CodeBlock.of("$L()", method.getName()); return CodeBlock.of("$L()", method.getName());

View File

@@ -471,11 +471,8 @@ class BeanDefinitionPropertyValueCodeGeneratorTests {
@Test @Test
void generatedWhenBeanReference() { void generatedWhenBeanReference() {
BeanReference beanReference = new RuntimeBeanNameReference("test"); BeanReference beanReference = new RuntimeBeanNameReference("test");
compile(beanReference, compile(beanReference, (instance, compiler) ->
(instance, assertThat(((BeanReference) instance).getBeanName()).isEqualTo(beanReference.getBeanName()));
compiler) -> assertThat(
((BeanReference) instance).getBeanName())
.isEqualTo(beanReference.getBeanName()));
} }
} }