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 01:01:43 UTC
cvs commit: xml-xmlbeans/v2/test/src/jamtest/tests/org/apache/xmlbeans/test/jam GoldenInvokable.java JamTestBase.java ParserJamTest.java
pcal 2004/03/02 16:01:43
Modified: v2/src/jam java.g
v2/src/jam/org/apache/xmlbeans/impl/jam/editable EClass.java
EParameter.java EService.java EServiceFactory.java
v2/src/jam/org/apache/xmlbeans/impl/jam/editable/impl
EAnnotationDefinitionImpl.java EClassImpl.java
EInvokableImpl.java EMethodImpl.java
EParameterImpl.java EServiceImpl.java
v2/src/jam/org/apache/xmlbeans/impl/jam/editable/impl/ref
UnqualifiedJClassRef.java
v2/src/jam/org/apache/xmlbeans/impl/jam/internal
ArrayJClass.java BaseJClassLoader.java
JClassLoaderImpl.java
v2/src/jam/org/apache/xmlbeans/impl/jam/internal/javadoc
JDClassLoader.java
v2/src/jam/org/apache/xmlbeans/impl/jam/internal/parser
ParserClassBuilder.java
v2/src/jam/org/apache/xmlbeans/impl/jam/provider
NewJServiceFactory.java ReflectionClassBuilder.java
v2/test/src/jamtest build.xml
v2/test/src/jamtest/tests/org/apache/xmlbeans/test/jam
GoldenInvokable.java JamTestBase.java
ParserJamTest.java
Added: v2/src/jam/org/apache/xmlbeans/impl/jam/internal/parser
ParamStruct.java ParamStructPool.java
Log:
jam: more fixes and test cases
Revision Changes Path
1.7 +16 -21 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.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- java.g 2 Mar 2004 22:03:04 -0000 1.6
+++ java.g 3 Mar 2004 00:01:42 -0000 1.7
@@ -17,6 +17,7 @@
package org.apache.xmlbeans.impl.jam.internal.parser.generated;
import org.apache.xmlbeans.impl.jam.*;
+import org.apache.xmlbeans.impl.jam.internal.parser.ParamStructPool;
import org.apache.xmlbeans.impl.jam.editable.*;
import org.apache.xmlbeans.impl.jam.editable.impl.*;
import java.util.*;
@@ -175,7 +176,7 @@
private List mImports = new ArrayList();
private List mClasses = new ArrayList();
- private List mParamList = new ArrayList();
+ //private ParamStructPool mParamPool = new ParamStructPool();
private List mExceptionList = new ArrayList();
private JClassLoader mLoader = null;
@@ -236,8 +237,10 @@
private EClass newClass(String simpleName) {
//FIXME more to do here
- //EClass clazz = mResult.addNewClass(mPackage,simpleName/*,mImports*/);
- EClass clazz = new EClassImpl(mPackage,simpleName,mLoader);
+ //EClass clazz = mResult.addNewClass(mPackage,simpleName,mImports);
+ String[] importSpecs = new String[mImports.size()];
+ mImports.toArray(importSpecs);
+ EClass clazz = new EClassImpl(mPackage,simpleName,mLoader,importSpecs);
mClasses.add(clazz);
return clazz;
}
@@ -347,9 +350,9 @@
constructor[EClass clazz, int modifiers, String name]
{
- List params = new ArrayList(); //FIXME try reuse this please
+ ParamStructPool pool = new ParamStructPool();
}
- : (LPAREN (parameterList[params])? RPAREN (throwsClause[mExceptionList])? statement_block)
+ : (LPAREN (parameterList[pool])? RPAREN (throwsClause[mExceptionList])? statement_block)
{
if (!name.equals(clazz.getSimpleName())) {
throw new IllegalArgumentException("FIXME not a constructor '"+
@@ -357,8 +360,7 @@
}
EConstructorImpl constr = (EConstructorImpl)clazz.addNewConstructor();
constr.setModifiers(modifiers);
- System.out.println("============== Setting params "+params.size());
- constr.setParameters(params);
+ pool.setParametersOn(constr);
constr.setUnqualifiedThrows(mExceptionList);
applyJavadocs(constr);
@@ -383,16 +385,15 @@
)
|
(
- { List params = new ArrayList(); //FIXME can we reuse this please?
+ { ParamStructPool pool = new ParamStructPool(); //FIXME can we reuse this please?
}
- (LPAREN (parameterList[params])? RPAREN tweener (throwsClause[mExceptionList])? (statement_block | SEMI)) {
+ (LPAREN (parameterList[pool])? RPAREN tweener (throwsClause[mExceptionList])? (statement_block | SEMI)) {
if (VERBOSE) System.out.println("creating method "+name);
EMethodImpl method = (EMethodImpl)clazz.addNewMethod();
method.setSimpleName(name);
method.setUnqualifiedReturnType(type);
method.setModifiers(modifiers);
- System.out.println("============== Setting params "+params.size());
- method.setParameters(mParamList);
+ pool.setParametersOn(method);
method.setUnqualifiedThrows(mExceptionList);
applyJavadocs(method);
}
@@ -425,24 +426,18 @@
// A list of formal parameters
-parameterList[Collection list] {}
- : (parameter[list] (COMMA parameter[list])*)
+parameterList[ParamStructPool pool]
+ : (parameter[pool] (COMMA parameter[pool])*)
;
// A formal parameter.
-parameter[Collection list]
+parameter[ParamStructPool pool]
{
String type;
String name;
}
: tweener ("final")? t:IDENT tweener n:IDENT tweener {
-
- EParameterImpl param = new EParameterImpl();
- param.setUnqualifiedType(t.getText());
- param.setSimpleName(n.getText());
- list.add(param);
- System.out.println("\n\n\nadded to list!! "+list.size()+"\n\n\n");
-
+ pool.add(t.getText(),n.getText());
}
;
1.6 +0 -11 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.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- EClass.java 2 Mar 2004 04:26:18 -0000 1.5
+++ EClass.java 3 Mar 2004 00:01:42 -0000 1.6
@@ -156,17 +156,6 @@
*/
public EMethod[] getEditableMethods();
- /**
- * Adds an import specification the the class. This should be everything
- * between 'import ' and ';'. Wildcard '*' imports are valid.
- */
- public void addImportSpec(String spec);
-
- /**
- * Calls addImportSpec(String) for each String in the given Collection.
- */
- public void addImportSpecs(Collection c);
-
// not sure that these are something we want to do. is a property really
1.3 +2 -0 xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/EParameter.java
Index: EParameter.java
===================================================================
RCS file: /home/cvs/xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/EParameter.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- EParameter.java 12 Feb 2004 20:06:11 -0000 1.2
+++ EParameter.java 3 Mar 2004 00:01:42 -0000 1.3
@@ -27,4 +27,6 @@
public void setType(String typeName);
public void setType(JClass type);
+
+ public void setUnqualifiedType(String ucname);
}
1.5 +3 -1 xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/EService.java
Index: EService.java
===================================================================
RCS file: /home/cvs/xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/EService.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- EService.java 2 Mar 2004 06:32:13 -0000 1.4
+++ EService.java 3 Mar 2004 00:01:42 -0000 1.5
@@ -24,7 +24,9 @@
*/
public interface EService extends JService {
- public EClass addNewClass(String packageName, String className);
+ public EClass addNewClass(String packageName,
+ String className,
+ String[] importSpecs);
public EClass addNewClass(JClass copyme);
}
1.7 +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.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- EServiceFactory.java 2 Mar 2004 06:32:13 -0000 1.6
+++ EServiceFactory.java 3 Mar 2004 00:01:42 -0000 1.7
@@ -75,8 +75,8 @@
//
//dumb test code
//
- EClass testClass = service.addNewClass("com.bea.pcal","TestClass");
- EClass fooClass = service.addNewClass("com.bea.pcal","Foo");
+ EClass testClass = service.addNewClass("com.bea.pcal","TestClass",null);
+ EClass fooClass = service.addNewClass("com.bea.pcal","Foo",null);
testClass.addNewMethod().setReturnType(fooClass);
testClass.addNewField().setUnqualifiedType("TestClass");
//
1.2 +5 -2 xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/impl/EAnnotationDefinitionImpl.java
Index: EAnnotationDefinitionImpl.java
===================================================================
RCS file: /home/cvs/xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/impl/EAnnotationDefinitionImpl.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- EAnnotationDefinitionImpl.java 1 Mar 2004 00:10:18 -0000 1.1
+++ EAnnotationDefinitionImpl.java 3 Mar 2004 00:01:42 -0000 1.2
@@ -20,6 +20,8 @@
import org.apache.xmlbeans.impl.jam.JAnnotationMemberDefinition;
import org.apache.xmlbeans.impl.jam.JClassLoader;
+import java.util.List;
+
/**
*
* @author Patrick Calahan <pc...@bea.com>
@@ -32,8 +34,9 @@
public EAnnotationDefinitionImpl(String packageName,
String simpleName,
- JClassLoader classLoader) {
- super(packageName,simpleName,classLoader);
+ JClassLoader classLoader,
+ String[] importSpecs) {
+ super(packageName,simpleName,classLoader,importSpecs);
}
// ========================================================================
1.7 +5 -18 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.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- EClassImpl.java 2 Mar 2004 22:03:04 -0000 1.6
+++ EClassImpl.java 3 Mar 2004 00:01:42 -0000 1.7
@@ -51,7 +51,7 @@
// are we an interface or a class?
private boolean mIsInterface = false;
- private List mImports = null;
+ private String[] mImports = null;
// FIXME implement this - we should only create one UnqualifiedJClassRef
// for each unqualified name so as to avoid resolving them over and over.
@@ -62,9 +62,11 @@
public EClassImpl(String packageName,
String simpleName,
- JClassLoader classLoader) {
+ JClassLoader classLoader,
+ String[] importSpecs) {
super(simpleName,classLoader);
mPackageName = packageName;
+ mImports = importSpecs;
}
// ========================================================================
@@ -319,19 +321,6 @@
return out;
}
- public void addImportSpec(String spec) {
- if (spec == null) throw new IllegalArgumentException("null spec");
- if (mImports == null) mImports = new ArrayList();
- mImports.add(spec);
- }
-
- public void addImportSpecs(Collection c) {
- if (c == null) throw new IllegalArgumentException("null collection");
- for(Iterator i = c.iterator(); i.hasNext(); ) {
- addImportSpec((String)i.next());
- }
- }
-
public void setIsInterface(boolean b) {
mIsInterface = b;
}
@@ -361,9 +350,7 @@
public String[] getImportSpecs() {
if (mImports == null) return new String[0];
- String[] out = new String[mImports.size()];
- mImports.toArray(out);
- return out;
+ return mImports;
}
// ========================================================================
1.5 +6 -18 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.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- EInvokableImpl.java 2 Mar 2004 22:03:04 -0000 1.4
+++ EInvokableImpl.java 3 Mar 2004 00:01:42 -0000 1.5
@@ -148,29 +148,17 @@
// ========================================================================
// Other public methods
- /**
- * This is only intended for use by the parser. The list must contain
- * EParameterImpls.
- */
- public void setParameters(List paramList) {
- System.out.println("\n\n\n\nSET PARAMETER LIST "+paramList.size());
- if (paramList == null || paramList.size() == 0) {
- mParameters = null;
- return;
- }
- mParameters = new ArrayList(paramList.size());
- mParameters.addAll(paramList);
- for(int i=0; i<mParameters.size(); i++) {
- ((EParameterImpl)mParameters.get(i)).setContainingMember(this);
- }
- }
-
+ //FIXME this is here only so the parser can be lazy - please remove it
public void setUnqualifiedThrows(List classnames) {
if (classnames == null || classnames.size() == 0) {
mExceptionClassRefs= null;
return;
}
mExceptionClassRefs = new ArrayList(classnames.size());
- mExceptionClassRefs.addAll(classnames); //FIXME
+ for(int i=0; i<classnames.size(); i++) {
+ mExceptionClassRefs.add(UnqualifiedJClassRef.create
+ ((String)classnames.get(i),
+ (EClassImpl)getContainingClass()));
+ }
}
}
1.4 +12 -6 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.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- EMethodImpl.java 25 Feb 2004 18:56:49 -0000 1.3
+++ EMethodImpl.java 3 Mar 2004 00:01:42 -0000 1.4
@@ -16,6 +16,10 @@
package org.apache.xmlbeans.impl.jam.editable.impl;
import org.apache.xmlbeans.impl.jam.editable.EMethod;
+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;
+import org.apache.xmlbeans.impl.jam.editable.impl.ref.DirectJClassRef;
import org.apache.xmlbeans.impl.jam.JClass;
import org.apache.xmlbeans.impl.jam.internal.VoidJClass;
@@ -34,7 +38,7 @@
// ========================================================================
// Variables
- private String mReturnTypeName = null;
+ private JClassRef mReturnTypeRef = null;
// ========================================================================
// Constructors
@@ -47,25 +51,27 @@
// EMethod implementation
public void setReturnType(String className) {
- mReturnTypeName = className;
+ mReturnTypeRef = QualifiedJClassRef.create
+ (className,(EClassImpl)getContainingClass());
}
public void setUnqualifiedReturnType(String unqualifiedTypeName) {
- mReturnTypeName = unqualifiedTypeName; //FIXME
+ mReturnTypeRef = UnqualifiedJClassRef.create
+ (unqualifiedTypeName,(EClassImpl)getContainingClass());
}
public void setReturnType(JClass c) {
- setReturnType(c.getQualifiedName());
+ mReturnTypeRef = DirectJClassRef.create(c);
}
// ========================================================================
// JMethod implementation
public JClass getReturnType() {
- if (mReturnTypeName == null) {
+ if (mReturnTypeRef == null) {
return VoidJClass.getInstance();
} else {
- return getClassLoader().loadClass(mReturnTypeName);
+ return mReturnTypeRef.getRefClass();
}
}
1.5 +0 -10 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.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- EParameterImpl.java 2 Mar 2004 22:03:04 -0000 1.4
+++ EParameterImpl.java 3 Mar 2004 00:01:42 -0000 1.5
@@ -37,9 +37,6 @@
// ========================================================================
// Constructors
- // be careful with this one, should really only be used by the parser
- public EParameterImpl() {}
-
public EParameterImpl(String simpleName,
EMemberImpl containingMember,
String typeName)
@@ -82,11 +79,4 @@
return mTypeClassRef.getRefClass();
}
- // ========================================================================
- // Package methods
-
- /*package*/ void setContainingMember(EMemberImpl member) {
- System.out.println("\n\n\n\nSSET CONTAINING MEMBER "+member);
- super.setContainingClass((EClassImpl)member.getContainingClass());
- }
}
1.6 +4 -2 xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/impl/EServiceImpl.java
Index: EServiceImpl.java
===================================================================
RCS file: /home/cvs/xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/impl/EServiceImpl.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- EServiceImpl.java 2 Mar 2004 06:32:13 -0000 1.5
+++ EServiceImpl.java 3 Mar 2004 00:01:42 -0000 1.6
@@ -48,8 +48,10 @@
// ========================================================================
// EService implementation
- public EClass addNewClass(String packageName, String className) {
- EClassImpl out = new EClassImpl(packageName,className,this);
+ public EClass addNewClass(String packageName,
+ String className,
+ String[] importSpecs) {
+ EClassImpl out = new EClassImpl(packageName,className,this,importSpecs);
System.out.println("---= adding '"+out.getQualifiedName()+"'");
mClasses.put(out.getQualifiedName(),out);
return out;
1.4 +75 -22 xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/impl/ref/UnqualifiedJClassRef.java
Index: UnqualifiedJClassRef.java
===================================================================
RCS file: /home/cvs/xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/editable/impl/ref/UnqualifiedJClassRef.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- UnqualifiedJClassRef.java 2 Mar 2004 22:03:04 -0000 1.3
+++ UnqualifiedJClassRef.java 3 Mar 2004 00:01:42 -0000 1.4
@@ -16,6 +16,8 @@
import org.apache.xmlbeans.impl.jam.JClass;
+import java.io.StringWriter;
+
/**
*
* @author Patrick Calahan <pc...@bea.com>
@@ -25,7 +27,8 @@
// ========================================================================
// Constants
- private static final boolean VERBOSE = true;
+ private static final boolean VERBOSE = false;
+ private static final String PREFIX = "[UnqualifiedJClassRef]";
// ========================================================================
// Variables
@@ -55,7 +58,8 @@
if (ucname == null) throw new IllegalArgumentException("null ucname");
mContext = ctx;
mUnqualifiedClassname = ucname;
- if (VERBOSE) System.out.println("[UnqualifiedJClassRef] "+ucname);
+ if (VERBOSE) System.out.println("[UnqualifiedJClassRef] created for '"+
+ ucname+"'");
}
// ========================================================================
@@ -68,28 +72,75 @@
public String getQualifiedName() {
if (mQualifiedClassname != null) return mQualifiedClassname;
- mQualifiedClassname = checkExplicitImport();
- if (mQualifiedClassname != null) return mQualifiedClassname;
- mQualifiedClassname = checkSamePackage();
- if (mQualifiedClassname != null) return mQualifiedClassname;
- mQualifiedClassname = checkAlreadyQualified();
- if (mQualifiedClassname != null) return mQualifiedClassname;
- //FIXME '*' imports!
- throw new IllegalStateException("unable to handle unqualified java type "+
- "reference '"+mUnqualifiedClassname+"'. "+
- "This is still partially NYI.");
+ // ok, check to see if it's an array type. if so, we want to strip
+ // away all the brackets and so we can try to load just the component
+ // type.
+ String candidateName;
+ int arrayDimensions = 0;
+ int bracket = mUnqualifiedClassname.indexOf('[');
+ if (bracket != -1) {
+ candidateName = mUnqualifiedClassname.substring(0,bracket);
+ do {
+ arrayDimensions++;
+ bracket = mUnqualifiedClassname.indexOf('[',bracket+1);
+ } while(bracket != -1);
+ } else {
+ candidateName = mUnqualifiedClassname;
+ }
+ // ok, try to get the class that they are talking about
+ String name = qualifyName(candidateName);
+ if (name == null) {
+ throw new IllegalStateException("unable to handle unqualified java type "+
+ "reference '"+candidateName+" ["+
+ mUnqualifiedClassname+"]'. "+
+ "This is still partially NYI.");
+ }
+ // now if it was an array, we need to convert it into a corresponding
+ // field descriptor
+ if (arrayDimensions > 0) {
+ StringWriter out = new StringWriter();
+ for(int i=0; i<arrayDimensions; i++) out.write('[');
+ out.write('L');
+ out.write(name);
+ out.write(';');
+
+ mQualifiedClassname = out.toString();
+ } else {
+ mQualifiedClassname = name;
+ }
+ return mQualifiedClassname;
}
// ========================================================================
// Private methods
+ private String qualifyName(String ucname) {
+ String out = null;
+ if ((out = checkExplicitImport(ucname)) != null) return out;
+ if ((out = checkJavaLang(ucname)) != null) return out;
+ if ((out = checkSamePackage(ucname)) != null) return out;
+ if ((out = checkAlreadyQualified(ucname)) != null) return out;
+ return null;
+ }
+
/**
* Check to see if the unqualified name actually is already qualified.
*/
- private String checkSamePackage() {
- String name = mContext.getPackageName()+"."+mUnqualifiedClassname;
+ private String checkSamePackage(String ucname) {
+ String name = mContext.getPackageName()+"."+ucname;
+ JClass clazz = mContext.getClassLoader().loadClass(name);
+ if (VERBOSE) System.out.println(PREFIX+" checkSamePackage '"+name+"' "+
+ clazz.isUnresolved()+" "+mContext.getClassLoader().getClass());
+ return (clazz.isUnresolved()) ? null : clazz.getQualifiedName();
+ }
+
+ /**
+ * Check to see if the unqualified name is in java.lang.
+ */
+ private String checkJavaLang(String ucname) {
+ String name = "java.lang."+ucname;
JClass clazz = mContext.getClassLoader().loadClass(name);
- if (VERBOSE) System.out.println("checkSamePackage '"+name+"' "+
+ if (VERBOSE) System.out.println(PREFIX+" checkJavaLang '"+name+"' "+
clazz.isUnresolved()+" "+mContext.getClassLoader().getClass());
return (clazz.isUnresolved()) ? null : clazz.getQualifiedName();
}
@@ -97,9 +148,9 @@
/**
* Check to see if the unqualified name actually is already qualified.
*/
- private String checkAlreadyQualified() {
+ private String checkAlreadyQualified(String ucname) {
JClass clazz =
- mContext.getClassLoader().loadClass(mUnqualifiedClassname);
+ mContext.getClassLoader().loadClass(ucname);
return (clazz.isUnresolved()) ? null : clazz.getQualifiedName();
}
@@ -108,14 +159,16 @@
* Run through the list of import specs and see if the class was explicitly
* (i.e. without '*') imported.
*/
- private String checkExplicitImport() {
+ private String checkExplicitImport(String ucname) {
String[] imports = mContext.getImportSpecs();
+ if (VERBOSE) System.out.println(PREFIX+" checkExplicitImport "+
+ imports.length);
for(int i=0; i<imports.length; i++) {
//FIXME this does not cover inner classes
- String impo = lastSegment(imports[i]);
- if (imports[i].equals(mUnqualifiedClassname)) {
- return imports[i];
- }
+ String last = lastSegment(imports[i]);
+ if (VERBOSE) System.out.println(PREFIX+" checkExplicitImport '"+
+ imports[i]+"' '"+last+"'");
+ if (last.equals(ucname)) return imports[i];
}
return null;
}
1.4 +24 -20 xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/internal/ArrayJClass.java
Index: ArrayJClass.java
===================================================================
RCS file: /home/cvs/xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/internal/ArrayJClass.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- ArrayJClass.java 12 Feb 2004 20:06:15 -0000 1.3
+++ ArrayJClass.java 3 Mar 2004 00:01:42 -0000 1.4
@@ -54,10 +54,14 @@
// ========================================================================
// Factory methods
- public static JClass createClassFor(String arrayFD, JClassLoader loader)
+ /**
+ * Creates an array JClass from a field descriptor as described in the JLS.
+ * This is the nasty '[[[Lfoo.bar.Baz;'-style notation.
+ */
+ public static JClass createClassForFD(String arrayFD, JClassLoader loader)
{
if (!arrayFD.startsWith("[")) {
- throw new IllegalArgumentException("must be an array type: "+arrayFD);
+ throw new IllegalArgumentException("must be an array type fd: "+arrayFD);
}
// if it's an array type, we have to be careful
String componentType;
@@ -68,22 +72,22 @@
// might be available
int dims = arrayFD.indexOf("L");
if (dims != -1 && dims<arrayFD.length()-2) {
- componentType = arrayFD.substring(dims+1,arrayFD.length()-1);
- return new ArrayJClass(loader.loadClass(componentType),dims);
+ componentType = arrayFD.substring(dims+1,arrayFD.length()-1);
+ return new ArrayJClass(loader.loadClass(componentType),dims);
} else {
- // name is effed
- throw new IllegalArgumentException("array type field descriptor '"+
- arrayFD+"' is malformed");
+ // name is effed
+ throw new IllegalArgumentException("array type field descriptor '"+
+ arrayFD+"' is malformed");
}
} else {
int dims = arrayFD.lastIndexOf("[")+1;
JClass primType = PrimitiveJClass.getPrimitiveClassForName
- (arrayFD.substring(dims,dims+1));
+ (arrayFD.substring(dims,dims+1));
if (primType == null) {
- // if it didn't end with ';', it has to be a valid primitive
- // type name or it's effed
- throw new IllegalArgumentException("array type field descriptor '"+
- arrayFD+"' is malformed");
+ // if it didn't end with ';', it has to be a valid primitive
+ // type name or it's effed
+ throw new IllegalArgumentException("array type field descriptor '"+
+ arrayFD+"' is malformed");
}
return new ArrayJClass(primType,dims);
}
@@ -106,7 +110,7 @@
mComponentType = componentType;
mDimensions = dimensions;
}
-
+
// ========================================================================
// JElement implementation
@@ -118,9 +122,9 @@
String out = getQualifiedName();
int lastDot = out.lastIndexOf('.');
return (lastDot == -1) ? out : out.substring(lastDot+1);
- }
+ }
- public String getQualifiedName() {
+ public String getQualifiedName() {
StringWriter out = new StringWriter();
out.write(mComponentType.getQualifiedName());
for(int i=0; i<mDimensions; i++) out.write("[]");
@@ -144,7 +148,7 @@
public int getModifiers() { return mComponentType.getModifiers(); }
- public boolean isPackagePrivate() {
+ public boolean isPackagePrivate() {
return mComponentType.isPackagePrivate();
}
@@ -155,7 +159,7 @@
public boolean isPrivate() { return mComponentType.isPrivate(); }
public JSourcePosition getSourcePosition() { return null; }
-
+
public JClass getContainingClass() { return null; }
// ========================================================================
@@ -174,13 +178,13 @@
public JClass getArrayComponentType() { return mComponentType; }
public int getArrayDimensions() { return mDimensions; }
-
+
public JClass getSuperclass() { return ObjectJClass.getInstance(); }
public boolean isAssignableFrom(JClass c) {
return c.isArray() &&
- (c.getArrayDimensions() == mDimensions) &&
- (mComponentType.isAssignableFrom(c.getArrayComponentType()));
+ (c.getArrayDimensions() == mDimensions) &&
+ (mComponentType.isAssignableFrom(c.getArrayComponentType()));
}
public String getFieldDescriptor() {
1.3 +1 -1 xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/internal/BaseJClassLoader.java
Index: BaseJClassLoader.java
===================================================================
RCS file: /home/cvs/xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/internal/BaseJClassLoader.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- BaseJClassLoader.java 2 Mar 2004 04:26:18 -0000 1.2
+++ BaseJClassLoader.java 3 Mar 2004 00:01:42 -0000 1.3
@@ -59,7 +59,7 @@
JClass out = (JClass)mFd2Class.get(fd);
if (out != null) return out;
if (fd.startsWith("[")) {
- return ArrayJClass.createClassFor(fd,this);
+ return ArrayJClass.createClassForFD(fd,this);
} else {
if (fd.equals("java.lang.Object")) return mParentLoader.loadClass(fd);
}
1.2 +2 -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.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- JClassLoaderImpl.java 2 Mar 2004 04:26:18 -0000 1.1
+++ JClassLoaderImpl.java 3 Mar 2004 00:01:42 -0000 1.2
@@ -67,7 +67,7 @@
JClass out = (JClass)mFd2ClassCache.get(fd);
if (out != null) return out;
if (fd.startsWith("[")) {
- return ArrayJClass.createClassFor(fd,this);
+ return ArrayJClass.createClassForFD(fd,this);
} else {
if (fd.equals("java.lang.Object")) return ObjectJClass.getInstance();
if (fd.equals("void")) return VoidJClass.getInstance();
@@ -77,7 +77,6 @@
String pkg;
String name;
if (dot == -1) {
- //System.out.println("==== "+fd);
pkg = "";
name = fd;
} else {
@@ -89,7 +88,7 @@
out = ROOT.loadClass(fd);
}
if (out == null) {
- out = new EClassImpl(pkg,name,this);
+ out = new EClassImpl(pkg,name,this,null);
((EClassImpl)out).setIsUnresolved(true);
if (mVerbose) System.out.println("[JClassLoaderImpl] unresolve class '"+
pkg+" "+name+"'!!");
1.9 +1 -1 xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/internal/javadoc/JDClassLoader.java
Index: JDClassLoader.java
===================================================================
RCS file: /home/cvs/xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/internal/javadoc/JDClassLoader.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- JDClassLoader.java 25 Feb 2004 18:56:49 -0000 1.8
+++ JDClassLoader.java 3 Mar 2004 00:01:42 -0000 1.9
@@ -72,7 +72,7 @@
{
fd = fd.trim();//REVIEW is this paranoid?
if (fd.startsWith("[")) {
- return ArrayJClass.createClassFor(fd,this);
+ return ArrayJClass.createClassForFD(fd,this);
} else {
if (fd.equals("java.lang.Object")) return mParentLoader.loadClass(fd);
JClass out = (JClass)mFd2Class.get(fd);
1.3 +1 -1 xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/internal/parser/ParserClassBuilder.java
Index: ParserClassBuilder.java
===================================================================
RCS file: /home/cvs/xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/internal/parser/ParserClassBuilder.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- ParserClassBuilder.java 2 Mar 2004 06:32:13 -0000 1.2
+++ ParserClassBuilder.java 3 Mar 2004 00:01:42 -0000 1.3
@@ -41,7 +41,7 @@
// ========================================================================
// Constants
- private static final boolean VERBOSE = true;
+ private static final boolean VERBOSE = false;
// ========================================================================
// Variables
1.1 xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/internal/parser/ParamStruct.java
Index: ParamStruct.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.internal.parser;
import org.apache.xmlbeans.impl.jam.editable.EInvokable;
import org.apache.xmlbeans.impl.jam.editable.EParameter;
/**
*
* @author Patrick Calahan <pc...@bea.com>
*/
/*package*/ class ParamStruct {
// ========================================================================
// Variables
private String mName;
private String mType;
// ========================================================================
// Constructors
public ParamStruct(String type, String name) {
init(type,name);
}
// ========================================================================
// Public methods
public void init(String type, String name) {
mType = type;
mName = name;
}
public EParameter createParameter(EInvokable e) {
if (e == null) throw new IllegalArgumentException("null invokable");
EParameter param = e.addNewParameter();
param.setSimpleName(mName);
param.setUnqualifiedType(mType);
return param;
}
}
1.1 xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/internal/parser/ParamStructPool.java
Index: ParamStructPool.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.internal.parser;
import org.apache.xmlbeans.impl.jam.editable.EInvokable;
import org.apache.xmlbeans.impl.jam.editable.EParameter;
import java.util.ArrayList;
import java.util.List;
/**
* <p>Utility class which the parser uses to store a list of method
* or constructor parameters during lookahead. The structures
* get reused for efficiency.</p>
*
* @author Patrick Calahan <pc...@bea.com>
*/
public class ParamStructPool {
// ========================================================================
// Constants
private static final boolean VERBOSE = true;
// ========================================================================
// Variables
private List mList = new ArrayList();
private int mLength = 0;
// ========================================================================
// Public methods
public void setParametersOn(EInvokable e) {
for(int i=0; i<mLength; i++) {
ParamStruct struct = (ParamStruct)mList.get(i);
struct.createParameter(e);
}
}
public void add(String type, String name) {
mLength++;
if (mLength >= mList.size()) {
mList.add(new ParamStruct(type,name));
} else {
((ParamStruct)mList.get(mLength)).init(type,name);
}
}
public void clear() {
mLength = 0;
}
}
1.2 +6 -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.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- NewJServiceFactory.java 2 Mar 2004 06:32:13 -0000 1.1
+++ NewJServiceFactory.java 3 Mar 2004 00:01:42 -0000 1.2
@@ -35,8 +35,12 @@
JClassLoader parent)
throws IOException
{
- ParserClassBuilder pcb = new ParserClassBuilder(params);
- return new JClassLoaderImpl(pcb,null);
+ EClassBuilder[] builders = new EClassBuilder[2];
+ builders[0] = new ParserClassBuilder(params);
+ // 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);
}
}
1.2 +5 -1 xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/provider/ReflectionClassBuilder.java
Index: ReflectionClassBuilder.java
===================================================================
RCS file: /home/cvs/xml-xmlbeans/v2/src/jam/org/apache/xmlbeans/impl/jam/provider/ReflectionClassBuilder.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- ReflectionClassBuilder.java 2 Mar 2004 04:26:18 -0000 1.1
+++ ReflectionClassBuilder.java 3 Mar 2004 00:01:42 -0000 1.2
@@ -48,6 +48,10 @@
return new JClassLoaderImpl(new ReflectionClassBuilder(cl),null);
}
+ public static EClassBuilder getSystemClassBuilder() {
+ return new ReflectionClassBuilder(ClassLoader.getSystemClassLoader());
+ }
+
// ========================================================================
// Constructors
@@ -64,7 +68,7 @@
JClassLoader loader) {
try {
Class rclass = mLoader.loadClass(packageName+"."+className);
- EClass out = new EClassImpl(packageName, className, loader);
+ EClass out = new EClassImpl(packageName, className, loader, null);
populate(out,rclass);
return out;
} catch(ClassNotFoundException cnfe) {
1.8 +2 -2 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.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- build.xml 2 Mar 2004 22:03:04 -0000 1.7
+++ build.xml 3 Mar 2004 00:01:43 -0000 1.8
@@ -57,9 +57,9 @@
</classpath>
<formatter type='plain' usefile='false'/>
- <!--
+
<test name='org.apache.xmlbeans.test.jam.ParserJamTest'/>
- -->
+
<test name='org.apache.xmlbeans.test.jam.SourcesJamTest'/>
<test name='org.apache.xmlbeans.test.jam.ClassesJamTest'/>
1.2 +1 -1 xml-xmlbeans/v2/test/src/jamtest/tests/org/apache/xmlbeans/test/jam/GoldenInvokable.java
Index: GoldenInvokable.java
===================================================================
RCS file: /home/cvs/xml-xmlbeans/v2/test/src/jamtest/tests/org/apache/xmlbeans/test/jam/GoldenInvokable.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- GoldenInvokable.java 2 Mar 2004 22:03:04 -0000 1.1
+++ GoldenInvokable.java 3 Mar 2004 00:01:43 -0000 1.2
@@ -132,7 +132,7 @@
public void compare(JMethod method, boolean compareParamNames, Assert a) {
compare((JInvokable)method,compareParamNames,a);
- a.assertTrue("return types are different ["+
+ a.assertTrue("return types are different on "+method.getSimpleName()+"["+
method.getReturnType().getQualifiedName()+","+
mReturnType+"]",
method.getReturnType().getQualifiedName().equals(mReturnType));
1.8 +3 -2 xml-xmlbeans/v2/test/src/jamtest/tests/org/apache/xmlbeans/test/jam/JamTestBase.java
Index: JamTestBase.java
===================================================================
RCS file: /home/cvs/xml-xmlbeans/v2/test/src/jamtest/tests/org/apache/xmlbeans/test/jam/JamTestBase.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- JamTestBase.java 2 Mar 2004 22:03:04 -0000 1.7
+++ JamTestBase.java 3 Mar 2004 00:01:43 -0000 1.8
@@ -329,8 +329,9 @@
private void verifyAnnotation(JElement j, String ann, String val) {
JAnnotation a = j.getAnnotation(ann);
- assertTrue(j.getParent().getQualifiedName()+" '"+j.getQualifiedName()+"' is missing expected annotation '"+ann+"'",
- a != null);
+ assertTrue(/*j.getParent().getQualifiedName()+" '"+*/
+ j.getQualifiedName()+"' is missing expected annotation '"+ann+"'",
+ a != null);
assertTrue(j.getQualifiedName()+" annotation '"+ann+"' does not equal "+
val,val.equals(a.getStringValue().trim()));
}
1.4 +1 -1 xml-xmlbeans/v2/test/src/jamtest/tests/org/apache/xmlbeans/test/jam/ParserJamTest.java
Index: ParserJamTest.java
===================================================================
RCS file: /home/cvs/xml-xmlbeans/v2/test/src/jamtest/tests/org/apache/xmlbeans/test/jam/ParserJamTest.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- ParserJamTest.java 2 Mar 2004 08:28:19 -0000 1.3
+++ ParserJamTest.java 3 Mar 2004 00:01:43 -0000 1.4
@@ -45,7 +45,7 @@
}
protected boolean isAnnotationsAvailable() {
- return true;
+ return false;//FIXME!!
}
protected boolean isParameterNamesKnown() {
---------------------------------------------------------------------
To unsubscribe, e-mail: xmlbeans-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xmlbeans-cvs-help@xml.apache.org