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 @@
+
+
+
+
+
+
+
+