KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > sun > org > apache > bcel > internal > util > ClassLoaderRepository


1 package com.sun.org.apache.bcel.internal.util;
2
3 /* ====================================================================
4  * The Apache Software License, Version 1.1
5  *
6  * Copyright (c) 2001 The Apache Software Foundation. All rights
7  * reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  *
13  * 1. Redistributions of source code must retain the above copyright
14  * notice, this list of conditions and the following disclaimer.
15  *
16  * 2. Redistributions in binary form must reproduce the above copyright
17  * notice, this list of conditions and the following disclaimer in
18  * the documentation and/or other materials provided with the
19  * distribution.
20  *
21  * 3. The end-user documentation included with the redistribution,
22  * if any, must include the following acknowledgment:
23  * "This product includes software developed by the
24  * Apache Software Foundation (http://www.apache.org/)."
25  * Alternately, this acknowledgment may appear in the software itself,
26  * if and wherever such third-party acknowledgments normally appear.
27  *
28  * 4. The names "Apache" and "Apache Software Foundation" and
29  * "Apache BCEL" must not be used to endorse or promote products
30  * derived from this software without prior written permission. For
31  * written permission, please contact apache@apache.org.
32  *
33  * 5. Products derived from this software may not be called "Apache",
34  * "Apache BCEL", nor may "Apache" appear in their name, without
35  * prior written permission of the Apache Software Foundation.
36  *
37  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
38  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
39  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
40  * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
41  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
42  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
43  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
44  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
45  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
46  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
47  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
48  * SUCH DAMAGE.
49  * ====================================================================
50  *
51  * This software consists of voluntary contributions made by many
52  * individuals on behalf of the Apache Software Foundation. For more
53  * information on the Apache Software Foundation, please see
54  * <http://www.apache.org/>.
55  */

56
57 import java.io.*;
58
59 import java.util.Map JavaDoc;
60 import java.util.HashMap JavaDoc;
61
62 import com.sun.org.apache.bcel.internal.classfile.*;
63
64 /**
65  * The repository maintains information about which classes have
66  * been loaded.
67  *
68  * It loads its data from the ClassLoader implementation
69  * passed into its constructor.
70  *
71  * @see com.sun.org.apache.bcel.internal.Repository
72  *
73  * @version $Id: ClassLoaderRepository.java,v 1.1.2.1 2005/07/31 23:47:01 jeffsuttor Exp $
74  * @author <A HREF="mailto:markus.dahm@berlin.de">M. Dahm</A>
75  * @author David Dixon-Peugh
76  */

77 public class ClassLoaderRepository
78   implements Repository
79 {
80   private java.lang.ClassLoader JavaDoc loader;
81   private HashMap JavaDoc loadedClasses =
82     new HashMap JavaDoc(); // CLASSNAME X JAVACLASS
83

84   public ClassLoaderRepository( java.lang.ClassLoader JavaDoc loader ) {
85     this.loader = loader;
86   }
87
88   /**
89    * Store a new JavaClass into this Repository.
90    */

91   public void storeClass( JavaClass clazz ) {
92     loadedClasses.put( clazz.getClassName(),
93                clazz );
94     clazz.setRepository( this );
95   }
96
97   /**
98    * Remove class from repository
99    */

100   public void removeClass(JavaClass clazz) {
101     loadedClasses.remove(clazz.getClassName());
102   }
103
104   /**
105    * Find an already defined JavaClass.
106    */

107   public JavaClass findClass( String JavaDoc className ) {
108     if ( loadedClasses.containsKey( className )) {
109       return (JavaClass) loadedClasses.get( className );
110     } else {
111       return null;
112     }
113   }
114
115   /**
116    * Lookup a JavaClass object from the Class Name provided.
117    */

118   public JavaClass loadClass( String JavaDoc className )
119     throws ClassNotFoundException JavaDoc
120   {
121     String JavaDoc classFile = className.replace('.', '/');
122
123     JavaClass RC = findClass( className );
124     if (RC != null) { return RC; }
125
126     try {
127       InputStream is =
128     loader.getResourceAsStream( classFile + ".class" );
129         
130       if(is == null) {
131     throw new ClassNotFoundException JavaDoc(className + " not found.");
132       }
133
134       ClassParser parser = new ClassParser( is, className );
135       RC = parser.parse();
136         
137       storeClass( RC );
138
139       return RC;
140     } catch (IOException e) {
141       throw new ClassNotFoundException JavaDoc( e.toString() );
142     }
143   }
144
145   public JavaClass loadClass(Class JavaDoc clazz) throws ClassNotFoundException JavaDoc {
146     return loadClass(clazz.getName());
147   }
148
149   /** Clear all entries from cache.
150    */

151   public void clear() {
152     loadedClasses.clear();
153   }
154 }
155
156
Popular Tags