From 10ea3424929182d10cd2042fdb7d84f553bc5ce1 Mon Sep 17 00:00:00 2001 From: Josiah Noel <32279667+SentryMan@users.noreply.github.com> Date: Wed, 31 Jul 2024 19:13:15 -0400 Subject: [PATCH 1/4] write value classes when on valhalla --- .../java/io/avaje/inject/generator/MetaData.java | 2 +- .../io/avaje/inject/generator/SimpleBeanWriter.java | 13 +++++++++---- .../avaje/inject/generator/SimpleModuleWriter.java | 6 ++---- .../avaje/inject/generator/SimpleOrderWriter.java | 2 +- .../main/java/io/avaje/inject/generator/Util.java | 9 +++++++++ 5 files changed, 22 insertions(+), 10 deletions(-) diff --git a/inject-generator/src/main/java/io/avaje/inject/generator/MetaData.java b/inject-generator/src/main/java/io/avaje/inject/generator/MetaData.java index fa0d1e08..0b03d1e4 100644 --- a/inject-generator/src/main/java/io/avaje/inject/generator/MetaData.java +++ b/inject-generator/src/main/java/io/avaje/inject/generator/MetaData.java @@ -238,7 +238,7 @@ void buildMethod(Append append) { appendProvides(append, "autoProvides", autoProvides); } append.append(")").append(NEWLINE); - append.append(" private void build_").append(buildName()).append("() {").append(NEWLINE); + append.append(" private void build_").append(buildName()).append("(Builder builder) {").append(NEWLINE); if (hasMethod()) { append.append(" ").append(Util.shortMethod(method)).append("(builder"); } else { diff --git a/inject-generator/src/main/java/io/avaje/inject/generator/SimpleBeanWriter.java b/inject-generator/src/main/java/io/avaje/inject/generator/SimpleBeanWriter.java index 5a678a8a..509f811d 100644 --- a/inject-generator/src/main/java/io/avaje/inject/generator/SimpleBeanWriter.java +++ b/inject-generator/src/main/java/io/avaje/inject/generator/SimpleBeanWriter.java @@ -333,21 +333,26 @@ private void writeClassEnd() { } private void writeClassStart() { - if (beanReader.isRequestScopedController()) { + final var requestScopedController = beanReader.isRequestScopedController(); + if (requestScopedController) { writer.append(CODE_COMMENT_FACTORY, shortName).eol(); } else { writer.append(CODE_COMMENT, shortName).eol(); } writer.append(beanReader.generatedType()).append(Constants.AT_GENERATED_COMMENT).eol(); - if (beanReader.isRequestScopedController()) { + if (requestScopedController) { writer.append(Constants.AT_SINGLETON).eol(); } String shortName = this.shortName; if (beanReader.beanType().getNestingKind().isNested()) { shortName = shortName.replace(".", "$"); } - writer.append("public final class ").append(shortName).append(suffix).append(" "); - if (beanReader.isRequestScopedController()) { + writer + .append("public final %sclass ", requestScopedController ? "" : Util.valhalla()) + .append(shortName) + .append(suffix) + .append(" "); + if (requestScopedController) { writer.append("implements "); beanReader.factoryInterface(writer); } diff --git a/inject-generator/src/main/java/io/avaje/inject/generator/SimpleModuleWriter.java b/inject-generator/src/main/java/io/avaje/inject/generator/SimpleModuleWriter.java index bb57c7ab..d0e29026 100644 --- a/inject-generator/src/main/java/io/avaje/inject/generator/SimpleModuleWriter.java +++ b/inject-generator/src/main/java/io/avaje/inject/generator/SimpleModuleWriter.java @@ -170,12 +170,11 @@ private void writeBuildMethod() { if (scopeInfo.addWithBeans()) { writeWithBeans(); } - writer.append(" this.builder = builder;").eol(); writer.append(" // create beans in order based on constructor dependencies").eol(); writer.append(" // i.e. \"provides\" followed by \"dependsOn\"").eol(); for (MetaData metaData : ordering.ordered()) { if (!metaData.isGenerateProxy()) { - writer.append(" build_%s();", metaData.buildName()).eol(); + writer.append(" build_%s(builder);", metaData.buildName()).eol(); } } writer.append(" }").eol(); @@ -219,8 +218,7 @@ private void writeStartClass() { scopeInfo.buildAtInjectModule(writer); String interfaceType = scopeInfo.type().type(); - writer.append("public final class %s implements %s {", shortName, interfaceType).eol().eol(); - writer.append(" private Builder builder;").eol().eol(); + writer.append("public final %sclass %s implements %s {", Util.valhalla(), shortName, interfaceType).eol().eol(); if (scopeInfo.addModuleConstructor()) { writeConstructor(); } diff --git a/inject-generator/src/main/java/io/avaje/inject/generator/SimpleOrderWriter.java b/inject-generator/src/main/java/io/avaje/inject/generator/SimpleOrderWriter.java index 42190ae6..7d02a108 100644 --- a/inject-generator/src/main/java/io/avaje/inject/generator/SimpleOrderWriter.java +++ b/inject-generator/src/main/java/io/avaje/inject/generator/SimpleOrderWriter.java @@ -58,7 +58,7 @@ private void writeStartClass() { " */\n" ); writer.append(Constants.AT_GENERATED).eol(); - writer.append("public final class %s implements ModuleOrdering {", shortName).eol().eol(); + writer.append("public final %sclass %s implements ModuleOrdering {", Util.valhalla(), shortName).eol().eol(); writer.append(" private final AvajeModule[] sortedModules = new AvajeModule[%s];", ordering.size()).eol(); writer.append(" private static final Map INDEXES = Map.ofEntries(").eol(); diff --git a/inject-generator/src/main/java/io/avaje/inject/generator/Util.java b/inject-generator/src/main/java/io/avaje/inject/generator/Util.java index 3c328737..c48ed6a7 100644 --- a/inject-generator/src/main/java/io/avaje/inject/generator/Util.java +++ b/inject-generator/src/main/java/io/avaje/inject/generator/Util.java @@ -2,6 +2,7 @@ import javax.lang.model.element.AnnotationMirror; import javax.lang.model.element.Element; +import javax.lang.model.element.Modifier; import javax.lang.model.type.DeclaredType; import javax.lang.model.type.TypeKind; import javax.lang.model.type.TypeMirror; @@ -368,4 +369,12 @@ static List addQualifierSuffix(List provides, String name) { .collect(toList()); } + static String valhalla() { + try { + if (Modifier.valueOf("VALUE") != null && APContext.previewEnabled()) return "value "; + } catch (IllegalArgumentException e) { + // no valhalla + } + return ""; + } } From 7a48115dc7ca970ac12285839943d01a05b13b6e Mon Sep 17 00:00:00 2001 From: Josiah Noel <32279667+SentryMan@users.noreply.github.com> Date: Wed, 31 Jul 2024 21:10:52 -0400 Subject: [PATCH 2/4] Update SimpleAssistWriter.java --- .../io/avaje/inject/generator/SimpleAssistWriter.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/inject-generator/src/main/java/io/avaje/inject/generator/SimpleAssistWriter.java b/inject-generator/src/main/java/io/avaje/inject/generator/SimpleAssistWriter.java index 0cc67ce2..193a827d 100644 --- a/inject-generator/src/main/java/io/avaje/inject/generator/SimpleAssistWriter.java +++ b/inject-generator/src/main/java/io/avaje/inject/generator/SimpleAssistWriter.java @@ -91,7 +91,14 @@ private void writeClassStart() { if (!beanReader.hasTargetFactory()) { writer.append("public "); } - writer.append("final class ").append(name).append(suffix); + + var valhallaStr = + beanReader.injectFields().isEmpty() + || beanReader.injectFields().stream().noneMatch(FieldReader::assisted) + ? Util.valhalla() + : ""; + + writer.append("final %sclass ", valhallaStr).append(name).append(suffix); writeImplementsOrExtends(); writer.append(" {").eol().eol(); From 06075e15ff0ae871609c99c82a7730bb24d87384 Mon Sep 17 00:00:00 2001 From: Josiah Noel <32279667+SentryMan@users.noreply.github.com> Date: Wed, 31 Jul 2024 21:19:25 -0400 Subject: [PATCH 3/4] fix assist method inject --- .../avaje/inject/generator/SimpleAssistWriter.java | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/inject-generator/src/main/java/io/avaje/inject/generator/SimpleAssistWriter.java b/inject-generator/src/main/java/io/avaje/inject/generator/SimpleAssistWriter.java index 193a827d..d0b7386a 100644 --- a/inject-generator/src/main/java/io/avaje/inject/generator/SimpleAssistWriter.java +++ b/inject-generator/src/main/java/io/avaje/inject/generator/SimpleAssistWriter.java @@ -91,12 +91,14 @@ private void writeClassStart() { if (!beanReader.hasTargetFactory()) { writer.append("public "); } - - var valhallaStr = - beanReader.injectFields().isEmpty() - || beanReader.injectFields().stream().noneMatch(FieldReader::assisted) - ? Util.valhalla() - : ""; + var valhallaStr = Util.valhalla(); + if (!valhallaStr.isBlank() + && (beanReader.injectFields().stream().anyMatch(FieldReader::assisted) + || beanReader.injectMethods().stream() + .flatMap(m -> m.params().stream()) + .anyMatch(MethodParam::assisted))) { + valhallaStr = ""; + } writer.append("final %sclass ", valhallaStr).append(name).append(suffix); From 28c1035eedffe966eb96268d941793d22e07e210 Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Thu, 1 Aug 2024 20:39:50 +1200 Subject: [PATCH 4/4] Format only --- .../avaje/inject/generator/SimpleAssistWriter.java | 14 ++++++++------ .../avaje/inject/generator/SimpleBeanWriter.java | 8 ++++---- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/inject-generator/src/main/java/io/avaje/inject/generator/SimpleAssistWriter.java b/inject-generator/src/main/java/io/avaje/inject/generator/SimpleAssistWriter.java index d0b7386a..0ad57f88 100644 --- a/inject-generator/src/main/java/io/avaje/inject/generator/SimpleAssistWriter.java +++ b/inject-generator/src/main/java/io/avaje/inject/generator/SimpleAssistWriter.java @@ -92,20 +92,22 @@ private void writeClassStart() { writer.append("public "); } var valhallaStr = Util.valhalla(); - if (!valhallaStr.isBlank() - && (beanReader.injectFields().stream().anyMatch(FieldReader::assisted) - || beanReader.injectMethods().stream() - .flatMap(m -> m.params().stream()) - .anyMatch(MethodParam::assisted))) { + if (!valhallaStr.isBlank() && hasAssistedFieldsOrParams()) { valhallaStr = ""; } writer.append("final %sclass ", valhallaStr).append(name).append(suffix); - writeImplementsOrExtends(); writer.append(" {").eol().eol(); } + private boolean hasAssistedFieldsOrParams() { + return beanReader.injectFields().stream().anyMatch(FieldReader::assisted) + || beanReader.injectMethods().stream() + .flatMap(m -> m.params().stream()) + .anyMatch(MethodParam::assisted); + } + private void writeImplementsOrExtends() { TypeElement targetInterface = beanReader.targetInterface(); writer diff --git a/inject-generator/src/main/java/io/avaje/inject/generator/SimpleBeanWriter.java b/inject-generator/src/main/java/io/avaje/inject/generator/SimpleBeanWriter.java index 509f811d..431f8967 100644 --- a/inject-generator/src/main/java/io/avaje/inject/generator/SimpleBeanWriter.java +++ b/inject-generator/src/main/java/io/avaje/inject/generator/SimpleBeanWriter.java @@ -348,10 +348,10 @@ private void writeClassStart() { shortName = shortName.replace(".", "$"); } writer - .append("public final %sclass ", requestScopedController ? "" : Util.valhalla()) - .append(shortName) - .append(suffix) - .append(" "); + .append("public final %sclass ", requestScopedController ? "" : Util.valhalla()) + .append(shortName) + .append(suffix) + .append(" "); if (requestScopedController) { writer.append("implements "); beanReader.factoryInterface(writer);