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