Polishing
This commit is contained in:
@@ -41,8 +41,7 @@ import org.springframework.util.ObjectUtils;
|
||||
*/
|
||||
class BeanDefinitionMethodGeneratorFactory {
|
||||
|
||||
private static final Log logger = LogFactory
|
||||
.getLog(BeanDefinitionMethodGeneratorFactory.class);
|
||||
private static final Log logger = LogFactory.getLog(BeanDefinitionMethodGeneratorFactory.class);
|
||||
|
||||
|
||||
private final AotServices<BeanRegistrationAotProcessor> aotProcessors;
|
||||
|
||||
@@ -83,8 +83,7 @@ class BeanDefinitionPropertyValueCodeGenerator {
|
||||
|
||||
|
||||
CodeBlock generateCode(@Nullable Object value) {
|
||||
ResolvableType type = (value != null) ? ResolvableType.forInstance(value)
|
||||
: ResolvableType.NONE;
|
||||
ResolvableType type = ResolvableType.forInstance(value);
|
||||
try {
|
||||
return generateCode(value, type);
|
||||
}
|
||||
@@ -205,7 +204,6 @@ class BeanDefinitionPropertyValueCodeGenerator {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -223,7 +221,6 @@ class BeanDefinitionPropertyValueCodeGenerator {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -240,7 +237,6 @@ class BeanDefinitionPropertyValueCodeGenerator {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -257,7 +253,6 @@ class BeanDefinitionPropertyValueCodeGenerator {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -281,7 +276,6 @@ class BeanDefinitionPropertyValueCodeGenerator {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -334,7 +328,6 @@ class BeanDefinitionPropertyValueCodeGenerator {
|
||||
code.add(")");
|
||||
return code.build();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -346,7 +339,6 @@ class BeanDefinitionPropertyValueCodeGenerator {
|
||||
public ManagedListDelegate() {
|
||||
super(ManagedList.class, CodeBlock.of("new $T()", ManagedList.class));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -358,7 +350,6 @@ class BeanDefinitionPropertyValueCodeGenerator {
|
||||
public ManagedSetDelegate() {
|
||||
super(ManagedSet.class, CodeBlock.of("new $T()", ManagedSet.class));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -367,8 +358,7 @@ class BeanDefinitionPropertyValueCodeGenerator {
|
||||
*/
|
||||
private class ManagedMapDelegate implements Delegate {
|
||||
|
||||
private static final CodeBlock EMPTY_RESULT = CodeBlock.of("$T.ofEntries()",
|
||||
ManagedMap.class);
|
||||
private static final CodeBlock EMPTY_RESULT = CodeBlock.of("$T.ofEntries()", ManagedMap.class);
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
@@ -379,8 +369,7 @@ class BeanDefinitionPropertyValueCodeGenerator {
|
||||
return null;
|
||||
}
|
||||
|
||||
private <K, V> CodeBlock generateManagedMapCode(ResolvableType type,
|
||||
ManagedMap<K, V> managedMap) {
|
||||
private <K, V> CodeBlock generateManagedMapCode(ResolvableType type, ManagedMap<K, V> managedMap) {
|
||||
if (managedMap.isEmpty()) {
|
||||
return EMPTY_RESULT;
|
||||
}
|
||||
@@ -403,7 +392,6 @@ class BeanDefinitionPropertyValueCodeGenerator {
|
||||
code.add(")");
|
||||
return code.build();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -415,7 +403,6 @@ class BeanDefinitionPropertyValueCodeGenerator {
|
||||
ListDelegate() {
|
||||
super(List.class, CodeBlock.of("$T.emptyList()", Collections.class));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -441,7 +428,6 @@ class BeanDefinitionPropertyValueCodeGenerator {
|
||||
private Set<?> orderForCodeConsistency(Set<?> set) {
|
||||
return new TreeSet<Object>(set);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -450,8 +436,7 @@ class BeanDefinitionPropertyValueCodeGenerator {
|
||||
*/
|
||||
private class MapDelegate implements Delegate {
|
||||
|
||||
private static final CodeBlock EMPTY_RESULT = CodeBlock.of("$T.emptyMap()",
|
||||
Collections.class);
|
||||
private static final CodeBlock EMPTY_RESULT = CodeBlock.of("$T.emptyMap()", Collections.class);
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
@@ -502,6 +487,7 @@ class BeanDefinitionPropertyValueCodeGenerator {
|
||||
|
||||
private <K, V> CodeBlock generateLinkedHashMapCode(Map<K, V> map,
|
||||
ResolvableType keyType, ResolvableType valueType) {
|
||||
|
||||
GeneratedMethods generatedMethods = BeanDefinitionPropertyValueCodeGenerator.this.generatedMethods;
|
||||
GeneratedMethod generatedMethod = generatedMethods.add("getMap", method -> {
|
||||
method.addAnnotation(AnnotationSpec
|
||||
@@ -520,7 +506,6 @@ class BeanDefinitionPropertyValueCodeGenerator {
|
||||
});
|
||||
return CodeBlock.of("$L()", generatedMethod.getName());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -532,8 +517,8 @@ class BeanDefinitionPropertyValueCodeGenerator {
|
||||
@Override
|
||||
@Nullable
|
||||
public CodeBlock generateCode(Object value, ResolvableType type) {
|
||||
if (value instanceof RuntimeBeanReference runtimeBeanReference
|
||||
&& runtimeBeanReference.getBeanType() != null) {
|
||||
if (value instanceof RuntimeBeanReference runtimeBeanReference &&
|
||||
runtimeBeanReference.getBeanType() != null) {
|
||||
return CodeBlock.of("new $T($T.class)", RuntimeBeanReference.class,
|
||||
runtimeBeanReference.getBeanType());
|
||||
}
|
||||
@@ -543,7 +528,6 @@ class BeanDefinitionPropertyValueCodeGenerator {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -73,19 +73,20 @@ class DefaultBeanRegistrationCodeFragments extends BeanRegistrationCodeFragments
|
||||
public Class<?> getTarget(RegisteredBean registeredBean,
|
||||
Executable constructorOrFactoryMethod) {
|
||||
|
||||
Class<?> target = extractDeclaringClass(registeredBean.getBeanType(),
|
||||
constructorOrFactoryMethod);
|
||||
Class<?> target = extractDeclaringClass(registeredBean.getBeanType(), constructorOrFactoryMethod);
|
||||
while (target.getName().startsWith("java.") && registeredBean.isInnerBean()) {
|
||||
target = registeredBean.getParent().getBeanClass();
|
||||
RegisteredBean parent = registeredBean.getParent();
|
||||
Assert.state(parent != null, "No parent available for inner bean");
|
||||
target = parent.getBeanClass();
|
||||
}
|
||||
return target;
|
||||
}
|
||||
|
||||
private Class<?> extractDeclaringClass(ResolvableType beanType, Executable executable) {
|
||||
Class<?> declaringClass = ClassUtils.getUserClass(executable.getDeclaringClass());
|
||||
if (executable instanceof Constructor<?>
|
||||
&& AccessVisibility.forMember(executable) == AccessVisibility.PUBLIC
|
||||
&& FactoryBean.class.isAssignableFrom(declaringClass)) {
|
||||
if (executable instanceof Constructor<?> &&
|
||||
AccessVisibility.forMember(executable) == AccessVisibility.PUBLIC &&
|
||||
FactoryBean.class.isAssignableFrom(declaringClass)) {
|
||||
return extractTargetClassFromFactoryBean(declaringClass, beanType);
|
||||
}
|
||||
return executable.getDeclaringClass();
|
||||
@@ -101,8 +102,7 @@ class DefaultBeanRegistrationCodeFragments extends BeanRegistrationCodeFragments
|
||||
* @return the target class to use
|
||||
*/
|
||||
private Class<?> extractTargetClassFromFactoryBean(Class<?> factoryBeanType, ResolvableType beanType) {
|
||||
ResolvableType target = ResolvableType.forType(factoryBeanType)
|
||||
.as(FactoryBean.class).getGeneric(0);
|
||||
ResolvableType target = ResolvableType.forType(factoryBeanType).as(FactoryBean.class).getGeneric(0);
|
||||
if (target.getType().equals(Class.class)) {
|
||||
return target.toClass();
|
||||
}
|
||||
@@ -155,8 +155,7 @@ class DefaultBeanRegistrationCodeFragments extends BeanRegistrationCodeFragments
|
||||
.getBeanDefinitionMethodGenerator(innerRegisteredBean, name);
|
||||
Assert.state(methodGenerator != null, "Unexpected filtering of inner-bean");
|
||||
MethodReference generatedMethod = methodGenerator
|
||||
.generateBeanDefinitionMethod(generationContext,
|
||||
this.beanRegistrationsCode);
|
||||
.generateBeanDefinitionMethod(generationContext, this.beanRegistrationsCode);
|
||||
return generatedMethod.toInvokeCodeBlock(ArgumentCodeGenerator.none());
|
||||
}
|
||||
return null;
|
||||
@@ -181,13 +180,11 @@ class DefaultBeanRegistrationCodeFragments extends BeanRegistrationCodeFragments
|
||||
|
||||
CodeBlock.Builder code = CodeBlock.builder();
|
||||
if (postProcessors.isEmpty()) {
|
||||
code.addStatement("$L.setInstanceSupplier($L)", BEAN_DEFINITION_VARIABLE,
|
||||
instanceSupplierCode);
|
||||
code.addStatement("$L.setInstanceSupplier($L)", BEAN_DEFINITION_VARIABLE, instanceSupplierCode);
|
||||
return code.build();
|
||||
}
|
||||
code.addStatement("$T $L = $L",
|
||||
ParameterizedTypeName.get(InstanceSupplier.class,
|
||||
this.registeredBean.getBeanClass()),
|
||||
ParameterizedTypeName.get(InstanceSupplier.class, this.registeredBean.getBeanClass()),
|
||||
INSTANCE_SUPPLIER_VARIABLE, instanceSupplierCode);
|
||||
for (MethodReference postProcessor : postProcessors) {
|
||||
code.addStatement("$L = $L.andThen($L)", INSTANCE_SUPPLIER_VARIABLE,
|
||||
|
||||
@@ -80,6 +80,7 @@ public class DefaultGenerationContext implements GenerationContext {
|
||||
*/
|
||||
DefaultGenerationContext(GeneratedClasses generatedClasses,
|
||||
GeneratedFiles generatedFiles, RuntimeHints runtimeHints) {
|
||||
|
||||
Assert.notNull(generatedClasses, "'generatedClasses' must not be null");
|
||||
Assert.notNull(generatedFiles, "'generatedFiles' must not be null");
|
||||
Assert.notNull(runtimeHints, "'runtimeHints' must not be null");
|
||||
@@ -90,8 +91,7 @@ public class DefaultGenerationContext implements GenerationContext {
|
||||
}
|
||||
|
||||
private DefaultGenerationContext(DefaultGenerationContext existing, String name) {
|
||||
int sequence = existing.sequenceGenerator
|
||||
.computeIfAbsent(name, key -> new AtomicInteger()).getAndIncrement();
|
||||
int sequence = existing.sequenceGenerator.computeIfAbsent(name, key -> new AtomicInteger()).getAndIncrement();
|
||||
String featureName = (sequence > 0 ? name + sequence : name);
|
||||
this.sequenceGenerator = existing.sequenceGenerator;
|
||||
this.generatedClasses = existing.generatedClasses.withFeatureNamePrefix(featureName);
|
||||
@@ -99,6 +99,7 @@ public class DefaultGenerationContext implements GenerationContext {
|
||||
this.runtimeHints = existing.runtimeHints;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public GeneratedClasses getGeneratedClasses() {
|
||||
return this.generatedClasses;
|
||||
|
||||
@@ -133,6 +133,7 @@ public class ReflectionHints {
|
||||
*/
|
||||
public ReflectionHints registerTypeIfPresent(@Nullable ClassLoader classLoader,
|
||||
String typeName, Consumer<TypeHint.Builder> typeHint) {
|
||||
|
||||
if (ClassUtils.isPresent(typeName, classLoader)) {
|
||||
registerType(TypeReference.of(typeName), typeHint);
|
||||
}
|
||||
@@ -149,6 +150,7 @@ public class ReflectionHints {
|
||||
*/
|
||||
public ReflectionHints registerTypeIfPresent(@Nullable ClassLoader classLoader,
|
||||
String typeName, MemberCategory... memberCategories) {
|
||||
|
||||
return registerTypeIfPresent(classLoader, typeName, TypeHint.builtWith(memberCategories));
|
||||
}
|
||||
|
||||
@@ -208,7 +210,6 @@ public class ReflectionHints {
|
||||
* @deprecated in favor of {@link #registerConstructor(Constructor, ExecutableMode)}
|
||||
*/
|
||||
@Deprecated
|
||||
@SuppressWarnings("deprecation")
|
||||
public ReflectionHints registerConstructor(Constructor<?> constructor, Consumer<ExecutableHint.Builder> constructorHint) {
|
||||
return registerType(TypeReference.of(constructor.getDeclaringClass()),
|
||||
typeHint -> typeHint.withConstructor(mapParameters(constructor), constructorHint));
|
||||
@@ -246,15 +247,14 @@ public class ReflectionHints {
|
||||
* @deprecated in favor of {@link #registerMethod(Method, ExecutableMode)}
|
||||
*/
|
||||
@Deprecated
|
||||
@SuppressWarnings("deprecation")
|
||||
|
||||
public ReflectionHints registerMethod(Method method, Consumer<ExecutableHint.Builder> methodHint) {
|
||||
return registerType(TypeReference.of(method.getDeclaringClass()),
|
||||
typeHint -> typeHint.withMethod(method.getName(), mapParameters(method), methodHint));
|
||||
}
|
||||
|
||||
private List<TypeReference> mapParameters(Executable executable) {
|
||||
return Arrays.stream(executable.getParameterTypes()).map(TypeReference::of)
|
||||
.collect(Collectors.toList());
|
||||
return Arrays.stream(executable.getParameterTypes()).map(TypeReference::of).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user