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]

Reply via email to