You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by sa...@apache.org on 2002/04/04 21:04:03 UTC
cvs commit: xml-xalan/java/src/org/apache/xalan/xsltc/compiler FunctionCall.java
santiagopg 02/04/04 11:04:03
Modified: java/src/org/apache/xalan/xsltc/compiler FunctionCall.java
Log:
Fix for bugzilla 7721
Revision Changes Path
1.13 +43 -26 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.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- FunctionCall.java 1 Feb 2002 20:07:08 -0000 1.12
+++ FunctionCall.java 4 Apr 2002 19:04:03 -0000 1.13
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: FunctionCall.java,v 1.12 2002/02/01 20:07:08 tmiller Exp $
+ * @(#)$Id: FunctionCall.java,v 1.13 2002/04/04 19:04:03 santiagopg Exp $
*
* The Apache Software License, Version 1.1
*
@@ -192,6 +192,19 @@
}
}
+ public String getClassNameFromUri(String uri)
+ throws TypeCheckError
+ {
+ final int length =
+ uri.startsWith(JAVA_EXT_PREFIX) ? JAVA_EXT_PREFIX.length() + 1 :
+ uri.startsWith(JAVA_EXT_XALAN) ? JAVA_EXT_XALAN.length() + 1 : 0;
+
+ if (length == 0) {
+ throw new TypeCheckError(this);
+ }
+ return (uri.length() > length) ? uri.substring(length) : EMPTYSTRING;
+ }
+
/**
* Type check a function call. Since different type conversions apply,
* type checking is different for standard and external (Java) functions.
@@ -207,33 +220,37 @@
}
// Handle extension functions (they all have a namespace)
else {
- final int len = JAVA_EXT_PREFIX.length();
- if (namespace.equals(JAVA_EXT_PREFIX) ||
- namespace.equals(JAVA_EXT_XALAN)) {
- final int pos = local.indexOf('.');
- _className = local.substring(0, pos);
- _fname = new QName(namespace, null, local.substring(pos+1));
- }
- else if (namespace.length() >= len &&
- namespace.substring(0, len).equals(JAVA_EXT_PREFIX)) {
- _className = namespace.substring(len + 1);
- }
- else {
- /*
- * Warn user if external function could not be resolved.
- * Warning will _NOT_ be issued is the call is properly
- * wrapped in an <xsl:if> or <xsl:when> element. For details
- * see If.parserContents() and When.parserContents()
- */
- final Parser parser = getParser();
- if (parser != null) {
- reportWarning(this, parser, ErrorMsg.FUNCTION_RESOLVE_ERR,
- _fname.toString());
+ try {
+ _className = getClassNameFromUri(namespace);
+
+ final int pos = local.lastIndexOf('.');
+ if (pos > 0) {
+ _className = _className + local.substring(0, pos);
+ _fname = new QName(namespace, null, local.substring(pos + 1));
+ }
+ else {
+ _fname = new QName(namespace, null, local);
+ }
+ if (_className.length() > 0) {
+ return typeCheckExternal(stable);
}
- unresolvedExternal = true;
- return _type = Type.Void;
+ } catch (TypeCheckError e) {
+ // Falls through
+ }
+
+ /*
+ * Warn user if external function could not be resolved.
+ * Warning will _NOT_ be issued is the call is properly
+ * wrapped in an <xsl:if> or <xsl:when> element. For details
+ * see If.parserContents() and When.parserContents()
+ */
+ final Parser parser = getParser();
+ if (parser != null) {
+ reportWarning(this, parser, ErrorMsg.FUNCTION_RESOLVE_ERR,
+ _fname.toString());
}
- return typeCheckExternal(stable);
+ unresolvedExternal = true;
+ return _type = Type.Void;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org