From 44eee6527ae017ce7e0768bef1dafac933d2c43f Mon Sep 17 00:00:00 2001 From: Josiah Noel <32279667+SentryMan@users.noreply.github.com> Date: Fri, 13 Jun 2025 11:36:45 -0400 Subject: [PATCH 1/3] Fix invalid `Provider` generation with AOP --- .../main/java/io/avaje/inject/generator/MethodReader.java | 6 +++--- .../inject/generator/models/valid/aspect/MethodTest.java | 8 ++++++++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/inject-generator/src/main/java/io/avaje/inject/generator/MethodReader.java b/inject-generator/src/main/java/io/avaje/inject/generator/MethodReader.java index dfc31234e..a58b345b8 100644 --- a/inject-generator/src/main/java/io/avaje/inject/generator/MethodReader.java +++ b/inject-generator/src/main/java/io/avaje/inject/generator/MethodReader.java @@ -669,10 +669,10 @@ void writeMethodParam(Append writer) { if (nullable) { writer.append("@Nullable "); } - if (genericType.isGeneric()) { - writer.append(genericType.shortWithoutAnnotations()); + if (fullUType.isGeneric()) { + writer.append(fullUType.shortWithoutAnnotations()); } else { - writer.append(Util.shortName(genericType.mainType())); + writer.append(Util.shortName(fullUType.mainType())); } writer.append(" ").append(simpleName); } diff --git a/inject-generator/src/test/java/io/avaje/inject/generator/models/valid/aspect/MethodTest.java b/inject-generator/src/test/java/io/avaje/inject/generator/models/valid/aspect/MethodTest.java index b6b11e32a..b4d8ffe2e 100644 --- a/inject-generator/src/test/java/io/avaje/inject/generator/models/valid/aspect/MethodTest.java +++ b/inject-generator/src/test/java/io/avaje/inject/generator/models/valid/aspect/MethodTest.java @@ -4,11 +4,19 @@ import io.avaje.inject.Component; import io.avaje.inject.aop.AOPFallback; +import io.avaje.inject.generator.models.valid.TestClass; import io.avaje.inject.generator.models.valid.Timed; +import jakarta.inject.Provider; @Component public class MethodTest { + Provider provider; + + public MethodTest(Provider provider) { + this.provider = provider; + } + @Timed void test(@Param Map<@TypeUse String, String> str, @Param int inty, String regular) {} From fafb15f2994b7db222e67a186bb9c34e5d8c5555 Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Mon, 16 Jun 2025 13:58:54 +1200 Subject: [PATCH 2/3] #833 Add backbox test that confirms fix and behaviour --- .../myapp/config/MyAopProviderConsumer.java | 20 ++++++++++++++++ .../config/MyAopProviderConsumerTest.java | 23 +++++++++++++++++++ .../models/valid/aspect/MethodTest.java | 6 ----- 3 files changed, 43 insertions(+), 6 deletions(-) create mode 100644 blackbox-test-inject/src/main/java/org/example/myapp/config/MyAopProviderConsumer.java create mode 100644 blackbox-test-inject/src/test/java/org/example/myapp/config/MyAopProviderConsumerTest.java diff --git a/blackbox-test-inject/src/main/java/org/example/myapp/config/MyAopProviderConsumer.java b/blackbox-test-inject/src/main/java/org/example/myapp/config/MyAopProviderConsumer.java new file mode 100644 index 000000000..77c6a9b78 --- /dev/null +++ b/blackbox-test-inject/src/main/java/org/example/myapp/config/MyAopProviderConsumer.java @@ -0,0 +1,20 @@ +package org.example.myapp.config; + +import io.avaje.inject.Component; +import jakarta.inject.Provider; +import org.example.myapp.aspect.MyTimed; + +@Component +@MyTimed +public class MyAopProviderConsumer { + + final Provider builderProvider; + + public MyAopProviderConsumer(Provider builderProvider) { + this.builderProvider = builderProvider; + } + + public AppConfig.Builder doStuff() { + return builderProvider.get(); + } +} diff --git a/blackbox-test-inject/src/test/java/org/example/myapp/config/MyAopProviderConsumerTest.java b/blackbox-test-inject/src/test/java/org/example/myapp/config/MyAopProviderConsumerTest.java new file mode 100644 index 000000000..f8c34a749 --- /dev/null +++ b/blackbox-test-inject/src/test/java/org/example/myapp/config/MyAopProviderConsumerTest.java @@ -0,0 +1,23 @@ +package org.example.myapp.config; + +import io.avaje.inject.test.InjectTest; +import jakarta.inject.Inject; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +@InjectTest +class MyAopProviderConsumerTest { + + @Inject MyAopProviderConsumer consumer; + + @Test + void doStuff() { + AppConfig.Builder builder1 = consumer.doStuff(); + AppConfig.Builder builder2 = consumer.doStuff(); + + assertThat(builder1).isNotNull(); + assertThat(builder2).isNotNull(); + assertThat(builder2).isNotSameAs(builder1); + } +} diff --git a/inject-generator/src/test/java/io/avaje/inject/generator/models/valid/aspect/MethodTest.java b/inject-generator/src/test/java/io/avaje/inject/generator/models/valid/aspect/MethodTest.java index b4d8ffe2e..11ea04b3b 100644 --- a/inject-generator/src/test/java/io/avaje/inject/generator/models/valid/aspect/MethodTest.java +++ b/inject-generator/src/test/java/io/avaje/inject/generator/models/valid/aspect/MethodTest.java @@ -11,12 +11,6 @@ @Component public class MethodTest { - Provider provider; - - public MethodTest(Provider provider) { - this.provider = provider; - } - @Timed void test(@Param Map<@TypeUse String, String> str, @Param int inty, String regular) {} From c3a5f44e0df12960fe40d68e07f38a4b971cfb80 Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Mon, 16 Jun 2025 13:59:51 +1200 Subject: [PATCH 3/3] Tidy unused imports --- .../avaje/inject/generator/models/valid/aspect/MethodTest.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/inject-generator/src/test/java/io/avaje/inject/generator/models/valid/aspect/MethodTest.java b/inject-generator/src/test/java/io/avaje/inject/generator/models/valid/aspect/MethodTest.java index 11ea04b3b..b6b11e32a 100644 --- a/inject-generator/src/test/java/io/avaje/inject/generator/models/valid/aspect/MethodTest.java +++ b/inject-generator/src/test/java/io/avaje/inject/generator/models/valid/aspect/MethodTest.java @@ -4,9 +4,7 @@ import io.avaje.inject.Component; import io.avaje.inject.aop.AOPFallback; -import io.avaje.inject.generator.models.valid.TestClass; import io.avaje.inject.generator.models.valid.Timed; -import jakarta.inject.Provider; @Component public class MethodTest {