Polish
This commit is contained in:
@@ -943,13 +943,13 @@ public class AutowiredAnnotationBeanPostProcessor implements SmartInstantiationA
|
||||
}
|
||||
|
||||
private CodeBlock generateMethodCode(RuntimeHints hints) {
|
||||
CodeBlock.Builder builder = CodeBlock.builder();
|
||||
CodeBlock.Builder code = CodeBlock.builder();
|
||||
for (AutowiredElement autowiredElement : this.autowiredElements) {
|
||||
builder.addStatement(
|
||||
code.addStatement(
|
||||
generateMethodStatementForElement(autowiredElement, hints));
|
||||
}
|
||||
builder.addStatement("return $L", INSTANCE_PARAMETER);
|
||||
return builder.build();
|
||||
code.addStatement("return $L", INSTANCE_PARAMETER);
|
||||
return code.build();
|
||||
}
|
||||
|
||||
private CodeBlock generateMethodStatementForElement(
|
||||
@@ -987,20 +987,20 @@ public class AutowiredAnnotationBeanPostProcessor implements SmartInstantiationA
|
||||
private CodeBlock generateMethodStatementForMethod(Method method,
|
||||
boolean required, RuntimeHints hints) {
|
||||
|
||||
CodeBlock.Builder builder = CodeBlock.builder();
|
||||
builder.add("$T.$L", AutowiredMethodArgumentsResolver.class,
|
||||
CodeBlock.Builder code = CodeBlock.builder();
|
||||
code.add("$T.$L", AutowiredMethodArgumentsResolver.class,
|
||||
(!required) ? "forMethod" : "forRequiredMethod");
|
||||
builder.add("($S", method.getName());
|
||||
code.add("($S", method.getName());
|
||||
if (method.getParameterCount() > 0) {
|
||||
builder.add(", $L",
|
||||
code.add(", $L",
|
||||
generateParameterTypesCode(method.getParameterTypes()));
|
||||
}
|
||||
builder.add(")");
|
||||
code.add(")");
|
||||
AccessVisibility visibility = AccessVisibility.forMember(method);
|
||||
if (visibility == AccessVisibility.PRIVATE
|
||||
|| visibility == AccessVisibility.PROTECTED) {
|
||||
hints.reflection().registerMethod(method);
|
||||
builder.add(".resolveAndInvoke($L, $L)", REGISTERED_BEAN_PARAMETER,
|
||||
code.add(".resolveAndInvoke($L, $L)", REGISTERED_BEAN_PARAMETER,
|
||||
INSTANCE_PARAMETER);
|
||||
}
|
||||
else {
|
||||
@@ -1009,18 +1009,18 @@ public class AutowiredAnnotationBeanPostProcessor implements SmartInstantiationA
|
||||
method).generateCode(method.getParameterTypes());
|
||||
CodeBlock injectionCode = CodeBlock.of("args -> $L.$L($L)",
|
||||
INSTANCE_PARAMETER, method.getName(), arguments);
|
||||
builder.add(".resolve($L, $L)", REGISTERED_BEAN_PARAMETER, injectionCode);
|
||||
code.add(".resolve($L, $L)", REGISTERED_BEAN_PARAMETER, injectionCode);
|
||||
}
|
||||
return builder.build();
|
||||
return code.build();
|
||||
}
|
||||
|
||||
private CodeBlock generateParameterTypesCode(Class<?>[] parameterTypes) {
|
||||
CodeBlock.Builder builder = CodeBlock.builder();
|
||||
CodeBlock.Builder code = CodeBlock.builder();
|
||||
for (int i = 0; i < parameterTypes.length; i++) {
|
||||
builder.add(i != 0 ? ", " : "");
|
||||
builder.add("$T.class", parameterTypes[i]);
|
||||
code.add(i != 0 ? ", " : "");
|
||||
code.add("$T.class", parameterTypes[i]);
|
||||
}
|
||||
return builder.build();
|
||||
return code.build();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -69,18 +69,18 @@ public class AutowiredArgumentsCodeGenerator {
|
||||
Assert.notNull(parameterTypes, "'parameterTypes' must not be null");
|
||||
Assert.notNull(variableName, "'variableName' must not be null");
|
||||
boolean ambiguous = isAmbiguous();
|
||||
CodeBlock.Builder builder = CodeBlock.builder();
|
||||
CodeBlock.Builder code = CodeBlock.builder();
|
||||
for (int i = startIndex; i < parameterTypes.length; i++) {
|
||||
builder.add((i != startIndex) ? ", " : "");
|
||||
code.add((i != startIndex) ? ", " : "");
|
||||
if (!ambiguous) {
|
||||
builder.add("$L.get($L)", variableName, i - startIndex);
|
||||
code.add("$L.get($L)", variableName, i - startIndex);
|
||||
}
|
||||
else {
|
||||
builder.add("$L.get($L, $T.class)", variableName, i - startIndex,
|
||||
code.add("$L.get($L, $T.class)", variableName, i - startIndex,
|
||||
parameterTypes[i]);
|
||||
}
|
||||
}
|
||||
return builder.build();
|
||||
return code.build();
|
||||
}
|
||||
|
||||
private boolean isAmbiguous() {
|
||||
|
||||
@@ -109,32 +109,32 @@ class BeanDefinitionPropertiesCodeGenerator {
|
||||
|
||||
|
||||
CodeBlock generateCode(RootBeanDefinition beanDefinition) {
|
||||
CodeBlock.Builder builder = CodeBlock.builder();
|
||||
addStatementForValue(builder, beanDefinition, BeanDefinition::isPrimary,
|
||||
CodeBlock.Builder code = CodeBlock.builder();
|
||||
addStatementForValue(code, beanDefinition, BeanDefinition::isPrimary,
|
||||
"$L.setPrimary($L)");
|
||||
addStatementForValue(builder, beanDefinition, BeanDefinition::getScope,
|
||||
addStatementForValue(code, beanDefinition, BeanDefinition::getScope,
|
||||
this::hasScope, "$L.setScope($S)");
|
||||
addStatementForValue(builder, beanDefinition, BeanDefinition::getDependsOn,
|
||||
addStatementForValue(code, beanDefinition, BeanDefinition::getDependsOn,
|
||||
this::hasDependsOn, "$L.setDependsOn($L)", this::toStringVarArgs);
|
||||
addStatementForValue(builder, beanDefinition, BeanDefinition::isAutowireCandidate,
|
||||
addStatementForValue(code, beanDefinition, BeanDefinition::isAutowireCandidate,
|
||||
"$L.setAutowireCandidate($L)");
|
||||
addStatementForValue(builder, beanDefinition, BeanDefinition::getRole,
|
||||
addStatementForValue(code, beanDefinition, BeanDefinition::getRole,
|
||||
this::hasRole, "$L.setRole($L)", this::toRole);
|
||||
addStatementForValue(builder, beanDefinition, AbstractBeanDefinition::getLazyInit,
|
||||
addStatementForValue(code, beanDefinition, AbstractBeanDefinition::getLazyInit,
|
||||
"$L.setLazyInit($L)");
|
||||
addStatementForValue(builder, beanDefinition, AbstractBeanDefinition::isSynthetic,
|
||||
addStatementForValue(code, beanDefinition, AbstractBeanDefinition::isSynthetic,
|
||||
"$L.setSynthetic($L)");
|
||||
addInitDestroyMethods(builder, beanDefinition, beanDefinition.getInitMethodNames(),
|
||||
addInitDestroyMethods(code, beanDefinition, beanDefinition.getInitMethodNames(),
|
||||
"$L.setInitMethodNames($L)");
|
||||
addInitDestroyMethods(builder, beanDefinition, beanDefinition.getDestroyMethodNames(),
|
||||
addInitDestroyMethods(code, beanDefinition, beanDefinition.getDestroyMethodNames(),
|
||||
"$L.setDestroyMethodNames($L)");
|
||||
addConstructorArgumentValues(builder, beanDefinition);
|
||||
addPropertyValues(builder, beanDefinition);
|
||||
addAttributes(builder, beanDefinition);
|
||||
return builder.build();
|
||||
addConstructorArgumentValues(code, beanDefinition);
|
||||
addPropertyValues(code, beanDefinition);
|
||||
addAttributes(code, beanDefinition);
|
||||
return code.build();
|
||||
}
|
||||
|
||||
private void addInitDestroyMethods(Builder builder,
|
||||
private void addInitDestroyMethods(Builder code,
|
||||
AbstractBeanDefinition beanDefinition, @Nullable String[] methodNames, String format) {
|
||||
if (!ObjectUtils.isEmpty(methodNames)) {
|
||||
Class<?> beanType = ClassUtils.getUserClass(beanDefinition.getResolvableType().toClass());
|
||||
@@ -142,7 +142,7 @@ class BeanDefinitionPropertiesCodeGenerator {
|
||||
CodeBlock arguments = Arrays.stream(methodNames)
|
||||
.map(name -> CodeBlock.of("$S", name))
|
||||
.collect(CodeBlock.joining(", "));
|
||||
builder.addStatement(format, BEAN_DEFINITION_VARIABLE, arguments);
|
||||
code.addStatement(format, BEAN_DEFINITION_VARIABLE, arguments);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -153,7 +153,7 @@ class BeanDefinitionPropertiesCodeGenerator {
|
||||
}
|
||||
}
|
||||
|
||||
private void addConstructorArgumentValues(CodeBlock.Builder builder,
|
||||
private void addConstructorArgumentValues(CodeBlock.Builder code,
|
||||
BeanDefinition beanDefinition) {
|
||||
|
||||
Map<Integer, ValueHolder> argumentValues = beanDefinition
|
||||
@@ -162,18 +162,18 @@ class BeanDefinitionPropertiesCodeGenerator {
|
||||
argumentValues.forEach((index, valueHolder) -> {
|
||||
String name = valueHolder.getName();
|
||||
Object value = valueHolder.getValue();
|
||||
CodeBlock code = this.customValueCodeGenerator.apply(name, value);
|
||||
if (code == null) {
|
||||
code = this.valueCodeGenerator.generateCode(value);
|
||||
CodeBlock valueCode = this.customValueCodeGenerator.apply(name, value);
|
||||
if (valueCode == null) {
|
||||
valueCode = this.valueCodeGenerator.generateCode(value);
|
||||
}
|
||||
builder.addStatement(
|
||||
code.addStatement(
|
||||
"$L.getConstructorArgumentValues().addIndexedArgumentValue($L, $L)",
|
||||
BEAN_DEFINITION_VARIABLE, index, code);
|
||||
BEAN_DEFINITION_VARIABLE, index, valueCode);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private void addPropertyValues(CodeBlock.Builder builder,
|
||||
private void addPropertyValues(CodeBlock.Builder code,
|
||||
RootBeanDefinition beanDefinition) {
|
||||
|
||||
MutablePropertyValues propertyValues = beanDefinition.getPropertyValues();
|
||||
@@ -181,12 +181,12 @@ class BeanDefinitionPropertiesCodeGenerator {
|
||||
for (PropertyValue propertyValue : propertyValues) {
|
||||
String name = propertyValue.getName();
|
||||
Object value = propertyValue.getValue();
|
||||
CodeBlock code = this.customValueCodeGenerator.apply(name, value);
|
||||
if (code == null) {
|
||||
code = this.valueCodeGenerator.generateCode(value);
|
||||
CodeBlock valueCode = this.customValueCodeGenerator.apply(name, value);
|
||||
if (valueCode == null) {
|
||||
valueCode = this.valueCodeGenerator.generateCode(value);
|
||||
}
|
||||
builder.addStatement("$L.getPropertyValues().addPropertyValue($S, $L)",
|
||||
BEAN_DEFINITION_VARIABLE, propertyValue.getName(), code);
|
||||
code.addStatement("$L.getPropertyValues().addPropertyValue($S, $L)",
|
||||
BEAN_DEFINITION_VARIABLE, propertyValue.getName(), valueCode);
|
||||
}
|
||||
Class<?> infrastructureType = getInfrastructureType(beanDefinition);
|
||||
BeanInfo beanInfo = (infrastructureType != Object.class) ? getBeanInfo(infrastructureType) : null;
|
||||
@@ -235,14 +235,14 @@ class BeanDefinitionPropertiesCodeGenerator {
|
||||
return Collections.unmodifiableMap(writeMethods);
|
||||
}
|
||||
|
||||
private void addAttributes(CodeBlock.Builder builder, BeanDefinition beanDefinition) {
|
||||
private void addAttributes(CodeBlock.Builder code, BeanDefinition beanDefinition) {
|
||||
String[] attributeNames = beanDefinition.attributeNames();
|
||||
if (!ObjectUtils.isEmpty(attributeNames)) {
|
||||
for (String attributeName : attributeNames) {
|
||||
if (this.attributeFilter.test(attributeName)) {
|
||||
CodeBlock value = this.valueCodeGenerator
|
||||
.generateCode(beanDefinition.getAttribute(attributeName));
|
||||
builder.addStatement("$L.setAttribute($S, $L)",
|
||||
code.addStatement("$L.setAttribute($S, $L)",
|
||||
BEAN_DEFINITION_VARIABLE, attributeName, value);
|
||||
}
|
||||
}
|
||||
@@ -278,32 +278,32 @@ class BeanDefinitionPropertiesCodeGenerator {
|
||||
}
|
||||
|
||||
private <B extends BeanDefinition, T> void addStatementForValue(
|
||||
CodeBlock.Builder builder, BeanDefinition beanDefinition,
|
||||
CodeBlock.Builder code, BeanDefinition beanDefinition,
|
||||
Function<B, T> getter, String format) {
|
||||
|
||||
addStatementForValue(builder, beanDefinition, getter,
|
||||
addStatementForValue(code, beanDefinition, getter,
|
||||
(defaultValue, actualValue) -> !Objects.equals(defaultValue, actualValue),
|
||||
format);
|
||||
}
|
||||
|
||||
private <B extends BeanDefinition, T> void addStatementForValue(
|
||||
CodeBlock.Builder builder, BeanDefinition beanDefinition,
|
||||
CodeBlock.Builder code, BeanDefinition beanDefinition,
|
||||
Function<B, T> getter, BiPredicate<T, T> filter, String format) {
|
||||
|
||||
addStatementForValue(builder, beanDefinition, getter, filter, format,
|
||||
addStatementForValue(code, beanDefinition, getter, filter, format,
|
||||
actualValue -> actualValue);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private <B extends BeanDefinition, T> void addStatementForValue(
|
||||
CodeBlock.Builder builder, BeanDefinition beanDefinition,
|
||||
CodeBlock.Builder code, BeanDefinition beanDefinition,
|
||||
Function<B, T> getter, BiPredicate<T, T> filter, String format,
|
||||
Function<T, Object> formatter) {
|
||||
|
||||
T defaultValue = getter.apply((B) DEFAULT_BEAN_DEFINITION);
|
||||
T actualValue = getter.apply((B) beanDefinition);
|
||||
if (filter.test(defaultValue, actualValue)) {
|
||||
builder.addStatement(format, BEAN_DEFINITION_VARIABLE,
|
||||
code.addStatement(format, BEAN_DEFINITION_VARIABLE,
|
||||
formatter.apply(actualValue));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -251,11 +251,11 @@ class BeanDefinitionPropertyValueCodeGenerator {
|
||||
ResolvableType componentType = type.getComponentType();
|
||||
Stream<CodeBlock> elements = Arrays.stream(ObjectUtils.toObjectArray(value)).map(component ->
|
||||
BeanDefinitionPropertyValueCodeGenerator.this.generateCode(component, componentType));
|
||||
CodeBlock.Builder builder = CodeBlock.builder();
|
||||
builder.add("new $T {", type.toClass());
|
||||
builder.add(elements.collect(CodeBlock.joining(", ")));
|
||||
builder.add("}");
|
||||
return builder.build();
|
||||
CodeBlock.Builder code = CodeBlock.builder();
|
||||
code.add("new $T {", type.toClass());
|
||||
code.add(elements.collect(CodeBlock.joining(", ")));
|
||||
code.add("}");
|
||||
return code.build();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@@ -298,19 +298,19 @@ class BeanDefinitionPropertyValueCodeGenerator {
|
||||
|
||||
protected final CodeBlock generateCollectionOf(Collection<?> collection,
|
||||
Class<?> collectionType, ResolvableType elementType) {
|
||||
Builder builder = CodeBlock.builder();
|
||||
builder.add("$T.of(", collectionType);
|
||||
Builder code = CodeBlock.builder();
|
||||
code.add("$T.of(", collectionType);
|
||||
Iterator<?> iterator = collection.iterator();
|
||||
while (iterator.hasNext()) {
|
||||
Object element = iterator.next();
|
||||
builder.add("$L", BeanDefinitionPropertyValueCodeGenerator.this
|
||||
code.add("$L", BeanDefinitionPropertyValueCodeGenerator.this
|
||||
.generateCode(element, elementType));
|
||||
if (iterator.hasNext()) {
|
||||
builder.add(", ");
|
||||
code.add(", ");
|
||||
}
|
||||
}
|
||||
builder.add(")");
|
||||
return builder.build();
|
||||
code.add(")");
|
||||
return code.build();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -364,22 +364,22 @@ class BeanDefinitionPropertyValueCodeGenerator {
|
||||
}
|
||||
ResolvableType keyType = type.as(Map.class).getGeneric(0);
|
||||
ResolvableType valueType = type.as(Map.class).getGeneric(1);
|
||||
CodeBlock.Builder builder = CodeBlock.builder();
|
||||
builder.add("$T.ofEntries(", ManagedMap.class);
|
||||
CodeBlock.Builder code = CodeBlock.builder();
|
||||
code.add("$T.ofEntries(", ManagedMap.class);
|
||||
Iterator<Map.Entry<K, V>> iterator = managedMap.entrySet().iterator();
|
||||
while (iterator.hasNext()) {
|
||||
Entry<?, ?> entry = iterator.next();
|
||||
builder.add("$T.entry($L,$L)", Map.class,
|
||||
code.add("$T.entry($L,$L)", Map.class,
|
||||
BeanDefinitionPropertyValueCodeGenerator.this
|
||||
.generateCode(entry.getKey(), keyType),
|
||||
BeanDefinitionPropertyValueCodeGenerator.this
|
||||
.generateCode(entry.getValue(), valueType));
|
||||
if (iterator.hasNext()) {
|
||||
builder.add(", ");
|
||||
code.add(", ");
|
||||
}
|
||||
}
|
||||
builder.add(")");
|
||||
return builder.build();
|
||||
code.add(")");
|
||||
return code.build();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -451,8 +451,8 @@ class BeanDefinitionPropertyValueCodeGenerator {
|
||||
}
|
||||
map = orderForCodeConsistency(map);
|
||||
boolean useOfEntries = map.size() > 10;
|
||||
CodeBlock.Builder builder = CodeBlock.builder();
|
||||
builder.add("$T" + ((!useOfEntries) ? ".of(" : ".ofEntries("), Map.class);
|
||||
CodeBlock.Builder code = CodeBlock.builder();
|
||||
code.add("$T" + ((!useOfEntries) ? ".of(" : ".ofEntries("), Map.class);
|
||||
Iterator<Map.Entry<K, V>> iterator = map.entrySet().iterator();
|
||||
while (iterator.hasNext()) {
|
||||
Entry<K, V> entry = iterator.next();
|
||||
@@ -461,17 +461,17 @@ class BeanDefinitionPropertyValueCodeGenerator {
|
||||
CodeBlock valueCode = BeanDefinitionPropertyValueCodeGenerator.this
|
||||
.generateCode(entry.getValue(), valueType);
|
||||
if (!useOfEntries) {
|
||||
builder.add("$L, $L", keyCode, valueCode);
|
||||
code.add("$L, $L", keyCode, valueCode);
|
||||
}
|
||||
else {
|
||||
builder.add("$T.entry($L,$L)", Map.class, keyCode, valueCode);
|
||||
code.add("$T.entry($L,$L)", Map.class, keyCode, valueCode);
|
||||
}
|
||||
if (iterator.hasNext()) {
|
||||
builder.add(", ");
|
||||
code.add(", ");
|
||||
}
|
||||
}
|
||||
builder.add(")");
|
||||
return builder.build();
|
||||
code.add(")");
|
||||
return code.build();
|
||||
}
|
||||
|
||||
private <K, V> Map<K, V> orderForCodeConsistency(Map<K, V> map) {
|
||||
|
||||
@@ -80,19 +80,19 @@ class BeanRegistrationCodeGenerator implements BeanRegistrationCode {
|
||||
}
|
||||
|
||||
CodeBlock generateCode(GenerationContext generationContext) {
|
||||
CodeBlock.Builder builder = CodeBlock.builder();
|
||||
builder.add(this.codeFragments.generateNewBeanDefinitionCode(generationContext,
|
||||
CodeBlock.Builder code = CodeBlock.builder();
|
||||
code.add(this.codeFragments.generateNewBeanDefinitionCode(generationContext,
|
||||
this.registeredBean.getBeanType(), this));
|
||||
builder.add(this.codeFragments.generateSetBeanDefinitionPropertiesCode(
|
||||
code.add(this.codeFragments.generateSetBeanDefinitionPropertiesCode(
|
||||
generationContext, this, this.registeredBean.getMergedBeanDefinition(),
|
||||
REJECT_ALL_ATTRIBUTES_FILTER));
|
||||
CodeBlock instanceSupplierCode = this.codeFragments.generateInstanceSupplierCode(
|
||||
generationContext, this, this.constructorOrFactoryMethod,
|
||||
this.instancePostProcessors.isEmpty());
|
||||
builder.add(this.codeFragments.generateSetBeanInstanceSupplierCode(generationContext,
|
||||
code.add(this.codeFragments.generateSetBeanInstanceSupplierCode(generationContext,
|
||||
this, instanceSupplierCode, this.instancePostProcessors));
|
||||
builder.add(this.codeFragments.generateReturnCode(generationContext, this));
|
||||
return builder.build();
|
||||
code.add(this.codeFragments.generateReturnCode(generationContext, this));
|
||||
return code.build();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -115,11 +115,11 @@ class DefaultBeanRegistrationCodeFragments extends BeanRegistrationCodeFragments
|
||||
public CodeBlock generateNewBeanDefinitionCode(GenerationContext generationContext,
|
||||
ResolvableType beanType, BeanRegistrationCode beanRegistrationCode) {
|
||||
|
||||
CodeBlock.Builder builder = CodeBlock.builder();
|
||||
builder.addStatement(generateBeanTypeCode(beanType));
|
||||
builder.addStatement("$T $L = new $T($L)", RootBeanDefinition.class,
|
||||
CodeBlock.Builder code = CodeBlock.builder();
|
||||
code.addStatement(generateBeanTypeCode(beanType));
|
||||
code.addStatement("$T $L = new $T($L)", RootBeanDefinition.class,
|
||||
BEAN_DEFINITION_VARIABLE, RootBeanDefinition.class, BEAN_TYPE_VARIABLE);
|
||||
return builder.build();
|
||||
return code.build();
|
||||
}
|
||||
|
||||
private CodeBlock generateBeanTypeCode(ResolvableType beanType) {
|
||||
@@ -178,23 +178,23 @@ class DefaultBeanRegistrationCodeFragments extends BeanRegistrationCodeFragments
|
||||
BeanRegistrationCode beanRegistrationCode, CodeBlock instanceSupplierCode,
|
||||
List<MethodReference> postProcessors) {
|
||||
|
||||
CodeBlock.Builder builder = CodeBlock.builder();
|
||||
CodeBlock.Builder code = CodeBlock.builder();
|
||||
if (postProcessors.isEmpty()) {
|
||||
builder.addStatement("$L.setInstanceSupplier($L)", BEAN_DEFINITION_VARIABLE,
|
||||
code.addStatement("$L.setInstanceSupplier($L)", BEAN_DEFINITION_VARIABLE,
|
||||
instanceSupplierCode);
|
||||
return builder.build();
|
||||
return code.build();
|
||||
}
|
||||
builder.addStatement("$T $L = $L",
|
||||
code.addStatement("$T $L = $L",
|
||||
ParameterizedTypeName.get(InstanceSupplier.class,
|
||||
this.registeredBean.getBeanClass()),
|
||||
INSTANCE_SUPPLIER_VARIABLE, instanceSupplierCode);
|
||||
for (MethodReference postProcessor : postProcessors) {
|
||||
builder.addStatement("$L = $L.andThen($L)", INSTANCE_SUPPLIER_VARIABLE,
|
||||
code.addStatement("$L = $L.andThen($L)", INSTANCE_SUPPLIER_VARIABLE,
|
||||
INSTANCE_SUPPLIER_VARIABLE, postProcessor.toCodeBlock());
|
||||
}
|
||||
builder.addStatement("$L.setInstanceSupplier($L)", BEAN_DEFINITION_VARIABLE,
|
||||
code.addStatement("$L.setInstanceSupplier($L)", BEAN_DEFINITION_VARIABLE,
|
||||
INSTANCE_SUPPLIER_VARIABLE);
|
||||
return builder.build();
|
||||
return code.build();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -212,9 +212,9 @@ class DefaultBeanRegistrationCodeFragments extends BeanRegistrationCodeFragments
|
||||
public CodeBlock generateReturnCode(GenerationContext generationContext,
|
||||
BeanRegistrationCode beanRegistrationCode) {
|
||||
|
||||
CodeBlock.Builder builder = CodeBlock.builder();
|
||||
builder.addStatement("return $L", BEAN_DEFINITION_VARIABLE);
|
||||
return builder.build();
|
||||
CodeBlock.Builder code = CodeBlock.builder();
|
||||
code.addStatement("return $L", BEAN_DEFINITION_VARIABLE);
|
||||
return code.build();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -57,13 +57,13 @@ final class ResolvableTypeCodeGenerator {
|
||||
private static CodeBlock generateCodeWithGenerics(ResolvableType target, Class<?> type) {
|
||||
ResolvableType[] generics = target.getGenerics();
|
||||
boolean hasNoNestedGenerics = Arrays.stream(generics).noneMatch(ResolvableType::hasGenerics);
|
||||
CodeBlock.Builder builder = CodeBlock.builder();
|
||||
builder.add("$T.forClassWithGenerics($T.class", ResolvableType.class, type);
|
||||
CodeBlock.Builder code = CodeBlock.builder();
|
||||
code.add("$T.forClassWithGenerics($T.class", ResolvableType.class, type);
|
||||
for (ResolvableType generic : generics) {
|
||||
builder.add(", $L", generateCode(generic, hasNoNestedGenerics));
|
||||
code.add(", $L", generateCode(generic, hasNoNestedGenerics));
|
||||
}
|
||||
builder.add(")");
|
||||
return builder.build();
|
||||
code.add(")");
|
||||
return code.build();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -219,10 +219,10 @@ class BeanDefinitionMethodGeneratorTests {
|
||||
GenerationContext generationContext,
|
||||
ResolvableType beanType,
|
||||
BeanRegistrationCode beanRegistrationCode) {
|
||||
CodeBlock.Builder builder = CodeBlock.builder();
|
||||
builder.addStatement("// I am custom");
|
||||
builder.add(super.generateNewBeanDefinitionCode(generationContext, beanType, beanRegistrationCode));
|
||||
return builder.build();
|
||||
CodeBlock.Builder code = CodeBlock.builder();
|
||||
code.addStatement("// I am custom");
|
||||
code.add(super.generateNewBeanDefinitionCode(generationContext, beanType, beanRegistrationCode));
|
||||
return code.build();
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
@@ -551,20 +551,20 @@ public class ConfigurationClassPostProcessor implements BeanDefinitionRegistryPo
|
||||
}
|
||||
|
||||
private CodeBlock generateAddPostProcessorCode(Map<String, String> mappings) {
|
||||
CodeBlock.Builder builder = CodeBlock.builder();
|
||||
builder.addStatement("$T $L = new $T<>()", STRING_STRING_MAP,
|
||||
CodeBlock.Builder code = CodeBlock.builder();
|
||||
code.addStatement("$T $L = new $T<>()", STRING_STRING_MAP,
|
||||
MAPPINGS_VARIABLE, HashMap.class);
|
||||
mappings.forEach((type, from) -> builder.addStatement("$L.put($S, $S)",
|
||||
mappings.forEach((type, from) -> code.addStatement("$L.put($S, $S)",
|
||||
MAPPINGS_VARIABLE, type, from));
|
||||
builder.addStatement("$T $L = new $T($T.class)", RootBeanDefinition.class,
|
||||
code.addStatement("$T $L = new $T($T.class)", RootBeanDefinition.class,
|
||||
BEAN_DEFINITION_VARIABLE, RootBeanDefinition.class, ImportAwareAotBeanPostProcessor.class);
|
||||
builder.addStatement("$L.setRole($T.ROLE_INFRASTRUCTURE)",
|
||||
code.addStatement("$L.setRole($T.ROLE_INFRASTRUCTURE)",
|
||||
BEAN_DEFINITION_VARIABLE, BeanDefinition.class);
|
||||
builder.addStatement("$L.setInstanceSupplier(() -> new $T($L))",
|
||||
code.addStatement("$L.setInstanceSupplier(() -> new $T($L))",
|
||||
BEAN_DEFINITION_VARIABLE, ImportAwareAotBeanPostProcessor.class, MAPPINGS_VARIABLE);
|
||||
builder.addStatement("$L.registerBeanDefinition($S, $L)",
|
||||
code.addStatement("$L.registerBeanDefinition($S, $L)",
|
||||
BEAN_FACTORY_VARIABLE, BEAN_NAME, BEAN_DEFINITION_VARIABLE);
|
||||
return builder.build();
|
||||
return code.build();
|
||||
}
|
||||
|
||||
private Map<String, String> buildImportAwareMappings() {
|
||||
|
||||
@@ -80,18 +80,18 @@ class ApplicationContextInitializationCodeGenerator implements BeanFactoryInitia
|
||||
}
|
||||
|
||||
private CodeBlock generateInitializeCode() {
|
||||
CodeBlock.Builder builder = CodeBlock.builder();
|
||||
builder.addStatement("$T $L = $L.getDefaultListableBeanFactory()",
|
||||
CodeBlock.Builder code = CodeBlock.builder();
|
||||
code.addStatement("$T $L = $L.getDefaultListableBeanFactory()",
|
||||
DefaultListableBeanFactory.class, BEAN_FACTORY_VARIABLE,
|
||||
APPLICATION_CONTEXT_VARIABLE);
|
||||
builder.addStatement("$L.setAutowireCandidateResolver(new $T())",
|
||||
code.addStatement("$L.setAutowireCandidateResolver(new $T())",
|
||||
BEAN_FACTORY_VARIABLE, ContextAnnotationAutowireCandidateResolver.class);
|
||||
builder.addStatement("$L.setDependencyComparator($T.INSTANCE)",
|
||||
code.addStatement("$L.setDependencyComparator($T.INSTANCE)",
|
||||
BEAN_FACTORY_VARIABLE, AnnotationAwareOrderComparator.class);
|
||||
for (MethodReference initializer : this.initializers) {
|
||||
builder.addStatement(initializer.toInvokeCodeBlock(CodeBlock.of(BEAN_FACTORY_VARIABLE)));
|
||||
code.addStatement(initializer.toInvokeCodeBlock(CodeBlock.of(BEAN_FACTORY_VARIABLE)));
|
||||
}
|
||||
return builder.build();
|
||||
return code.build();
|
||||
}
|
||||
|
||||
GeneratedClass getGeneratedClass() {
|
||||
|
||||
@@ -187,16 +187,16 @@ public final class MethodReference {
|
||||
private CodeBlock toInvokeCodeBlockForInstance(@Nullable String instanceVariable,
|
||||
CodeBlock[] arguments) {
|
||||
|
||||
CodeBlock.Builder builder = CodeBlock.builder();
|
||||
CodeBlock.Builder code = CodeBlock.builder();
|
||||
if (instanceVariable != null) {
|
||||
builder.add("$L.", instanceVariable);
|
||||
code.add("$L.", instanceVariable);
|
||||
}
|
||||
else if (this.declaringClass != null) {
|
||||
builder.add("new $T().", this.declaringClass);
|
||||
code.add("new $T().", this.declaringClass);
|
||||
}
|
||||
builder.add("$L", this.methodName);
|
||||
addArguments(builder, arguments);
|
||||
return builder.build();
|
||||
code.add("$L", this.methodName);
|
||||
addArguments(code, arguments);
|
||||
return code.build();
|
||||
}
|
||||
|
||||
private CodeBlock toInvokeCodeBlockForStatic(@Nullable String instanceVariable,
|
||||
@@ -204,21 +204,21 @@ public final class MethodReference {
|
||||
|
||||
Assert.isTrue(instanceVariable == null,
|
||||
"'instanceVariable' must be null for static method references");
|
||||
CodeBlock.Builder builder = CodeBlock.builder();
|
||||
builder.add("$T.$L", this.declaringClass, this.methodName);
|
||||
addArguments(builder, arguments);
|
||||
return builder.build();
|
||||
CodeBlock.Builder code = CodeBlock.builder();
|
||||
code.add("$T.$L", this.declaringClass, this.methodName);
|
||||
addArguments(code, arguments);
|
||||
return code.build();
|
||||
}
|
||||
|
||||
private void addArguments(CodeBlock.Builder builder, CodeBlock[] arguments) {
|
||||
builder.add("(");
|
||||
private void addArguments(CodeBlock.Builder code, CodeBlock[] arguments) {
|
||||
code.add("(");
|
||||
for (int i = 0; i < arguments.length; i++) {
|
||||
if (i != 0) {
|
||||
builder.add(", ");
|
||||
code.add(", ");
|
||||
}
|
||||
builder.add(arguments[i]);
|
||||
code.add(arguments[i]);
|
||||
}
|
||||
builder.add(")");
|
||||
code.add(")");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -70,22 +70,22 @@ class InjectionCodeGenerator {
|
||||
private CodeBlock generateFieldInjectionCode(Field field, String instanceVariable,
|
||||
CodeBlock resourceToInject) {
|
||||
|
||||
CodeBlock.Builder builder = CodeBlock.builder();
|
||||
CodeBlock.Builder code = CodeBlock.builder();
|
||||
AccessVisibility visibility = AccessVisibility.forMember(field);
|
||||
if (visibility == AccessVisibility.PRIVATE
|
||||
|| visibility == AccessVisibility.PROTECTED) {
|
||||
this.hints.reflection().registerField(field);
|
||||
builder.addStatement("$T field = $T.findField($T.class, $S)", Field.class,
|
||||
code.addStatement("$T field = $T.findField($T.class, $S)", Field.class,
|
||||
ReflectionUtils.class, field.getDeclaringClass(), field.getName());
|
||||
builder.addStatement("$T.makeAccessible($L)", ReflectionUtils.class, "field");
|
||||
builder.addStatement("$T.setField($L, $L, $L)", ReflectionUtils.class,
|
||||
code.addStatement("$T.makeAccessible($L)", ReflectionUtils.class, "field");
|
||||
code.addStatement("$T.setField($L, $L, $L)", ReflectionUtils.class,
|
||||
"field", instanceVariable, resourceToInject);
|
||||
}
|
||||
else {
|
||||
builder.addStatement("$L.$L = $L", instanceVariable, field.getName(),
|
||||
code.addStatement("$L.$L = $L", instanceVariable, field.getName(),
|
||||
resourceToInject);
|
||||
}
|
||||
return builder.build();
|
||||
return code.build();
|
||||
}
|
||||
|
||||
private CodeBlock generateMethodInjectionCode(Method method, String instanceVariable,
|
||||
@@ -93,24 +93,24 @@ class InjectionCodeGenerator {
|
||||
|
||||
Assert.isTrue(method.getParameterCount() == 1,
|
||||
"Method '" + method.getName() + "' must declare a single parameter");
|
||||
CodeBlock.Builder builder = CodeBlock.builder();
|
||||
CodeBlock.Builder code = CodeBlock.builder();
|
||||
AccessVisibility visibility = AccessVisibility.forMember(method);
|
||||
if (visibility == AccessVisibility.PRIVATE
|
||||
|| visibility == AccessVisibility.PROTECTED) {
|
||||
this.hints.reflection().registerMethod(method);
|
||||
builder.addStatement("$T method = $T.findMethod($T.class, $S, $T.class)",
|
||||
code.addStatement("$T method = $T.findMethod($T.class, $S, $T.class)",
|
||||
Method.class, ReflectionUtils.class, method.getDeclaringClass(),
|
||||
method.getName(), method.getParameterTypes()[0]);
|
||||
builder.addStatement("$T.makeAccessible($L)", ReflectionUtils.class,
|
||||
code.addStatement("$T.makeAccessible($L)", ReflectionUtils.class,
|
||||
"method");
|
||||
builder.addStatement("$T.invokeMethod($L, $L, $L)", ReflectionUtils.class,
|
||||
code.addStatement("$T.invokeMethod($L, $L, $L)", ReflectionUtils.class,
|
||||
"method", instanceVariable, resourceToInject);
|
||||
}
|
||||
else {
|
||||
builder.addStatement("$L.$L($L)", instanceVariable, method.getName(),
|
||||
code.addStatement("$L.$L($L)", instanceVariable, method.getName(),
|
||||
resourceToInject);
|
||||
}
|
||||
return builder.build();
|
||||
return code.build();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user