Skip to content

Commit b204598

Browse files
SentryManrbygrave
andauthored
Generate Value Classes When on Valhalla (#660)
* write value classes when on valhalla * Update SimpleAssistWriter.java * fix assist method inject * Format only --------- Co-authored-by: Rob Bygrave <[email protected]>
1 parent 353abdb commit b204598

File tree

6 files changed

+34
-11
lines changed

6 files changed

+34
-11
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ void buildMethod(Append append) {
238238
appendProvides(append, "autoProvides", autoProvides);
239239
}
240240
append.append(")").append(NEWLINE);
241-
append.append(" private void build_").append(buildName()).append("() {").append(NEWLINE);
241+
append.append(" private void build_").append(buildName()).append("(Builder builder) {").append(NEWLINE);
242242
if (hasMethod()) {
243243
append.append(" ").append(Util.shortMethod(method)).append("(builder");
244244
} else {

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

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,12 +91,23 @@ private void writeClassStart() {
9191
if (!beanReader.hasTargetFactory()) {
9292
writer.append("public ");
9393
}
94-
writer.append("final class ").append(name).append(suffix);
94+
var valhallaStr = Util.valhalla();
95+
if (!valhallaStr.isBlank() && hasAssistedFieldsOrParams()) {
96+
valhallaStr = "";
97+
}
9598

99+
writer.append("final %sclass ", valhallaStr).append(name).append(suffix);
96100
writeImplementsOrExtends();
97101
writer.append(" {").eol().eol();
98102
}
99103

104+
private boolean hasAssistedFieldsOrParams() {
105+
return beanReader.injectFields().stream().anyMatch(FieldReader::assisted)
106+
|| beanReader.injectMethods().stream()
107+
.flatMap(m -> m.params().stream())
108+
.anyMatch(MethodParam::assisted);
109+
}
110+
100111
private void writeImplementsOrExtends() {
101112
TypeElement targetInterface = beanReader.targetInterface();
102113
writer

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

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -333,21 +333,26 @@ private void writeClassEnd() {
333333
}
334334

335335
private void writeClassStart() {
336-
if (beanReader.isRequestScopedController()) {
336+
final var requestScopedController = beanReader.isRequestScopedController();
337+
if (requestScopedController) {
337338
writer.append(CODE_COMMENT_FACTORY, shortName).eol();
338339
} else {
339340
writer.append(CODE_COMMENT, shortName).eol();
340341
}
341342
writer.append(beanReader.generatedType()).append(Constants.AT_GENERATED_COMMENT).eol();
342-
if (beanReader.isRequestScopedController()) {
343+
if (requestScopedController) {
343344
writer.append(Constants.AT_SINGLETON).eol();
344345
}
345346
String shortName = this.shortName;
346347
if (beanReader.beanType().getNestingKind().isNested()) {
347348
shortName = shortName.replace(".", "$");
348349
}
349-
writer.append("public final class ").append(shortName).append(suffix).append(" ");
350-
if (beanReader.isRequestScopedController()) {
350+
writer
351+
.append("public final %sclass ", requestScopedController ? "" : Util.valhalla())
352+
.append(shortName)
353+
.append(suffix)
354+
.append(" ");
355+
if (requestScopedController) {
351356
writer.append("implements ");
352357
beanReader.factoryInterface(writer);
353358
}

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -170,12 +170,11 @@ private void writeBuildMethod() {
170170
if (scopeInfo.addWithBeans()) {
171171
writeWithBeans();
172172
}
173-
writer.append(" this.builder = builder;").eol();
174173
writer.append(" // create beans in order based on constructor dependencies").eol();
175174
writer.append(" // i.e. \"provides\" followed by \"dependsOn\"").eol();
176175
for (MetaData metaData : ordering.ordered()) {
177176
if (!metaData.isGenerateProxy()) {
178-
writer.append(" build_%s();", metaData.buildName()).eol();
177+
writer.append(" build_%s(builder);", metaData.buildName()).eol();
179178
}
180179
}
181180
writer.append(" }").eol();
@@ -219,8 +218,7 @@ private void writeStartClass() {
219218
scopeInfo.buildAtInjectModule(writer);
220219

221220
String interfaceType = scopeInfo.type().type();
222-
writer.append("public final class %s implements %s {", shortName, interfaceType).eol().eol();
223-
writer.append(" private Builder builder;").eol().eol();
221+
writer.append("public final %sclass %s implements %s {", Util.valhalla(), shortName, interfaceType).eol().eol();
224222
if (scopeInfo.addModuleConstructor()) {
225223
writeConstructor();
226224
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ private void writeStartClass() {
5858
" */\n"
5959
);
6060
writer.append(Constants.AT_GENERATED).eol();
61-
writer.append("public final class %s implements ModuleOrdering {", shortName).eol().eol();
61+
writer.append("public final %sclass %s implements ModuleOrdering {", Util.valhalla(), shortName).eol().eol();
6262

6363
writer.append(" private final AvajeModule[] sortedModules = new AvajeModule[%s];", ordering.size()).eol();
6464
writer.append(" private static final Map<String, Integer> INDEXES = Map.ofEntries(").eol();

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

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

33
import javax.lang.model.element.AnnotationMirror;
44
import javax.lang.model.element.Element;
5+
import javax.lang.model.element.Modifier;
56
import javax.lang.model.type.DeclaredType;
67
import javax.lang.model.type.TypeKind;
78
import javax.lang.model.type.TypeMirror;
@@ -368,4 +369,12 @@ static List<String> addQualifierSuffix(List<String> provides, String name) {
368369
.collect(toList());
369370
}
370371

372+
static String valhalla() {
373+
try {
374+
if (Modifier.valueOf("VALUE") != null && APContext.previewEnabled()) return "value ";
375+
} catch (IllegalArgumentException e) {
376+
// no valhalla
377+
}
378+
return "";
379+
}
371380
}

0 commit comments

Comments
 (0)