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/01 01:10:19 UTC

cvs commit: xml-xmlbeans/v2/test/src/jamtest/dummy15classes/org/apache/xmlbeans/test/jam/dummyclasses/jsr175 AnnotatedClass.java

pcal        2004/02/29 16:10:19

  Modified:    v2/src/jam java.g
               v2/src/jam/org/apache/xmlbeans/impl/jam
                        JAnnotationMember.java JMember.java
               v2/src/jam/org/apache/xmlbeans/impl/jam/editable
                        EAnnotation.java EAnnotationDefinition.java
                        EAnnotationMember.java
                        EAnnotationMemberDefinition.java EClass.java
                        EElement.java EInvokable.java EMember.java
                        EServiceFactory.java
               v2/src/jam/org/apache/xmlbeans/impl/jam/editable/impl
                        EClassImpl.java EElementImpl.java
                        EInvokableImpl.java
               v2/src/jam/org/apache/xmlbeans/impl/jam/editable/impl/ref
                        QualifiedJClassRef.java
               v2/src/jam/org/apache/xmlbeans/impl/jam/internal/reflect
                        RClassLoader.java
               v2/test/src/jamtest build.xml
  Added:       v2/src/jam/org/apache/xmlbeans/impl/jam/editable/impl
                        EAnnotationDefinitionImpl.java EAnnotationImpl.java
                        EAnnotationMemberDefinitionImpl.java
                        EAnnotationMemberImpl.java
               v2/test/src/jamtest/dummy15classes/org/apache/xmlbeans/test/jam/dummyclasses/jsr175
                        AnnotatedClass.java
  Log:
  jam: lay some groundwork for 175 support
  
  Revision  Changes    Path
  1.3       +4 -2      xml-xmlbeans/v2/src/jam/java.g
  
  Index: java.g
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/src/jam/java.g,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- java.g	25 Feb 2004 18:56:48 -0000	1.2
  +++ java.g	1 Mar 2004 00:10:18 -0000	1.3
  @@ -373,7 +373,8 @@
       n:IDENT tweener { name = n.getText(); }
      ((
        ((ASSIGN variable_value)? SEMI) {
  -       EField field = clazz.addNewField(name);
  +       EField field = clazz.addNewField();
  +       field.setSimpleName(name);
          field.setUnqualifiedType(type);
          field.setModifiers(modifiers);
   	     applyJavadocs(field);
  @@ -383,7 +384,8 @@
   	  (
         (LPAREN (parameterList[mParamList])? RPAREN tweener (throwsClause[mExceptionList])? (statement_block | SEMI)) {
           if (VERBOSE) System.out.println("creating method "+name);
  -        EMethodImpl method = (EMethodImpl)clazz.addNewMethod(name);
  +        EMethodImpl method = (EMethodImpl)clazz.addNewMethod();
  +        method.setSimpleName(name);
           method.setUnqualifiedReturnType(type);
           method.setModifiers(modifiers);
           method.setParameters(mParamList);
  
  
  
  1.9       +2 -0      xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/JAnnotationMember.java
  
  Index: JAnnotationMember.java
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/JAnnotationMember.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- JAnnotationMember.java	14 Feb 2004 01:03:33 -0000	1.8
  +++ JAnnotationMember.java	1 Mar 2004 00:10:18 -0000	1.9
  @@ -24,6 +24,8 @@
    */
   public interface JAnnotationMember {
   
  +  public String getName();
  +
     /**
      * <p>Returns the value of this annotation as an Object.  If the value
      * is primitive, an instance of one of the java.lang wrappers (e.g. Integer)
  
  
  
  1.4       +0 -5      xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/JMember.java
  
  Index: JMember.java
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/JMember.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- JMember.java	12 Feb 2004 20:06:09 -0000	1.3
  +++ JMember.java	1 Mar 2004 00:10:18 -0000	1.4
  @@ -82,10 +82,5 @@
      */
     public boolean isPublic();
   
  -  /**
  -   * <p>Returns the source code position of this member, or null if it
  -   * is unknown.</p>
  -   */
  -  public JSourcePosition getSourcePosition();
   
   }
  
  
  
  1.3       +9 -1      xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/EAnnotation.java
  
  Index: EAnnotation.java
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/EAnnotation.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- EAnnotation.java	12 Feb 2004 20:06:10 -0000	1.2
  +++ EAnnotation.java	1 Mar 2004 00:10:18 -0000	1.3
  @@ -21,9 +21,17 @@
    *
    * @author Patrick Calahan <pc...@bea.com>
    */
  -public interface EAnnotation extends JAnnotation, EMember {
  +public interface EAnnotation extends JAnnotation, EElement {
   
     public EAnnotationMember addNewMember();
  +
  +  public EAnnotationMember[] getEditableMembers();
  +
  +  public EAnnotationMember getEditableMember(String named);
  +
  +  public void setAnnotationObject(Object o);
  +
  +  public void setJavadocText(String text);
   
   
   }
  
  
  
  1.5       +2 -10     xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/EAnnotationDefinition.java
  
  Index: EAnnotationDefinition.java
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/EAnnotationDefinition.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- EAnnotationDefinition.java	13 Feb 2004 21:38:34 -0000	1.4
  +++ EAnnotationDefinition.java	1 Mar 2004 00:10:18 -0000	1.5
  @@ -26,19 +26,11 @@
           JAnnotationDefinition, EElement {
   
     /**
  -   * Creates a new member in this Annotation definition and returns the
  -   * result.
  -   *
  -   * @param type JClass representing the type of the new member.
  -   * @param name A name for the new member.
  -   * @param dflt A default value for the new member.  Primitives should be
  -   * wrapped in java.lang wrappers, e.g. java.lang.Integer.
  +   * Creates a new member in this Annotation definition.
      *
      * @return The newly-added EAnnotation.
      */
  -  public EAnnotationMemberDefinition addNewMemberDefinition(JClass type,
  -                                                            String name,
  -                                                            Object dflt);
  +  public EAnnotationMemberDefinition addNewMemberDefinition();
   
     /**
      *
  
  
  
  1.3       +3 -1      xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/EAnnotationMember.java
  
  Index: EAnnotationMember.java
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/EAnnotationMember.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- EAnnotationMember.java	12 Feb 2004 20:06:10 -0000	1.2
  +++ EAnnotationMember.java	1 Mar 2004 00:10:18 -0000	1.3
  @@ -23,7 +23,9 @@
    *
    * @author Patrick Calahan <pc...@bea.com>
    */
  -public interface EAnnotationMember extends JAnnotationMember, EMember {
  +public interface EAnnotationMember extends JAnnotationMember, EElement {
  +
  +  public void setValue(Object o);
   
     public void setValue(String value);
   
  
  
  
  1.5       +27 -1     xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/EAnnotationMemberDefinition.java
  
  Index: EAnnotationMemberDefinition.java
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/EAnnotationMemberDefinition.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- EAnnotationMemberDefinition.java	13 Feb 2004 21:38:34 -0000	1.4
  +++ EAnnotationMemberDefinition.java	1 Mar 2004 00:10:18 -0000	1.5
  @@ -16,13 +16,39 @@
   package org.apache.xmlbeans.impl.jam.editable;
   
   import org.apache.xmlbeans.impl.jam.JAnnotationMemberDefinition;
  +import org.apache.xmlbeans.impl.jam.JClass;
   
   /**
    *
    * @author Patrick Calahan <pc...@bea.com>
    */
   public interface EAnnotationMemberDefinition
  -        extends JAnnotationMemberDefinition, EElement {
  +        extends JAnnotationMemberDefinition, EMethod {
  +
  +  /**
  +   * <p>Sets the type of this annotation member.  Note that this is synonmous
  +   * with setReturnType.  Must not be null.</p>
  +   */
  +  public void setType(String qualifiedTypeName);
  +
  +  /**
  +   * <p>Sets the type of this annotation member.  Note that this is synonmous
  +   * with setReturnType.  Must not be null.</p>
  +   */
  +  public void setUnqualifiedType(String unqualifiedTypeName);
  +
  +  /**
  +   * <p>Sets the type of this annotation member.  Note that this is synonmous
  +   * with setReturnType.  Must not be null</p>
  +   */
  +  public void setType(JClass c);
  +
  +  /**
  +   * <p>Sets the default value for this member declaration, or null to specify
  +   * no default.</p>
  +   */
  +  public void setDefaultValue(Object o);
  +
   
   
   }
  
  
  
  1.4       +2 -2      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.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- EClass.java	25 Feb 2004 18:56:48 -0000	1.3
  +++ EClass.java	1 Mar 2004 00:10:18 -0000	1.4
  @@ -121,7 +121,7 @@
      * Creates a new field, adds it to this class, and returns it.
      * The type of the field must be qualified
      */
  -  public EField addNewField(String fieldName);
  +  public EField addNewField();
   
     /**
      * Removes the given field from this class.  Does nothing if this class
  @@ -139,7 +139,7 @@
     /**
      * Creates a new method, adds it to this class, and returns it.
      */
  -  public EMethod addNewMethod(String name);
  +  public EMethod addNewMethod();
   
     /**
      * Removes the given method from this class.  Does nothing if this class
  
  
  
  1.3       +6 -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.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- EElement.java	12 Feb 2004 20:06:10 -0000	1.2
  +++ EElement.java	1 Mar 2004 00:10:18 -0000	1.3
  @@ -25,6 +25,12 @@
   
     public void setSimpleName(String name);
   
  +  public ESourcePosition createSourcePosition();
  +
  +  public void removeSourcePosition();
  +
  +  public ESourcePosition getEditableSourcePosition();
  +
     //public EAnnotation createAnnotation();
   
     //public void removeAnnotation(EAnnotation ann);
  
  
  
  1.2       +3 -15     xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/EInvokable.java
  
  Index: EInvokable.java
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/EInvokable.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- EInvokable.java	17 Feb 2004 01:06:53 -0000	1.1
  +++ EInvokable.java	1 Mar 2004 00:10:18 -0000	1.2
  @@ -99,22 +99,10 @@
     public void removeException(JClass exceptionClass);
   
     /**
  -   * Creates a new parameter on this method with the given type and name.
  -   *
  -   * @throws java.lang.IllegalArgumentException if either parameter is null, if
  -   * the type parameter represents 'void', or if the name parameter is not a
  -   * valid java identifier.
  +   * Creates a new parameter on this method of type java.lang.Object and
  +   * with a default name.
      */
  -  public EParameter addNewParameter(JClass type, String name);
  -
  -  /**
  -   * Creates a new parameter on this method with the given type and name.
  -   *
  -   * @throws java.lang.IllegalArgumentException if either parameter is null, if
  -   * type parameter is not a valid class name, or if the name parameter is
  -   * not a valid java identifier.
  -   */
  -  public EParameter addNewParameter(String qualifiedTypeName, String name);
  +  public EParameter addNewParameter();
   
     /**
      * Removes the given parameter.  Does nothing if the parameter is not
  
  
  
  1.5       +0 -6      xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/EMember.java
  
  Index: EMember.java
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/EMember.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- EMember.java	25 Feb 2004 18:56:48 -0000	1.4
  +++ EMember.java	1 Mar 2004 00:10:18 -0000	1.5
  @@ -25,12 +25,6 @@
   
     public void setModifiers(int modifiers);
   
  -  public ESourcePosition createSourcePosition();
  -
  -  public void removeSourcePosition();
  -
  -  public ESourcePosition getEditableSourcePosition();
  -
     public void addComment(String comment);
   
   
  
  
  
  1.4       +2 -2      xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/EServiceFactory.java
  
  Index: EServiceFactory.java
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/EServiceFactory.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- EServiceFactory.java	25 Feb 2004 18:56:48 -0000	1.3
  +++ EServiceFactory.java	1 Mar 2004 00:10:18 -0000	1.4
  @@ -77,8 +77,8 @@
         //
         EClass testClass = service.addNewClass("com.bea.pcal","TestClass");
         EClass fooClass = service.addNewClass("com.bea.pcal","Foo");
  -      testClass.addNewMethod("getFoo").setReturnType(fooClass);
  -      testClass.addNewField("com.bea.pcal.Foo").setUnqualifiedType("TestClass");
  +      testClass.addNewMethod().setReturnType(fooClass);
  +      testClass.addNewField().setUnqualifiedType("TestClass");
         //
   
         JamPrinter.newInstance().print(service.getClasses(),out);
  
  
  
  1.4       +17 -9     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.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- EClassImpl.java	25 Feb 2004 18:56:49 -0000	1.3
  +++ EClassImpl.java	1 Mar 2004 00:10:18 -0000	1.4
  @@ -21,7 +21,6 @@
   import org.apache.xmlbeans.impl.jam.editable.impl.ref.JClassRefContext;
   import org.apache.xmlbeans.impl.jam.editable.impl.ref.UnqualifiedJClassRef;
   import org.apache.xmlbeans.impl.jam.*;
  -import org.apache.xmlbeans.impl.jam.internal.ObjectJClass;
   
   import java.util.*;
   import java.lang.reflect.Modifier;
  @@ -55,8 +54,7 @@
   
     // FIXME implement this - we should only create one UnqualifiedJClassRef
     // for each unqualified name so as to avoid resolving them over and over.
  -  private Map mName2Uqref = null;
  -
  +  //private Map mName2Uqref = null;
   
     // ========================================================================
     // Constructors
  @@ -278,10 +276,10 @@
       return out;
     }
   
  -  public EField addNewField(String name) {
  -    if (name == null) throw new IllegalArgumentException("null name");
  +  public EField addNewField() {
       if (mFields == null) mFields = new ArrayList();
  -    EField out = new EFieldImpl(name,this,"java.lang.Object");
  +    EField out = new EFieldImpl(defaultName(mFields.size()),
  +                                this,"java.lang.Object");
       mFields.add(out);
       return out;
     }
  @@ -300,10 +298,9 @@
       return out;
     }
   
  -  public EMethod addNewMethod(String name) {
  -    if (name == null) throw new IllegalArgumentException("null name");
  +  public EMethod addNewMethod() {
       if (mMethods == null) mMethods = new ArrayList();
  -    EMethod out = new EMethodImpl(name,this);
  +    EMethod out = new EMethodImpl(defaultName(mMethods.size()),this);
       mMethods.add(out);
       return out;
     }
  @@ -359,6 +356,17 @@
       String[] out = new String[mImports.size()];
       mImports.toArray(out);
       return out;
  +  }
  +
  +  // ========================================================================
  +  // Protected methods
  +
  +  /**
  +   * Provided for the benefit of EAnnotationDefinitionImpl.
  +   */
  +  protected void addMethod(JMethod m) {
  +    if (mMethods == null) mMethods = new ArrayList();
  +    mMethods.add(m);
     }
   
     // ========================================================================
  
  
  
  1.4       +4 -1      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.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- EElementImpl.java	25 Feb 2004 18:56:49 -0000	1.3
  +++ EElementImpl.java	1 Mar 2004 00:10:18 -0000	1.4
  @@ -26,7 +26,7 @@
    */
   public abstract class EElementImpl implements EElement {
   
  -    // ========================================================================
  +  // ========================================================================
     // Variables
   
     private String mSimpleName;
  @@ -125,6 +125,9 @@
       return mClassLoader;
     }
   
  +  public static String defaultName(int count) {
  +    return "unnamed_"+count;
  +  }
   
   
   }
  
  
  
  1.2       +3 -6      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.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- EInvokableImpl.java	25 Feb 2004 18:56:49 -0000	1.1
  +++ EInvokableImpl.java	1 Mar 2004 00:10:18 -0000	1.2
  @@ -88,15 +88,12 @@
       removeException(exceptionClass.getQualifiedName());
     }
   
  -  public EParameter addNewParameter(String typeName, String paramName) {
  -    EParameter param = new EParameterImpl(paramName,this,typeName);
  +  public EParameter addNewParameter() {
       if (mParameters == null) mParameters = new ArrayList();
  +    EParameter param = new EParameterImpl(defaultName(mParameters.size()),
  +                                          this,"java.lang.Object");
       mParameters.add(param);
       return param;
  -  }
  -
  -  public EParameter addNewParameter(JClass type, String name) {
  -    return addNewParameter(type.getQualifiedName(),name);
     }
   
     public void removeParameter(EParameter parameter) {
  
  
  
  1.1                  xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/impl/EAnnotationDefinitionImpl.java
  
  Index: EAnnotationDefinitionImpl.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.impl;
  
  import org.apache.xmlbeans.impl.jam.editable.EAnnotationDefinition;
  import org.apache.xmlbeans.impl.jam.editable.EAnnotationMemberDefinition;
  import org.apache.xmlbeans.impl.jam.editable.EMethod;
  import org.apache.xmlbeans.impl.jam.JAnnotationMemberDefinition;
  import org.apache.xmlbeans.impl.jam.JClassLoader;
  
  /**
   *
   * @author Patrick Calahan <pc...@bea.com>
   */
  public class EAnnotationDefinitionImpl extends EClassImpl
          implements EAnnotationDefinition {
  
    // ========================================================================
    // Constructors
  
    public EAnnotationDefinitionImpl(String packageName,
                                     String simpleName,
                                     JClassLoader classLoader) {
      super(packageName,simpleName,classLoader);
    }
  
    // ========================================================================
    // EAnnotation implementation
  
    public EAnnotationMemberDefinition addNewMemberDefinition() {
      EAnnotationMemberDefinition out =
              new EAnnotationMemberDefinitionImpl("unnamed",//FIXME
                                                  this);
      super.addMethod(out);
      return out;
    }
  
    public void removeMemberDefinition(EAnnotationMemberDefinition memberDef) {
      super.removeMethod(memberDef);
    }
  
    // ========================================================================
    // JAnnotation implementation
  
    public JAnnotationMemberDefinition[] getMemberDefinitions() {
      return new JAnnotationMemberDefinition[0];
    }
  
    // ========================================================================
    // EMethod implementation
  
    /**
     * This really shouldn't be called, but if it is, we want to make sure
     * that the method really is an annotation member.
     */
    public EMethod addNewMethod(String name) {
      EMethod out = addNewMemberDefinition();
      out.setSimpleName(name);
      return out;
    }
  
  
  }
  
  
  
  1.1                  xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/impl/EAnnotationImpl.java
  
  Index: EAnnotationImpl.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.impl;
  
  import org.apache.xmlbeans.impl.jam.editable.*;
  import org.apache.xmlbeans.impl.jam.*;
  
  import java.util.ArrayList;
  
  /**
   * <p>Standard implementation of EAnnotationImpl.</p>
   *
   * @author Patrick Calahan <pc...@bea.com>
   */
  public class EAnnotationImpl extends EMemberImpl implements EAnnotation {
  
    // ========================================================================
    // Variables
  
    private ArrayList mMembers = null;
    private Object m175Annotation = null;
    private String mJavadocText = null;
    private EAnnotationDefinition mDefinition = null;
  
    // ========================================================================
    // Constructors
  
    public EAnnotationImpl() {}
  
    public EAnnotationImpl(String simpleName, JClassLoader loader) {
      super(simpleName,loader);
    }
  
    // ========================================================================
    // EAnnotation implementation
  
  
    public EAnnotationMember addNewMember() {
      if (mMembers == null) mMembers = new ArrayList();
      EAnnotationMemberImpl out =
              new EAnnotationMemberImpl(defaultName(mMembers.size()),
                                        getClassLoader());
      mMembers.add(out);
      return out;
    }
  
    public EAnnotationMember[] getEditableMembers() {
      if (mMembers == null) return new EAnnotationMember[0];
      EAnnotationMember[] out = new EAnnotationMember[mMembers.size()];
      mMembers.toArray(out);
      return out;
    }
  
    public EAnnotationMember getEditableMember(String named) {
      if (mMembers == null) return null;
      EAnnotationMember out;
      for(int i=0; i<mMembers.size(); i++) {
        out = (EAnnotationMember)mMembers.get(i);
        if (named.equals(out.getName())) return out;
      }
      return null;
    }
  
    public void setAnnotationObject(Object o) {
      m175Annotation = o;
    }
  
    public void setJavadocText(String text) {
      mJavadocText = text;
    }
  
    // ========================================================================
    // JAnnotation implementation
  
    public String getName() {
      return super.getSimpleName();
    }
  
    public JAnnotationMember[] getMembers() {
      return getEditableMembers();
    }
  
    public JAnnotationMember getMember(String named) {
     return getEditableMember(named);
    }
  
    public JAnnotationDefinition getDefinition() {
      return mDefinition;
    }
  
    public Object getAnnotationObject() {
      return m175Annotation;
    }
  
    public String getJavadocText() {
      return mJavadocText;
    }
  
    // ========================================================================
    // JElement implementation
  
    public String getQualifiedName() {
      return null;
    }
  
    // ========================================================================
    // Deprecated JAnnotation implementation
  
    public JAnnotation[] getAnnotations() {
      return null;
    }
  
    public JAnnotation[] getAnnotations(String named) {
      return null;
    }
  
    public JAnnotation getAnnotation(String named) {
      return null;
    }
  
    public String getStringValue() {
      return null;
    }
  
    public int getIntValue() {
      return 0;
    }
  
    public boolean getBooleanValue() {
      return false;
    }
  
    public long getLongValue() {
      return 0;
    }
  
    public short getShortValue() {
      return 0;
    }
  
    public double getDoubleValue() {
      return 0;
    }
  
    public byte getByteValue() {
      return 0;
    }
  
  }
  
  
  
  1.1                  xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/impl/EAnnotationMemberDefinitionImpl.java
  
  Index: EAnnotationMemberDefinitionImpl.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.impl;
  
  import org.apache.xmlbeans.impl.jam.editable.EAnnotationMemberDefinition;
  import org.apache.xmlbeans.impl.jam.JClass;
  
  /**
   *
   * @author Patrick Calahan <pc...@bea.com>
   */
  public class EAnnotationMemberDefinitionImpl extends EMethodImpl
          implements EAnnotationMemberDefinition
   {
  
    // ========================================================================
    // Variables
  
    private Object mDefaultValue = null;
  
    // ========================================================================
    // Constructors
  
    public EAnnotationMemberDefinitionImpl(String simpleName,
                                           EClassImpl containingClass)
    {
      super(simpleName,containingClass);
    }
  
    // ========================================================================
    // EAnnotationMemberDefinition implementation
  
    public Object getDefaultValue() {
      return mDefaultValue;
    }
  
    public void setDefaultValue(Object o) {
      mDefaultValue = o;
    }
  
    public JClass getType() {
      return super.getReturnType();
    }
  
    public void setType(String qualifiedTypeName) {
      super.setReturnType(qualifiedTypeName);
    }
  
    public void setUnqualifiedType(String unqualifiedTypeName) {
      super.setUnqualifiedReturnType(unqualifiedTypeName);
    }
  
    public void setType(JClass c) {
      super.setReturnType(c);
    }
  }
  
  
  1.1                  xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/impl/EAnnotationMemberImpl.java
  
  Index: EAnnotationMemberImpl.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.impl;
  
  import org.apache.xmlbeans.impl.jam.editable.EAnnotationMember;
  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;
  import org.apache.xmlbeans.impl.jam.JClass;
  import org.apache.xmlbeans.impl.jam.JAnnotationMemberDefinition;
  import org.apache.xmlbeans.impl.jam.JClassLoader;
  
  /**
   *
   * @author Patrick Calahan <pc...@bea.com>
   */
  public class EAnnotationMemberImpl extends EElementImpl
          implements EAnnotationMember {
  
    // ========================================================================
    // Variables
  
    private Object mValue = null;
    private boolean mIsDefaultUsed = false;
  
    // ========================================================================
    // Constructors
  
    public EAnnotationMemberImpl(String simpleName, JClassLoader loader) {
      super(simpleName,loader);
    }
  
    // ========================================================================
    // JElement implementation
  
    public String getQualifiedName() {
      throw new UnsupportedOperationException("NYI");//FIXME
    }
  
    // ========================================================================
    // EAnnotationMember implementation
  
    public void setValue(Object o) {
      mValue = o;
    }
  
    public void setValue(String value) {
      mValue = value;
    }
  
    public void setValue(JAnnotation value) {
      mValue = value;
    }
  
    public void setValue(boolean value) {
      mValue = new Boolean(value);
    }
  
    public void setValue(int value) {
      mValue = new Integer(value);
    }
  
    public void setValue(short value) {
      mValue = new Short(value);
    }
  
    public void setValue(long value) {
      mValue = new Long(value);
    }
  
    public void setValue(float value) {
      mValue = new Float(value);
    }
  
    public void setValue(double value) {
      mValue = new Double(value);
    }
  
    public void setValue(JClass clazz) {
      mValue = QualifiedJClassRef.create(clazz.getQualifiedName(),
                                         getClassLoader());
    }
  
    public void setValue(String[] value) {
      mValue = value;
    }
  
    public void setValue(JAnnotation[] value) {
      mValue = value;
    }
  
    public void setValue(boolean[] value) {
      mValue = value;
    }
  
    public void setValue(int[] value) {
      mValue = value;
    }
  
    public void setValue(short[] value) {
      mValue = value;
    }
  
    public void setValue(long[] value) {
      mValue = value;
    }
  
    public void setValue(float[] value) {
      mValue = value;
    }
  
    public void setValue(double[] value) {
      mValue = value;
    }
  
    public void setValue(JClass[] classes) {
      mValue = classes;
    }
  
    // ========================================================================
    // JAnnotationMember implementation  FIXME
  
    public boolean isDefaultValueUsed() {
      return mIsDefaultUsed;
    }
  
    public String getName() {
      return null;
    }
  
    public Object getValue() {
      return null;
    }
  
    public JAnnotationMemberDefinition getMemberDefinition() {
      return null;
    }
  
    public JAnnotation getValueAsAnnotation() {
      return null;
    }
  
    public JClass getValueAsClass() {
      return null;
    }
  
    public String getValueAsString() {
      return null;
    }
  
    public int getValueAsInt() throws NumberFormatException {
      return 0;
    }
  
    public boolean getValueAsBoolean() throws IllegalArgumentException {
      return false;
    }
  
    public long getValueAsLong() throws NumberFormatException {
      return 0;
    }
  
    public short getValueAsShort() throws NumberFormatException {
      return 0;
    }
  
    public double getValueAsDouble() throws NumberFormatException {
      return 0;
    }
  
    public float getValueAsFloat() throws NumberFormatException {
      return 0;
    }
  
    public byte getValueAsByte() throws NumberFormatException {
      return 0;
    }
  
    public char getValueAsChar() throws IllegalArgumentException {
      return 0;
    }
  
    public Object[] getValueAsArray() {
      return new Object[0];
    }
  
    public JClass[] getValueAsClassArray() {
      return new JClass[0];
    }
  
    public JAnnotation[] getValueAsAnnotationArray() {
      return new JAnnotation[0];
    }
  
    public String[] getValueAsStringArray() {
      return new String[0];
    }
  
    public int[] getValueAsIntArray() throws NumberFormatException {
      return new int[0];
    }
  
    public boolean[] getValueAsBooleanArray() throws IllegalArgumentException {
      return new boolean[0];
    }
  
    public short[] getValueAsShortArray() throws NumberFormatException {
      return new short[0];
    }
  
    public long[] getValueAsLongArray() throws NumberFormatException {
      return new long[0];
    }
  
    public double[] getValueAsDoubleArray() throws NumberFormatException {
      return new double[0];
    }
  
    public float[] getValueAsFloatArray() throws NumberFormatException {
      return new float[0];
    }
  
    public byte[] getValueAsByteArray() throws NumberFormatException {
      return new byte[0];
    }
  
    public char[] getValueAsCharArray() throws IllegalArgumentException {
      return new char[0];
    }
  }
  
  
  
  1.2       +15 -5     xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/impl/ref/QualifiedJClassRef.java
  
  Index: QualifiedJClassRef.java
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/impl/ref/QualifiedJClassRef.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- QualifiedJClassRef.java	25 Feb 2004 18:56:49 -0000	1.1
  +++ QualifiedJClassRef.java	1 Mar 2004 00:10:19 -0000	1.2
  @@ -16,6 +16,7 @@
   
   import org.apache.xmlbeans.impl.jam.editable.impl.ref.JClassRef;
   import org.apache.xmlbeans.impl.jam.JClass;
  +import org.apache.xmlbeans.impl.jam.JClassLoader;
   
   /**
    * <p>Reference to a JClass by qualified name which is resolved lazily.  Note
  @@ -32,7 +33,7 @@
     // Variables
   
     private String mQualifiedClassname;
  -  private JClassRefContext mContext;
  +  private JClassLoader mClassLoader;
   
     // ========================================================================
     // Factory
  @@ -44,14 +45,23 @@
                                    JClassRefContext ctx) {
       if (qcname == null) throw new IllegalArgumentException("null qcname");
       if (ctx == null) throw new IllegalArgumentException("null ctx");
  -    return new QualifiedJClassRef(qcname,ctx);
  +    return create(qcname,ctx.getClassLoader());
  +  }
  +
  +  /**
  +   * Creates a new JClassRef for a qualified class or type name.
  +   */
  +  public static JClassRef create(String qcname, JClassLoader cl) {
  +    if (qcname == null) throw new IllegalArgumentException("null qcname");
  +    if (cl == null) throw new IllegalArgumentException("null ctx");
  +    return new QualifiedJClassRef(qcname,cl);
     }
   
     // ========================================================================
     // Constructors
   
  -  private QualifiedJClassRef(String qcname, JClassRefContext ctx) {
  -    mContext = ctx;
  +  private QualifiedJClassRef(String qcname, JClassLoader cl) {
  +    mClassLoader = cl;
       mQualifiedClassname = qcname;
     }
   
  @@ -59,7 +69,7 @@
     // JClassRef implementation
   
     public JClass getRefClass() {
  -    return mContext.getClassLoader().loadClass(mQualifiedClassname);
  +    return mClassLoader.loadClass(mQualifiedClassname);
     }
   
     public String getQualifiedName() {
  
  
  
  1.7       +95 -8     xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/internal/reflect/RClassLoader.java
  
  Index: RClassLoader.java
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/internal/reflect/RClassLoader.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- RClassLoader.java	25 Feb 2004 18:56:49 -0000	1.6
  +++ RClassLoader.java	1 Mar 2004 00:10:19 -0000	1.7
  @@ -18,10 +18,13 @@
   
   import java.util.HashMap;
   import java.util.Map;
  -import org.apache.xmlbeans.impl.jam.JAnnotationLoader;
  -import org.apache.xmlbeans.impl.jam.JClass;
  -import org.apache.xmlbeans.impl.jam.JClassLoader;
  -import org.apache.xmlbeans.impl.jam.JPackage;
  +import java.lang.reflect.Method;
  +import java.lang.reflect.InvocationTargetException;
  +
  +import org.apache.xmlbeans.impl.jam.*;
  +import org.apache.xmlbeans.impl.jam.editable.EAnnotation;
  +import org.apache.xmlbeans.impl.jam.editable.EAnnotationMember;
  +import org.apache.xmlbeans.impl.jam.editable.impl.EAnnotationImpl;
   import org.apache.xmlbeans.impl.jam.internal.*;
   
   /**
  @@ -32,6 +35,11 @@
   public class RClassLoader implements JClassLoader {
   
     // ========================================================================
  +  // Constants
  +
  +  private static final boolean REALLY_VERBOSE = false;
  +
  +  // ========================================================================
     // Variables
   
     private ClassLoader mLoader;
  @@ -44,7 +52,7 @@
     public RClassLoader(ClassLoader c) {
       this(c,null);
     }
  -  
  +
     public RClassLoader(ClassLoader c, JClassLoader parent) {
       if (c == null) throw new IllegalArgumentException("null classloader");
       mLoader = c;
  @@ -57,12 +65,12 @@
     public JClassLoader getParent() { return mParentLoader; }
   
     /**
  -   * 
  +   *
      */
     public JAnnotationLoader getAnnotationLoader() { return null; }//FIXME
   
     /**
  -   * Returns a reflect representation of the named class.  
  +   * Returns a reflect representation of the named class.
      */
     public JClass loadClass(String fd) {
       if (fd == null) throw new IllegalArgumentException("null fd");
  @@ -124,6 +132,7 @@
       return loader.loadClass(clazz.getName());
     }
   
  +
     // ========================================================================
     // Private methods
   
  @@ -153,4 +162,82 @@
         }
       }
     }
  -}
  +
  +  // ========================================================================
  +  // New 175 stuff
  +
  +  //FIXME this needs to support annotation inheritance
  +  /**
  +   * <p>Utility method for creating representations of 175 annotations
  +   * from 1.5 java.lang.reflect constructs.  This method accesses the
  +   * annotations via reflection so that the code will still compile
  +   * and run under 1.4.</p>
  +   */
  +  /*package*/ EAnnotation[] get175AnnotationsOn(Object reflectionThing,
  +                                                JClassLoader loader) {
  +    Method annGetter;
  +    try {
  +      annGetter = reflectionThing.getClass().getMethod("getDeclaredAnnotations",
  +                                             null);
  +      Object[] anns = (Object[])annGetter.invoke(reflectionThing,null);
  +      EAnnotation[] out = new EAnnotation[anns.length];
  +      for(int i=0; i<anns.length; i++) {
  +        out[i]  = new EAnnotationImpl(simpleName(anns[i].getClass()),
  +                                      loader);
  +        populateAnnotation(out[i],anns[i]);
  +      }
  +      return out;
  +    } catch(NoSuchMethodException nsme) {
  +      if (REALLY_VERBOSE) nsme.printStackTrace();
  +    } catch(IllegalAccessException iae) {
  +      iae.printStackTrace(); // this is not expected
  +    } catch(InvocationTargetException ite) {
  +      ite.printStackTrace();
  +    }
  +    return new EAnnotation[0];
  +  }
  +
  +  private static String simpleName(Class clazz) {
  +    String out = clazz.getName();
  +    int dot = out.lastIndexOf('.');
  +    if (dot != -1) out = out.substring(dot+1);
  +    return out;
  +  }
  +
  +  /**
  +   * @param dest Annotation object to be populated
  +   * @param src java.lang.annotation.Annotation instance containing the
  +   * annotation data we want to wrap in EAnnotation.
  +   */
  +  private void populateAnnotation(EAnnotation dest, Object src) {
  +    dest.setAnnotationObject(src);
  +    populateAnnotation(dest,src,src.getClass());
  +  }
  +
  +  /**
  +   * Introspects the src object for annotation member methods, invokes them
  +   * and creates corresponding EAnnotationMembers in the given dest object.
  +   */
  +  private void populateAnnotation(EAnnotation dest, Object src, Class srcClass) {
  +    Method[] methods = srcClass.getDeclaredMethods();
  +    for(int i=0; i<methods.length; i++) {
  +      if (methods[i].getParameterTypes().length > 0) continue;
  +      EAnnotationMember member = dest.addNewMember();
  +      member.setSimpleName(methods[i].getName());
  +      try {
  +        member.setValue(methods[i].invoke(src,null));
  +      } catch(IllegalAccessException iae) {
  +        iae.printStackTrace(); // this is not expected
  +      } catch(InvocationTargetException ite) {
  +        ite.printStackTrace();
  +      }
  +    }
  +    //REVIEW will it be a superclass or an interface?  this might be broken
  +    srcClass = srcClass.getSuperclass();
  +    if (srcClass != null &&
  +            !srcClass.getName().equals("java.lang.annotation.Annotation") &&
  +            !srcClass.getName().equals("java.lang.Object")) {
  +      populateAnnotation(dest,src,srcClass);
  +    }
  +  }
  +}
  \ No newline at end of file
  
  
  
  1.4       +23 -0     xml-xmlbeans/v2/test/src/jamtest/build.xml
  
  Index: build.xml
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/test/src/jamtest/build.xml,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- build.xml	18 Feb 2004 19:25:53 -0000	1.3
  +++ build.xml	1 Mar 2004 00:10:19 -0000	1.4
  @@ -63,5 +63,28 @@
       </junit>
     </target>
   
  +
  +  <!-- JDK 1.5-specific tests.  These have to be run manually since we
  +       don't require 1.5 yet -->
  +
  +  <target name='tiger' depends='tiger.build,tiger.run'/>
  +
  +  <target name='tiger.build' >
  +    <mkdir dir='${dummy-dir}'/>
  +    <javac
  +       srcdir='dummy15classes'
  +       destdir='${dummy-dir}'
  +       classpathref='classpath'
  +       includes='**/*.java'
  +       fork='true'
  +
  +      executable='e:/java/jdk150/bin/javac.exe'
  +      verbose='true'
  +      target='1.5'
  +     />
  +  </target>
  +
  +  <target name='tiger.run'/>
  +
   </project>
   
  
  
  
  1.1                  xml-xmlbeans/v2/test/src/jamtest/dummy15classes/org/apache/xmlbeans/test/jam/dummyclasses/jsr175/AnnotatedClass.java
  
  Index: AnnotatedClass.java
  ===================================================================
  package org.apache.xmlbeans.test.jam.dummyclasses.jsr175;
  
  public @interface RequestForEnhancement {
      int    id();        // Unique ID number associated with RFE
      String synopsis();  // Synopsis of RFE
      String engineer()  default "[unassigned]";
      String date()      default "[unimplemented]";
  }
  
  @RequestForEnhancement(
      id       = 4561414,
      synopsis = "Balance the federal budget"
  )
  public abstract class AnnotatedClass {
  
    public abstract void setFoo(int value);
  
    public abstract int getFoo();
  }
  
  
  

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