santiagopg    2002/07/15 08:57:38

  Modified:    java/src/org/apache/xalan/xsltc/compiler FunctionCall.java
               java/src/org/apache/xalan/xsltc/compiler/util
                        TypeCheckError.java
  Log:
  Enhanced error reporting in calls to external Java functions.
  
  Revision  Changes    Path
  1.18      +20 -19    
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.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- FunctionCall.java 20 Jun 2002 22:24:17 -0000      1.17
  +++ FunctionCall.java 15 Jul 2002 15:57:38 -0000      1.18
  @@ -255,8 +255,10 @@
                if (_className.length() > 0) {
                    return typeCheckExternal(stable);
                }
  -         } catch (TypeCheckError e) {
  -             // Falls through
  +         } 
  +         catch (TypeCheckError e) {
  +             getParser().reportError(ERROR, e.getErrorMsg());
  +             return _type = Type.Void;
            }
   
            /*
  @@ -271,7 +273,7 @@
                              _fname.toString());
            }
            unresolvedExternal = true;
  -         return _type = Type.Void;
  +         return _type = Type.Int;    // use "Int" as "unknown"
        }
       }
   
  @@ -324,6 +326,7 @@
            throw new TypeCheckError(ErrorMsg.METHOD_NOT_FOUND_ERR, name);
        }
   
  +     Class extType = null;
        final int nMethods = methods.size();
        final int nArgs = _arguments.size();
        final Vector argsType = typeCheckArgs(stable);
  @@ -334,20 +337,20 @@
            // Check if all paramteters to this method can be converted
            final Method method = (Method)methods.elementAt(i);
            final Class[] paramTypes = method.getParameterTypes();
  +
            for (j = 0; j < nArgs; j++) {
                // Convert from internal (translet) type to external (Java) type
  +             extType = paramTypes[j];
                final Type intType = (Type)argsType.elementAt(j);
  -             final Class extType = paramTypes[j];
                if (!_internal2Java.maps(intType, extType)) break;
            }
   
            if (j == nArgs) {
                // Check if the return type can be converted
  -             final Class extType = method.getReturnType();
  -             if (extType.getName().equals("void"))
  -                 _type = Type.Void;
  -             else
  -                 _type = (Type)_java2Internal.get(extType);
  +             extType = method.getReturnType();
  +             _type = extType.getName().equals("void") ? Type.Void
  +                 : (Type) _java2Internal.get(extType);
  +
                // Use this method if all parameters & return type match
                if (_type != null) {
                    _chosenMethod = method;
  @@ -357,17 +360,15 @@
        }
   
        final StringBuffer buf = new StringBuffer(_className);
  -     buf.append('.');
  -     buf.append(_fname.getLocalPart());
  -     buf.append('(');
  -     for (int a=0; a<nArgs; a++) {
  -         final Type intType = (Type)argsType.elementAt(a);
  +     buf.append('.').append(_fname.getLocalPart()).append('(');
  +     for (int i = 0; i < nArgs; i++) {
  +         final Type intType = (Type)argsType.elementAt(i);
            buf.append(intType.toString());
  -         if (a < (nArgs-1)) buf.append(", ");
  +         if (i < nArgs - 1) buf.append(", ");
        }
  -     buf.append(");");
  -     final String args = buf.toString();
  -     throw new TypeCheckError(ErrorMsg.ARGUMENT_CONVERSION_ERR, args);
  +     buf.append(')');
  +     throw new TypeCheckError(ErrorMsg.ARGUMENT_CONVERSION_ERR, 
  +         buf.toString());
       }
   
       /**
  
  
  
  1.2       +5 -1      
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/util/TypeCheckError.java
  
  Index: TypeCheckError.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/util/TypeCheckError.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- TypeCheckError.java       17 Apr 2001 18:52:21 -0000      1.1
  +++ TypeCheckError.java       15 Jul 2002 15:57:38 -0000      1.2
  @@ -89,6 +89,10 @@
        _error = new ErrorMsg(code, param1, param2);
       }
   
  +    public ErrorMsg getErrorMsg() {
  +        return _error;
  +    }
  +
       public String toString() {
        String result;
   
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to