Skip to content

Commit e3e99ac

Browse files
committed
Add a convenience method to create a ValueCodeGenerator
This commit makes BeanDefinitionPropertyValueCodeGeneratorDelegates public and offer a convenience method to create a ValueCodeGenerator that works will all core delegates. Closes gh-34761
1 parent 5fb37e3 commit e3e99ac

File tree

3 files changed

+31
-11
lines changed

3 files changed

+31
-11
lines changed

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

+6-7
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@
3838
import org.springframework.aot.generate.GeneratedMethods;
3939
import org.springframework.aot.generate.ValueCodeGenerator;
4040
import org.springframework.aot.generate.ValueCodeGenerator.Delegate;
41-
import org.springframework.aot.generate.ValueCodeGeneratorDelegates;
4241
import org.springframework.aot.hint.ExecutableMode;
4342
import org.springframework.aot.hint.MemberCategory;
4443
import org.springframework.aot.hint.RuntimeHints;
@@ -103,12 +102,12 @@ class BeanDefinitionPropertiesCodeGenerator {
103102

104103
this.hints = hints;
105104
this.attributeFilter = attributeFilter;
106-
List<Delegate> allDelegates = new ArrayList<>();
107-
allDelegates.add((valueCodeGenerator, value) -> customValueCodeGenerator.apply(PropertyNamesStack.peek(), value));
108-
allDelegates.addAll(additionalDelegates);
109-
allDelegates.addAll(BeanDefinitionPropertyValueCodeGeneratorDelegates.INSTANCES);
110-
allDelegates.addAll(ValueCodeGeneratorDelegates.INSTANCES);
111-
this.valueCodeGenerator = ValueCodeGenerator.with(allDelegates).scoped(generatedMethods);
105+
List<Delegate> customDelegates = new ArrayList<>();
106+
customDelegates.add((valueCodeGenerator, value) ->
107+
customValueCodeGenerator.apply(PropertyNamesStack.peek(), value));
108+
customDelegates.addAll(additionalDelegates);
109+
this.valueCodeGenerator = BeanDefinitionPropertyValueCodeGeneratorDelegates
110+
.createValueCodeGenerator(generatedMethods, customDelegates);
112111
}
113112

114113
@SuppressWarnings("NullAway") // https://github.com/uber/NullAway/issues/1128

Diff for: spring-beans/src/main/java/org/springframework/beans/factory/aot/BeanDefinitionPropertyValueCodeGeneratorDelegates.java

+22-1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

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

19+
import java.util.ArrayList;
1920
import java.util.Iterator;
2021
import java.util.LinkedHashMap;
2122
import java.util.List;
@@ -46,7 +47,7 @@
4647
* @author Stephane Nicoll
4748
* @since 6.1.2
4849
*/
49-
abstract class BeanDefinitionPropertyValueCodeGeneratorDelegates {
50+
public abstract class BeanDefinitionPropertyValueCodeGeneratorDelegates {
5051

5152
/**
5253
* A list of {@link Delegate} implementations for the following common bean
@@ -73,6 +74,26 @@ abstract class BeanDefinitionPropertyValueCodeGeneratorDelegates {
7374
);
7475

7576

77+
/**
78+
* Create a {@link ValueCodeGenerator} instance with both these
79+
* {@link #INSTANCES delegate} and the {@link ValueCodeGeneratorDelegates#INSTANCES
80+
* core delegates}.
81+
* @param generatedMethods the {@link GeneratedMethods} to use
82+
* @param customDelegates additional delegates that should be considered first
83+
* @return a configured value code generator
84+
* @since 7.0
85+
* @see ValueCodeGenerator#add(List)
86+
*/
87+
public static ValueCodeGenerator createValueCodeGenerator(
88+
GeneratedMethods generatedMethods, List<Delegate> customDelegates) {
89+
List<Delegate> allDelegates = new ArrayList<>();
90+
allDelegates.addAll(customDelegates);
91+
allDelegates.addAll(INSTANCES);
92+
allDelegates.addAll(ValueCodeGeneratorDelegates.INSTANCES);
93+
return ValueCodeGenerator.with(allDelegates).scoped(generatedMethods);
94+
}
95+
96+
7697
/**
7798
* {@link Delegate} for {@link ManagedList} types.
7899
*/

Diff for: spring-beans/src/test/java/org/springframework/beans/factory/aot/BeanDefinitionPropertyValueCodeGeneratorDelegatesTests.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.nio.charset.Charset;
2323
import java.nio.charset.StandardCharsets;
2424
import java.time.temporal.ChronoUnit;
25+
import java.util.Collections;
2526
import java.util.HashMap;
2627
import java.util.LinkedHashMap;
2728
import java.util.LinkedHashSet;
@@ -71,9 +72,8 @@
7172
class BeanDefinitionPropertyValueCodeGeneratorDelegatesTests {
7273

7374
private static ValueCodeGenerator createValueCodeGenerator(GeneratedClass generatedClass) {
74-
return ValueCodeGenerator.with(BeanDefinitionPropertyValueCodeGeneratorDelegates.INSTANCES)
75-
.add(ValueCodeGeneratorDelegates.INSTANCES)
76-
.scoped(generatedClass.getMethods());
75+
return BeanDefinitionPropertyValueCodeGeneratorDelegates.createValueCodeGenerator(
76+
generatedClass.getMethods(), Collections.emptyList());
7777
}
7878

7979
private void compile(Object value, BiConsumer<Object, Compiled> result) {

0 commit comments

Comments
 (0)