Skip to content

Commit 5658f50

Browse files
committed
handle pkg private
1 parent 24cc9ff commit 5658f50

File tree

5 files changed

+36
-6
lines changed

5 files changed

+36
-6
lines changed

inject-generator/src/main/java/io/avaje/inject/generator/MethodReader.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ final class MethodReader {
7575
var lazyPrism = Util.isLazy(element);
7676
lazy = lazyPrism != null;
7777
conditions.readAll(element);
78-
this.lazyProxyType = lazy ? Util.lazyProxy(element) : null;
78+
this.lazyProxyType = lazy ? Util.lazyProxy(element, beanType) : null;
7979
this.proxyLazy = lazy && lazyProxyType != null;
8080
if (lazy && !proxyLazy) {
8181
if (lazyPrism.enforceProxy()) {

inject-generator/src/main/java/io/avaje/inject/generator/Util.java

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -395,15 +395,19 @@ static void validateBeanTypes(Element origin, List<TypeMirror> beanType) {
395395
});
396396
}
397397

398-
static TypeElement lazyProxy(Element element) {
398+
static TypeElement lazyProxy(TypeElement element) {
399+
return lazyProxy(element, element);
400+
}
401+
402+
static TypeElement lazyProxy(Element element, TypeElement source) {
399403
TypeElement type =
400404
element instanceof TypeElement
401405
? (TypeElement) element
402406
: APContext.asTypeElement(((ExecutableElement) element).getReturnType());
403407

404408
if (type.getModifiers().contains(Modifier.FINAL)
405409
|| !type.getKind().isInterface() && !Util.hasNoArgConstructor(type)
406-
|| Util.hasFinalMethods(type)) {
410+
|| Util.cantOverride(type, source)) {
407411

408412
return BeanTypesPrism.getOptionalOn(element)
409413
.map(BeanTypesPrism::value)
@@ -418,11 +422,23 @@ static TypeElement lazyProxy(Element element) {
418422
return type;
419423
}
420424

421-
private static boolean hasFinalMethods(TypeElement type) {
425+
private static boolean cantOverride(TypeElement type, TypeElement source) {
426+
427+
var pkgPrivate =
428+
source
429+
.getEnclosingElement()
430+
.getSimpleName()
431+
.contentEquals(type.getEnclosingElement().getSimpleName());
432+
422433
return ElementFilter.methodsIn(type.getEnclosedElements()).stream()
423434
.filter(x -> !x.getModifiers().contains(Modifier.STATIC))
424435
.filter(x -> !x.getModifiers().contains(Modifier.PRIVATE))
425-
.anyMatch(m -> m.getModifiers().contains(Modifier.FINAL));
436+
.anyMatch(
437+
m ->
438+
m.getModifiers().contains(Modifier.FINAL)
439+
|| !m.getModifiers().contains(Modifier.PUBLIC)
440+
&& !m.getModifiers().contains(Modifier.PROTECTED)
441+
&& !pkgPrivate);
426442
}
427443

428444
static boolean hasNoArgConstructor(TypeElement beanType) {
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package io.avaje.inject.generator.models.valid.lazy;
2+
3+
public class LazyBeanPkgPrivate {
4+
5+
void something() {}
6+
7+
}

inject-generator/src/test/java/io/avaje/inject/generator/models/valid/RandomFactory.java renamed to inject-generator/src/test/java/io/avaje/inject/generator/models/valid/lazy/RandomFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package io.avaje.inject.generator.models.valid;
1+
package io.avaje.inject.generator.models.valid.lazy;
22

33
import java.security.SecureRandom;
44

inject-generator/src/test/java/io/avaje/inject/generator/models/valid/lazy/generic/LazyGenericFactory.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import io.avaje.inject.Bean;
44
import io.avaje.inject.Factory;
55
import io.avaje.inject.Lazy;
6+
import io.avaje.inject.generator.models.valid.lazy.LazyBeanPkgPrivate;
67

78
@Factory
89
public class LazyGenericFactory {
@@ -12,4 +13,10 @@ public class LazyGenericFactory {
1213
LazyGenericInterface<String> lazyInterface() {
1314
return null;
1415
}
16+
17+
@Bean
18+
@Lazy
19+
LazyBeanPkgPrivate pkgPrivateMethods() {
20+
return null;
21+
}
1522
}

0 commit comments

Comments
 (0)