20
20
import org .apache .commons .logging .Log ;
21
21
import org .apache .commons .logging .LogFactory ;
22
22
import org .jspecify .annotations .Nullable ;
23
+
23
24
import org .springframework .aot .generate .GeneratedClass ;
24
25
import org .springframework .aot .generate .GeneratedTypeReference ;
25
26
import org .springframework .aot .generate .GenerationContext ;
31
32
import org .springframework .data .repository .config .AotRepositoryContext ;
32
33
import org .springframework .data .repository .core .RepositoryInformation ;
33
34
import org .springframework .data .repository .query .QueryMethod ;
34
- import org .springframework .javapoet .ClassName ;
35
35
import org .springframework .javapoet .TypeName ;
36
36
37
37
/**
@@ -46,8 +46,7 @@ public class RepositoryContributor {
46
46
private static final Log logger = LogFactory .getLog (RepositoryContributor .class );
47
47
private static final String FEATURE_NAME = "AotRepository" ;
48
48
49
- private AotRepositoryBuilder builder ;
50
- private final AotRepositoryContext repositoryContext ;
49
+ private final AotRepositoryBuilder builder ;
51
50
private @ Nullable TypeReference contributedTypeName ;
52
51
53
52
/**
@@ -57,7 +56,6 @@ public class RepositoryContributor {
57
56
*/
58
57
public RepositoryContributor (AotRepositoryContext repositoryContext ) {
59
58
60
- this .repositoryContext = repositoryContext ;
61
59
builder = AotRepositoryBuilder .forRepository (repositoryContext .getRepositoryInformation (),
62
60
repositoryContext .getModuleName (), createProjectionFactory ());
63
61
}
@@ -99,38 +97,38 @@ public void contribute(GenerationContext generationContext) {
99
97
.withQueryMethodContributor (this ::contributeQueryMethod ); //
100
98
101
99
GeneratedClass generatedClass = generationContext .getGeneratedClasses ().getOrAddForFeatureComponent (FEATURE_NAME ,
102
- ClassName .bestGuess (builder .intendedTargetClassName ().getCanonicalName ()), targetTypeSpec -> {
100
+ builder .getClassName (), targetTypeSpec -> {
101
+
102
+ // capture the actual type name early on so that we can use it in the constructor.
103
+ builder .withClassName (targetTypeSpec .build ().name ());
103
104
104
105
AotBundle aotBundle = builder .build (targetTypeSpec );
105
- {
106
- Class <?> repositoryInterface = getRepositoryInformation ().getRepositoryInterface ();
107
- String repositoryJsonFileName = getRepositoryJsonFileName (repositoryInterface );
108
- String repositoryJson ;
109
- try {
110
- repositoryJson = aotBundle .metadata ().toJson ().toString (2 );
111
- } catch (JSONException e ) {
112
- throw new RuntimeException (e );
113
- }
114
-
115
- if (logger .isTraceEnabled ()) {
116
- logger .trace ("""
117
- ------ AOT Repository.json: %s ------
118
- %s
119
- -------------------
120
- """ .formatted (repositoryJsonFileName , repositoryJson ));
121
-
122
- logger .trace ("""
123
- ------ AOT Generated Repository: %s ------
124
- %s
125
- -------------------
126
- """ .formatted (null , aotBundle .javaFile ()));
127
- }
128
-
129
- generationContext .getGeneratedFiles ().addResourceFile (repositoryJsonFileName , repositoryJson );
106
+ Class <?> repositoryInterface = getRepositoryInformation ().getRepositoryInterface ();
107
+ String repositoryJsonFileName = getRepositoryJsonFileName (repositoryInterface );
108
+ String repositoryJson ;
109
+ try {
110
+ repositoryJson = aotBundle .metadata ().toJson ().toString (2 );
111
+ } catch (JSONException e ) {
112
+ throw new RuntimeException (e );
130
113
}
114
+
115
+ if (logger .isTraceEnabled ()) {
116
+ logger .trace ("""
117
+ ------ AOT Repository.json: %s ------
118
+ %s
119
+ -------------------
120
+ """ .formatted (repositoryJsonFileName , repositoryJson ));
121
+
122
+ logger .trace ("""
123
+ ------ AOT Generated Repository: %s ------
124
+ %s
125
+ -------------------
126
+ """ .formatted (null , aotBundle .javaFile ()));
127
+ }
128
+
129
+ generationContext .getGeneratedFiles ().addResourceFile (repositoryJsonFileName , repositoryJson );
131
130
});
132
131
133
- builder .prepare (generatedClass .getName ()); // initialize ctor argument resolution and set type name to target
134
132
this .contributedTypeName = GeneratedTypeReference .of (generatedClass .getName ());
135
133
136
134
// generate native runtime hints - needed cause we're using the repository proxy
0 commit comments