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/