Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit d1fa854

Browse files
christophstroblschauder
authored andcommitted
Allow arguments to be used without creating a field.
See #3265
1 parent 47b8658 commit d1fa854

File tree

3 files changed

+65
-14
lines changed

3 files changed

+65
-14
lines changed

‎src/main/java/org/springframework/data/repository/aot/generate/AotRepositoryBuilder.java‎

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.util.ArrayList;
2020
import java.util.Arrays;
2121
import java.util.Comparator;
22+
import java.util.LinkedHashMap;
2223
import java.util.List;
2324
import java.util.Map;
2425
import java.util.function.BiFunction;
@@ -29,10 +30,10 @@
2930
import org.apache.commons.logging.Log;
3031
import org.apache.commons.logging.LogFactory;
3132
import org.jspecify.annotations.Nullable;
32-
3333
import org.springframework.aot.generate.ClassNameGenerator;
3434
import org.springframework.aot.generate.Generated;
3535
import org.springframework.data.projection.ProjectionFactory;
36+
import org.springframework.data.repository.aot.generate.AotRepositoryFragmentMetadata.ConstructorArgument;
3637
import org.springframework.data.repository.aot.generate.json.JSONException;
3738
import org.springframework.data.repository.aot.generate.json.JSONObject;
3839
import org.springframework.data.repository.core.RepositoryInformation;
@@ -215,7 +216,11 @@ private String typeName() {
215216
}
216217

217218
public Map<String, TypeName> getAutowireFields() {
218-
return generationMetadata.getConstructorArguments();
219+
Map<String, TypeName> autowireFields = new LinkedHashMap<>(generationMetadata.getConstructorArguments().size());
220+
for (Map.Entry<String, ConstructorArgument> entry : generationMetadata.getConstructorArguments().entrySet()) {
221+
autowireFields.put(entry.getKey(), entry.getValue().getTypeName());
222+
}
223+
return autowireFields;
219224
}
220225

221226
public RepositoryInformation getRepositoryInformation() {
@@ -238,8 +243,7 @@ public interface ClassCustomizer {
238243
* @param metadata
239244
* @param builder
240245
*/
241-
void customize(RepositoryInformation information, AotRepositoryFragmentMetadata metadata,
242-
TypeSpec.Builder builder);
246+
void customize(RepositoryInformation information, AotRepositoryFragmentMetadata metadata, TypeSpec.Builder builder);
243247

244248
}
245249

‎src/main/java/org/springframework/data/repository/aot/generate/AotRepositoryConstructorBuilder.java‎

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import javax.lang.model.element.Modifier;
2222

2323
import org.springframework.core.ResolvableType;
24+
import org.springframework.data.repository.aot.generate.AotRepositoryFragmentMetadata.ConstructorArgument;
2425
import org.springframework.data.repository.core.RepositoryInformation;
2526
import org.springframework.javapoet.MethodSpec;
2627
import org.springframework.javapoet.ParameterizedTypeName;
@@ -64,15 +65,27 @@ public void addParameter(String parameterName, Class<?> type) {
6465
}
6566

6667
/**
67-
* Add constructor parameter.
68+
* Add constructor parameter and create a field for it.
6869
*
6970
* @param parameterName
7071
* @param type
7172
*/
7273
public void addParameter(String parameterName, TypeName type) {
74+
addParameter(parameterName, type, true);
75+
}
7376

74-
this.metadata.addConstructorArgument(parameterName, type);
75-
this.metadata.addField(parameterName, type, Modifier.PRIVATE, Modifier.FINAL);
77+
/**
78+
* Add constructor parameter.
79+
*
80+
* @param parameterName
81+
* @param type
82+
*/
83+
public void addParameter(String parameterName, TypeName type, boolean createField) {
84+
85+
this.metadata.addConstructorArgument(parameterName, type, createField ? parameterName : null);
86+
if(createField) {
87+
this.metadata.addField(parameterName, type, Modifier.PRIVATE, Modifier.FINAL);
88+
}
7689
}
7790

7891
/**
@@ -89,15 +102,17 @@ MethodSpec buildConstructor() {
89102

90103
MethodSpec.Builder builder = MethodSpec.constructorBuilder().addModifiers(Modifier.PUBLIC);
91104

92-
for (Entry<String, TypeName> parameter : this.metadata.getConstructorArguments().entrySet()) {
93-
builder.addParameter(parameter.getValue(), parameter.getKey());
105+
for (Entry<String, ConstructorArgument> parameter : this.metadata.getConstructorArguments().entrySet()) {
106+
builder.addParameter(parameter.getValue().getTypeName(), parameter.getKey());
94107
}
95108

96109
customizer.customize(repositoryInformation, builder);
97110

98-
for (Entry<String, TypeName> parameter : this.metadata.getConstructorArguments().entrySet()) {
99-
builder.addStatement("this.$N = $N", parameter.getKey(),
111+
for (Entry<String, ConstructorArgument> parameter : this.metadata.getConstructorArguments().entrySet()) {
112+
if(parameter.getValue().isForLocalField()) {
113+
builder.addStatement("this.$N = $N", parameter.getKey(),
100114
parameter.getKey());
115+
}
101116
}
102117

103118
return builder.build();

‎src/main/java/org/springframework/data/repository/aot/generate/AotRepositoryFragmentMetadata.java‎

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public class AotRepositoryFragmentMetadata {
3535

3636
private final ClassName className;
3737
private final Map<String, FieldSpec> fields = new HashMap<>(3);
38-
private final Map<String, TypeName> constructorArguments = new LinkedHashMap<>(3);
38+
private final Map<String, ConstructorArgument> constructorArguments = new LinkedHashMap<>(3);
3939

4040
public AotRepositoryFragmentMetadata(ClassName className) {
4141
this.className = className;
@@ -82,11 +82,43 @@ Map<String, FieldSpec> getFields() {
8282
return fields;
8383
}
8484

85-
public Map<String, TypeName> getConstructorArguments() {
85+
public Map<String, ConstructorArgument> getConstructorArguments() {
8686
return constructorArguments;
8787
}
8888

8989
public void addConstructorArgument(String parameterName, TypeName type) {
90-
this.constructorArguments.put(parameterName, type);
90+
addConstructorArgument(parameterName, type, parameterName);
91+
}
92+
93+
public void addConstructorArgument(String parameterName, TypeName type, @Nullable String fieldName) {
94+
this.constructorArguments.put(parameterName, new ConstructorArgument(parameterName, type, fieldName));
95+
}
96+
97+
static class ConstructorArgument {
98+
String parameterName;
99+
@Nullable String fieldName;
100+
TypeName typeName;
101+
102+
public ConstructorArgument(String parameterName,TypeName typeName, String fieldName) {
103+
this.parameterName = parameterName;
104+
this.fieldName = fieldName;
105+
this.typeName = typeName;
106+
}
107+
108+
boolean isForLocalField() {
109+
return fieldName != null;
110+
}
111+
112+
public String getParameterName() {
113+
return parameterName;
114+
}
115+
116+
public String getFieldName() {
117+
return fieldName;
118+
}
119+
120+
public TypeName getTypeName() {
121+
return typeName;
122+
}
91123
}
92124
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /