cvs commit: spice/sandbox/metaclass/src/java/org/realityforge/metaclass/tools/compiler ClassDescriptorCompiler.java CompilerMonitor.java DefaultCompilerMonitor.java

Peter Donald <[email protected]> Tue, 18 Nov 2003 03:12:35 -0800
Newsgroups gmane.comp.java.spice.cvs
Message-ID <[email protected]>
donaldp     03/11/18 03:12:34

  Modified:    sandbox/metaclass/src/java/org/realityforge/metaclass/tools/compiler
                        ClassDescriptorCompiler.java CompilerMonitor.java
                        DefaultCompilerMonitor.java
  Log:
  Implement Compacting of ClassDescriptors prior to serialization.
  
  Revision  Changes    Path
  1.13      +50 -2     spice/sandbox/metaclass/src/java/org/realityforge/metaclass/tools/compiler/ClassDescriptorCompiler.java
  
  Index: ClassDescriptorCompiler.java
  ===================================================================
  RCS file: /cvsroot/spice/spice/sandbox/metaclass/src/java/org/realityforge/metaclass/tools/compiler/ClassDescriptorCompiler.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- ClassDescriptorCompiler.java	5 Nov 2003 23:15:36 -0000	1.12
  +++ ClassDescriptorCompiler.java	18 Nov 2003 11:12:34 -0000	1.13
  @@ -28,13 +28,14 @@
   import org.realityforge.metaclass.model.ClassDescriptor;
   import org.realityforge.metaclass.tools.qdox.QDoxAttributeInterceptor;
   import org.realityforge.metaclass.tools.qdox.QDoxDescriptorParser;
  +import org.realityforge.metaclass.tools.packer.ClassDescriptorPacker;
   
   /**
    * A bean that can create MetaClass descriptors by processing
    * Java Source files with qdox.
    *
    * @author <a href="mailto:peter at realityforge.org">Peter Donald</a>
  - * @version $Revision: 1.12 $ $Date: 2003/11/05 23:15:36 $
  + * @version $Revision: 1.13 $ $Date: 2003/11/18 11:12:34 $
    */
   public class ClassDescriptorCompiler
   {
  @@ -44,6 +45,12 @@
       private static final QDoxDescriptorParser c_infoBuilder = new QDoxDescriptorParser();
   
       /**
  +     * Flag indicating whether the compacter
  +     * should methods with no attributes.
  +     */
  +    private boolean m_keepEmptyMethods;
  +
  +    /**
        * Destination directory
        */
       private File m_destDir;
  @@ -79,6 +86,16 @@
       private final List m_filters = new ArrayList();
   
       /**
  +     * Set flag indicating whether Compacter should keep empty methods.
  +     *
  +     * @param keepEmptyMethods  the flag
  +     */
  +    public void setKeepEmptyMethods( final boolean keepEmptyMethods )
  +    {
  +        m_keepEmptyMethods = keepEmptyMethods;
  +    }
  +
  +    /**
        * Set the monitor to receive messages about compiler operation.
        *
        * @param monitor the monitor.
  @@ -216,7 +233,12 @@
           m_monitor.postFilterJavaClassList( classes );
   
           final Collection descriptors = buildClassDescriptors( filteredClasses );
  -        writeClassDescriptors( descriptors );
  +        m_monitor.postBuildDescriptorsList( descriptors );
  +
  +        final Set output = compactClassDescriptors( descriptors );
  +        m_monitor.postCompactDescriptorsList( descriptors );
  +
  +        writeClassDescriptors( output );
       }
   
       /**
  @@ -331,6 +353,32 @@
                   continue;
               }
               classes.add( javaClass );
  +        }
  +        return classes;
  +    }
  +
  +
  +    /**
  +     * Return the set of ClassDescriptors after cmpaction.
  +     *
  +     * @param input the list of input ClassDescriptors to compact
  +     * @return list of ClassDescriptors to serialize
  +     */
  +    private Set compactClassDescriptors( final Collection input )
  +    {
  +        final ClassDescriptorPacker packer =
  +            new ClassDescriptorPacker( m_keepEmptyMethods );
  +        final Set classes = new HashSet();
  +        final Iterator iterator = input.iterator();
  +        while( iterator.hasNext() )
  +        {
  +            final ClassDescriptor candidate = (ClassDescriptor)iterator.next();
  +            final ClassDescriptor descriptor = packer.pack( candidate );
  +            if( null == descriptor )
  +            {
  +                continue;
  +            }
  +            classes.add( descriptor );
           }
           return classes;
       }
  
  
  
  1.4       +16 -1     spice/sandbox/metaclass/src/java/org/realityforge/metaclass/tools/compiler/CompilerMonitor.java
  
  Index: CompilerMonitor.java
  ===================================================================
  RCS file: /cvsroot/spice/spice/sandbox/metaclass/src/java/org/realityforge/metaclass/tools/compiler/CompilerMonitor.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- CompilerMonitor.java	16 Oct 2003 06:53:12 -0000	1.3
  +++ CompilerMonitor.java	18 Nov 2003 11:12:34 -0000	1.4
  @@ -16,7 +16,7 @@
    * can monitor events that occur during compilation.
    *
    * @author <a href="mailto:peter at realityforge.org">Peter Donald</a>
  - * @version $Revision: 1.3 $ $Date: 2003/10/16 06:53:12 $
  + * @version $Revision: 1.4 $ $Date: 2003/11/18 11:12:34 $
    */
   public interface CompilerMonitor
   {
  @@ -60,4 +60,19 @@
        * @param t the error
        */
       void errorGeneratingDescriptor( String classname, Throwable t );
  +
  +    /**
  +     * Called to notify Monitor about the set of ClassDescriptors created.
  +     *
  +     * @param descriptors the ClassDescriptors compiled.
  +     */
  +    void postBuildDescriptorsList( Collection descriptors );
  +
  +    /**
  +     * Called to notify Monitor about the set of ClassDescriptors
  +     * after compacting.
  +     *
  +     * @param descriptors the ClassDescriptors post compacting.
  +     */
  +    void postCompactDescriptorsList( Collection descriptors );
   }
  
  
  
  1.4       +17 -2     spice/sandbox/metaclass/src/java/org/realityforge/metaclass/tools/compiler/DefaultCompilerMonitor.java
  
  Index: DefaultCompilerMonitor.java
  ===================================================================
  RCS file: /cvsroot/spice/spice/sandbox/metaclass/src/java/org/realityforge/metaclass/tools/compiler/DefaultCompilerMonitor.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- DefaultCompilerMonitor.java	16 Oct 2003 06:53:12 -0000	1.3
  +++ DefaultCompilerMonitor.java	18 Nov 2003 11:12:34 -0000	1.4
  @@ -15,7 +15,7 @@
    * The default no-op implementation of compiler monitor.
    *
    * @author <a href="mailto:peter at realityforge.org">Peter Donald</a>
  - * @version $Revision: 1.3 $ $Date: 2003/10/16 06:53:12 $
  + * @version $Revision: 1.4 $ $Date: 2003/11/18 11:12:34 $
    */
   public class DefaultCompilerMonitor
       implements CompilerMonitor
  @@ -52,7 +52,22 @@
       /**
        * @see CompilerMonitor#errorGeneratingDescriptor
        */
  -    public void errorGeneratingDescriptor( String classname, Throwable t )
  +    public void errorGeneratingDescriptor( final String classname,
  +                                           final Throwable t )
  +    {
  +    }
  +
  +    /**
  +     * @see CompilerMonitor#postBuildDescriptorsList
  +     */
  +    public void postBuildDescriptorsList( final Collection descriptors )
  +    {
  +    }
  +
  +    /**
  +     * @see CompilerMonitor#postCompactDescriptorsList
  +     */
  +    public void postCompactDescriptorsList( final Collection descriptors )
       {
       }
   }
  
  
  


-------------------------------------------------------
This SF. Net email is sponsored by: GoToMyPC
GoToMyPC is the fast, easy and secure way to access your computer from
any Web browser or wireless device. Click here to Try it Free!
https://www.gotomypc.com/tr/OSDN/AW/Q4_2003/t/g22lp?Target=mm/g22lp.tmpl