Skip to content

Commit 3ae1b9b

Browse files
committed
Polish CodeBlock joining logic
Consistently use `CodeBlock.joining(", ")` when generating code.
1 parent 4560313 commit 3ae1b9b

File tree

2 files changed

+22
-29
lines changed

2 files changed

+22
-29
lines changed

spring-beans/src/main/java/org/springframework/beans/factory/aot/BeanDefinitionPropertiesCodeGenerator.java

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -140,22 +140,23 @@ CodeBlock generateCode(BeanDefinition beanDefinition) {
140140

141141
private void addInitDestroyMethods(Builder builder,
142142
AbstractBeanDefinition beanDefinition, @Nullable String[] methodNames, String format) {
143-
144-
if (!ObjectUtils.isEmpty(methodNames)) {
145-
Class<?> beanType = ClassUtils
146-
.getUserClass(beanDefinition.getResolvableType().toClass());
147-
List<String> filteredMethodNames = Arrays.stream(methodNames)
148-
.filter(candidate -> !AbstractBeanDefinition.INFER_METHOD.equals(candidate))
149-
.toList();
150-
if (!ObjectUtils.isEmpty(filteredMethodNames)) {
151-
filteredMethodNames.forEach(methodName -> addInitDestroyHint(beanType, methodName));
152-
CodeBlock arguments = CodeBlock.join(filteredMethodNames.stream()
153-
.map(name -> CodeBlock.of("$S", name)).toList(), ", ");
154-
builder.addStatement(format, BEAN_DEFINITION_VARIABLE, arguments);
155-
}
143+
List<String> filteredMethodNames = (!ObjectUtils.isEmpty(methodNames))
144+
? Arrays.stream(methodNames).filter(this::isNotInferredMethod).toList()
145+
: Collections.emptyList();
146+
if (!filteredMethodNames.isEmpty()) {
147+
Class<?> beanType = ClassUtils.getUserClass(beanDefinition.getResolvableType().toClass());
148+
filteredMethodNames.forEach(methodName -> addInitDestroyHint(beanType, methodName));
149+
CodeBlock arguments = filteredMethodNames.stream()
150+
.map(name -> CodeBlock.of("$S", name))
151+
.collect(CodeBlock.joining(", "));
152+
builder.addStatement(format, BEAN_DEFINITION_VARIABLE, arguments);
156153
}
157154
}
158155

156+
private boolean isNotInferredMethod(String candidate) {
157+
return !AbstractBeanDefinition.INFER_METHOD.equals(candidate);
158+
}
159+
159160
private void addInitDestroyHint(Class<?> beanUserClass, String methodName) {
160161
Method method = ReflectionUtils.findMethod(beanUserClass, methodName);
161162
if (method != null) {
@@ -264,12 +265,8 @@ private boolean hasRole(int defaultValue, int actualValue) {
264265
}
265266

266267
private CodeBlock toStringVarArgs(String[] strings) {
267-
CodeBlock.Builder builder = CodeBlock.builder();
268-
for (int i = 0; i < strings.length; i++) {
269-
builder.add((i != 0) ? ", " : "");
270-
builder.add("$S", strings[i]);
271-
}
272-
return builder.build();
268+
return Arrays.stream(strings).map(string -> CodeBlock.of("$S", string))
269+
.collect(CodeBlock.joining(","));
273270
}
274271

275272
private Object toRole(int value) {

spring-beans/src/main/java/org/springframework/beans/factory/aot/BeanDefinitionPropertyValueCodeGenerator.java

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
package org.springframework.beans.factory.aot;
1818

19-
import java.lang.reflect.Array;
19+
import java.util.Arrays;
2020
import java.util.Collection;
2121
import java.util.Collections;
2222
import java.util.Iterator;
@@ -28,6 +28,7 @@
2828
import java.util.Set;
2929
import java.util.TreeMap;
3030
import java.util.TreeSet;
31+
import java.util.stream.Stream;
3132

3233
import org.springframework.aot.generate.GeneratedMethod;
3334
import org.springframework.aot.generate.GeneratedMethods;
@@ -43,6 +44,7 @@
4344
import org.springframework.javapoet.CodeBlock.Builder;
4445
import org.springframework.lang.Nullable;
4546
import org.springframework.util.ClassUtils;
47+
import org.springframework.util.ObjectUtils;
4648

4749
/**
4850
* Internal code generator used to generate code for a single value contained in
@@ -247,17 +249,11 @@ private class ArrayDelegate implements Delegate {
247249
public CodeBlock generateCode(@Nullable Object value, ResolvableType type) {
248250
if (type.isArray()) {
249251
ResolvableType componentType = type.getComponentType();
250-
int length = Array.getLength(value);
252+
Stream<CodeBlock> elements = Arrays.stream(ObjectUtils.toObjectArray(value)).map(component ->
253+
BeanDefinitionPropertyValueCodeGenerator.this.generateCode(component, componentType));
251254
CodeBlock.Builder builder = CodeBlock.builder();
252255
builder.add("new $T {", type.toClass());
253-
for (int i = 0; i < length; i++) {
254-
Object component = Array.get(value, i);
255-
if (i != 0) {
256-
builder.add(", ");
257-
}
258-
builder.add("$L", BeanDefinitionPropertyValueCodeGenerator.this
259-
.generateCode(component, componentType));
260-
}
256+
builder.add(elements.collect(CodeBlock.joining(", ")));
261257
builder.add("}");
262258
return builder.build();
263259
}

0 commit comments

Comments
 (0)