mdahm       2002/10/11 13:34:47

  Modified:    src/java/org/apache/bcel Repository.java
               src/java/org/apache/bcel/util ClassLoaderRepository.java
                        Repository.java SyntheticRepository.java
  Log:
  Use generic repository
  
  Revision  Changes    Path
  1.11      +22 -10    jakarta-bcel/src/java/org/apache/bcel/Repository.java
  
  Index: Repository.java
  ===================================================================
  RCS file: /home/cvs/jakarta-bcel/src/java/org/apache/bcel/Repository.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- Repository.java   6 Jul 2002 15:51:34 -0000       1.10
  +++ Repository.java   11 Oct 2002 20:34:47 -0000      1.11
  @@ -61,16 +61,33 @@
   /**
    * The repository maintains informations about class interdependencies, e.g.,
    * whether a class is a sub-class of another. Delegates actual class loading
  - * to SyntheticRepository.
  + * to SyntheticRepository with current class path by default.
  + *
  + * @see org.apache.bcel.util.Repository
  + * @see org.apache.bcel.util.SyntheticRepository
    *
    * @version $Id$
    * @author <A HREF="mailto:[EMAIL PROTECTED]";>M. Dahm</A>
    */
   public abstract class Repository {
  -  private static org.apache.bcel.util.SyntheticRepository _repository =
  +  private static org.apache.bcel.util.Repository _repository =
       SyntheticRepository.getInstance();
   
  -  /** Lookup class somewhere found in your CLASSPATH.
  +  /** @return currently used repository instance
  +   */
  +  public static org.apache.bcel.util.Repository getRepository() {
  +    return _repository;
  +  }
  +
  +  /** Set repository instance to be used for class loading
  +   */
  +  public static void setRepository(org.apache.bcel.util.Repository rep) {
  +    _repository = rep;
  +  }
  +
  +  /** Lookup class somewhere found on your CLASSPATH, or whereever the
  +   * repository instance looks for it.
  +   *
      * @return class object for given fully qualified class name, or null
      * if the class could not be found or parsed correctly
      */
  @@ -136,12 +153,6 @@
       _repository.removeClass(clazz);
     }
   
  -  /*
  -  private static final JavaClass getSuperClass(JavaClass clazz) {
  -    return clazz.getSuperClass();
  -  }
  -  */
  -
     /**
      * @return list of super classes of clazz in ascending order, i.e.,
      * Object is always the last element
  @@ -234,3 +245,4 @@
       return implementationOf(lookupClass(clazz), inter);
     }
   }
  +
  
  
  
  1.4       +65 -49    
jakarta-bcel/src/java/org/apache/bcel/util/ClassLoaderRepository.java
  
  Index: ClassLoaderRepository.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-bcel/src/java/org/apache/bcel/util/ClassLoaderRepository.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- ClassLoaderRepository.java        31 Jul 2002 18:12:07 -0000      1.3
  +++ ClassLoaderRepository.java        11 Oct 2002 20:34:47 -0000      1.4
  @@ -67,27 +67,32 @@
    *
    * It loads its data from the ClassLoader implementation
    * passed into its constructor.
  + *
  + * @see org.apache.bcel.Repository
  + *
  + * @version $Id$
  + * @author <A HREF="mailto:[EMAIL PROTECTED]";>M. Dahm</A>
  + * @author David Dixon-Peugh
    */
  -
   public class ClassLoaderRepository
  -    implements Repository
  +  implements Repository
   {
  -    private java.lang.ClassLoader loader;
  -    private Map loadedClasses =
  -     new HashMap(); // CLASSNAME X JAVACLASS
  +  private java.lang.ClassLoader loader;
  +  private HashMap loadedClasses =
  +    new HashMap(); // CLASSNAME X JAVACLASS
   
  -    public ClassLoaderRepository( java.lang.ClassLoader loader ) {
  -     this.loader = loader;
  -    }
  +  public ClassLoaderRepository( java.lang.ClassLoader loader ) {
  +    this.loader = loader;
  +  }
   
  -    /**
  -     * Store a new JavaClass into this Repository.
  -     */
  -    public void storeClass( JavaClass clazz ) {
  -     loadedClasses.put( clazz.getClassName(),
  -                        clazz );
  -     clazz.setRepository( this );
  -    }
  +  /**
  +   * Store a new JavaClass into this Repository.
  +   */
  +  public void storeClass( JavaClass clazz ) {
  +    loadedClasses.put( clazz.getClassName(),
  +                    clazz );
  +    clazz.setRepository( this );
  +  }
   
     /**
      * Remove class from repository
  @@ -96,44 +101,55 @@
       loadedClasses.remove(clazz.getClassName());
     }
   
  -    /**
  -     * Find an already defined JavaClass.
  -     */
  -    public JavaClass findClass( String className ) {
  -     if ( loadedClasses.containsKey( className )) {
  -         return (JavaClass) loadedClasses.get( className );
  -     } else {
  -         return null;
  -     }
  +  /**
  +   * Find an already defined JavaClass.
  +   */
  +  public JavaClass findClass( String className ) {
  +    if ( loadedClasses.containsKey( className )) {
  +      return (JavaClass) loadedClasses.get( className );
  +    } else {
  +      return null;
       }
  +  }
   
  -    /**
  -     * Lookup a JavaClass object from the Class Name provided.
  -     */
  -    public JavaClass loadClass( String className ) 
  -     throws ClassNotFoundException
  -    {
  -     String classFile = className.replace('.', '/');
  -
  -     JavaClass RC = findClass( className );
  -     if (RC != null) { return RC; }
  -
  -     try {
  -         InputStream is = 
  -             loader.getResourceAsStream( classFile + ".class" );
  +  /**
  +   * Lookup a JavaClass object from the Class Name provided.
  +   */
  +  public JavaClass loadClass( String className ) 
  +    throws ClassNotFoundException
  +  {
  +    String classFile = className.replace('.', '/');
  +
  +    JavaClass RC = findClass( className );
  +    if (RC != null) { return RC; }
  +
  +    try {
  +      InputStream is = 
  +     loader.getResourceAsStream( classFile + ".class" );
            
  -         if(is == null) {
  -             throw new ClassNotFoundException(className + " not found.");
  -         }
  +      if(is == null) {
  +     throw new ClassNotFoundException(className + " not found.");
  +      }
   
  -         ClassParser parser = new ClassParser( is, className );
  -         RC = parser.parse();
  +      ClassParser parser = new ClassParser( is, className );
  +      RC = parser.parse();
            
  -         storeClass( RC );
  +      storeClass( RC );
   
  -         return RC;
  -     } catch (IOException e) {
  -         throw new ClassNotFoundException( e.toString() );
  -     }
  +      return RC;
  +    } catch (IOException e) {
  +      throw new ClassNotFoundException( e.toString() );
       }
  +  }
  +
  +  public JavaClass loadClass(Class clazz) throws ClassNotFoundException {
  +    return loadClass(clazz.getName());
  +  }
  +
  +  /** Clear all entries from cache.
  +   */
  +  public void clear() {
  +    loadedClasses.clear();
  +  }
   }
  +
  
  
  
  1.4       +42 -20    jakarta-bcel/src/java/org/apache/bcel/util/Repository.java
  
  Index: Repository.java
  ===================================================================
  RCS file: /home/cvs/jakarta-bcel/src/java/org/apache/bcel/util/Repository.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- Repository.java   11 Jul 2002 19:39:05 -0000      1.3
  +++ Repository.java   11 Oct 2002 20:34:47 -0000      1.4
  @@ -56,28 +56,50 @@
   
   import org.apache.bcel.classfile.JavaClass;
   
  +/**
  + * Abstract definition of a class repository. Instances may be used
  + * to load classes from different sources and may be used in the
  + * Repository.setRpeository method.
  + *
  + * @see org.apache.bcel.Repository
  + * @version $Id$
  + * @author <A HREF="mailto:[EMAIL PROTECTED]";>M. Dahm</A>
  + * @author David Dixon-Peugh
  + */
   public interface Repository extends java.io.Serializable {
  -    /**
  -     * Store the provided class under "clazz.getClassName()" 
  -     */
  -    public void storeClass( JavaClass clazz );
  -
  -    /**
  -     * Remove class from repository
  -     */
  -    public void removeClass( JavaClass clazz );
  +  /**
  +   * Store the provided class under "clazz.getClassName()" 
  +   */
  +  public void storeClass(JavaClass clazz);
  +
  +  /**
  +   * Remove class from repository
  +   */
  +  public void removeClass(JavaClass clazz);
       
  -    /**
  -     * Find the class with the name provided, if the class
  -     * isn't there, return NULL.
  -     */
  -    public JavaClass findClass( String className );
  +  /**
  +   * Find the class with the name provided, if the class
  +   * isn't there, return NULL.
  +   */
  +  public JavaClass findClass(String className);
  +
  +  /**
  +   * Find the class with the name provided, if the class
  +   * isn't there, make an attempt to load it.
  +   */
  +  public JavaClass loadClass(String className)
  +    throws java.lang.ClassNotFoundException;
   
  +  /**
  +   * Find the JavaClass instance for the given run-time class object
  +   */
  +  public JavaClass loadClass(Class clazz) 
  +    throws java.lang.ClassNotFoundException;
   
  -    /**
  -     * Find the class with the name provided, if the class
  -     * isn't there, make an attempt to load it.
  -     */
  -    public JavaClass loadClass( String className ) 
  -     throws java.lang.ClassNotFoundException;
  +  /** Clear all entries from cache.
  +   */
  +  public void clear();
   }
  +
  +
  +
  
  
  
  1.5       +8 -1      
jakarta-bcel/src/java/org/apache/bcel/util/SyntheticRepository.java
  
  Index: SyntheticRepository.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-bcel/src/java/org/apache/bcel/util/SyntheticRepository.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- SyntheticRepository.java  6 Jul 2002 15:51:34 -0000       1.4
  +++ SyntheticRepository.java  11 Oct 2002 20:34:47 -0000      1.5
  @@ -71,6 +71,13 @@
    * It is designed to be used as a singleton, however it
    * can also be used with custom classpaths.
    *
  +/**
  + * Abstract definition of a class repository. Instances may be used
  + * to load classes from different sources and may be used in the
  + * Repository.setRpeository method.
  + *
  + * @see org.apache.bcel.Repository
  + *
    * @version $Id$
    * @author <A HREF="mailto:[EMAIL PROTECTED]";>M. Dahm</A>
    * @author David Dixon-Peugh
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to