From 0934778c3d51e41931e762eb40c169222a86a93d Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Mon, 9 Oct 2023 18:32:30 +1300 Subject: [PATCH] #408 - Support for package protected bean with AOP aspect --- .../main/java/org/example/myapp/OtherService.java | 2 +- .../main/java/org/example/myapp/OtherUserOf.java | 13 +++++++++++++ .../avaje/inject/generator/TypeExtendsReader.java | 12 +++++++----- .../java/io/avaje/inject/generator/TypeReader.java | 3 ++- 4 files changed, 23 insertions(+), 7 deletions(-) create mode 100644 blackbox-test-inject/src/main/java/org/example/myapp/OtherUserOf.java diff --git a/blackbox-test-inject/src/main/java/org/example/myapp/OtherService.java b/blackbox-test-inject/src/main/java/org/example/myapp/OtherService.java index bca4681f2..149b189bf 100644 --- a/blackbox-test-inject/src/main/java/org/example/myapp/OtherService.java +++ b/blackbox-test-inject/src/main/java/org/example/myapp/OtherService.java @@ -5,7 +5,7 @@ import org.example.myapp.aspect.MyTimed; @Singleton -public class OtherService { +class OtherService { @MyAround public String other(String param0, int param1) { diff --git a/blackbox-test-inject/src/main/java/org/example/myapp/OtherUserOf.java b/blackbox-test-inject/src/main/java/org/example/myapp/OtherUserOf.java new file mode 100644 index 000000000..ad94941eb --- /dev/null +++ b/blackbox-test-inject/src/main/java/org/example/myapp/OtherUserOf.java @@ -0,0 +1,13 @@ +package org.example.myapp; + +import jakarta.inject.Singleton; + +@Singleton +class OtherUserOf { + + final OtherService otherService; + + OtherUserOf(OtherService otherService) { + this.otherService = otherService; + } +} diff --git a/inject-generator/src/main/java/io/avaje/inject/generator/TypeExtendsReader.java b/inject-generator/src/main/java/io/avaje/inject/generator/TypeExtendsReader.java index fe43ef344..a7ce4fd8b 100644 --- a/inject-generator/src/main/java/io/avaje/inject/generator/TypeExtendsReader.java +++ b/inject-generator/src/main/java/io/avaje/inject/generator/TypeExtendsReader.java @@ -34,6 +34,7 @@ final class TypeExtendsReader { private final boolean baseTypeIsInterface; private final boolean publicAccess; private final boolean autoProvide; + private final boolean proxyBean; private boolean closeable; /** * The implied qualifier name based on naming convention. @@ -41,7 +42,7 @@ final class TypeExtendsReader { private String qualifierName; private String providesAspect = ""; - TypeExtendsReader(GenericType baseGenericType, TypeElement baseType, boolean factory, ImportTypeMap importTypes) { + TypeExtendsReader(GenericType baseGenericType, TypeElement baseType, boolean factory, ImportTypeMap importTypes, boolean proxyBean) { this.baseGenericType = baseGenericType; this.baseType = baseType; this.extendsInjection = new TypeExtendsInjection(baseType, factory, importTypes); @@ -50,6 +51,7 @@ final class TypeExtendsReader { this.baseTypeIsInterface = baseType.getKind() == ElementKind.INTERFACE; this.publicAccess = baseType.getModifiers().contains(Modifier.PUBLIC); this.autoProvide = autoProvide(); + this.proxyBean = proxyBean; } private boolean autoProvide() { @@ -147,7 +149,7 @@ void process(boolean forBean) { qualifierName = baseName.substring(0, baseName.length() - superName.length()).toLowerCase(); } } - addSuperType(superElement, superMirror); + addSuperType(superElement, superMirror, proxyBean); } providesTypes.addAll(extendsTypes); @@ -167,12 +169,12 @@ private String initProvidesAspect() { return ""; } - private void addSuperType(TypeElement element, TypeMirror mirror) { + private void addSuperType(TypeElement element, TypeMirror mirror, boolean proxyBean) { readInterfaces(element); final String fullName = mirror.toString(); if (!JAVA_LANG_OBJECT.equals(fullName) && !JAVA_LANG_RECORD.equals(fullName)) { final String type = Util.unwrapProvider(fullName); - if (isPublic(element)) { + if (proxyBean || isPublic(element)) { final var genericType = GenericType.parse(type); // check if any unknown generic types are in the parameters (T,T2, etc.) final var knownType = @@ -186,7 +188,7 @@ private void addSuperType(TypeElement element, TypeMirror mirror) { final var superMirror = element.getSuperclass(); final var superElement = asElement(superMirror); - addSuperType(superElement, superMirror); + addSuperType(superElement, superMirror, false); } } diff --git a/inject-generator/src/main/java/io/avaje/inject/generator/TypeReader.java b/inject-generator/src/main/java/io/avaje/inject/generator/TypeReader.java index 2caea2b68..7462f9a64 100644 --- a/inject-generator/src/main/java/io/avaje/inject/generator/TypeReader.java +++ b/inject-generator/src/main/java/io/avaje/inject/generator/TypeReader.java @@ -29,7 +29,8 @@ private TypeReader(GenericType genericType, boolean forBean, TypeElement beanTyp this.forBean = forBean; this.beanType = beanType; this.importTypes = importTypes; - this.extendsReader = new TypeExtendsReader(genericType, beanType, factory, importTypes); + final boolean proxyBean = forBean && ProxyPrism.isPresent(beanType); + this.extendsReader = new TypeExtendsReader(genericType, beanType, factory, importTypes, proxyBean); this.annotationReader = new TypeAnnotationReader(beanType); }