You are viewing a plain text version of this content. The canonical link for it is here.
Posted to xmlbeans-cvs@xml.apache.org by pc...@apache.org on 2004/03/03 04:57:50 UTC

cvs commit: xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/provider CompositeClassInitializer.java DefaultCommentProcessor.java DefaultJServiceFactory.java ElementProcessor.java ElementWalker.java CompositeClassBuilder.java EClassInitializer.java JServiceParamsImpl.java JStoreParams.java NewJServiceFactory.java DefaultJResultFactory.java

pcal        2004/03/02 19:57:50

  Modified:    v2/src/jam/org/apache/xmlbeans/impl/jam JElement.java
                        JServiceFactory.java JServiceParams.java
               v2/src/jam/org/apache/xmlbeans/impl/jam/editable EClass.java
                        EElement.java
               v2/src/jam/org/apache/xmlbeans/impl/jam/editable/impl
                        EAnnotationImpl.java EAnnotationMemberImpl.java
                        EClassImpl.java EConstructorImpl.java
                        EElementImpl.java EFieldImpl.java
                        EInvokableImpl.java EMethodImpl.java
                        EParameterImpl.java
               v2/src/jam/org/apache/xmlbeans/impl/jam/internal
                        JClassLoaderImpl.java
               v2/src/jam/org/apache/xmlbeans/impl/jam/provider
                        CompositeClassBuilder.java EClassInitializer.java
                        JServiceParamsImpl.java JStoreParams.java
                        NewJServiceFactory.java
  Added:       v2/src/jam/org/apache/xmlbeans/impl/jam/editable
                        EElementVisitor.java
               v2/src/jam/org/apache/xmlbeans/impl/jam/provider
                        CompositeClassInitializer.java
                        DefaultCommentProcessor.java
                        DefaultJServiceFactory.java ElementProcessor.java
                        ElementWalker.java
  Removed:     v2/src/jam/org/apache/xmlbeans/impl/jam/provider
                        DefaultJResultFactory.java
  Log:
  jam: add EElementVisitor, lay groundwork for javadoc tag transformers
  
  Revision  Changes    Path
  1.5       +35 -12    xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/JElement.java
  
  Index: JElement.java
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/JElement.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- JElement.java	12 Feb 2004 20:06:09 -0000	1.4
  +++ JElement.java	3 Mar 2004 03:57:49 -0000	1.5
  @@ -37,18 +37,16 @@
     public JAnnotation[] getAnnotations();
   
     /**
  -   * <p>Returns the set of annotations associated with this
  -   * abstraction which have the given name.  Returns an empty array if
  -   * there are no such annotations.</p>
  +   * <p>Returns the annotation of the named annotation class.  The
  +   * named class must be loadable by the JClassLoader which loaded
  +   * this JElement.</p>
  +   *
  +   * NOTE: The following additional behavior is still supported
  +   * in the case where the annotation takes the form of javadoc tags,
  +   * but it is deprecated.
      *
  -   * @deprecated I don't think we should encourage people to support
  -   * multiple annotations with the same name as that does not work once
  -   * we get to 175-land.
  -   */
  -  public JAnnotation[] getAnnotations(String named);
  -
  -  /**
  -   * <p>Returns the annotation on this abstraction which has the given
  +   * <p>Returns the annotation on this abstraction of the given
  +   * annotation type.  which has the given
      * name.  If more than one such annotation exists, returns the first
      * one in document order.  If none exists, returns null.</p>
      *
  @@ -65,7 +63,16 @@
      * return null.</p>
      *
      */
  -  public JAnnotation getAnnotation(String named);
  +  public JAnnotation getAnnotation(String qualifiedAnnotationClassname);
  +
  +  /**
  +   * <p>Returns the annotation on this abstraction of the given
  +   * annotation type.</p>
  +   */
  +  //public JAnnotation getAnnotation(JAnnotationDefinition annType);
  +
  +
  +
   
     /**
      * <p>Returns the parent of this abstraction, or null if this
  @@ -116,4 +123,20 @@
      * element, or null if the position is unknown on not applicable.
      */
     public JSourcePosition getSourcePosition();
  +
  +
  +  // ========================================================================
  +  // Deprecated methods
  +
  +  /**
  +   * <p>Returns the set of annotations associated with this
  +   * abstraction which have the given name.  Returns an empty array if
  +   * there are no such annotations.</p>
  +   *
  +   * @deprecated I don't think we should encourage people to support
  +   * multiple annotations with the same name as that does not work once
  +   * we get to 175-land.
  +   */
  +  public JAnnotation[] getAnnotations(String named);
  +
   }
  
  
  
  1.6       +2 -2      xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/JServiceFactory.java
  
  Index: JServiceFactory.java
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/JServiceFactory.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- JServiceFactory.java	2 Mar 2004 08:28:19 -0000	1.5
  +++ JServiceFactory.java	3 Mar 2004 03:57:49 -0000	1.6
  @@ -16,7 +16,7 @@
   package org.apache.xmlbeans.impl.jam;
   
   import org.apache.xmlbeans.impl.jam.internal.JamPrinter;
  -import org.apache.xmlbeans.impl.jam.provider.DefaultJResultFactory;
  +import org.apache.xmlbeans.impl.jam.provider.DefaultJServiceFactory;
   
   import java.io.IOException;
   import java.io.File;
  @@ -42,7 +42,7 @@
     // ========================================================================
     // Constants
   
  -  private static final JServiceFactory DEFAULT = new DefaultJResultFactory();
  +  private static final JServiceFactory DEFAULT = new DefaultJServiceFactory();
   
     // ========================================================================
     // Singleton
  
  
  
  1.6       +7 -0      xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/JServiceParams.java
  
  Index: JServiceParams.java
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/JServiceParams.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- JServiceParams.java	2 Mar 2004 06:32:13 -0000	1.5
  +++ JServiceParams.java	3 Mar 2004 03:57:49 -0000	1.6
  @@ -15,6 +15,8 @@
   
   package org.apache.xmlbeans.impl.jam;
   
  +import org.apache.xmlbeans.impl.jam.provider.EClassInitializer;
  +
   import java.io.File;
   import java.io.PrintWriter;
   
  @@ -245,4 +247,9 @@
      * @throws IllegalArgumentException if either argument is null.
      */
     public File getRootForFile(File[] sourceRoots, File sourceFile);
  +
  +
  +  public void setCommentInitializer(EClassInitializer init);
  +
  +  public void addCustomInitializer(EClassInitializer init);
   }
  
  
  
  1.7       +3 -3      xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/EClass.java
  
  Index: EClass.java
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/EClass.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- EClass.java	3 Mar 2004 00:01:42 -0000	1.6
  +++ EClass.java	3 Mar 2004 03:57:49 -0000	1.7
  @@ -150,9 +150,9 @@
     public void removeMethod(EMethod method);
   
     /**
  -   * Returns the EditableMethods declared on this class.  This does not include
  -   * methods from any base class or interface.  This is simply a more
  -   * strongly-typed version of getDeclaredMethods().
  +   * Returns the EditableMethods declared on this class.  This does not
  +   * include methods inherited from any base class or interface.  This is
  +   * simply a more strongly-typed version of getDeclaredMethods().
      */
     public EMethod[] getEditableMethods();
   
  
  
  
  1.5       +28 -0     xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/EElement.java
  
  Index: EElement.java
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/EElement.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- EElement.java	2 Mar 2004 04:26:18 -0000	1.4
  +++ EElement.java	3 Mar 2004 03:57:49 -0000	1.5
  @@ -23,6 +23,7 @@
    */
   public interface EElement extends JElement {
   
  +
     public void setSimpleName(String name);
   
     public ESourcePosition createSourcePosition();
  @@ -34,4 +35,31 @@
     public EAnnotation addNewAnnotation();
   
     public void removeAnnotation(EAnnotation ann);
  +
  +  /**
  +   * <p>Accepts the given visitor.</p>
  +   */
  +  public void accept(EElementVisitor visitor);
  +
  +  /**
  +   * <p>Calls accept() with the given visitor, and then recursively calls
  +   * acceptAndWalk for all of our component elements.  Calling this on
  +   * an EClass will cause the EClass to accept the visitor, and then
  +   * all of it's declared fields constructors, and methods.  The parameter
  +   * for each constructor and method will also in turn be accepted.
  +   * Any annotations for each of these element types will also be visited
  +   * after their other children have been visited.  Note that inherited
  +   * members are never visited, nor are referenced classes (e.g. referenced
  +   * via inheritance or member types).  </p>
  +   *
  +   * Class
  +   *   Field
  +   *   Method
  +   *     Parameter
  +   *   Constructor
  +   *     Parameter
  +   *
  +   * </p>
  +   */
  +  public void acceptAndWalk(EElementVisitor visitor);
   }
  
  
  
  1.1                  xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/EElementVisitor.java
  
  Index: EElementVisitor.java
  ===================================================================
  /*   Copyright 2004 The Apache Software Foundation
   *
   *   Licensed under the Apache License, Version 2.0 (the "License");
   *   you may not use this file except in compliance with the License.
   *   You may obtain a copy of the License at
   *
   *       http://www.apache.org/licenses/LICENSE-2.0
   *
   *   Unless required by applicable law or agreed to in writing, software
   *   distributed under the License is distributed on an "AS IS" BASIS,
   *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   *   See the License for the specific language governing permissions and
   *  limitations under the License.
   */
  package org.apache.xmlbeans.impl.jam.editable;
  
  /**
   *
   * @author Patrick Calahan <pc...@bea.com>
   */
  public interface EElementVisitor {
  
    public void visit(EClass clazz);
  
    public void visit(EConstructor ctor);
  
    public void visit(EField field);
  
    public void visit(EMethod method);
  
    public void visit(EParameter param);
  
    //REVIEW i'm not sure we want to visit annotations and their members,
    //but we have little choice as long as they are elements.  Maybe that
    //needs to change.
    public void visit(EAnnotation param);
  
    public void visit(EAnnotationMember member);
  
  }
  
  
  
  1.3       +12 -0     xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/impl/EAnnotationImpl.java
  
  Index: EAnnotationImpl.java
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/impl/EAnnotationImpl.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- EAnnotationImpl.java	2 Mar 2004 04:26:18 -0000	1.2
  +++ EAnnotationImpl.java	3 Mar 2004 03:57:49 -0000	1.3
  @@ -166,4 +166,16 @@
       return 0;
     }
   
  +  // ========================================================================
  +  // EElement implementation
  +
  +  public void accept(EElementVisitor visitor) {
  +    visitor.visit(this);
  +  }
  +
  +  public void acceptAndWalk(EElementVisitor visitor) {
  +    accept(visitor);
  +    acceptAndWalkAll(visitor,getEditableMembers());
  +  }
  +
   }
  
  
  
  1.2       +17 -1     xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/impl/EAnnotationMemberImpl.java
  
  Index: EAnnotationMemberImpl.java
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/impl/EAnnotationMemberImpl.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- EAnnotationMemberImpl.java	1 Mar 2004 00:10:18 -0000	1.1
  +++ EAnnotationMemberImpl.java	3 Mar 2004 03:57:49 -0000	1.2
  @@ -15,6 +15,7 @@
   package org.apache.xmlbeans.impl.jam.editable.impl;
   
   import org.apache.xmlbeans.impl.jam.editable.EAnnotationMember;
  +import org.apache.xmlbeans.impl.jam.editable.EElementVisitor;
   import org.apache.xmlbeans.impl.jam.editable.impl.ref.DirectJClassRef;
   import org.apache.xmlbeans.impl.jam.editable.impl.ref.QualifiedJClassRef;
   import org.apache.xmlbeans.impl.jam.JAnnotation;
  @@ -239,4 +240,19 @@
     public char[] getValueAsCharArray() throws IllegalArgumentException {
       return new char[0];
     }
  -}
  +
  +
  +  // ========================================================================
  +  // EElement implementation
  +
  +  public void accept(EElementVisitor visitor) {
  +    visitor.visit(this);
  +  }
  +
  +  public void acceptAndWalk(EElementVisitor visitor) {
  +    accept(visitor);
  +    if (mValue instanceof EAnnotationMember) {
  +      ((EAnnotationMember)mValue).acceptAndWalk(visitor); //REVIEW is ok???
  +    }
  +  }
  +}
  \ No newline at end of file
  
  
  
  1.8       +12 -0     xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/impl/EClassImpl.java
  
  Index: EClassImpl.java
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/impl/EClassImpl.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- EClassImpl.java	3 Mar 2004 00:01:42 -0000	1.7
  +++ EClassImpl.java	3 Mar 2004 03:57:49 -0000	1.8
  @@ -412,4 +412,16 @@
       }
     }
   
  +  public void accept(EElementVisitor visitor) {
  +    visitor.visit(this);
  +  }
  +
  +  public void acceptAndWalk(EElementVisitor visitor) {
  +    accept(visitor);
  +    acceptAndWalkAll(visitor,getEditableFields());
  +    acceptAndWalkAll(visitor,getEditableConstructors());
  +    acceptAndWalkAll(visitor,getEditableMethods());
  +    acceptAndWalkAll(visitor,getEditableAnnotations());
  +  }
  +
   }
  
  
  
  1.4       +15 -0     xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/impl/EConstructorImpl.java
  
  Index: EConstructorImpl.java
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/impl/EConstructorImpl.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- EConstructorImpl.java	25 Feb 2004 18:56:49 -0000	1.3
  +++ EConstructorImpl.java	3 Mar 2004 03:57:49 -0000	1.4
  @@ -17,6 +17,7 @@
   
   import org.apache.xmlbeans.impl.jam.editable.EConstructor;
   import org.apache.xmlbeans.impl.jam.editable.EParameter;
  +import org.apache.xmlbeans.impl.jam.editable.EElementVisitor;
   import org.apache.xmlbeans.impl.jam.JClass;
   import org.apache.xmlbeans.impl.jam.JParameter;
   
  @@ -36,5 +37,19 @@
     /*package*/ EConstructorImpl(EClassImpl containingClass) {
       super(containingClass.getSimpleName(),containingClass);
     }
  +
  +  // ========================================================================
  +  // EElement implementation
  +
  +  public void accept(EElementVisitor visitor) {
  +    visitor.visit(this);
  +  }
  +
  +  public void acceptAndWalk(EElementVisitor visitor) {
  +    accept(visitor);
  +    acceptAndWalkAll(visitor,getEditableParameters());
  +    acceptAndWalkAll(visitor,getEditableAnnotations());
  +  }
  +
   
   }
  
  
  
  1.7       +8 -0      xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/impl/EElementImpl.java
  
  Index: EElementImpl.java
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/impl/EElementImpl.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- EElementImpl.java	2 Mar 2004 22:03:04 -0000	1.6
  +++ EElementImpl.java	3 Mar 2004 03:57:49 -0000	1.7
  @@ -18,6 +18,7 @@
   import org.apache.xmlbeans.impl.jam.editable.EElement;
   import org.apache.xmlbeans.impl.jam.editable.ESourcePosition;
   import org.apache.xmlbeans.impl.jam.editable.EAnnotation;
  +import org.apache.xmlbeans.impl.jam.editable.EElementVisitor;
   import org.apache.xmlbeans.impl.jam.*;
   
   import java.util.List;
  @@ -152,6 +153,13 @@
     public int hashCode() {
       String qn = getQualifiedName();
       return (qn == null) ? 0 : qn.hashCode();
  +  }
  +
  +  // ========================================================================
  +  // Protected methods
  +
  +  protected void acceptAndWalkAll(EElementVisitor v, EElement[] elems) {
  +    for(int i=0; i<elems.length; i++) elems[i].acceptAndWalk(v);
     }
   
   
  
  
  
  1.4       +15 -0     xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/impl/EFieldImpl.java
  
  Index: EFieldImpl.java
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/impl/EFieldImpl.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- EFieldImpl.java	25 Feb 2004 18:56:49 -0000	1.3
  +++ EFieldImpl.java	3 Mar 2004 03:57:49 -0000	1.4
  @@ -16,6 +16,7 @@
   package org.apache.xmlbeans.impl.jam.editable.impl;
   
   import org.apache.xmlbeans.impl.jam.editable.EField;
  +import org.apache.xmlbeans.impl.jam.editable.EElementVisitor;
   import org.apache.xmlbeans.impl.jam.editable.impl.ref.JClassRef;
   import org.apache.xmlbeans.impl.jam.editable.impl.ref.QualifiedJClassRef;
   import org.apache.xmlbeans.impl.jam.editable.impl.ref.UnqualifiedJClassRef;
  @@ -55,6 +56,7 @@
       return getContainingClass().getQualifiedName()+"."+getSimpleName();
     }
   
  +
     // ========================================================================
     // EField implementation
   
  @@ -98,4 +100,17 @@
     public boolean isTransient() {
       return Modifier.isTransient(getModifiers());
     }
  +
  +  // ========================================================================
  +  // EElement implementation
  +
  +  public void accept(EElementVisitor visitor) {
  +    visitor.visit(this);
  +  }
  +
  +  public void acceptAndWalk(EElementVisitor visitor) {
  +    accept(visitor);
  +    acceptAndWalkAll(visitor,getEditableAnnotations());
  +  }
  +
   }
  
  
  
  1.6       +1 -1      xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/impl/EInvokableImpl.java
  
  Index: EInvokableImpl.java
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/impl/EInvokableImpl.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- EInvokableImpl.java	3 Mar 2004 00:01:42 -0000	1.5
  +++ EInvokableImpl.java	3 Mar 2004 03:57:49 -0000	1.6
  @@ -32,7 +32,7 @@
    *
    * @author Patrick Calahan <pc...@bea.com>
    */
  -public class EInvokableImpl extends EMemberImpl implements EInvokable {
  +public abstract class EInvokableImpl extends EMemberImpl implements EInvokable {
   
     // ========================================================================
     // Variables
  
  
  
  1.5       +15 -0     xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/impl/EMethodImpl.java
  
  Index: EMethodImpl.java
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/impl/EMethodImpl.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- EMethodImpl.java	3 Mar 2004 00:01:42 -0000	1.4
  +++ EMethodImpl.java	3 Mar 2004 03:57:49 -0000	1.5
  @@ -16,6 +16,7 @@
   package org.apache.xmlbeans.impl.jam.editable.impl;
   
   import org.apache.xmlbeans.impl.jam.editable.EMethod;
  +import org.apache.xmlbeans.impl.jam.editable.EElementVisitor;
   import org.apache.xmlbeans.impl.jam.editable.impl.ref.UnqualifiedJClassRef;
   import org.apache.xmlbeans.impl.jam.editable.impl.ref.JClassRef;
   import org.apache.xmlbeans.impl.jam.editable.impl.ref.QualifiedJClassRef;
  @@ -94,4 +95,18 @@
     public boolean isSynchronized() {
       return Modifier.isSynchronized(getModifiers());
     }
  +
  +  // ========================================================================
  +  // EElement implementation
  +
  +  public void accept(EElementVisitor visitor) {
  +    visitor.visit(this);
  +  }
  +
  +  public void acceptAndWalk(EElementVisitor visitor) {
  +    accept(visitor);
  +    acceptAndWalkAll(visitor,getEditableParameters());
  +    acceptAndWalkAll(visitor,getEditableAnnotations());
  +  }
  +
   }
  
  
  
  1.6       +12 -0     xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/impl/EParameterImpl.java
  
  Index: EParameterImpl.java
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/impl/EParameterImpl.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- EParameterImpl.java	3 Mar 2004 00:01:42 -0000	1.5
  +++ EParameterImpl.java	3 Mar 2004 03:57:49 -0000	1.6
  @@ -16,6 +16,7 @@
   package org.apache.xmlbeans.impl.jam.editable.impl;
   
   import org.apache.xmlbeans.impl.jam.editable.EParameter;
  +import org.apache.xmlbeans.impl.jam.editable.EElementVisitor;
   import org.apache.xmlbeans.impl.jam.editable.impl.ref.JClassRef;
   import org.apache.xmlbeans.impl.jam.editable.impl.ref.QualifiedJClassRef;
   import org.apache.xmlbeans.impl.jam.editable.impl.ref.DirectJClassRef;
  @@ -79,4 +80,15 @@
       return mTypeClassRef.getRefClass();
     }
   
  +  // ========================================================================
  +  // EElement implementation
  +
  +  public void accept(EElementVisitor visitor) {
  +    visitor.visit(this);
  +  }
  +
  +  public void acceptAndWalk(EElementVisitor visitor) {
  +    accept(visitor);
  +    acceptAndWalkAll(visitor,getEditableAnnotations());
  +  }
   }
  
  
  
  1.3       +10 -3     xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/internal/JClassLoaderImpl.java
  
  Index: JClassLoaderImpl.java
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/internal/JClassLoaderImpl.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- JClassLoaderImpl.java	3 Mar 2004 00:01:42 -0000	1.2
  +++ JClassLoaderImpl.java	3 Mar 2004 03:57:49 -0000	1.3
  @@ -54,10 +54,17 @@
     public JClassLoaderImpl(EClassBuilder builder,
                             EClassInitializer initializer) {
       if (builder == null) throw new IllegalArgumentException("null builder");
  +    if (initializer == null) throw new IllegalArgumentException("null initializer");
       mBuilder = builder;
       mInitializer = initializer;
     }
   
  +  public JClassLoaderImpl(EClassBuilder builder) {
  +    if (builder == null) throw new IllegalArgumentException("null builder");
  +    mBuilder = builder;
  +    mInitializer = null;
  +  }
  +
     // ========================================================================
     // JClassLoader implementation
   
  @@ -90,11 +97,11 @@
       if (out == null) {
         out = new EClassImpl(pkg,name,this,null);
         ((EClassImpl)out).setIsUnresolved(true);
  -      if (mVerbose) System.out.println("[JClassLoaderImpl] unresolve class '"+
  +      if (mVerbose) System.out.println("[JClassLoaderImpl] unresolved class '"+
                                          pkg+" "+name+"'!!");
       }
  -    if (out instanceof EClassImpl) {
  -      if (mInitializer != null) mInitializer.initialize((EClassImpl)out);
  +    if (mInitializer != null && out instanceof EClassImpl) {
  +      mInitializer.initialize((EClassImpl)out);
       }
       mFd2ClassCache.put(fd,out);
       return out;
  
  
  
  1.2       +3 -0      xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/provider/CompositeClassBuilder.java
  
  Index: CompositeClassBuilder.java
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/provider/CompositeClassBuilder.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- CompositeClassBuilder.java	2 Mar 2004 04:26:18 -0000	1.1
  +++ CompositeClassBuilder.java	3 Mar 2004 03:57:49 -0000	1.2
  @@ -23,6 +23,9 @@
    */
   public class CompositeClassBuilder implements EClassBuilder {
   
  +  // ========================================================================
  +  // Variables
  +
     private EClassBuilder[] mBuilders;
   
     // ========================================================================
  
  
  
  1.2       +1 -2      xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/provider/EClassInitializer.java
  
  Index: EClassInitializer.java
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/provider/EClassInitializer.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- EClassInitializer.java	2 Mar 2004 04:26:18 -0000	1.1
  +++ EClassInitializer.java	3 Mar 2004 03:57:49 -0000	1.2
  @@ -30,8 +30,7 @@
      * <p>Note that the type to be initialized will never be an array type,
      * a primitive, 'void', or 'java.lang.Object'.</p>
      *
  -   * @return
      */
  -  public boolean initialize(EClass clazz);
  +  public void initialize(EClass clazz);
   
   }
  
  
  
  1.2       +25 -0     xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/provider/JServiceParamsImpl.java
  
  Index: JServiceParamsImpl.java
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/provider/JServiceParamsImpl.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- JServiceParamsImpl.java	2 Mar 2004 06:32:13 -0000	1.1
  +++ JServiceParamsImpl.java	3 Mar 2004 03:57:49 -0000	1.2
  @@ -51,6 +51,8 @@
     private boolean mUseSystemClasspath = true;
     private boolean mVerbose = false;
     private JClassLoader mParentClassloader = null;
  +  private EClassInitializer mCommentInitializer = null;
  +  private List mOtherInitializers = null;
   
     // ========================================================================
     // Constructors
  @@ -206,6 +208,15 @@
       mUseSystemClasspath = use;
     }
   
  +  public void setCommentInitializer(EClassInitializer init) {
  +    mCommentInitializer = init;
  +  }
  +
  +  public void addCustomInitializer(EClassInitializer init) {
  +    if (mOtherInitializers == null) mOtherInitializers = new ArrayList();
  +    mOtherInitializers.add(init);
  +  }
  +
     // ========================================================================
     // JStoreParams implementation
   
  @@ -243,6 +254,20 @@
         }
       }
       return null;
  +  }
  +
  +  public EClassInitializer getInitializer() {
  +    List initers = new ArrayList();
  +    if (mCommentInitializer != null) {
  +      initers.add(mCommentInitializer);
  +    } else {
  +      //FIXME initers.add(new DefaultCommentInitializer());
  +    }
  +    if (mOtherInitializers != null) initers.addAll(mOtherInitializers);
  +    // now go
  +    EClassInitializer[] inits = new EClassInitializer[initers.size()];
  +    initers.toArray(inits);
  +    return new CompositeClassInitializer(inits);
     }
   
   
  
  
  
  1.4       +2 -0      xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/provider/JStoreParams.java
  
  Index: JStoreParams.java
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/provider/JStoreParams.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- JStoreParams.java	2 Mar 2004 06:32:13 -0000	1.3
  +++ JStoreParams.java	3 Mar 2004 03:57:49 -0000	1.4
  @@ -109,4 +109,6 @@
     public Properties getProperties();
   
     public JClassLoader getParentClassLoader();
  +
  +  public EClassInitializer getInitializer();
   }
  
  
  
  1.3       +2 -2      xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/provider/NewJServiceFactory.java
  
  Index: NewJServiceFactory.java
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/provider/NewJServiceFactory.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- NewJServiceFactory.java	3 Mar 2004 00:01:42 -0000	1.2
  +++ NewJServiceFactory.java	3 Mar 2004 03:57:49 -0000	1.3
  @@ -24,7 +24,7 @@
    *
    * @author Patrick Calahan <pc...@bea.com>
    */
  -public class NewJServiceFactory extends DefaultJResultFactory {
  +public class NewJServiceFactory extends DefaultJServiceFactory {
   
     /**
      * <p>Creates the sourcefile classloader to be used given the input params.
  @@ -40,7 +40,7 @@
       // FIXME this is a temporary hack - we shouldnt have to do this
       builders[1] = ReflectionClassBuilder.getSystemClassBuilder();
       CompositeClassBuilder ccb = new CompositeClassBuilder(builders);
  -    return new JClassLoaderImpl(ccb,null);
  +    return new JClassLoaderImpl(ccb,params.getInitializer());
     }
   
   }
  
  
  
  1.1                  xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/provider/CompositeClassInitializer.java
  
  Index: CompositeClassInitializer.java
  ===================================================================
  /*   Copyright 2004 The Apache Software Foundation
   *
   *   Licensed under the Apache License, Version 2.0 (the "License");
   *   you may not use this file except in compliance with the License.
   *   You may obtain a copy of the License at
   *
   *       http://www.apache.org/licenses/LICENSE-2.0
   *
   *   Unless required by applicable law or agreed to in writing, software
   *   distributed under the License is distributed on an "AS IS" BASIS,
   *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   *   See the License for the specific language governing permissions and
   *  limitations under the License.
   */
  package org.apache.xmlbeans.impl.jam.provider;
  
  import org.apache.xmlbeans.impl.jam.editable.EClass;
  
  /**
   *
   * @author Patrick Calahan <pc...@bea.com>
   */
  public class CompositeClassInitializer implements EClassInitializer {
  
    // ========================================================================
    // Variables
  
    private EClassInitializer[] mIniters;
  
    // ========================================================================
    // Constructors
  
    public CompositeClassInitializer(EClassInitializer[] initers) {
      if (initers == null) throw new IllegalArgumentException("null initers");
      mIniters = initers;
    }
  
    // ========================================================================
    // EClassBuilder implementation
  
    public void initialize(EClass clazz) {
      for(int i=0; i<mIniters.length; i++) mIniters[i].initialize(clazz);
    }
  
  }
  
  
  1.1                  xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/provider/DefaultCommentProcessor.java
  
  Index: DefaultCommentProcessor.java
  ===================================================================
  /*   Copyright 2004 The Apache Software Foundation
   *
   *   Licensed under the Apache License, Version 2.0 (the "License");
   *   you may not use this file except in compliance with the License.
   *   You may obtain a copy of the License at
   *
   *       http://www.apache.org/licenses/LICENSE-2.0
   *
   *   Unless required by applicable law or agreed to in writing, software
   *   distributed under the License is distributed on an "AS IS" BASIS,
   *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   *   See the License for the specific language governing permissions and
   *  limitations under the License.
   */
  package org.apache.xmlbeans.impl.jam.provider;
  
  import org.apache.xmlbeans.impl.jam.editable.*;
  import org.apache.xmlbeans.impl.jam.JComment;
  
  import java.io.*;
  
  /**
   *
   * @author Patrick Calahan <pc...@bea.com>
   */
  public class DefaultCommentProcessor
          implements EClassInitializer, EElementVisitor {
  
    // ========================================================================
    // Singleton
  
    public static EClassInitializer getInstance() { return INSTANCE; }
  
    private static EClassInitializer INSTANCE = new DefaultCommentProcessor();
  
    private DefaultCommentProcessor() {}
  
    // ========================================================================
    // EClassInitializer implementation
  
    public void initialize(EClass clazz) {
      clazz.acceptAndWalk(this);
    }
  
    // ========================================================================
    // EElementVisitor implementation - nothing to see here
  
    public void visit(EClass clazz)             { visit((EElement)clazz); }
    public void visit(EConstructor ctor)        { visit((EElement)ctor); }
    public void visit(EField field)             { visit((EElement)field); }
    public void visit(EMethod method)           { visit((EElement)method); }
    public void visit(EParameter param)         { visit((EElement)param); }
    public void visit(EAnnotation ann)          { visit((EElement)ann); }
    public void visit(EAnnotationMember member) { visit((EElement)member); }
  
    // ========================================================================
    // Protected methods
  
    protected void visit(EElement element) {
      /*
      EComment[] comments = element.getEditableComments();
      if (comments == null || comments.length == 0) return;
      for(int i=0; i<comments.length; i++) {
        String text = comments[i].getText().trim();
        if (!text.startsWith("/*")) {
          element.removeComment(comments[i]);
        } else {
          StringWriter sw = new StringWriter();
          BufferedWriter out = new BufferedWriter(sw);
          BufferedReader in = new BufferedReader(new StringReader(text));
          String line;
          try {
            while((line = in.readLine()) != null) {
              line = line.trim();
              if (line.equalsxxxfixme("* /")) continue;
              int offset = line.indexOf('*');
              if (offset == line.length()) continue;
              out.write(line.substring(offset+1));
            }
            comments[i].setText(sw.toString());
          } catch(IOException veryUnexpected) {
            veryUnexpected.printStackTrace();
          }
        }
        }
  */
    }
  }
  
  
  
  1.1                  xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/provider/DefaultJServiceFactory.java
  
  Index: DefaultJServiceFactory.java
  ===================================================================
  /*   Copyright 2004 The Apache Software Foundation
   *
   *   Licensed under the Apache License, Version 2.0 (the "License");
   *   you may not use this file except in compliance with the License.
   *   You may obtain a copy of the License at
   *
   *       http://www.apache.org/licenses/LICENSE-2.0
   *
   *   Unless required by applicable law or agreed to in writing, software
   *   distributed under the License is distributed on an "AS IS" BASIS,
   *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   *   See the License for the specific language governing permissions and
   *  limitations under the License.
   */
  package org.apache.xmlbeans.impl.jam.provider;
  
  import org.apache.xmlbeans.impl.jam.JServiceFactory;
  import org.apache.xmlbeans.impl.jam.JServiceParams;
  import org.apache.xmlbeans.impl.jam.JService;
  import org.apache.xmlbeans.impl.jam.JClassLoader;
  import org.apache.xmlbeans.impl.jam.internal.RootJClassLoader;
  import org.apache.xmlbeans.impl.jam.internal.javadoc.JDClassLoaderFactory;
  
  import java.io.IOException;
  import java.io.File;
  import java.net.URL;
  import java.net.URLClassLoader;
  
  /**
   * <p>Default implementation of JServiceFactory.  It currently uses javadoc
   * for inspecting sources and reflection for inspecting classes.</p>
   *
   * <p>Note that this class can be used as a base class for custom factories.
   * </p>
   *
   * @author Patrick Calahan <pc...@bea.com>
   */
  public class DefaultJServiceFactory extends JServiceFactory {
  
    // ========================================================================
    // Constructors
  
    public DefaultJServiceFactory() {}
  
    // ========================================================================
    // JServiceFactory implementation
  
    public JServiceParams createServiceParams() {
      return new JServiceParamsImpl();
    }
  
    public JService createService(JServiceParams jsps) throws IOException {
      //assert that they aren't implementing JServiceParams themselves or
      //getting them from somewhere else
      if (!(jsps instanceof JServiceParamsImpl)) {
        throw new IllegalArgumentException
                ("JServiceParams must be instantiated by this JServiceFactory.");
      }
      //create and return the service
      return new JServiceImpl(createClassLoader((JServiceParamsImpl)jsps),
                             getSpecifiedClasses((JServiceParamsImpl)jsps));
    }
  
    // ========================================================================
    // Protected methods - override at your own risk
  
    /**
     * <p>Returns the set of classes to be included in a JService to be
     * created by the given params.  You should not override this
     * unless you really know what you're doing.</p>
     */
    protected String[] getSpecifiedClasses(JServiceParamsImpl params)
            throws IOException
    {
      return params.getAllClassnames();
    }
  
    /**
     * <p>Creates the main classloader to be used given the input params.
     * This is usually a composite of the source classloader and a
     * classfile classloader.  Subclasses may override to change the behavior.
     * </p>
     */
    protected JClassLoader createClassLoader(JServiceParamsImpl params)
            throws IOException
    {
      // Build up the clasloader chain.  Note that each loader we create is
      // used as a parent of the next.
      //
      // The root classloader deals with Object, void, primitives, arrays...
      JClassLoader loader = new RootJClassLoader();
      // Usually they will also want the system classloader in there, but this
      // is optional
      if (params.isUseSystemClasspath()) {
        loader = ReflectionClassBuilder.createRClassLoader
                (ClassLoader.getSystemClassLoader());
      }
      // Now create a loader for any classfile loading they specified
      JClassLoader classfileLoader = createClassfileLoader(params,loader);
      if (classfileLoader != null) loader = classfileLoader;
      // Finally check for sources
      JClassLoader sourceLoader = createSourceLoader(params,loader);
      if (sourceLoader != null) loader = sourceLoader;
      //
      return loader;
    }
  
  
    /**
     * <p>Creates the sourcefile classloader to be used given the input params.
     * Returns null if no source files are specified in the params.  Subclasses
     * may override to change the way in which java sources are loaded.</p>
     */
    protected JClassLoader createSourceLoader(JServiceParamsImpl params,
                                              JClassLoader parent)
            throws IOException
    {
      //FIXME someday should make the name of the service class to use here
      //settable via a system property
      File[] files = params.getSourceFiles();
      if (files == null || files.length == 0) return null;
      String sourcePath = (params.getInputSourcepath() == null) ? null :
              params.getInputSourcepath().toString();
      String classPath = (params.getInputClasspath() == null) ? null :
              params.getInputClasspath().toString();
      return JDClassLoaderFactory.getInstance().
              create(files,
                     parent,
                     params.getAnnotationLoader(),
                     params.getOut(),
                     sourcePath,
                     classPath,
                     null);//FIXME get javadoc args from param props
    }
  
    /**
     * <p>Creates the sourcefile classloader to be used given the input params.
     * If no class files or classloaders are specified in the params, this
     * source files are specified in the params, this just returns null.
     * Subclasses may override to change the way in which java classes
     * are loaded.</p>
     */
    protected JClassLoader createClassfileLoader(JStoreParams jp,
                                                 JClassLoader parent)
            throws IOException
    {
  
      //FIXME someday should make the name of the service class to use here
      //settable via a system property
      JPath cp = jp.getInputClasspath();
      if (cp == null) {
        return null;
      } else {
        URL[] urls = cp.toUrlPath();
        ClassLoader cl = new URLClassLoader(urls);
        return ReflectionClassBuilder.createRClassLoader(cl);
      //  return new RClassLoader(,parent);
      }
    }
  }
  
  
  
  1.1                  xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/provider/ElementProcessor.java
  
  Index: ElementProcessor.java
  ===================================================================
  /*   Copyright 2004 The Apache Software Foundation
   *
   *   Licensed under the Apache License, Version 2.0 (the "License");
   *   you may not use this file except in compliance with the License.
   *   You may obtain a copy of the License at
   *
   *       http://www.apache.org/licenses/LICENSE-2.0
   *
   *   Unless required by applicable law or agreed to in writing, software
   *   distributed under the License is distributed on an "AS IS" BASIS,
   *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   *   See the License for the specific language governing permissions and
   *  limitations under the License.
   */
  package org.apache.xmlbeans.impl.jam.provider;
  
  import org.apache.xmlbeans.impl.jam.editable.EElement;
  
  /**
   *
   * @author Patrick Calahan <pc...@bea.com>
   */
  public interface ElementProcessor {
  
    public void process(EElement e);
  }
  
  
  
  1.1                  xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/provider/ElementWalker.java
  
  Index: ElementWalker.java
  ===================================================================
  /*   Copyright 2004 The Apache Software Foundation
   *
   *   Licensed under the Apache License, Version 2.0 (the "License");
   *   you may not use this file except in compliance with the License.
   *   You may obtain a copy of the License at
   *
   *       http://www.apache.org/licenses/LICENSE-2.0
   *
   *   Unless required by applicable law or agreed to in writing, software
   *   distributed under the License is distributed on an "AS IS" BASIS,
   *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   *   See the License for the specific language governing permissions and
   *  limitations under the License.
   */
  package org.apache.xmlbeans.impl.jam.provider;
  
  import org.apache.xmlbeans.impl.jam.editable.EClass;
  
  /**
   *
   * @author Patrick Calahan <pc...@bea.com>
   */
  public class ElementWalker {
  
    // ========================================================================
    // Variables
  
    private ElementProcessor mProcessor;
  
    // ========================================================================
    // Constructors
  
    public ElementWalker(ElementProcessor p) {
      mProcessor = p;
    }
  
    // ========================================================================
    // Public methods
  
    public void walk(EClass clazz) {
      mProcessor.process(clazz);
    }
  
  
  }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: xmlbeans-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xmlbeans-cvs-help@xml.apache.org