Révision 3113
tmp/org.txm.groovy.core/src/java/org/txm/groovy/core/TXMClassLoader.java (revision 3113) | ||
---|---|---|
1 | 1 |
package org.txm.groovy.core; |
2 | 2 |
|
3 |
import java.util.HashMap; |
|
3 | 4 |
import java.util.HashSet; |
4 | 5 |
|
5 | 6 |
import org.eclipse.osgi.internal.loader.EquinoxClassLoader; |
... | ... | |
12 | 13 |
*/ |
13 | 14 |
public class TXMClassLoader extends ClassLoader { |
14 | 15 |
|
15 |
private HashSet<EquinoxClassLoader> loaders;
|
|
16 |
private HashMap<String, EquinoxClassLoader> loaders;
|
|
16 | 17 |
|
17 | 18 |
ClassLoader defaultLoader; |
18 | 19 |
|
19 | 20 |
public TXMClassLoader(ClassLoader defaultLoader, HashSet<EquinoxClassLoader> loaders2) { |
20 |
this.loaders = loaders2; |
|
21 |
this.loaders = new HashMap<>(); |
|
22 |
for (EquinoxClassLoader loader : loaders2) { |
|
23 |
String k = loader.getBundle().getSymbolicName(); |
|
24 |
loaders.put(k, loader); |
|
25 |
} |
|
26 |
this.defaultLoader = defaultLoader; |
|
21 | 27 |
} |
22 | 28 |
|
23 | 29 |
@Override |
24 | 30 |
public Class<?> findClass(String name) throws ClassNotFoundException { |
25 |
|
|
31 |
|
|
26 | 32 |
// try with the System class loader |
27 | 33 |
try { |
28 | 34 |
return defaultLoader.loadClass(name); |
29 | 35 |
} |
30 | 36 |
catch (Exception e) { |
31 | 37 |
} |
38 |
|
|
39 |
//TODO first tests did not boost the class loading |
|
40 |
// // try using the class package name |
|
41 |
// if (name.startsWith("org.txm.")) { |
|
42 |
// int idx = name.indexOf(".rcp."); |
|
43 |
// if (idx > 0) { |
|
44 |
// String loaderName = name.substring(0, idx+4); |
|
45 |
// EquinoxClassLoader loader = loaders.get(loaderName); |
|
46 |
// try { |
|
47 |
// if (loader != null) { |
|
48 |
// Class<?> c = loader.loadClass(name); |
|
49 |
// //System.out.println("load from "+loaderName+": "+name); |
|
50 |
// return c; |
|
51 |
// } |
|
52 |
// } |
|
53 |
// catch (Exception e) { |
|
54 |
// //System.out.println("can't load from "+loaderName+": "+name+" "+e); |
|
55 |
// if (e instanceof NullPointerException) { |
|
56 |
// e.printStackTrace(); |
|
57 |
// } |
|
58 |
// } |
|
59 |
// } |
|
60 |
// idx = name.indexOf(".core."); |
|
61 |
// if (idx > 0) { |
|
62 |
// String loaderName =name.substring(0, idx)+".rcp"; |
|
63 |
// EquinoxClassLoader loader = loaders.get(name.substring(0, idx)+".rcp"); |
|
64 |
// try { |
|
65 |
// if (loader != null) { |
|
66 |
// Class<?> c = loader.loadClass(name); |
|
67 |
// //System.out.println("load from "+loaderName+": "+name); |
|
68 |
// return c; |
|
69 |
// } |
|
70 |
// } |
|
71 |
// catch (Exception e) { |
|
72 |
// //System.out.println("can't load from "+loaderName+": "+name+" "+e); |
|
73 |
// if (e instanceof NullPointerException) { |
|
74 |
// e.printStackTrace(); |
|
75 |
// } |
|
76 |
// } |
|
77 |
// |
|
78 |
// loaderName = name.substring(0, idx+5); |
|
79 |
// loader = loaders.get(loaderName); |
|
80 |
// try { |
|
81 |
// if (loader != null) { |
|
82 |
// Class<?> c = loader.loadClass(name); |
|
83 |
// //System.out.println("load from "+loaderName+": "+name); |
|
84 |
// return c; |
|
85 |
// } |
|
86 |
// } |
|
87 |
// catch (Exception e) { |
|
88 |
// //System.out.println("can't load from "+loaderName+": "+name+" "+e); |
|
89 |
// if (e instanceof NullPointerException) { |
|
90 |
// e.printStackTrace(); |
|
91 |
// } |
|
92 |
// } |
|
93 |
// } |
|
94 |
// } |
|
32 | 95 |
|
33 |
for (EquinoxClassLoader cl : loaders) { |
|
96 |
// last resort test all loaders |
|
97 |
for (EquinoxClassLoader cl : loaders.values()) { |
|
34 | 98 |
|
35 | 99 |
// FIXME: SJ: tests to speed up this very long process |
36 | 100 |
// if(cl instanceof EquinoxClassLoader) { |
Formats disponibles : Unified diff