Skip to content

Commit 0922ec1

Browse files
authored
Merge pull request #63
feat(normalize-class): skip removal of classes with dissimilar names to superclass
2 parents c00f3e9 + 7acd5d3 commit 0922ec1

3 files changed

Lines changed: 24 additions & 3 deletions

File tree

plugins/src/main/java/io/github/rawvoid/jaxb/plugin/NormalizeClassPlugin.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,12 @@ private void removeEmptyDerivedClasses(Outline outline) {
7373
if (!isEmptyClass(implClass)) {
7474
return;
7575
}
76+
var className = implClass.name();
77+
var superClassName = definedSuperClass.name();
78+
if (!(className.startsWith(superClassName) || className.endsWith(superClassName)
79+
|| superClassName.startsWith(className) || superClassName.endsWith(className))) {
80+
return;
81+
}
7682

7783
JaxbClassRefactorUtil.removeFromParentContainer(implClass);
7884
JaxbClassRefactorUtil.removeFromObjectFactory(implClass);

plugins/src/test/java/io/github/rawvoid/jaxb/plugin/NormalizeClassPluginTest.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,18 +44,24 @@ void testNormalizeDuplicateClasses() throws Exception {
4444

4545
assertThat(classBySimpleName).containsKeys("NormalizeRoot", "Group", "AnotherGroup", "Entry");
4646
assertThat(classBySimpleName).containsKey("BaseType");
47-
assertThat(classBySimpleName).doesNotContainKey("EmptyChild");
47+
assertThat(classBySimpleName).containsKey("BaseNode");
48+
assertThat(classBySimpleName).containsKey("EmptyChild");
49+
assertThat(classBySimpleName).doesNotContainKey("Node");
4850
assertThat(classBySimpleName.get("Entry")).hasSize(1);
4951

5052
var groupClass = classBySimpleName.get("Group").getFirst();
5153
var anotherGroupClass = classBySimpleName.get("AnotherGroup").getFirst();
5254
var entryClass = classBySimpleName.get("Entry").getFirst();
5355
var baseTypeClass = classBySimpleName.get("BaseType").getFirst();
56+
var baseNodeClass = classBySimpleName.get("BaseNode").getFirst();
57+
var emptyChildClass = classBySimpleName.get("EmptyChild").getFirst();
5458
var normalizeRootClass = classBySimpleName.get("NormalizeRoot").getFirst();
5559

5660
assertThat(groupClass.getDeclaredField("entry").getType()).isEqualTo(entryClass);
5761
assertThat(anotherGroupClass.getDeclaredField("entry").getType()).isEqualTo(entryClass);
58-
assertThat(normalizeRootClass.getDeclaredField("emptyChild").getType()).isEqualTo(baseTypeClass);
59-
assertThat(Modifier.isAbstract(baseTypeClass.getModifiers())).isFalse();
62+
assertThat(normalizeRootClass.getDeclaredField("emptyChild").getType()).isEqualTo(emptyChildClass);
63+
assertThat(normalizeRootClass.getDeclaredField("node").getType()).isEqualTo(baseNodeClass);
64+
assertThat(Modifier.isAbstract(baseTypeClass.getModifiers())).isTrue();
65+
assertThat(Modifier.isAbstract(baseNodeClass.getModifiers())).isFalse();
6066
}
6167
}

plugins/src/test/resources/schema/normalize-class.xsd

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
</xs:complexType>
5050
</xs:element>
5151
<xs:element name="emptyChild" type="tns:EmptyChild"/>
52+
<xs:element name="node" type="tns:Node"/>
5253
</xs:sequence>
5354
</xs:complexType>
5455

@@ -60,5 +61,13 @@
6061
</xs:complexContent>
6162
</xs:complexType>
6263

64+
<xs:complexType name="BaseNode" abstract="true"/>
65+
66+
<xs:complexType name="Node">
67+
<xs:complexContent>
68+
<xs:extension base="tns:BaseNode"/>
69+
</xs:complexContent>
70+
</xs:complexType>
71+
6372
<xs:element name="normalizeRoot" type="tns:NormalizeRoot"/>
6473
</xs:schema>

0 commit comments

Comments
 (0)