From 3f43fdf63d061248f62c0a86a8b69706ec8099af Mon Sep 17 00:00:00 2001 From: Josiah Noel <32279667+SentryMan@users.noreply.github.com> Date: Wed, 19 Nov 2025 16:35:37 -0500 Subject: [PATCH] Fix cases where a nested public class causes a compile error --- .../inject/generator/SimpleModuleWriter.java | 12 +++++++++- .../models/valid/pkg_private/SomeDao.java | 24 +++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 inject-generator/src/test/java/io/avaje/inject/generator/models/valid/pkg_private/SomeDao.java diff --git a/inject-generator/src/main/java/io/avaje/inject/generator/SimpleModuleWriter.java b/inject-generator/src/main/java/io/avaje/inject/generator/SimpleModuleWriter.java index 969c9796..5125774a 100644 --- a/inject-generator/src/main/java/io/avaje/inject/generator/SimpleModuleWriter.java +++ b/inject-generator/src/main/java/io/avaje/inject/generator/SimpleModuleWriter.java @@ -23,6 +23,7 @@ import javax.lang.model.element.ElementKind; import javax.lang.model.element.Modifier; +import javax.lang.model.element.NestingKind; import javax.lang.model.element.TypeElement; import javax.tools.FileObject; @@ -261,7 +262,9 @@ private Set distinctPublicClasses() { String type = Util.trimGenerics(rawType); TypeElement element = typeElement(type); - if (element != null && element.getModifiers().contains(Modifier.PUBLIC)) { + if (element != null + && element.getModifiers().contains(Modifier.PUBLIC) + && nestedPublic(element)) { publicClasses.add(type); } } @@ -269,6 +272,13 @@ private Set distinctPublicClasses() { return publicClasses; } + private static boolean nestedPublic(TypeElement element) { + var enclosingElement = element.getEnclosingElement(); + return element.getNestingKind() == NestingKind.TOP_LEVEL + || enclosingElement.getModifiers().contains(Modifier.PUBLIC) + && nestedPublic((TypeElement) enclosingElement); + } + private void writeBuildMethod() { writer.append(CODE_COMMENT_CREATE_CONTEXT).eol(); writer.append(" @Override").eol(); diff --git a/inject-generator/src/test/java/io/avaje/inject/generator/models/valid/pkg_private/SomeDao.java b/inject-generator/src/test/java/io/avaje/inject/generator/models/valid/pkg_private/SomeDao.java new file mode 100644 index 00000000..11b077bf --- /dev/null +++ b/inject-generator/src/test/java/io/avaje/inject/generator/models/valid/pkg_private/SomeDao.java @@ -0,0 +1,24 @@ +package io.avaje.inject.generator.models.valid.pkg_private; + +import io.avaje.inject.Bean; +import io.avaje.inject.Factory; +import io.avaje.inject.generator.models.valid.pkg_private.SomeDao.SomeMapper; + +interface SomeDao { + + String findById(String id); + + interface SomeMapper { + + SomeDao someDao(String keyspace); + } +} + +@Factory +final class SomeUnrelatedExampleFactory { + + @Bean + SomeMapper mapper() { + return null; + } +}