santiagopg 2002/07/15 08:57:38
Modified: java/src/org/apache/xalan/xsltc/compiler FunctionCall.java
java/src/org/apache/xalan/xsltc/compiler/util
TypeCheckError.java
Log:
Enhanced error reporting in calls to external Java functions.
Revision Changes Path
1.18 +20 -19
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/FunctionCall.java
Index: FunctionCall.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/FunctionCall.java,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -r1.17 -r1.18
--- FunctionCall.java 20 Jun 2002 22:24:17 -0000 1.17
+++ FunctionCall.java 15 Jul 2002 15:57:38 -0000 1.18
@@ -255,8 +255,10 @@
if (_className.length() > 0) {
return typeCheckExternal(stable);
}
- } catch (TypeCheckError e) {
- // Falls through
+ }
+ catch (TypeCheckError e) {
+ getParser().reportError(ERROR, e.getErrorMsg());
+ return _type = Type.Void;
}
/*
@@ -271,7 +273,7 @@
_fname.toString());
}
unresolvedExternal = true;
- return _type = Type.Void;
+ return _type = Type.Int; // use "Int" as "unknown"
}
}
@@ -324,6 +326,7 @@
throw new TypeCheckError(ErrorMsg.METHOD_NOT_FOUND_ERR, name);
}
+ Class extType = null;
final int nMethods = methods.size();
final int nArgs = _arguments.size();
final Vector argsType = typeCheckArgs(stable);
@@ -334,20 +337,20 @@
// Check if all paramteters to this method can be converted
final Method method = (Method)methods.elementAt(i);
final Class[] paramTypes = method.getParameterTypes();
+
for (j = 0; j < nArgs; j++) {
// Convert from internal (translet) type to external (Java) type
+ extType = paramTypes[j];
final Type intType = (Type)argsType.elementAt(j);
- final Class extType = paramTypes[j];
if (!_internal2Java.maps(intType, extType)) break;
}
if (j == nArgs) {
// Check if the return type can be converted
- final Class extType = method.getReturnType();
- if (extType.getName().equals("void"))
- _type = Type.Void;
- else
- _type = (Type)_java2Internal.get(extType);
+ extType = method.getReturnType();
+ _type = extType.getName().equals("void") ? Type.Void
+ : (Type) _java2Internal.get(extType);
+
// Use this method if all parameters & return type match
if (_type != null) {
_chosenMethod = method;
@@ -357,17 +360,15 @@
}
final StringBuffer buf = new StringBuffer(_className);
- buf.append('.');
- buf.append(_fname.getLocalPart());
- buf.append('(');
- for (int a=0; a<nArgs; a++) {
- final Type intType = (Type)argsType.elementAt(a);
+ buf.append('.').append(_fname.getLocalPart()).append('(');
+ for (int i = 0; i < nArgs; i++) {
+ final Type intType = (Type)argsType.elementAt(i);
buf.append(intType.toString());
- if (a < (nArgs-1)) buf.append(", ");
+ if (i < nArgs - 1) buf.append(", ");
}
- buf.append(");");
- final String args = buf.toString();
- throw new TypeCheckError(ErrorMsg.ARGUMENT_CONVERSION_ERR, args);
+ buf.append(')');
+ throw new TypeCheckError(ErrorMsg.ARGUMENT_CONVERSION_ERR,
+ buf.toString());
}
/**
1.2 +5 -1
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/util/TypeCheckError.java
Index: TypeCheckError.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/util/TypeCheckError.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- TypeCheckError.java 17 Apr 2001 18:52:21 -0000 1.1
+++ TypeCheckError.java 15 Jul 2002 15:57:38 -0000 1.2
@@ -89,6 +89,10 @@
_error = new ErrorMsg(code, param1, param2);
}
+ public ErrorMsg getErrorMsg() {
+ return _error;
+ }
+
public String toString() {
String result;
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]