author | Jan Vrany <jan.vrany@fit.cvut.cz> |
Tue, 02 Apr 2013 23:08:51 +0100 | |
branch | development |
changeset 2477 | 6e37b62e21b5 |
parent 2472 | 226437481a47 |
child 2488 | 5395660e3366 |
permissions | -rw-r--r-- |
2472
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
1 |
package stx.libjava.tools.compiler.ecj; |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
2 |
|
2477
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
3 |
import java.io.ByteArrayInputStream; |
2472
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
4 |
import java.io.IOException; |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
5 |
import java.io.InputStream; |
2477
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
6 |
import java.util.HashMap; |
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
7 |
import java.util.Map; |
2472
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
8 |
|
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
9 |
import org.eclipse.jdt.internal.compiler.classfmt.ClassFileReader; |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
10 |
import org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException; |
2477
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
11 |
import org.eclipse.jdt.internal.compiler.env.IBinaryType; |
2472
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
12 |
import org.eclipse.jdt.internal.compiler.env.INameEnvironment; |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
13 |
import org.eclipse.jdt.internal.compiler.env.NameEnvironmentAnswer; |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
14 |
|
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
15 |
public class CompilerEnvironment implements INameEnvironment { |
2477
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
16 |
protected CompilerTypeRegistry types; |
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
17 |
|
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
18 |
public CompilerEnvironment() { |
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
19 |
types = new CompilerTypeRegistry(); |
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
20 |
} |
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
21 |
|
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
22 |
public CompilerEnvironment(CompilerTypeRegistry types) { |
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
23 |
this.types = types; |
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
24 |
} |
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
25 |
|
2472
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
26 |
/** |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
27 |
* Find a type with the given compound name. |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
28 |
* Answer the binary form of the type if it is known to be consistent. |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
29 |
* Otherwise, answer the compilation unit which defines the type |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
30 |
* or null if the type does not exist. |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
31 |
* Types in the default package are specified as {{typeName}}. |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
32 |
* |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
33 |
* It is unknown whether the package containing the type actually exists. |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
34 |
* |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
35 |
* NOTE: This method can be used to find a member type using its |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
36 |
* internal name A$B, but the source file for A is answered if the binary |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
37 |
* file is inconsistent. |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
38 |
*/ |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
39 |
|
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
40 |
public NameEnvironmentAnswer findType(char[][] compoundTypeName) { |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
41 |
StringBuilder sb = new StringBuilder(); |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
42 |
if (compoundTypeName.length > 1) { |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
43 |
for (int i = 0; i < compoundTypeName.length - 1; i++) { |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
44 |
sb.append(compoundTypeName[i]); |
2477
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
45 |
sb.append('.'); |
2472
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
46 |
} |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
47 |
} |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
48 |
sb.append(compoundTypeName[compoundTypeName.length-1]); |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
49 |
return findType(sb.toString()); |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
50 |
} |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
51 |
|
2477
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
52 |
/** |
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
53 |
* Returns a IBinaryType for class with given name or null |
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
54 |
* if there's no such class. |
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
55 |
* @param name |
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
56 |
* @return binary type or null (if no type is found) |
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
57 |
*/ |
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
58 |
protected IBinaryType findTypeForClassNamed(String name) { |
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
59 |
IBinaryType type; |
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
60 |
|
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
61 |
type = types.get(name); |
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
62 |
if (type != null) return type; |
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
63 |
|
2472
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
64 |
try { |
2477
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
65 |
Class<?> c = Class.forName(name); |
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
66 |
InputStream cfs = findClassFileForClass(c); |
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
67 |
if (cfs == null) { |
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
68 |
return null; |
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
69 |
} else { |
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
70 |
types.put(name, cfs); |
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
71 |
return types.get(name); |
2472
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
72 |
} |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
73 |
} catch (ClassNotFoundException cnfe) { |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
74 |
return null; |
2477
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
75 |
} catch (RuntimeException e) { |
2472
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
76 |
e.printStackTrace(); |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
77 |
return null; |
2477
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
78 |
} |
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
79 |
} |
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
80 |
|
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
81 |
protected NameEnvironmentAnswer findType(String name) { |
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
82 |
IBinaryType type = findTypeForClassNamed(name); |
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
83 |
if (type != null) { |
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
84 |
return new NameEnvironmentAnswer(type, null); |
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
85 |
} else { |
2472
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
86 |
return null; |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
87 |
} |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
88 |
} |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
89 |
/** |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
90 |
* Find a type named <typeName> in the package <packageName>. |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
91 |
* Answer the binary form of the type if it is known to be consistent. |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
92 |
* Otherwise, answer the compilation unit which defines the type |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
93 |
* or null if the type does not exist. |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
94 |
* The default package is indicated by char[0][]. |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
95 |
* |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
96 |
* It is known that the package containing the type exists. |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
97 |
* |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
98 |
* NOTE: This method can be used to find a member type using its |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
99 |
* internal name A$B, but the source file for A is answered if the binary |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
100 |
* file is inconsistent. |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
101 |
*/ |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
102 |
|
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
103 |
public NameEnvironmentAnswer findType(char[] typeName, char[][] packageName) { |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
104 |
StringBuffer sb = new StringBuffer(); |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
105 |
for (int i = 0; i < packageName.length; i++) { |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
106 |
sb.append(packageName[i]); |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
107 |
sb.append('.'); |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
108 |
} |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
109 |
sb.append(typeName); |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
110 |
return findType(sb.toString()); |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
111 |
|
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
112 |
} |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
113 |
/** |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
114 |
* Answer whether packageName is the name of a known subpackage inside |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
115 |
* the package parentPackageName. A top level package is found relative to null. |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
116 |
* The default package is always assumed to exist. |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
117 |
* |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
118 |
* For example: |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
119 |
* isPackage({{java}, {awt}}, {event}); |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
120 |
* isPackage(null, {java}); |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
121 |
*/ |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
122 |
|
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
123 |
public boolean isPackage(char[][] parentPackageName, char[] packageName) { |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
124 |
return Character.isLowerCase(packageName[0]); |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
125 |
} |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
126 |
|
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
127 |
/** |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
128 |
* This method cleans the environment uo. It is responsible for releasing the memory |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
129 |
* and freeing resources. Passed that point, the name environment is no longer usable. |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
130 |
* |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
131 |
* A name environment can have a long life cycle, therefore it is the responsibility of |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
132 |
* the code which created it to decide when it is a good time to clean it up. |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
133 |
*/ |
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
134 |
public void cleanup() { |
2477
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
135 |
|
2472
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
136 |
} |
2477
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
137 |
|
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
138 |
/** |
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
139 |
* Given a class, return an InputStream on corresponding .class file. |
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
140 |
* @return InputStream or null |
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
141 |
*/ |
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
142 |
public InputStream findClassFileForClass(Class<?> c) { |
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
143 |
/* STX:LIBJAVA specific: ask the class for its classfile bytes... */ |
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
144 |
if (System.getProperty("java.vm.name").equals("Smalltalk/X")) { |
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
145 |
byte[] bytes = findClassBytesForClass0(c); |
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
146 |
if (bytes != null) { |
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
147 |
return new ByteArrayInputStream(bytes); |
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
148 |
} |
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
149 |
} |
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
150 |
|
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
151 |
ClassLoader cl = c.getClassLoader(); |
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
152 |
if (cl == null) { |
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
153 |
cl = ClassLoader.getSystemClassLoader(); |
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
154 |
} |
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
155 |
String cfilename = (new String(c.getName())).replace('.', '/') + ".class"; |
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
156 |
return cl.getResourceAsStream(cfilename); |
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
157 |
} |
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
158 |
|
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
159 |
public native byte[] findClassBytesForClass0(Class<?> c); |
6e37b62e21b5
Bufix in CompilerEnvironment.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2472
diff
changeset
|
160 |
|
2472
226437481a47
Initial version of Eclipse compiler adapter.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
161 |
} |