Skip to content

Commit 3b2d597

Browse files
authored
Merge pull request #60
refactor(normalize-class): only remove classes with same name and identical structure
2 parents ac2e5d4 + 420ce14 commit 3b2d597

1 file changed

Lines changed: 25 additions & 18 deletions

File tree

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

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -49,18 +49,28 @@ public boolean run(Outline outline, Options opt, ErrorHandler errorHandler) thro
4949

5050
private void removeDuplicateClasses(PackageOutline packageOutline) {
5151
var classOutlines = packageOutline.getClasses();
52+
var classOutlinesGroup = classOutlines.stream()
53+
.collect(Collectors.groupingBy(c -> c.implClass.name().toUpperCase()));
5254

53-
var groupedClasses = groupingEqualClasses(classOutlines);
54-
for (var groupedClass : groupedClasses) {
55-
if (groupedClass.size() <= 1) {
56-
continue;
55+
classOutlinesGroup.forEach((name, sameNameClasses) -> {
56+
if (sameNameClasses.size() == 1) {
57+
return;
5758
}
58-
groupedClass.sort(Comparator.comparing(this::innerDepth));
59-
var savingClass = groupedClass.getFirst();
59+
var groupedClasses = groupingEqualClasses(sameNameClasses);
60+
if (groupedClasses.size() > 1) {
61+
return;
62+
}
63+
for (var groupedClass : groupedClasses) {
64+
if (groupedClass.size() <= 1) {
65+
continue;
66+
}
67+
groupedClass.sort(Comparator.comparing(this::innerDepth));
68+
var savingClass = groupedClass.getFirst();
6069

61-
var removeClasses = groupedClass.subList(1, groupedClass.size());
62-
removeAndReplaceClass(removeClasses, savingClass);
63-
}
70+
var removeClasses = groupedClass.subList(1, groupedClass.size());
71+
removeAndReplaceClass(removeClasses, savingClass);
72+
}
73+
});
6474
}
6575

6676
private int innerDepth(ClassOutline classOutline) {
@@ -77,15 +87,13 @@ private int innerDepth(JDefinedClass definedClass) {
7787
return depth;
7888
}
7989

80-
private List<List<ClassOutline>> groupingEqualClasses(Set<? extends ClassOutline> classes) {
90+
private List<List<ClassOutline>> groupingEqualClasses(Collection<? extends ClassOutline> classes) {
8191
List<List<ClassOutline>> groupedClasses = new ArrayList<>();
82-
for (var classOutline : classes) {
83-
groupedClasses.stream()
84-
.filter(group -> isEqual(group.getFirst().implClass, classOutline.implClass))
85-
.findFirst()
86-
.ifPresentOrElse(group -> group.add(classOutline),
87-
() -> groupedClasses.add(new ArrayList<>(List.of(classOutline))));
88-
}
92+
classes.forEach(classOutline -> groupedClasses.stream()
93+
.filter(group -> isEqual(group.getFirst().implClass, classOutline.implClass))
94+
.findFirst()
95+
.ifPresentOrElse(group -> group.add(classOutline),
96+
() -> groupedClasses.add(new ArrayList<>(List.of(classOutline)))));
8997
return groupedClasses;
9098
}
9199

@@ -109,7 +117,6 @@ private boolean isEqual(JDefinedClass class1, JDefinedClass class2) {
109117
}
110118

111119
if (class1.classes().hasNext() || class2.classes().hasNext()) {
112-
113120
return false;
114121
}
115122

0 commit comments

Comments
 (0)