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/
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.