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