-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathUtil.java
More file actions
122 lines (111 loc) · 3.03 KB
/
Util.java
File metadata and controls
122 lines (111 loc) · 3.03 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
import java.util.*;
import java.io.*;
import java.lang.reflect.*;
/** @author Gergely Kota
Util class contains some useful static getter methods.
*/
public class Util
{
/** @return array of found classes
@param superClass the base class whose inheritance tree to limit search to
finds all Class files in the working directory that extend the
argument superclass.
*/
public static Class[] getLocalClasses(Class superClass)
{
ArrayList classes = new ArrayList();
getLocalClasses(new File("."), superClass, classes);
Class[] ret = new Class[classes.size()];
for (int i = 0; i < classes.size(); i++)
ret[i] = (Class)classes.get(i);
return ret;
}
public static Class[] getJarClasses(Class superclass)
{
try
{
ArrayList classes = new ArrayList();
JarReader jr = new JarReader("splat.jar");
String[] s = jr.getFileNames();
for(int i = 0; i < s.length; i++)
{
if(!s[i].endsWith(".class"))
continue;
if(s[i].indexOf("$") >= 0)
continue;
try
{
Class c = Class.forName(s[i].substring(0, s[i].lastIndexOf(".")));
if(superclass.isAssignableFrom(c))
classes.add(c);
}
catch(Exception e) {}
}
Debug.println(classes);
Class[] temp = new Class[classes.size()];
for(int i = 0; i < classes.size(); i++)
temp[i] = (Class) classes.get(i);
return temp;
}
catch(Exception e) {return null;}
}
private static void getLocalClasses(File dir, Class superClass, ArrayList classes)
{
File[] files = dir.listFiles(new JavaClassFilter());
for (int i = 0; i < files.length; i++)
{
try
{
String s = files[i].getName().substring(0, files[i].getName().indexOf(".class"));
Class temp = Class.forName(s);
if (superClass.isAssignableFrom(temp))
classes.add(temp);
}
catch (Exception e) { /* carry on */ }
}
}
// implementing FilenameFilter to keep only classes
private static class JavaClassFilter implements FilenameFilter
{
public boolean accept(File dir, String name)
{
if(name.indexOf("$") != -1) // do no accept inners
return false;
if(name.endsWith(".class")) // accept classes only
return true;
return false; // reject all others
}
}
public static Class[] merge(Class[] c1, Class[] c2)
{
if(c1 == null)
return c2;
if(c2 == null)
return c1;
ArrayList list = new ArrayList();
for(int i = 0; i < c1.length; i++)
if(!list.contains(c1[i]))
list.add(c1[i]);
for(int i = 0; i < c2.length; i++)
if(!list.contains(c2[i]))
list.add(c2[i]);
Class[] temp = new Class[list.size()];
for(int i = 0; i < list.size(); i++)
temp[i] = (Class) list.get(i);
return temp;
}
public static void main(String[] args)
{
Class[] c1 = getJarClasses(DocumentComparison.class);
Class[] c2 = getJarClasses(OptionTab.class);
Class[] result = merge(c1, c2);
for(int i = 0; i < c1.length; i++)
System.out.println(c1[i]);
System.out.println();
for(int i = 0; i < c2.length; i++)
System.out.println(c2[i]);
System.out.println();
for(int i = 0; i < result.length; i++)
System.out.println(result[i]);
}
}