From 83a9ecb3d5649fd2c302447ff6fae2b73e534655 Mon Sep 17 00:00:00 2001 From: Mike Friesen Date: Fri, 19 Dec 2025 21:12:29 -0600 Subject: [PATCH] Fix packageName generated in the native-image META-INF folder --- build.gradle | 2 +- .../GraalvmReflectAnnontationProcessor.java | 29 ++++++++++++++++--- ...raalvmReflectAnnontationProcessorTest.java | 12 ++++---- 3 files changed, 32 insertions(+), 11 deletions(-) diff --git a/build.gradle b/build.gradle index a03a554..6de9122 100644 --- a/build.gradle +++ b/build.gradle @@ -10,7 +10,7 @@ plugins { } group 'com.formkiq' -version '1.5.1' +version '1.5.2' dependencies { annotationProcessor group: 'com.google.auto.service', name: 'auto-service', version: '1.1.1' diff --git a/src/main/java/com/formkiq/graalvm/processors/GraalvmReflectAnnontationProcessor.java b/src/main/java/com/formkiq/graalvm/processors/GraalvmReflectAnnontationProcessor.java index 6001029..c3f7890 100644 --- a/src/main/java/com/formkiq/graalvm/processors/GraalvmReflectAnnontationProcessor.java +++ b/src/main/java/com/formkiq/graalvm/processors/GraalvmReflectAnnontationProcessor.java @@ -50,6 +50,7 @@ import javax.lang.model.element.Element; import javax.lang.model.element.ElementKind; import javax.lang.model.element.ExecutableElement; +import javax.lang.model.element.PackageElement; import javax.lang.model.element.TypeElement; import javax.lang.model.type.MirroredTypeException; import javax.lang.model.type.TypeMirror; @@ -81,6 +82,8 @@ public class GraalvmReflectAnnontationProcessor extends AbstractProcessor { private final Gson gson = new GsonBuilder().disableHtmlEscaping().create(); /** {@link List} of {@link Reflect}. */ private final Map reflects = new HashMap<>(); + /** Name of Annotation Package. */ + private String packageName = "default"; private TypeElement asTypeElement(final TypeMirror typeMirror) { Types typeUtils = this.processingEnv.getTypeUtils(); @@ -394,6 +397,8 @@ private void processingReflectable(final RoundEnvironment roundEnv) { for (Element element : roundEnv.getElementsAnnotatedWith(Reflectable.class)) { + setPackageName(element); + String className = getClassNameByType(element); LOGGER.log(LOGLEVEL, "processing 'Reflectable' annotation on class " + className); @@ -429,16 +434,29 @@ private void processingReflectable(final RoundEnvironment roundEnv) { /** * Load Reflectable Imports. * - * @param roundEnv {@link RoundEnvironment}s + * @param roundEnv {@link RoundEnvironment} */ private void processingReflectableImports(final RoundEnvironment roundEnv) { for (Element element : roundEnv.getElementsAnnotatedWith(ReflectableImport.class)) { + setPackageName(element); processImportedClasses(element); processImportFiles(element); } } + private void setPackageName(final Element element) { + String name = getPackage(element); + if (name != null && !name.isEmpty()) { + this.packageName = name; + } + } + + private String getPackage(final Element element) { + PackageElement pkg = processingEnv.getElementUtils().getPackageOf(element); + return pkg.getQualifiedName().toString(); + } + /** * Processing classes with 'ReflectableClass' annotation. * @@ -486,6 +504,8 @@ private void processReflectableClasses(final RoundEnvironment roundEnv) { for (Element element : roundEnv.getElementsAnnotatedWith(ReflectableClasses.class)) { + setPackageName(element); + String className = getClassNameByType(element); LOGGER.log(LOGLEVEL, "processing 'ReflectableClasses' annotation on class " + className); @@ -504,6 +524,9 @@ private void processReflectableClasses(final RoundEnvironment roundEnv) { Set.of(ReflectableClass.class, ReflectableClass.ReflectableClasses.class)); for (Element element : reflectableClasses) { + + setPackageName(element); + String className = getClassNameByType(element); LOGGER.log(LOGLEVEL, "processing 'ReflectableClasses' annotation on class " + className); @@ -524,10 +547,8 @@ private void writeOutput() { try { - String name = generateReflectConfigPath(this.reflects.keySet()); - FileObject file = this.processingEnv.getFiler().createResource(StandardLocation.CLASS_OUTPUT, - "", "META-INF/native-image/" + name + "/reflect-config.json"); + "", "META-INF/native-image/" + packageName + "/reflect-config.json"); List> data = this.reflects.values().stream().map(Reflect::data).collect(Collectors.toList()); diff --git a/src/test/java/com/formkiq/graalvm/processors/GraalvmReflectAnnontationProcessorTest.java b/src/test/java/com/formkiq/graalvm/processors/GraalvmReflectAnnontationProcessorTest.java index 181a711..5c7b349 100644 --- a/src/test/java/com/formkiq/graalvm/processors/GraalvmReflectAnnontationProcessorTest.java +++ b/src/test/java/com/formkiq/graalvm/processors/GraalvmReflectAnnontationProcessorTest.java @@ -56,7 +56,7 @@ public void testReflectableImport01() throws IOException { public class Test { } """)); - List> map = getReflectConf(compilation, "com.formkiq.graalvm.processors"); + List> map = getReflectConf(compilation, "test"); assertEquals(1, map.size()); assertEquals("com.formkiq.graalvm.processors.Test3", map.get(0).get("name")); @@ -100,7 +100,7 @@ public void testReflectableClasses01() throws IOException { public class Test { } """)); - List> map = getReflectConf(compilation, "com.formkiq.graalvm.processors"); + List> map = getReflectConf(compilation, "test"); assertEquals(1, map.size()); assertEquals("com.formkiq.graalvm.processors.Test4", map.get(0).get("name")); @@ -144,7 +144,7 @@ public void testReflectableClass01() throws IOException { public class Test { } """)); - List> map = getReflectConf(compilation, "com.formkiq.graalvm.processors"); + List> map = getReflectConf(compilation, "test"); assertEquals(1, map.size()); assertEquals("com.formkiq.graalvm.processors.Test4", map.get(0).get("name")); @@ -190,7 +190,7 @@ public void testReflectableClass02() throws IOException { public class Test { } """)); - List> map = getReflectConf(compilation, "com.formkiq.graalvm.processors"); + List> map = getReflectConf(compilation, "test"); assertEquals(1, map.size()); @@ -218,7 +218,7 @@ public void testReflectableClass03() throws IOException { public class Test { } """)); - List> map = getReflectConf(compilation, "com.formkiq.graalvm.processors"); + List> map = getReflectConf(compilation, "test"); assertEquals(1, map.size()); assertEquals("com.formkiq.graalvm.processors.Test5$Test5Inner", map.get(0).get("name")); @@ -250,7 +250,7 @@ public void testReflectableClass04() throws IOException { public class Test { } """)); - List> map = getReflectConf(compilation, "com.formkiq.graalvm.processors"); + List> map = getReflectConf(compilation, "test"); assertEquals(2, map.size()); assertEquals("com.formkiq.graalvm.processors.Test4", map.get(0).get("name"));