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/29 20:32:30 UTC

cvs commit: xml-xalan/java/src/org/apache/xalan/xsltc/compiler/util ReferenceType.java

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: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org