diff --git a/build.gradle b/build.gradle index 0a966e8..a03a554 100644 --- a/build.gradle +++ b/build.gradle @@ -10,7 +10,7 @@ plugins { } group 'com.formkiq' -version '1.5.0' +version '1.5.1' 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 8be233c..6001029 100644 --- a/src/main/java/com/formkiq/graalvm/processors/GraalvmReflectAnnontationProcessor.java +++ b/src/main/java/com/formkiq/graalvm/processors/GraalvmReflectAnnontationProcessor.java @@ -53,6 +53,7 @@ import javax.lang.model.element.TypeElement; import javax.lang.model.type.MirroredTypeException; import javax.lang.model.type.TypeMirror; +import javax.lang.model.util.Elements; import javax.lang.model.util.Types; import javax.tools.FileObject; import javax.tools.StandardLocation; @@ -194,7 +195,7 @@ private String getClassNameByType(final Element element) { result = result.getEnclosingElement(); } - className = te.getQualifiedName().toString(); + className = getBinaryName(te); if (!simpleNames.isEmpty()) { String e = element.getEnclosingElement().toString(); @@ -210,6 +211,11 @@ private String getClassNameByType(final Element element) { return className; } + public String getBinaryName(final TypeElement typeElement) { + Elements elements = processingEnv.getElementUtils(); + return elements.getBinaryName(typeElement).toString(); + } + /** * Get {@link Reflect}. * diff --git a/src/test/java/com/formkiq/graalvm/processors/GraalvmReflectAnnontationProcessorTest.java b/src/test/java/com/formkiq/graalvm/processors/GraalvmReflectAnnontationProcessorTest.java index 026def9..181a711 100644 --- a/src/test/java/com/formkiq/graalvm/processors/GraalvmReflectAnnontationProcessorTest.java +++ b/src/test/java/com/formkiq/graalvm/processors/GraalvmReflectAnnontationProcessorTest.java @@ -835,6 +835,48 @@ public record TestRecord(String name) {} assertEquals(Boolean.TRUE, map.get(0).get("allDeclaredFields")); } + /** + * test nested java record. + * + * @throws IOException IOException + */ + @Test + public void testNestedRecordAnnotations() throws IOException { + JavaFileObject recordSource = JavaFileObjects.forSourceString("com.example.TestRecord", """ + package com.example; + + import com.formkiq.graalvm.annotations.Reflectable; + + @Reflectable + public record TestRecord(String name) { + @Reflectable + public record NestedTestRecord(String name) { + } + } + """); + Compilation compilation = + javac().withProcessors(new GraalvmReflectAnnontationProcessor()).compile(recordSource); + + List> map = getReflectConf(compilation, "com.example"); + + assertEquals(2, map.size()); + assertEquals("com.example.TestRecord", map.get(0).get("name")); + assertEquals(Boolean.TRUE, map.get(0).get("allPublicConstructors")); + assertEquals(Boolean.TRUE, map.get(0).get("allPublicMethods")); + assertEquals(Boolean.TRUE, map.get(0).get("allPublicFields")); + assertEquals(Boolean.FALSE, map.get(0).get("allDeclaredConstructors")); + assertEquals(Boolean.TRUE, map.get(0).get("allDeclaredMethods")); + assertEquals(Boolean.TRUE, map.get(0).get("allDeclaredFields")); + + assertEquals("com.example.TestRecord$NestedTestRecord", map.get(1).get("name")); + assertEquals(Boolean.TRUE, map.get(0).get("allPublicConstructors")); + assertEquals(Boolean.TRUE, map.get(0).get("allPublicMethods")); + assertEquals(Boolean.TRUE, map.get(0).get("allPublicFields")); + assertEquals(Boolean.FALSE, map.get(0).get("allDeclaredConstructors")); + assertEquals(Boolean.TRUE, map.get(0).get("allDeclaredMethods")); + assertEquals(Boolean.TRUE, map.get(0).get("allDeclaredFields")); + } + /** * test java record. *