santiagopg 02/04/29 11:32:30
Modified: java/src/org/apache/xalan/xsltc/compiler FunctionCall.java
java/src/org/apache/xalan/xsltc/compiler/util
ReferenceType.java
Log:
Added a type mapping between 'reference' and 'java.lang.Object' and
vice versa. With this addition, a stylesheet can pass a parameter
to an external Java function without getting a type check error.
(see Bugzilla 8595).
Revision Changes Path
1.16 +6 -1
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.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- FunctionCall.java 24 Apr 2002 17:03:15 -0000 1.15
+++ FunctionCall.java 29 Apr 2002 18:32:30 -0000 1.16
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: FunctionCall.java,v 1.15 2002/04/24 17:03:15 santiagopg Exp $
+ * @(#)$Id: FunctionCall.java,v 1.16 2002/04/29 18:32:30 santiagopg Exp $
*
* The Apache Software License, Version 1.1
*
@@ -121,6 +121,7 @@
*/
static {
try {
+ final Class objectClass = Class.forName("java.lang.Object");
final Class stringClass = Class.forName("java.lang.String");
final Class nodeClass = Class.forName("org.w3c.dom.Node");
final Class nodeListClass = Class.forName("org.w3c.dom.NodeList");
@@ -156,6 +157,8 @@
_internal2Java.put(Type.ResultTree, nodeClass);
_internal2Java.put(Type.ResultTree, nodeListClass);
+ _internal2Java.put(Type.Reference, objectClass);
+
// Possible conversions between Java and internal types
_java2Internal.put(Boolean.TYPE, Type.Boolean);
@@ -168,6 +171,8 @@
_java2Internal.put(Double.TYPE, Type.Real);
_java2Internal.put(stringClass, Type.String);
+
+ _java2Internal.put(objectClass, Type.Reference);
// Conversions from org.w3c.dom.Node/NodeList are not supported
}
1.9 +33 -1
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/util/ReferenceType.java
Index: ReferenceType.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/util/ReferenceType.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- ReferenceType.java 24 Apr 2002 17:03:16 -0000 1.8
+++ ReferenceType.java 29 Apr 2002 18:32:30 -0000 1.9
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: ReferenceType.java,v 1.8 2002/04/24 17:03:16 santiagopg Exp $
+ * @(#)$Id: ReferenceType.java,v 1.9 2002/04/29 18:32:30 santiagopg Exp $
*
* The Apache Software License, Version 1.1
*
@@ -225,6 +225,38 @@
int index = cpg.addMethodref(BASIS_LIBRARY_CLASS, "referenceToResultTree",
"(" + OBJECT_SIG + ")" + DOM_INTF_SIG);
il.append(new INVOKESTATIC(index));
+ }
+
+ /**
+ * Translates a reference into the Java type denoted by <code>clazz</code>.
+ * Only conversion allowed is to java.lang.Object.
+ */
+ public void translateTo(ClassGenerator classGen, MethodGenerator methodGen,
+ Class clazz) {
+ if (clazz.getName().equals("java.lang.Object")) {
+ methodGen.getInstructionList().append(NOP);
+ }
+ else {
+ ErrorMsg err = new ErrorMsg(ErrorMsg.DATA_CONVERSION_ERR,
+ toString(), clazz.getName());
+ classGen.getParser().reportError(Constants.FATAL, err);
+ }
+ }
+
+ /**
+ * Translates an external Java type into a reference. Only conversion
+ * allowed is from java.lang.Object.
+ */
+ public void translateFrom(ClassGenerator classGen, MethodGenerator methodGen,
+ Class clazz) {
+ if (clazz.getName().equals("java.lang.Object")) {
+ methodGen.getInstructionList().append(NOP);
+ }
+ else {
+ ErrorMsg err = new ErrorMsg(ErrorMsg.DATA_CONVERSION_ERR,
+ toString(), clazz.getName());
+ classGen.getParser().reportError(Constants.FATAL, err);
+ }
}
/**
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]