From 22b644f2f112b93834c8a3ccb4371c86d303c66a Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Fri, 27 Oct 2023 17:49:55 +1300 Subject: [PATCH] Rename Processor.getElements() -> maybeElements() and reformat some bits --- .../avaje/inject/generator/FieldReader.java | 3 +- .../io/avaje/inject/generator/Processor.java | 121 +++++++++--------- 2 files changed, 64 insertions(+), 60 deletions(-) diff --git a/inject-generator/src/main/java/io/avaje/inject/generator/FieldReader.java b/inject-generator/src/main/java/io/avaje/inject/generator/FieldReader.java index 2e3ca73ff..3a1cb4a3c 100644 --- a/inject-generator/src/main/java/io/avaje/inject/generator/FieldReader.java +++ b/inject-generator/src/main/java/io/avaje/inject/generator/FieldReader.java @@ -24,8 +24,9 @@ final class FieldReader { this.isBeanMap = QualifiedMapPrism.isPresent(element); this.fieldType = Util.unwrapProvider(utype.rawType(isBeanMap)); this.type = GenericType.parse(utype.rawType(isBeanMap)); - if (nullable || element.asType().toString().startsWith("java.util.Optional<")) + if (nullable || element.asType().toString().startsWith("java.util.Optional<")) { ProcessingContext.addOptionalType(fieldType); + } } boolean isGenericParam() { diff --git a/inject-generator/src/main/java/io/avaje/inject/generator/Processor.java b/inject-generator/src/main/java/io/avaje/inject/generator/Processor.java index f721c6277..d064ab38c 100644 --- a/inject-generator/src/main/java/io/avaje/inject/generator/Processor.java +++ b/inject-generator/src/main/java/io/avaje/inject/generator/Processor.java @@ -1,7 +1,6 @@ package io.avaje.inject.generator; -import static io.avaje.inject.generator.APContext.*; -import static io.avaje.inject.generator.ProcessingContext.*; +import io.avaje.prism.GenerateAPContext; import javax.annotation.processing.*; import javax.lang.model.SourceVersion; @@ -12,9 +11,6 @@ import javax.lang.model.util.ElementFilter; import javax.lang.model.util.Elements; import javax.tools.StandardLocation; - -import io.avaje.prism.GenerateAPContext; - import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; @@ -22,6 +18,9 @@ import java.util.*; import java.util.stream.Collectors; +import static io.avaje.inject.generator.APContext.typeElement; +import static io.avaje.inject.generator.ProcessingContext.*; + @GenerateAPContext @SupportedAnnotationTypes({ InjectModulePrism.PRISM_TYPE, @@ -61,21 +60,21 @@ public synchronized void init(ProcessingEnvironment processingEnv) { pluginFileProvided.forEach(defaultScope::pluginProvided); } - /** Loads provider files generated by avaje-inject-maven-plugin */ + /** + * Loads provider files generated by avaje-inject-maven-plugin + */ void loadProvidedFiles(Filer filer) { pluginFileProvided.addAll(lines(filer, "target/avaje-plugin-provides.txt", "/target/classes")); moduleFileProvided.addAll(lines(filer, "target/avaje-module-provides.txt", "/target/classes")); - pluginFileProvided.addAll( - lines(filer, "build/avaje-plugin-provides.txt", "/build/classes/java/main")); - moduleFileProvided.addAll( - lines(filer, "build/avaje-module-provides.txt", "/build/classes/java/main")); + pluginFileProvided.addAll(lines(filer, "build/avaje-plugin-provides.txt", "/build/classes/java/main")); + moduleFileProvided.addAll(lines(filer, "build/avaje-module-provides.txt", "/build/classes/java/main")); } private static List lines(Filer filer, String relativeName, String replace) { try { final String resource = resource(filer, relativeName, replace); try (var inputStream = new URI(resource).toURL().openStream(); - var reader = new BufferedReader(new InputStreamReader(inputStream))) { + var reader = new BufferedReader(new InputStreamReader(inputStream))) { return reader.lines().collect(Collectors.toList()); } } catch (final Exception e) { @@ -83,35 +82,33 @@ private static List lines(Filer filer, String relativeName, String repla } } - private static String resource(Filer filer, String relativeName, String replace) - throws IOException { + private static String resource(Filer filer, String relativeName, String replace) throws IOException { return filer - .getResource(StandardLocation.CLASS_OUTPUT, "", relativeName) - .toUri() - .toString() - .replace(replace, ""); + .getResource(StandardLocation.CLASS_OUTPUT, "", relativeName) + .toUri() + .toString() + .replace(replace, ""); } @Override public boolean process(Set annotations, RoundEnvironment roundEnv) { - APContext.setProjectModuleElement(annotations, roundEnv); readModule(roundEnv); addImportedAspects(importedAspects(roundEnv)); - getElements(roundEnv, ScopePrism.PRISM_TYPE).ifPresent(this::readScopes); - getElements(roundEnv, FactoryPrism.PRISM_TYPE).ifPresent(this::readFactories); + maybeElements(roundEnv, ScopePrism.PRISM_TYPE).ifPresent(this::readScopes); + maybeElements(roundEnv, FactoryPrism.PRISM_TYPE).ifPresent(this::readFactories); if (defaultScope.includeSingleton()) { - getElements(roundEnv, SingletonPrism.PRISM_TYPE).ifPresent(this::readBeans); + maybeElements(roundEnv, SingletonPrism.PRISM_TYPE).ifPresent(this::readBeans); } - getElements(roundEnv, ComponentPrism.PRISM_TYPE).ifPresent(this::readBeans); - getElements(roundEnv, PrototypePrism.PRISM_TYPE).ifPresent(this::readBeans); + maybeElements(roundEnv, ComponentPrism.PRISM_TYPE).ifPresent(this::readBeans); + maybeElements(roundEnv, PrototypePrism.PRISM_TYPE).ifPresent(this::readBeans); readImported(importedElements(roundEnv)); - getElements(roundEnv, Constants.CONTROLLER).ifPresent(this::readBeans); - getElements(roundEnv, ProxyPrism.PRISM_TYPE).ifPresent(this::readBeans); + maybeElements(roundEnv, Constants.CONTROLLER).ifPresent(this::readBeans); + maybeElements(roundEnv, ProxyPrism.PRISM_TYPE).ifPresent(this::readBeans); allScopes.readBeans(roundEnv); defaultScope.write(roundEnv.processingOver()); @@ -124,19 +121,18 @@ public boolean process(Set annotations, RoundEnvironment } // Optional because these annotations are not guaranteed to exist - private static Optional> getElements( - RoundEnvironment round, String name) { + private static Optional> maybeElements(RoundEnvironment round, String name) { return Optional.ofNullable(typeElement(name)).map(round::getElementsAnnotatedWith); } private Set importedElements(RoundEnvironment roundEnv) { - return getElements(roundEnv, ImportPrism.PRISM_TYPE).stream() - .flatMap(Set::stream) - .map(ImportPrism::getInstanceOn) - .flatMap(p -> p.value().stream()) - .map(ProcessingContext::asElement) - .filter(this::notAlreadyProvided) - .collect(Collectors.toSet()); + return maybeElements(roundEnv, ImportPrism.PRISM_TYPE).stream() + .flatMap(Set::stream) + .map(ImportPrism::getInstanceOn) + .flatMap(p -> p.value().stream()) + .map(ProcessingContext::asElement) + .filter(this::notAlreadyProvided) + .collect(Collectors.toSet()); } private boolean notAlreadyProvided(TypeElement e) { @@ -145,10 +141,10 @@ private boolean notAlreadyProvided(TypeElement e) { } private static Map importedAspects(RoundEnvironment roundEnv) { - return getElements(roundEnv, AspectImportPrism.PRISM_TYPE).stream() - .flatMap(Set::stream) - .map(AspectImportPrism::getInstanceOn) - .collect(Collectors.toMap(p -> p.value().toString(), p -> p)); + return maybeElements(roundEnv, AspectImportPrism.PRISM_TYPE).stream() + .flatMap(Set::stream) + .map(AspectImportPrism::getInstanceOn) + .collect(Collectors.toMap(p -> p.value().toString(), p -> p)); } private void readScopes(Set scopes) { @@ -161,7 +157,9 @@ private void readScopes(Set scopes) { addTestScope(); } - /** Add built-in test scope for @TestScope if available. */ + /** + * Add built-in test scope for @TestScope if available. + */ private void addTestScope() { final var testScopeType = elementUtils.getTypeElement(Constants.TESTSCOPE); if (testScopeType != null) { @@ -181,9 +179,10 @@ private void readImported(Set beans) { readChangedBeans(ElementFilter.typesIn(beans), false, true); } - /** Read the beans that have changed. */ - private void readChangedBeans( - Set beans, boolean factory, boolean importedComponent) { + /** + * Read the beans that have changed. + */ + private void readChangedBeans(Set beans, boolean factory, boolean importedComponent) { for (final var typeElement : beans) { if (typeElement.getKind() == ElementKind.INTERFACE) { continue; @@ -202,7 +201,9 @@ private void readChangedBeans( } } - /** Find the scope if the Factory has a scope annotation. */ + /** + * Find the scope if the Factory has a scope annotation. + */ private ScopeInfo findScope(Element element) { for (final AnnotationMirror annotationMirror : element.getAnnotationMirrors()) { final var scopeInfo = allScopes.get(annotationMirror.getAnnotationType().toString()); @@ -213,7 +214,9 @@ private ScopeInfo findScope(Element element) { return null; } - /** Read the existing meta-data from InjectModule (if found) and the factory bean (if exists). */ + /** + * Read the existing meta-data from InjectModule (if found) and the factory bean (if exists). + */ private void readModule(RoundEnvironment roundEnv) { if (readModuleInfo) { // only read the module meta data once @@ -231,22 +234,22 @@ private void readModule(RoundEnvironment roundEnv) { readInjectModule(roundEnv); } - /** Read InjectModule for things like package-info etc (not for custom scopes) */ + /** + * Read InjectModule for things like package-info etc (not for custom scopes) + */ private void readInjectModule(RoundEnvironment roundEnv) { - // read other that are annotated with InjectModule - getElements(roundEnv, InjectModulePrism.PRISM_TYPE).stream() - .flatMap(Set::stream) - .forEach( - element -> { - final var scope = ScopePrism.getInstanceOn(element); - if (scope == null) { - // it it not a custom scope annotation - final var annotation = InjectModulePrism.getInstanceOn(element); - if (annotation != null) { - defaultScope.details(annotation.name(), element); - } - } - }); + maybeElements(roundEnv, InjectModulePrism.PRISM_TYPE).stream() + .flatMap(Set::stream) + .forEach(element -> { + final var scope = ScopePrism.getInstanceOn(element); + if (scope == null) { + // it it not a custom scope annotation + final var annotation = InjectModulePrism.getInstanceOn(element); + if (annotation != null) { + defaultScope.details(annotation.name(), element); + } + } + }); } }