cvs commit: spice/sandbox/metaclass/src/java/org/realityforge/metaclass/introspector MetaClassIntrospector.java

Peter Donald <[email protected]>
Newsgroups gmane.comp.java.spice.cvs
Message-ID <[email protected]>
donaldp     03/10/27 22:42:33

  Modified:    sandbox/metaclass/src/java/org/realityforge/metaclass/introspector
                        MetaClassIntrospector.java
  Log:
  rework introspector to use Caching Accessor
  
  Revision  Changes    Path
  1.3       +8 -56     spice/sandbox/metaclass/src/java/org/realityforge/metaclass/introspector/MetaClassIntrospector.java
  
  Index: MetaClassIntrospector.java
  ===================================================================
  RCS file: /cvsroot/spice/spice/sandbox/metaclass/src/java/org/realityforge/metaclass/introspector/MetaClassIntrospector.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- MetaClassIntrospector.java	4 Oct 2003 00:50:43 -0000	1.2
  +++ MetaClassIntrospector.java	28 Oct 2003 06:42:33 -0000	1.3
  @@ -7,8 +7,6 @@
    */
   package org.realityforge.metaclass.introspector;
   
  -import java.util.Map;
  -import java.util.WeakHashMap;
   import org.realityforge.metaclass.model.ClassDescriptor;
   
   /**
  @@ -17,7 +15,7 @@
    * {@link java.beans.Introspector} class does for Java Beans.
    *
    * @author <a href="mailto:peter at realityforge.org">Peter Donald</a>
  - * @version $Revision: 1.2 $ $Date: 2003/10/04 00:50:43 $
  + * @version $Revision: 1.3 $ $Date: 2003/10/28 06:42:33 $
    */
   public final class MetaClassIntrospector
   {
  @@ -34,17 +32,12 @@
           new RuntimePermission( "metaclass.setAccessor" );
   
       /**
  -     * Class used to access the MetaData.
  -     */
  -    private static MetaClassAccessor c_accessor = new DefaultMetaClassAccessor();
  -
  -    /**
        * The cache in which info objects are stored.
        * This cache stores maps for ClassLoaders which in
        * turn stores info for particular classes in
        * classloader.
        */
  -    private static final Map c_cache = new WeakHashMap();
  +    private static final CachingMetaClassAccessor c_cachingAccessor = new CachingMetaClassAccessor();
   
       /**
        * Flush all of the Introspector's internal caches.  This method is
  @@ -66,7 +59,7 @@
           {
               sm.checkPermission( CLEAR_CACHE_PERMISSION );
           }
  -        c_cache.clear();
  +        c_cachingAccessor.clear();
       }
   
       /**
  @@ -78,29 +71,21 @@
        * else a security exception will be thrown.</p>
        *
        * @param accessor the MetaClassAccessor
  -     * @throws java.lang.SecurityException if the caller does not have
  +     * @throws SecurityException if the caller does not have
        *                           permission to clear cache
        */
       public static void setAccessor( final MetaClassAccessor accessor )
       {
  -        if( null == accessor )
  -        {
  -            throw new NullPointerException( "accessor" );
  -        }
           final SecurityManager sm = System.getSecurityManager();
           if( null != sm )
           {
               sm.checkPermission( SET_ACCESSOR_PERMISSION );
           }
  -        c_accessor = accessor;
  +        c_cachingAccessor.setAccessor( accessor );
       }
   
       /**
  -     * Return a {@link ClassDescriptor} for specified class.
  -     *
  -     * @param clazz the class to {@link ClassDescriptor} for
  -     * @return the newly created {@link ClassDescriptor}
  -     * @throws MetaClassException if unable to create {@link ClassDescriptor}
  +     * @see MetaClassAccessor#getClassDescriptor
        */
       public static ClassDescriptor getClassDescriptor( final Class clazz )
           throws MetaClassException
  @@ -109,45 +94,12 @@
       }
   
       /**
  -     * Return a {@link ClassDescriptor} for specified class.
  -     *
  -     * @param classname the classname to get {@link ClassDescriptor} for
  -     * @param classLoader the classLoader to use
  -     * @return the newly created {@link ClassDescriptor}
  -     * @throws MetaClassException if unable to create {@link ClassDescriptor}
  +     * @see MetaClassAccessor#getClassDescriptor
        */
       public static ClassDescriptor getClassDescriptor( final String classname,
                                                         final ClassLoader classLoader )
           throws MetaClassException
       {
  -        final Map cache = getClassLoaderCache( classLoader );
  -        ClassDescriptor info = (ClassDescriptor)cache.get( classname );
  -        if( null != info )
  -        {
  -            return info;
  -        }
  -        else
  -        {
  -            info = c_accessor.getClassDescriptor( classname, classLoader );
  -            cache.put( classname, info );
  -            return info;
  -        }
  -    }
  -
  -    /**
  -     * Get Cache for specified ClassLoader.
  -     *
  -     * @param classLoader the ClassLoader to get cache for
  -     * @return the Map/Cache for ClassLoader
  -     */
  -    private static synchronized Map getClassLoaderCache( final ClassLoader classLoader )
  -    {
  -        Map map = (Map)c_cache.get( classLoader );
  -        if( null == map )
  -        {
  -            map = new WeakHashMap();
  -            c_cache.put( classLoader, map );
  -        }
  -        return map;
  +        return c_cachingAccessor.getClassDescriptor( classname, classLoader );
       }
   }
  
  
  


-------------------------------------------------------
This SF.net email is sponsored by: The SF.net Donation Program.
Do you like what SourceForge.net is doing for the Open
Source Community?  Make a contribution, and help us add new
features and functionality. Click here: http://sourceforge.net/donate/
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.