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