From 7acd5d3abbf6ca472c123586d1abe3840af1598e Mon Sep 17 00:00:00 2001 From: Rawvoid Date: Wed, 4 Feb 2026 15:15:14 +0800 Subject: [PATCH] feat(normalize-class): skip removal of classes with dissimilar names to superclass --- .../rawvoid/jaxb/plugin/NormalizeClassPlugin.java | 6 ++++++ .../jaxb/plugin/NormalizeClassPluginTest.java | 12 +++++++++--- .../src/test/resources/schema/normalize-class.xsd | 9 +++++++++ 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/plugins/src/main/java/io/github/rawvoid/jaxb/plugin/NormalizeClassPlugin.java b/plugins/src/main/java/io/github/rawvoid/jaxb/plugin/NormalizeClassPlugin.java index ad2936d..cf95123 100644 --- a/plugins/src/main/java/io/github/rawvoid/jaxb/plugin/NormalizeClassPlugin.java +++ b/plugins/src/main/java/io/github/rawvoid/jaxb/plugin/NormalizeClassPlugin.java @@ -73,6 +73,12 @@ private void removeEmptyDerivedClasses(Outline outline) { if (!isEmptyClass(implClass)) { return; } + var className = implClass.name(); + var superClassName = definedSuperClass.name(); + if (!(className.startsWith(superClassName) || className.endsWith(superClassName) + || superClassName.startsWith(className) || superClassName.endsWith(className))) { + return; + } JaxbClassRefactorUtil.removeFromParentContainer(implClass); JaxbClassRefactorUtil.removeFromObjectFactory(implClass); diff --git a/plugins/src/test/java/io/github/rawvoid/jaxb/plugin/NormalizeClassPluginTest.java b/plugins/src/test/java/io/github/rawvoid/jaxb/plugin/NormalizeClassPluginTest.java index 69a4a64..5e7023c 100644 --- a/plugins/src/test/java/io/github/rawvoid/jaxb/plugin/NormalizeClassPluginTest.java +++ b/plugins/src/test/java/io/github/rawvoid/jaxb/plugin/NormalizeClassPluginTest.java @@ -44,18 +44,24 @@ void testNormalizeDuplicateClasses() throws Exception { assertThat(classBySimpleName).containsKeys("NormalizeRoot", "Group", "AnotherGroup", "Entry"); assertThat(classBySimpleName).containsKey("BaseType"); - assertThat(classBySimpleName).doesNotContainKey("EmptyChild"); + assertThat(classBySimpleName).containsKey("BaseNode"); + assertThat(classBySimpleName).containsKey("EmptyChild"); + assertThat(classBySimpleName).doesNotContainKey("Node"); assertThat(classBySimpleName.get("Entry")).hasSize(1); var groupClass = classBySimpleName.get("Group").getFirst(); var anotherGroupClass = classBySimpleName.get("AnotherGroup").getFirst(); var entryClass = classBySimpleName.get("Entry").getFirst(); var baseTypeClass = classBySimpleName.get("BaseType").getFirst(); + var baseNodeClass = classBySimpleName.get("BaseNode").getFirst(); + var emptyChildClass = classBySimpleName.get("EmptyChild").getFirst(); var normalizeRootClass = classBySimpleName.get("NormalizeRoot").getFirst(); assertThat(groupClass.getDeclaredField("entry").getType()).isEqualTo(entryClass); assertThat(anotherGroupClass.getDeclaredField("entry").getType()).isEqualTo(entryClass); - assertThat(normalizeRootClass.getDeclaredField("emptyChild").getType()).isEqualTo(baseTypeClass); - assertThat(Modifier.isAbstract(baseTypeClass.getModifiers())).isFalse(); + assertThat(normalizeRootClass.getDeclaredField("emptyChild").getType()).isEqualTo(emptyChildClass); + assertThat(normalizeRootClass.getDeclaredField("node").getType()).isEqualTo(baseNodeClass); + assertThat(Modifier.isAbstract(baseTypeClass.getModifiers())).isTrue(); + assertThat(Modifier.isAbstract(baseNodeClass.getModifiers())).isFalse(); } } diff --git a/plugins/src/test/resources/schema/normalize-class.xsd b/plugins/src/test/resources/schema/normalize-class.xsd index dd6d41f..3245348 100644 --- a/plugins/src/test/resources/schema/normalize-class.xsd +++ b/plugins/src/test/resources/schema/normalize-class.xsd @@ -49,6 +49,7 @@ + @@ -60,5 +61,13 @@ + + + + + + + +