6
6
import java .util .Arrays ;
7
7
import java .util .Collections ;
8
8
import java .util .Comparator ;
9
+ import java .util .HashSet ;
9
10
import java .util .List ;
10
11
11
12
public class ClassRepo {
12
13
private ClassRepo () {
13
14
}
14
15
15
16
private static ArrayList <ClassMapProvider > cachedProviders = new ArrayList <ClassMapProvider >();
16
- private static List <String > allSortedClasses = new ArrayList <String >();
17
+ private static HashSet <String > classesSet = new HashSet <>();
18
+ private static List <String > sortedClasses ;
17
19
private static int traversedFilesIdx = 0 ;
18
20
19
21
public static void cacheJarFile (ClassMapProvider classMapProvider ) {
20
22
for (String className : classMapProvider .getClassMap ().keySet ()) {
21
23
for (ClassMapProvider cachedProvider : cachedProviders ) {
22
24
JavaClass clazz = cachedProvider .getClassMap ().get (className );
23
25
if (clazz != null ) {
24
- String errMsg = "Class " + className + " conflict: "
25
- + classMapProvider .getPath () + " and " + cachedProvider .getPath ();
26
- throw new IllegalArgumentException (errMsg );
26
+ // return;
27
+ // String errMsg = "Class " + className + " conflict: "
28
+ // + classMapProvider.getPath() + " and " + cachedProvider.getPath();
29
+ // throw new IllegalArgumentException(errMsg);
27
30
}
28
31
}
29
32
}
33
+
30
34
cachedProviders .add (classMapProvider );
31
35
}
32
36
33
37
public static void sortCachedProviders () {
34
38
for (ClassMapProvider cmp : cachedProviders ) {
35
- allSortedClasses .addAll (cmp .getClassMap ().keySet ());
39
+ classesSet .addAll (cmp .getClassMap ().keySet ());
36
40
}
37
- Collections .sort (allSortedClasses , new Comparator <String >() {
41
+
42
+ sortedClasses = new ArrayList <>(classesSet );
43
+
44
+ Collections .sort (sortedClasses , new Comparator <String >() {
38
45
@ Override
39
46
public int compare (String className1 , String className2 ) {
40
47
if (className1 .startsWith (className2 )) {
@@ -63,7 +70,7 @@ public static List<JavaClass> getNextClassGroup() {
63
70
ArrayList <JavaClass > lst = new ArrayList <JavaClass >();
64
71
boolean first = true ;
65
72
66
- while ((traversedFilesIdx < allSortedClasses .size ()) && keepGoing (first )) {
73
+ while ((traversedFilesIdx < sortedClasses .size ()) && keepGoing (first )) {
67
74
JavaClass f = getCurrentJavaClass ();
68
75
String name = f .getClassName ();
69
76
if (!name .contains ("$0" ) && !name .contains ("$1" )
@@ -82,11 +89,11 @@ public static List<JavaClass> getNextClassGroup() {
82
89
}
83
90
84
91
public static boolean hasNext () {
85
- return traversedFilesIdx < allSortedClasses .size ();
92
+ return traversedFilesIdx < sortedClasses .size ();
86
93
}
87
94
88
95
private static JavaClass getCurrentJavaClass () {
89
- String currentClassName = allSortedClasses .get (traversedFilesIdx );
96
+ String currentClassName = sortedClasses .get (traversedFilesIdx );
90
97
return ClassRepo .findClass (currentClassName );
91
98
}
92
99
0 commit comments