KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > kohsuke > stapler > MetaClassLoader


1 package org.kohsuke.stapler;
2
3 import java.util.Map JavaDoc;
4 import java.util.WeakHashMap JavaDoc;
5 import java.io.File JavaDoc;
6 import java.net.URLClassLoader JavaDoc;
7 import java.net.URL JavaDoc;
8 import java.net.MalformedURLException JavaDoc;
9
10 /**
11  * The stapler version of the {@link ClassLoader} object,
12  * that retains some useful cache about a class loader.
13  *
14  * @author Kohsuke Kawaguchi
15  */

16 public class MetaClassLoader extends TearOffSupport {
17     public final MetaClassLoader parent;
18     public final ClassLoader JavaDoc loader;
19
20     public MetaClassLoader(ClassLoader JavaDoc loader) {
21         this.loader = loader;
22         this.parent = get(loader.getParent());
23     }
24
25     public static MetaClassLoader get(ClassLoader JavaDoc cl) {
26         if(cl ==null)
27             return null; // if no parent, delegate to the debug loader if available.
28

29         synchronized(classMap) {
30             MetaClassLoader mc = classMap.get(cl);
31             if(mc==null) {
32                 mc = new MetaClassLoader(cl);
33                 classMap.put(cl,mc);
34             }
35             return mc;
36         }
37     }
38
39     /**
40      * If non-null, delegate to this classloader.
41      */

42     public static MetaClassLoader debugLoader = null;
43
44     /**
45      * All {@link MetaClass}es.
46      *
47      * Avoids class leaks by {@link WeakHashMap}.
48      */

49     private static final Map JavaDoc<ClassLoader JavaDoc,MetaClassLoader> classMap = new WeakHashMap JavaDoc<ClassLoader JavaDoc,MetaClassLoader>();
50
51     static {
52         try {
53             String JavaDoc path = System.getProperty("stapler.resourcePath");
54             if(path!=null) {
55                 debugLoader = new MetaClassLoader(
56                     new URLClassLoader JavaDoc(new URL JavaDoc[]{new File JavaDoc(path).toURL()}));
57             }
58         } catch (MalformedURLException JavaDoc e) {
59             throw new Error JavaDoc(e);
60         }
61     }
62 }
63
Popular Tags