@@ -16,6 +16,7 @@ class SimpleBeanWriter {
16
16
private static final String CODE_COMMENT_FACTORY = "/**\n * Generated source - dependency injection factory for request scoped %s.\n */" ;
17
17
private static final String CODE_COMMENT_LIFECYCLE = " /**\n * Lifecycle wrapper for %s.\n */" ;
18
18
private static final String CODE_COMMENT_BUILD = " /**\n * Create and register %s.\n */" ;
19
+ private static final String CODE_COMMENT_BUILD_RSB = " /**\n * Register provider for request scoped %s.\n */" ;
19
20
20
21
private final BeanReader beanReader ;
21
22
private final ProcessingContext context ;
@@ -24,6 +25,7 @@ class SimpleBeanWriter {
24
25
private final String packageName ;
25
26
private final String suffix ;
26
27
private Append writer ;
28
+ private String indent = " " ;
27
29
28
30
SimpleBeanWriter (BeanReader beanReader , ProcessingContext context ) {
29
31
this .beanReader = beanReader ;
@@ -45,7 +47,7 @@ void write() throws IOException {
45
47
writePackage ();
46
48
writeImports ();
47
49
writeClassStart ();
48
- if (isRequestScoped ()) {
50
+ if (isRequestScopedController ()) {
49
51
writeRequestCreate ();
50
52
} else {
51
53
writeStaticFactoryMethod ();
@@ -61,8 +63,8 @@ private void writeRequestCreate() {
61
63
beanReader .writeRequestCreate (writer );
62
64
}
63
65
64
- private boolean isRequestScoped () {
65
- return beanReader .isRequestScoped ();
66
+ private boolean isRequestScopedController () {
67
+ return beanReader .isRequestScopedController ();
66
68
}
67
69
68
70
private void writeStaticFactoryBeanMethods () {
@@ -89,15 +91,52 @@ private void writeFactoryBeanMethod(MethodReader method) {
89
91
}
90
92
91
93
private void writeStaticFactoryMethod () {
92
-
93
94
MethodReader constructor = beanReader .getConstructor ();
94
95
if (constructor == null ) {
95
96
context .logError (beanReader .getBeanType (), "Unable to determine constructor to use for %s? Add explicit @Inject to one of the constructors." , beanReader .getBeanType ());
96
97
return ;
97
98
}
99
+ writeBuildMethodStart (constructor );
100
+ if (beanReader .isRequestScopedBean ()) {
101
+ writeReqScopeBean (constructor );
102
+ } else {
103
+ writeAddFor (constructor );
104
+ }
105
+ writer .append (" }" ).eol ().eol ();
106
+ }
98
107
108
+ private void writeReqScopeBean (MethodReader constructor ) {
109
+ indent = indent + " " ;
110
+ beanReader .buildReq (writer );
111
+ writeCreateBean (constructor , "scope" );
112
+ if (beanReader .isExtraInjectionRequired ()) {
113
+ writeExtraInjection ();
114
+ }
115
+ beanReader .writePostConstruct (writer );
116
+ beanReader .writePreDestroy (writer );
117
+ beanReader .buildReqEnd (writer );
118
+ }
119
+
120
+ private void writeAddFor (MethodReader constructor ) {
121
+ beanReader .buildAddFor (writer );
122
+ writeCreateBean (constructor , "builder" );
123
+ beanReader .buildRegister (writer );
124
+ if (beanReader .isLifecycleRequired ()) {
125
+ beanReader .buildAddLifecycle (writer );
126
+ }
127
+ if (beanReader .isExtraInjectionRequired ()) {
128
+ writeExtraInjection ();
129
+ }
130
+ writer .append (" }" ).eol ();
131
+ }
132
+
133
+ private void writeBuildMethodStart (MethodReader constructor ) {
99
134
int providerIndex = 0 ;
100
- writer .append (CODE_COMMENT_BUILD , shortName ).eol ();
135
+ if (beanReader .isRequestScopedBean ()) {
136
+ writer .append (CODE_COMMENT_BUILD_RSB , shortName ).eol ();
137
+ } else {
138
+ writer .append (CODE_COMMENT_BUILD , shortName ).eol ();
139
+ }
101
140
writer .append (" public static void build(Builder builder" );
102
141
for (MethodReader .MethodParam param : constructor .getParams ()) {
103
142
if (param .isGenericParam ()) {
@@ -112,47 +151,47 @@ private void writeStaticFactoryMethod() {
112
151
}
113
152
}
114
153
writer .append (") {" ).eol ();
154
+ }
115
155
116
- beanReader .buildAddFor (writer );
117
- writer .append (" %s bean = new %s(" , shortName , shortName );
118
-
156
+ private void writeCreateBean (MethodReader constructor , String builderName ) {
157
+ writer .append ("%s %s bean = new %s(" , indent , shortName , shortName );
119
158
// add constructor dependencies
120
- List <MethodReader .MethodParam > params = constructor .getParams ();
121
- for (int i = 0 ; i < params .size (); i ++) {
159
+ writeMethodParams (builderName , constructor );
160
+ }
161
+
162
+ private void writeExtraInjection () {
163
+ String builderRef = "b" ;
164
+ String beanRef = "$bean" ;
165
+ if (beanReader .isRequestScopedBean ()) {
166
+ builderRef = "scope" ;
167
+ beanRef = "bean" ;
168
+ } else {
169
+ writer .append (" builder.addInjector(b -> {" ).eol ();
170
+ }
171
+ writer .append (" // field and method injection" ).eol ();
172
+ for (FieldReader fieldReader : beanReader .getInjectFields ()) {
173
+ String fieldName = fieldReader .getFieldName ();
174
+ String getDependency = fieldReader .builderGetDependency (builderRef );
175
+ writer .append (" %s.%s = %s;" , beanRef , fieldName , getDependency ).eol ();
176
+ }
177
+ for (MethodReader methodReader : beanReader .getInjectMethods ()) {
178
+ writer .append (" %s.%s(" , beanRef , methodReader .getName ());
179
+ writeMethodParams (builderRef , methodReader );
180
+ }
181
+ if (!beanReader .isRequestScopedBean ()) {
182
+ writer .append (" });" ).eol ();
183
+ }
184
+ }
185
+
186
+ private void writeMethodParams (String builderRef , MethodReader methodReader ) {
187
+ List <MethodReader .MethodParam > methodParams = methodReader .getParams ();
188
+ for (int i = 0 ; i < methodParams .size (); i ++) {
122
189
if (i > 0 ) {
123
190
writer .append (", " );
124
191
}
125
- writer .append (params .get (i ).builderGetDependency ("builder" ));
192
+ writer .append (methodParams .get (i ).builderGetDependency (builderRef ));
126
193
}
127
194
writer .append (");" ).eol ();
128
-
129
- beanReader .buildRegister (writer );
130
- if (beanReader .isLifecycleRequired ()) {
131
- beanReader .buildAddLifecycle (writer );
132
- }
133
- if (beanReader .isExtraInjectionRequired ()) {
134
- writer .append (" builder.addInjector(b -> {" ).eol ();
135
- writer .append (" // field and method injection" ).eol ();
136
- for (FieldReader fieldReader : beanReader .getInjectFields ()) {
137
- String fieldName = fieldReader .getFieldName ();
138
- String getDependency = fieldReader .builderGetDependency ();
139
- writer .append (" $bean.%s = %s;" , fieldName , getDependency ).eol ();
140
- }
141
- for (MethodReader methodReader : beanReader .getInjectMethods ()) {
142
- writer .append (" $bean.%s(" , methodReader .getName ());
143
- List <MethodReader .MethodParam > methodParams = methodReader .getParams ();
144
- for (int i = 0 ; i < methodParams .size (); i ++) {
145
- if (i > 0 ) {
146
- writer .append (", " );
147
- }
148
- writer .append (methodParams .get (i ).builderGetDependency ("b" ));
149
- }
150
- writer .append (");" ).eol ();
151
- }
152
- writer .append (" });" ).eol ();
153
- }
154
- writer .append (" }" ).eol ();
155
- writer .append (" }" ).eol ().eol ();
156
195
}
157
196
158
197
private void writeImports () {
@@ -189,20 +228,20 @@ private void writeClassEnd() {
189
228
}
190
229
191
230
private void writeClassStart () {
192
- if (beanReader .isRequestScoped ()) {
231
+ if (beanReader .isRequestScopedController ()) {
193
232
writer .append (CODE_COMMENT_FACTORY , shortName ).eol ();
194
233
} else {
195
234
writer .append (CODE_COMMENT , shortName ).eol ();
196
235
}
197
236
writer .append (Constants .AT_GENERATED ).eol ();
198
- if (beanReader .isRequestScoped ()) {
237
+ if (beanReader .isRequestScopedController ()) {
199
238
writer .append (Constants .AT_SINGLETON ).eol ();
200
239
}
201
240
writer .append ("public class " ).append (shortName ).append (suffix ).append (" " );
202
241
if (beanReader .isLifecycleWrapperRequired ()) {
203
242
writer .append ("implements BeanLifecycle " );
204
243
}
205
- if (beanReader .isRequestScoped ()) {
244
+ if (beanReader .isRequestScopedController ()) {
206
245
writer .append ("implements " );
207
246
beanReader .factoryInterface (writer );
208
247
}
0 commit comments