cvs commit: spice/sandbox/metaclass/src/java/org/realityforge/metaclass/introspector CachingMetaClassAccessor.java DefaultMetaClassAccessor.java MetaClassAccessor.java MetaClassIntrospector.java WrapperMetaClassAccessor.java
Peter Donald <[email protected]>
| Newsgroups | gmane.comp.java.spice.cvs |
|---|---|
| Message-ID | <[email protected]> |
donaldp 03/10/27 23:01:01
Modified: sandbox/metaclass/src/java/org/realityforge/metaclass/introspector
CachingMetaClassAccessor.java
DefaultMetaClassAccessor.java
MetaClassAccessor.java MetaClassIntrospector.java
WrapperMetaClassAccessor.java
Log:
Pass in Accessor when invoking getClassDescriptor on accessor so that the accessor can load dependenct classes
Revision Changes Path
1.2 +26 -7 spice/sandbox/metaclass/src/java/org/realityforge/metaclass/introspector/CachingMetaClassAccessor.java
Index: CachingMetaClassAccessor.java
===================================================================
RCS file: /cvsroot/spice/spice/sandbox/metaclass/src/java/org/realityforge/metaclass/introspector/CachingMetaClassAccessor.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- CachingMetaClassAccessor.java 28 Oct 2003 06:40:56 -0000 1.1
+++ CachingMetaClassAccessor.java 28 Oct 2003 07:01:01 -0000 1.2
@@ -1,3 +1,10 @@
+/*
+ * Copyright (C) The Spice Group. All rights reserved.
+ *
+ * This software is published under the terms of the Spice
+ * Software License version 1.1, a copy of which has been included
+ * with this distribution in the LICENSE.txt file.
+ */
package org.realityforge.metaclass.introspector;
import java.util.Map;
@@ -9,7 +16,7 @@
* Caching MetaClassAccessor implementation.
*
* @author <a href="mailto:peter at realityforge.org">Peter Donald</a>
- * @version $Revision: 1.1 $ $Date: 2003/10/28 06:40:56 $
+ * @version $Revision: 1.2 $ $Date: 2003/10/28 07:01:01 $
*/
public class CachingMetaClassAccessor
implements MetaClassAccessor
@@ -20,6 +27,14 @@
private MetaClassAccessor m_accessor = new DefaultMetaClassAccessor();
/**
+ * Wrapper Accessor that is passed to the above accessor
+ * to retrieve ClassDescriptors. Ensures that no Accessor
+ * can get a direct reference to the CachingMetaClassAccessor
+ * and thus subvert descriptor loading process.
+ */
+ private final WrapperMetaClassAccessor m_wrapperAccessor = new WrapperMetaClassAccessor( this );
+
+ /**
* The cache in which info objects are stored.
* This cache stores maps for ClassLoaders which in
* turn stores info for particular classes in
@@ -33,7 +48,7 @@
*
* @param accessor the MetaClassAccessor
*/
- public void setAccessor( final MetaClassAccessor accessor )
+ public synchronized void setAccessor( final MetaClassAccessor accessor )
{
if ( null == accessor )
{
@@ -45,7 +60,7 @@
/**
* Remove all descriptors from registry.
*/
- public void clear()
+ public synchronized void clear()
{
m_cache.clear();
}
@@ -53,8 +68,9 @@
/**
* @see MetaClassAccessor#getClassDescriptor
*/
- public ClassDescriptor getClassDescriptor( final String classname,
- final ClassLoader classLoader )
+ public synchronized ClassDescriptor getClassDescriptor( final String classname,
+ final ClassLoader classLoader,
+ final MetaClassAccessor accessor )
throws MetaClassException
{
if ( null == classname )
@@ -73,7 +89,10 @@
}
else
{
- descriptor = m_accessor.getClassDescriptor( classname, classLoader );
+ descriptor =
+ m_accessor.getClassDescriptor( classname,
+ classLoader,
+ m_wrapperAccessor );
cache.put( classname, descriptor );
return descriptor;
}
@@ -85,7 +104,7 @@
* @param descriptor the descriptor
* @param classLoader the ClassLoader
*/
- public void registerDescriptor( final ClassDescriptor descriptor,
+ public synchronized void registerDescriptor( final ClassDescriptor descriptor,
final ClassLoader classLoader )
{
if ( null == descriptor )
1.5 +2 -2 spice/sandbox/metaclass/src/java/org/realityforge/metaclass/introspector/DefaultMetaClassAccessor.java
Index: DefaultMetaClassAccessor.java
===================================================================
RCS file: /cvsroot/spice/spice/sandbox/metaclass/src/java/org/realityforge/metaclass/introspector/DefaultMetaClassAccessor.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- DefaultMetaClassAccessor.java 26 Oct 2003 11:02:19 -0000 1.4
+++ DefaultMetaClassAccessor.java 28 Oct 2003 07:01:01 -0000 1.5
@@ -36,7 +36,7 @@
* </ul>
*
* @author <a href="mailto:peter at realityforge.org">Peter Donald</a>
- * @version $Revision: 1.4 $ $Date: 2003/10/26 11:02:19 $
+ * @version $Revision: 1.5 $ $Date: 2003/10/28 07:01:01 $
*/
public class DefaultMetaClassAccessor
implements MetaClassAccessor
@@ -66,7 +66,7 @@
* @throws MetaClassException if unable to create {@link ClassDescriptor}
*/
public ClassDescriptor getClassDescriptor( final String classname,
- final ClassLoader classLoader )
+ final ClassLoader classLoader, MetaClassAccessor accessor )
throws MetaClassException
{
final String resource = classname.replace( '.', '/' ) + BINARY_EXT;
1.3 +14 -7 spice/sandbox/metaclass/src/java/org/realityforge/metaclass/introspector/MetaClassAccessor.java
Index: MetaClassAccessor.java
===================================================================
RCS file: /cvsroot/spice/spice/sandbox/metaclass/src/java/org/realityforge/metaclass/introspector/MetaClassAccessor.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- MetaClassAccessor.java 4 Oct 2003 00:50:43 -0000 1.2
+++ MetaClassAccessor.java 28 Oct 2003 07:01:01 -0000 1.3
@@ -11,22 +11,29 @@
/**
* This is the interface used to access MetaClass
- * {@link ClassDescriptor}s for a particular class.
+ * ClassDescriptors for a particular class. Note that
+ * the Accessor is passed another MetaClassAccessor that
+ * it can use to load other auxilliar classes such as super
+ * classes or interfaces. However there is no protection
+ * against circular references so MetaClassAccessor
+ * implementations must guard against such circumstances.
*
* @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 07:01:01 $
*/
public interface MetaClassAccessor
{
/**
- * Return a {@link ClassDescriptor} for specified class.
+ * Return a ClassDescriptor for specified class.
*
- * @param classname the classname to get {@link ClassDescriptor} for
+ * @param classname the classname to get ClassDescriptor for
* @param classLoader the classLoader to use
- * @return the newly created {@link ClassDescriptor}
- * @throws MetaClassException if unable to create {@link ClassDescriptor}
+ * @param accessor the accessor to use to load auxilliary classes
+ * @return the newly created ClassDescriptor
+ * @throws MetaClassException if unable to create ClassDescriptor
*/
ClassDescriptor getClassDescriptor( String classname,
- ClassLoader classLoader )
+ ClassLoader classLoader,
+ MetaClassAccessor accessor )
throws MetaClassException;
}
1.4 +2 -2 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.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- MetaClassIntrospector.java 28 Oct 2003 06:42:33 -0000 1.3
+++ MetaClassIntrospector.java 28 Oct 2003 07:01:01 -0000 1.4
@@ -15,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.3 $ $Date: 2003/10/28 06:42:33 $
+ * @version $Revision: 1.4 $ $Date: 2003/10/28 07:01:01 $
*/
public final class MetaClassIntrospector
{
@@ -100,6 +100,6 @@
final ClassLoader classLoader )
throws MetaClassException
{
- return c_cachingAccessor.getClassDescriptor( classname, classLoader );
+ return c_cachingAccessor.getClassDescriptor( classname, classLoader, null );
}
}
1.2 +4 -3 spice/sandbox/metaclass/src/java/org/realityforge/metaclass/introspector/WrapperMetaClassAccessor.java
Index: WrapperMetaClassAccessor.java
===================================================================
RCS file: /cvsroot/spice/spice/sandbox/metaclass/src/java/org/realityforge/metaclass/introspector/WrapperMetaClassAccessor.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- WrapperMetaClassAccessor.java 28 Oct 2003 06:41:56 -0000 1.1
+++ WrapperMetaClassAccessor.java 28 Oct 2003 07:01:01 -0000 1.2
@@ -15,7 +15,7 @@
* get to the underlying accessor implementation.
*
* @author <a href="mailto:peter at realityforge.org">Peter Donald</a>
- * @version $Revision: 1.1 $ $Date: 2003/10/28 06:41:56 $
+ * @version $Revision: 1.2 $ $Date: 2003/10/28 07:01:01 $
*/
public class WrapperMetaClassAccessor
implements MetaClassAccessor
@@ -43,9 +43,10 @@
* @see MetaClassAccessor#getClassDescriptor
*/
public synchronized ClassDescriptor getClassDescriptor( final String classname,
- final ClassLoader classLoader )
+ final ClassLoader classLoader,
+ final MetaClassAccessor accessor )
throws MetaClassException
{
- return m_accessor.getClassDescriptor( classname, classLoader );
+ return m_accessor.getClassDescriptor( classname, classLoader, accessor );
}
}
-------------------------------------------------------
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/