diff --git a/avaje-prisms/pom.xml b/avaje-prisms/pom.xml
index 994d1c4..da998cc 100644
--- a/avaje-prisms/pom.xml
+++ b/avaje-prisms/pom.xml
@@ -3,7 +3,7 @@
io.avaje
avaje-prisms-parent
- 1.44-RC2
+ 1.44-RC3
avaje-prisms
avaje-prisms
diff --git a/blackbox-test-prism/pom.xml b/blackbox-test-prism/pom.xml
index d7a7d38..3a96a5a 100644
--- a/blackbox-test-prism/pom.xml
+++ b/blackbox-test-prism/pom.xml
@@ -4,7 +4,7 @@
io.avaje
avaje-prisms-parent
- 1.44-RC2
+ 1.44-RC3
blackbox-test-prism
diff --git a/blackbox-test-prism/src/test/java/io/avaje/prisms/test/ProcessorUtilsTest.java b/blackbox-test-prism/src/test/java/io/avaje/prisms/test/ProcessorUtilsTest.java
index 4229114..001a2f8 100644
--- a/blackbox-test-prism/src/test/java/io/avaje/prisms/test/ProcessorUtilsTest.java
+++ b/blackbox-test-prism/src/test/java/io/avaje/prisms/test/ProcessorUtilsTest.java
@@ -1,6 +1,9 @@
package io.avaje.prisms.test;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
import org.junit.jupiter.api.Test;
@@ -33,4 +36,189 @@ void trimmedAnnotation() {
ProcessorUtils.trimAnnotations(
"java.ProcessorUtils.Map"));
}
+
+ // --- Tests for boxedPrimitive ---
+
+ @Test
+ void boxedPrimitive_primitiveType() {
+ assertEquals("java.lang.Integer", ProcessorUtils.boxedPrimitive("int"));
+ assertEquals("java.lang.Character", ProcessorUtils.boxedPrimitive("char"));
+ assertEquals("java.lang.Boolean", ProcessorUtils.boxedPrimitive("boolean"));
+ assertEquals("java.lang.Double", ProcessorUtils.boxedPrimitive("double"));
+ }
+
+ @Test
+ void boxedPrimitive_nonPrimitiveType() {
+ assertNull(ProcessorUtils.boxedPrimitive("String"));
+ assertNull(ProcessorUtils.boxedPrimitive("java.util.List"));
+ }
+
+ @Test
+ void boxedPrimitive_emptyString() {
+ assertNull(ProcessorUtils.boxedPrimitive(""));
+ }
+
+ // --- Tests for isPrimitive ---
+
+ @Test
+ void isPrimitive_isPrimitive() {
+ assertTrue(ProcessorUtils.isPrimitive("byte"));
+ assertTrue(ProcessorUtils.isPrimitive("long"));
+ assertTrue(ProcessorUtils.isPrimitive("float"));
+ }
+
+ @Test
+ void isPrimitive_isNotPrimitive() {
+ assertFalse(ProcessorUtils.isPrimitive("Byte"));
+ assertFalse(ProcessorUtils.isPrimitive("String"));
+ assertFalse(ProcessorUtils.isPrimitive("void")); // void is not in BOX_MAP
+ }
+
+ // --- Tests for packageOf ---
+
+ @Test
+ void packageOf_normalFQN() {
+ assertEquals("java.util", ProcessorUtils.packageOf("java.util.List"));
+ }
+
+ @Test
+ void packageOf_nestedClass() {
+ // shortType handles nested classes, e.g., "Outer.Inner"
+ assertEquals("io.avaje.test", ProcessorUtils.packageOf("io.avaje.test.Outer.Inner"));
+ }
+
+ @Test
+ void packageOf_emptyString() {
+ assertEquals("", ProcessorUtils.packageOf(""));
+ }
+
+ // --- Tests for shortType ---
+
+ @Test
+ void shortType_simpleClass() {
+ assertEquals("List", ProcessorUtils.shortType("java.util.List"));
+ }
+
+ @Test
+ void shortType_nestedClass() {
+ assertEquals("Outer.Inner", ProcessorUtils.shortType("io.avaje.test.Outer.Inner"));
+ }
+
+ @Test
+ void shortType_nestedClassWithPackagePrefix() {
+ assertEquals("Outer.Inner", ProcessorUtils.shortType("mypkg.Outer.Inner"));
+ }
+
+ @Test
+ void shortType_classInDefaultPackage() {
+ assertEquals("MyClass", ProcessorUtils.shortType("MyClass"));
+ }
+
+ @Test
+ void shortType_packageOnly() {
+ assertEquals("util", ProcessorUtils.shortType("java.util"));
+ }
+
+ @Test
+ void shortType_emptyString() {
+ assertEquals("", ProcessorUtils.shortType(""));
+ }
+
+ // --- Tests for commonParent ---
+
+ @Test
+ void commonParent_identical() {
+ assertEquals(
+ "java.util.concurrent",
+ ProcessorUtils.commonParent("java.util.concurrent", "java.util.concurrent"));
+ }
+
+ @Test
+ void commonParent_firstIsParent() {
+ assertEquals("java.util", ProcessorUtils.commonParent("java.util", "java.util.List"));
+ }
+
+ @Test
+ void commonParent_secondIsParent() {
+ assertEquals("java.util", ProcessorUtils.commonParent("java.util.List", "java.util"));
+ }
+
+ @Test
+ void commonParent_defaultPackage() {
+ assertEquals("MyClass", ProcessorUtils.commonParent("MyClass", "java.lang"));
+ }
+
+ @Test
+ void commonParent_nullSecond() {
+ assertEquals("java.util.List", ProcessorUtils.commonParent("java.util.List", null));
+ }
+
+ @Test
+ void commonParent_nullFirst() {
+ // commonParent calls packageOf(secondPkg) if first is null
+ assertEquals("java.util", ProcessorUtils.commonParent(null, "java.util.List"));
+ }
+
+ @Test
+ void commonParent_bothNull() {
+ assertNull(ProcessorUtils.commonParent(null, null));
+ }
+
+ // --- Tests for sanitizeImports ---
+
+ @Test
+ void sanitizeImports_cleanInput() {
+ String input = "import java.util.List;";
+ assertEquals("import java.util.List;", ProcessorUtils.sanitizeImports(input));
+ }
+
+ @Test
+ void sanitizeImports_withAnnotation() {
+ String input = "@SuppressWarning(\"a\") import java.util.List;";
+ assertEquals("java.util.List;", ProcessorUtils.sanitizeImports(input));
+ }
+
+ @Test
+ void sanitizeImports_invalidCharacters() {
+ String input = "import java.util.L<>ist$;";
+ assertEquals("import java.util.List$;", ProcessorUtils.sanitizeImports(input));
+ }
+
+ // --- Tests for extractEnclosingFQN ---
+
+ @Test
+ void extractEnclosingFQN_notNested() {
+ assertEquals("java.util.List", ProcessorUtils.extractEnclosingFQN("java.util.List"));
+ }
+
+ @Test
+ void extractEnclosingFQN_singleNested() {
+ assertEquals("io.package.Top", ProcessorUtils.extractEnclosingFQN("io.package.Top.Nested"));
+ }
+
+ @Test
+ void extractEnclosingFQN_doubleNested() {
+ assertEquals(
+ "io.package.Top.Nested", ProcessorUtils.extractEnclosingFQN("io.package.Top.Nested.Inner"));
+ }
+ @Test
+ void extractEnclosingFQN_tripleNested() {
+ assertEquals(
+ "io.package.Top.Nested.Inner", ProcessorUtils.extractEnclosingFQN("io.package.Top.Nested.Inner.Inner"));
+ }
+
+ @Test
+ void extractEnclosingFQN_defaultPackage() {
+ assertEquals("Top", ProcessorUtils.extractEnclosingFQN("Top.Nested"));
+ }
+
+ @Test
+ void extractEnclosingFQN_topLevelClassOnly() {
+ assertEquals("Top", ProcessorUtils.extractEnclosingFQN("Top"));
+ }
+
+ @Test
+ void extractEnclosingFQN_packageOnly() {
+ assertEquals("java.util", ProcessorUtils.extractEnclosingFQN("java.util"));
+ }
}
diff --git a/pom.xml b/pom.xml
index 11a491e..9fa2687 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,7 +7,7 @@
io.avaje
avaje-prisms-parent
- 1.44-RC2
+ 1.44-RC3
pom
avaje-prisms-parent
A modular fork of hickory
@@ -17,7 +17,7 @@
- 2025-11-20T14:31:33Z
+ 2025-11-21T15:27:08Z
true
diff --git a/prism-core/pom.xml b/prism-core/pom.xml
index f78f0a7..b34b20a 100644
--- a/prism-core/pom.xml
+++ b/prism-core/pom.xml
@@ -4,7 +4,7 @@
io.avaje
avaje-prisms-parent
- 1.44-RC2
+ 1.44-RC3
avaje-prisms-core
avaje-prism-core
diff --git a/prism-core/src/main/java/io/avaje/prism/internal/UtilWriter.java b/prism-core/src/main/java/io/avaje/prism/internal/UtilWriter.java
index 89898ca..cf2d928 100644
--- a/prism-core/src/main/java/io/avaje/prism/internal/UtilWriter.java
+++ b/prism-core/src/main/java/io/avaje/prism/internal/UtilWriter.java
@@ -246,7 +246,7 @@ public static void write(PrintWriter out, String packageName) {
+ " if (p == -1) {\n"
+ " return fullResult;\n"
+ " }\n"
- + " return fullResult.substring(0, p);\n"
+ + " return fullResult.substring(0, p).replace('/', '.');\n"
+ " }\n"
+ "}\n");
}