Skip to content

Commit 4a36249

Browse files
committed
avaje#439 Add Writer extraIndent for indentation control
1 parent 7f9775d commit 4a36249

File tree

5 files changed

+53
-29
lines changed

5 files changed

+53
-29
lines changed

inject-generator/src/main/java/io/avaje/inject/generator/Append.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,29 @@ final class Append {
1212
private final Writer writer;
1313
private int nameIndex;
1414
private boolean comma;
15+
private String extraIndent;
1516

1617
Append(Writer writer) {
1718
this.writer = writer;
1819
}
1920

21+
Append setExtraIndent(String extraIndent) {
22+
this.extraIndent = extraIndent;
23+
return this;
24+
}
25+
26+
Append indent(String content) {
27+
try {
28+
if (extraIndent != null) {
29+
writer.append(extraIndent);
30+
}
31+
writer.append(content);
32+
return this;
33+
} catch (IOException e) {
34+
throw new UncheckedIOException(e);
35+
}
36+
}
37+
2038
Append append(String content) {
2139
try {
2240
writer.append(content);

inject-generator/src/main/java/io/avaje/inject/generator/BeanReader.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ void buildRegister(Append writer) {
240240
if (prototype) {
241241
return;
242242
}
243-
writer.append(" ");
243+
writer.indent(" ");
244244
if (isExtraInjectionRequired() || hasLifecycleMethods()) {
245245
writer.append("var $bean = ");
246246
}
@@ -255,14 +255,14 @@ void buildRegister(Append writer) {
255255

256256
void addLifecycleCallbacks(Append writer, String indent) {
257257
if (postConstructMethod != null && !prototype) {
258-
writer.append("%s builder.addPostConstruct($bean::%s);", indent, postConstructMethod.getSimpleName()).eol();
258+
writer.indent(indent).append(" builder.addPostConstruct($bean::%s);", postConstructMethod.getSimpleName()).eol();
259259
}
260260
if (preDestroyMethod != null) {
261261
prototypeNotSupported("@PreDestroy");
262262
var priority = preDestroyPriority == null || preDestroyPriority == 1000 ? "" : ", " + preDestroyPriority;
263-
writer.append("%s builder.addPreDestroy($bean::%s%s);", indent, preDestroyMethod.getSimpleName(), priority).eol();
263+
writer.indent(indent).append(" builder.addPreDestroy($bean::%s%s);", preDestroyMethod.getSimpleName(), priority).eol();
264264
} else if (typeReader.isClosable() && !prototype) {
265-
writer.append("%s builder.addPreDestroy($bean);", indent).eol();
265+
writer.indent(indent).append(" builder.addPreDestroy($bean);").eol();
266266
}
267267
}
268268

inject-generator/src/main/java/io/avaje/inject/generator/MethodReader.java

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ void builderGetFactory(Append writer, boolean factoryHasConditions) {
160160
}
161161

162162
void builderBuildBean(Append writer) {
163-
writer.append(" ");
163+
writer.indent(" ");
164164
if (isVoid) {
165165
writer.append("factory.%s(", methodName);
166166
} else {
@@ -187,31 +187,31 @@ void builderAddBeanProvider(Append writer) {
187187
}
188188
String indent = " ";
189189
if (prototype) {
190-
writer.append(indent).append(" builder.asPrototype().registerProvider(() -> {").eol();
190+
writer.indent(indent).append(" builder.asPrototype().registerProvider(() -> {").eol();
191191
} else {
192-
writer.append(indent).append(" builder.asSecondary().registerProvider(() -> {").eol();
192+
writer.indent(indent).append(" builder.asSecondary().registerProvider(() -> {").eol();
193193
}
194-
writer.append("%s return ", indent);
195-
writer.append(String.format("factory.%s(", methodName));
194+
writer.indent(indent).append(" return ");
195+
writer.append("factory.%s(", methodName);
196196
for (int i = 0; i < params.size(); i++) {
197197
if (i > 0) {
198198
writer.append(", ");
199199
}
200200
params.get(i).builderGetDependency(writer, "builder");
201201
}
202202
writer.append(");").eol();
203-
writer.append(indent).append(" });").eol();
204-
writer.append(indent).append("}").eol();
203+
writer.indent(indent).append(" });").eol();
204+
writer.indent(indent).append("}").eol();
205205
}
206206

207207
void builderBuildAddBean(Append writer) {
208208
if (!isVoid) {
209-
String indent = optionalType ? " " : " ";
210209
if (optionalType) {
211210
writer.append(" if (optionalBean.isPresent()) {").eol();
212211
writer.append(" var bean = optionalBean.get();").eol();
213212
}
214-
writer.append(indent);
213+
String indent = optionalType ? " " : " ";
214+
writer.indent(indent);
215215
if (hasLifecycleMethods()) {
216216
writer.append("var $bean = ");
217217
}
@@ -223,15 +223,15 @@ void builderBuildAddBean(Append writer) {
223223
}
224224
writer.append(".register(bean);").eol();
225225
if (notEmpty(initMethod)) {
226-
writer.append(indent).append("builder.addPostConstruct($bean::%s);", initMethod).eol();
226+
writer.indent(indent).append("builder.addPostConstruct($bean::%s);", initMethod).eol();
227227
}
228228
var priority = destroyPriority == null || destroyPriority == 1000 ? "" : ", " + destroyPriority;
229229
if (notEmpty(destroyMethod)) {
230-
writer.append(indent).append("builder.addPreDestroy($bean::%s%s);", destroyMethod, priority).eol();
230+
writer.indent(indent).append("builder.addPreDestroy($bean::%s%s);", destroyMethod, priority).eol();
231231
} else if (typeReader != null && typeReader.isClosable()) {
232-
writer.append(indent).append("builder.addPreDestroy($bean::close%s);", priority).eol();
232+
writer.indent(indent).append("builder.addPreDestroy($bean::close%s);", priority).eol();
233233
} else if (beanCloseable) {
234-
writer.append(indent).append("builder.addAutoClosable($bean);").eol();
234+
writer.indent(indent).append("builder.addAutoClosable($bean);").eol();
235235
}
236236
if (optionalType) {
237237
writer.append(" }").eol();
@@ -288,11 +288,13 @@ private boolean methodThrows() {
288288
void startTry(Append writer) {
289289
if (methodThrows()) {
290290
writer.append(" try {").eol();
291+
writer.setExtraIndent(" ");
291292
}
292293
}
293294

294295
void endTry(Append writer) {
295296
if (methodThrows()) {
297+
writer.setExtraIndent(null);
296298
writer.append(" } catch (Throwable e) {").eol();
297299
writer.append(" throw new RuntimeException(\"Error during wiring\", e);").eol();
298300
writer.append(" }").eol();

inject-generator/src/main/java/io/avaje/inject/generator/SimpleBeanWriter.java

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -136,10 +136,7 @@ private void writeFactoryBeanMethod(MethodReader method) {
136136
method.buildAddFor(writer);
137137
method.builderGetFactory(writer, beanReader.hasConditions());
138138
method.startTry(writer);
139-
if (method.isProtoType()) {
140-
method.builderAddBeanProvider(writer);
141-
method.endTry(writer);
142-
} else if (method.isUseProviderForSecondary()) {
139+
if (method.isProtoType() || method.isUseProviderForSecondary()) {
143140
method.builderAddBeanProvider(writer);
144141
method.endTry(writer);
145142
} else {
@@ -182,8 +179,8 @@ private void writeAddFor(MethodReader constructor) {
182179
}
183180
if (beanReader.prototype()) {
184181
beanReader.prototypePostConstruct(writer, indent);
185-
writer.append(" return bean;").eol();
186-
writer.append(" });", shortName, shortName).eol();
182+
writer.indent(" return bean;").eol();
183+
writer.indent(" });").eol();
187184
}
188185
constructor.endTry(writer);
189186
writer.append(" }").eol();
@@ -201,20 +198,20 @@ private void writeBuildMethodStart() {
201198
private String indent = " ";
202199

203200
private void writeCreateBean(MethodReader constructor) {
204-
writer.append(indent).append(" var bean = new %s(", shortName);
201+
writer.indent(indent).append(" var bean = new %s(", shortName);
205202
// add constructor dependencies
206203
writeMethodParams("builder", constructor);
207204
}
208205

209206
private void writeExtraInjection() {
210207
if (!beanReader.prototype()) {
211-
writer.append(" builder.addInjector(b -> {").eol();
212-
writer.append(" // field and method injection").eol();
208+
writer.indent(" ").append("builder.addInjector(b -> {").eol();
209+
writer.indent(" ").append(" // field and method injection").eol();
213210
}
214211
injectFields();
215212
injectMethods();
216213
if (!beanReader.prototype()) {
217-
writer.append(" });").eol();
214+
writer.indent(" });").eol();
218215
}
219216
}
220217

@@ -224,15 +221,15 @@ private void injectFields() {
224221
for (FieldReader fieldReader : beanReader.injectFields()) {
225222
String fieldName = fieldReader.fieldName();
226223
String getDependency = fieldReader.builderGetDependency(builder);
227-
writer.append(" %s.%s = %s;", bean, fieldName, getDependency).eol();
224+
writer.indent(" ").append("%s.%s = %s;", bean, fieldName, getDependency).eol();
228225
}
229226
}
230227

231228
private void injectMethods() {
232229
String bean = beanReader.prototype() ? "bean" : "$bean";
233230
String builder = beanReader.prototype() ? "builder" : "b";
234231
for (MethodReader methodReader : beanReader.injectMethods()) {
235-
writer.append(" %s.%s(", bean, methodReader.name());
232+
writer.indent(" ").append("%s.%s(", bean, methodReader.name());
236233
writeMethodParams(builder, methodReader);
237234
}
238235
}

inject-test/src/test/java/org/example/autonamed/MyAutoB2OneImplied.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import jakarta.inject.Singleton;
44

5+
import javax.annotation.PostConstruct;
6+
57
@Singleton
68
public class MyAutoB2OneImplied {
79

@@ -15,4 +17,9 @@ public String one() {
1517
return one.who();
1618
}
1719

20+
@PostConstruct
21+
public void postInit() {
22+
23+
}
24+
1825
}

0 commit comments

Comments
 (0)