From 50d34366bcfb820a5d14d1887dd1668e33fa9e3b Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Wed, 14 Sep 2022 12:55:53 +0200 Subject: [PATCH] Polishing --- .../BeanDefinitionMethodGeneratorFactory.java | 3 +- ...nDefinitionPropertyValueCodeGenerator.java | 30 +++++-------------- .../DefaultBeanRegistrationCodeFragments.java | 25 +++++++--------- .../generate/DefaultGenerationContext.java | 5 ++-- .../aot/hint/ReflectionHints.java | 8 ++--- 5 files changed, 26 insertions(+), 45 deletions(-) diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/aot/BeanDefinitionMethodGeneratorFactory.java b/spring-beans/src/main/java/org/springframework/beans/factory/aot/BeanDefinitionMethodGeneratorFactory.java index c7258ae6cc..ba2e8dfcfc 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/aot/BeanDefinitionMethodGeneratorFactory.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/aot/BeanDefinitionMethodGeneratorFactory.java @@ -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 aotProcessors; diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/aot/BeanDefinitionPropertyValueCodeGenerator.java b/spring-beans/src/main/java/org/springframework/beans/factory/aot/BeanDefinitionPropertyValueCodeGenerator.java index ccd2f564ea..0ed8ce563f 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/aot/BeanDefinitionPropertyValueCodeGenerator.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/aot/BeanDefinitionPropertyValueCodeGenerator.java @@ -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 CodeBlock generateManagedMapCode(ResolvableType type, - ManagedMap managedMap) { + private CodeBlock generateManagedMapCode(ResolvableType type, ManagedMap 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(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 CodeBlock generateLinkedHashMapCode(Map 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; } - } } diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/aot/DefaultBeanRegistrationCodeFragments.java b/spring-beans/src/main/java/org/springframework/beans/factory/aot/DefaultBeanRegistrationCodeFragments.java index fa04f86211..9a92ecdd34 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/aot/DefaultBeanRegistrationCodeFragments.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/aot/DefaultBeanRegistrationCodeFragments.java @@ -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, diff --git a/spring-core/src/main/java/org/springframework/aot/generate/DefaultGenerationContext.java b/spring-core/src/main/java/org/springframework/aot/generate/DefaultGenerationContext.java index e087d0fef0..67af527436 100644 --- a/spring-core/src/main/java/org/springframework/aot/generate/DefaultGenerationContext.java +++ b/spring-core/src/main/java/org/springframework/aot/generate/DefaultGenerationContext.java @@ -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; diff --git a/spring-core/src/main/java/org/springframework/aot/hint/ReflectionHints.java b/spring-core/src/main/java/org/springframework/aot/hint/ReflectionHints.java index 49c61a2fcf..31d06b43eb 100644 --- a/spring-core/src/main/java/org/springframework/aot/hint/ReflectionHints.java +++ b/spring-core/src/main/java/org/springframework/aot/hint/ReflectionHints.java @@ -133,6 +133,7 @@ public class ReflectionHints { */ public ReflectionHints registerTypeIfPresent(@Nullable ClassLoader classLoader, String typeName, Consumer 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 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 methodHint) { return registerType(TypeReference.of(method.getDeclaringClass()), typeHint -> typeHint.withMethod(method.getName(), mapParameters(method), methodHint)); } private List 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()); } }