From fc2588281c9fa3e3d761d92ec923502389c51b34 Mon Sep 17 00:00:00 2001 From: Josiah Noel <32279667+SentryMan@users.noreply.github.com> Date: Mon, 24 Jun 2024 19:02:46 -0400 Subject: [PATCH] adds new spi annotation --- .../org/example/myapp/ConfigPropertiesPlugin.java | 3 +++ .../io.avaje.inject.spi.PropertyRequiresPlugin | 1 - .../io/avaje/inject/generator/InjectProcessor.java | 9 +++++++++ .../java/io/avaje/inject/generator/package-info.java | 5 ++--- .../src/main/java/io/avaje/inject/spi/InjectSpi.java | 12 ++++++++++++ 5 files changed, 26 insertions(+), 4 deletions(-) delete mode 100644 blackbox-test-inject/src/main/resources/META-INF/services/io.avaje.inject.spi.PropertyRequiresPlugin create mode 100644 inject/src/main/java/io/avaje/inject/spi/InjectSpi.java diff --git a/blackbox-test-inject/src/main/java/org/example/myapp/ConfigPropertiesPlugin.java b/blackbox-test-inject/src/main/java/org/example/myapp/ConfigPropertiesPlugin.java index 4200c5c7e..bb96557c0 100644 --- a/blackbox-test-inject/src/main/java/org/example/myapp/ConfigPropertiesPlugin.java +++ b/blackbox-test-inject/src/main/java/org/example/myapp/ConfigPropertiesPlugin.java @@ -3,10 +3,13 @@ import io.avaje.config.Config; import io.avaje.inject.Component; import io.avaje.inject.spi.ConfigPropertyPlugin; +import io.avaje.inject.spi.InjectSpi; + import org.other.one.OtherComponent2; import java.util.Optional; +@InjectSpi @Component.Import(value = OtherComponent2.class) public class ConfigPropertiesPlugin implements ConfigPropertyPlugin { diff --git a/blackbox-test-inject/src/main/resources/META-INF/services/io.avaje.inject.spi.PropertyRequiresPlugin b/blackbox-test-inject/src/main/resources/META-INF/services/io.avaje.inject.spi.PropertyRequiresPlugin deleted file mode 100644 index 81720ef91..000000000 --- a/blackbox-test-inject/src/main/resources/META-INF/services/io.avaje.inject.spi.PropertyRequiresPlugin +++ /dev/null @@ -1 +0,0 @@ -org.example.myapp.ConfigPropertiesPlugin diff --git a/inject-generator/src/main/java/io/avaje/inject/generator/InjectProcessor.java b/inject-generator/src/main/java/io/avaje/inject/generator/InjectProcessor.java index 4a0819ce1..1a566f1ad 100644 --- a/inject-generator/src/main/java/io/avaje/inject/generator/InjectProcessor.java +++ b/inject-generator/src/main/java/io/avaje/inject/generator/InjectProcessor.java @@ -36,6 +36,7 @@ FactoryPrism.PRISM_TYPE, ImportPrism.PRISM_TYPE, InjectModulePrism.PRISM_TYPE, + InjectSpiPrism.PRISM_TYPE, PrototypePrism.PRISM_TYPE, QualifierPrism.PRISM_TYPE, ScopePrism.PRISM_TYPE, @@ -150,6 +151,7 @@ public boolean process(Set annotations, RoundEnvironment .map(UType::fullWithoutAnnotations) .forEach(ProcessingContext::addOptionalType); + maybeElements(roundEnv, InjectSpiPrism.PRISM_TYPE).ifPresent(this::registerSPI); allScopes.readBeans(roundEnv); defaultScope.write(processingOver); allScopes.write(processingOver); @@ -328,4 +330,11 @@ private void readInjectModule(RoundEnvironment roundEnv) { } }); } + + private void registerSPI(Set beans) { + ElementFilter.typesIn(beans).stream() + .map(TypeElement::getQualifiedName) + .map(Object::toString) + .forEach(ProcessingContext::addInjectSPI); + } } diff --git a/inject-generator/src/main/java/io/avaje/inject/generator/package-info.java b/inject-generator/src/main/java/io/avaje/inject/generator/package-info.java index fd89e8adc..1391c7354 100644 --- a/inject-generator/src/main/java/io/avaje/inject/generator/package-info.java +++ b/inject-generator/src/main/java/io/avaje/inject/generator/package-info.java @@ -11,6 +11,7 @@ @GeneratePrism(Factory.class) @GeneratePrism(Generated.class) @GeneratePrism(Inject.class) +@GeneratePrism(InjectSpi.class) @GeneratePrism(InjectModule.class) @GeneratePrism(Lazy.class) @GeneratePrism(Named.class) @@ -33,9 +34,7 @@ import io.avaje.inject.*; import io.avaje.inject.aop.Aspect; import io.avaje.inject.aop.AOPFallback; -import io.avaje.inject.spi.DependencyMeta; -import io.avaje.inject.spi.Generated; -import io.avaje.inject.spi.Proxy; +import io.avaje.inject.spi.*; import io.avaje.prism.GeneratePrism; import jakarta.inject.Inject; import jakarta.inject.Named; diff --git a/inject/src/main/java/io/avaje/inject/spi/InjectSpi.java b/inject/src/main/java/io/avaje/inject/spi/InjectSpi.java new file mode 100644 index 000000000..98fb8169e --- /dev/null +++ b/inject/src/main/java/io/avaje/inject/spi/InjectSpi.java @@ -0,0 +1,12 @@ +package io.avaje.inject.spi; + +import static java.lang.annotation.ElementType.TYPE; +import static java.lang.annotation.RetentionPolicy.SOURCE; + +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +/** Marker annotation that generates META-INF entries for {@link InjectExtension} Classes */ +@Target(TYPE) +@Retention(SOURCE) +public @interface InjectSpi {}