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