You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by sb...@locus.apache.org on 2000/07/31 05:53:50 UTC

cvs commit: xml-xalan/java/src/org/apache/xalan/extensions ExtensionFunctionHandler.java MethodResolver.java XSLTJavaClassEngine.java

sboag       00/07/30 20:53:50

  Modified:    java/src/org/apache/xalan/extensions
                        ExtensionFunctionHandler.java MethodResolver.java
                        XSLTJavaClassEngine.java
  Log:
  Tweaked stuff enough so that function extensions seem to basicaly work.  Needs lots more work, and then testing.
  
  Revision  Changes    Path
  1.5       +29 -12    xml-xalan/java/src/org/apache/xalan/extensions/ExtensionFunctionHandler.java
  
  Index: ExtensionFunctionHandler.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/extensions/ExtensionFunctionHandler.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- ExtensionFunctionHandler.java	2000/07/30 22:45:16	1.4
  +++ ExtensionFunctionHandler.java	2000/07/31 03:53:49	1.5
  @@ -293,7 +293,7 @@
             Class[] paramTypes = thisMethod.getParameterTypes();
             MethodResolver.convertParams(methodArgs, convertedArgs, paramTypes, exprContext);
                        
  -          return thisMethod.invoke (object, convertedArgs);
  +          return thisMethod.invoke (object, convertedArgs[0]);
           }
         }
         catch(Exception e)
  @@ -315,7 +315,7 @@
           Constructor c = MethodResolver.getConstructor((Class) object, 
                                                         methodArgs, convertedArgs,
                                                         exprContext);
  -        Object obj = c.newInstance (convertedArgs);
  +        Object obj = c.newInstance (convertedArgs[0]);
           return obj;
         }
         else 
  @@ -324,7 +324,7 @@
           Method m = MethodResolver.getMethod(cl, method,
                                               methodArgs, 
                                               convertedArgs, exprContext);
  -        Object returnObj = m.invoke (object, convertedArgs);
  +        Object returnObj = m.invoke (object, convertedArgs[0]);
           if(!isNew)
           {
             if(null == m_cachedMethods)
  @@ -437,7 +437,14 @@
             else
             {
               argArray = new Object[args.size ()];
  -            argStart = 0;
  +            if(args.size() > 0)
  +            {
  +              Object o = args.elementAt (0);
  +              argArray[0] = (o instanceof XObject) ? ((XObject)o).object () : o;
  +              argStart = 1;
  +            }
  +            else
  +              argStart = 0;
             }
           }
         }
  @@ -448,18 +455,28 @@
           argStart = 0;
         }
   
  -      // convert the xobject args to their object forms
  -      for (int i = 0; i < args.size (); i++) 
  -      {
  -        Object o = args.elementAt (i);
  -        argArray[i+argStart] = 
  -                              (o instanceof XObject) ? ((XObject)o).object () : o;
  -      }
  -
         if(isJava)
  +      {
  +        // TODO: Fix all this.
  +        for (int i = argStart; i < args.size (); i++) 
  +        {
  +          Object o = args.elementAt (i);
  +          argArray[i] = o;
  +        }
           return callJava(javaObject, funcName, argArray, methodKey, exprContext);
  +      }
         else
  +      {
  +        // convert the xobject args to their object forms
  +        for (int i = 0; i < args.size (); i++) 
  +        {
  +          Object o = args.elementAt (i);
  +          argArray[i+argStart] = 
  +                                (o instanceof XObject) ? ((XObject)o).object () : o;
  +        }
  +        
           return e.call (null, funcName, argArray);
  +      }
       }
       catch (Exception e) 
       {
  
  
  
  1.4       +16 -8     xml-xalan/java/src/org/apache/xalan/extensions/MethodResolver.java
  
  Index: MethodResolver.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/extensions/MethodResolver.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- MethodResolver.java	2000/07/30 22:45:16	1.3
  +++ MethodResolver.java	2000/07/31 03:53:49	1.4
  @@ -50,31 +50,31 @@
         int paramStart = 0;
         boolean isFirstExpressionContext = false;
         int scoreStart = 0;
  -      System.out.println("numberMethodParams: "+numberMethodParams);
  -      System.out.println("argsIn.length: "+argsIn.length);
  -      System.out.println("exprContext: "+exprContext);
  +      // System.out.println("numberMethodParams: "+numberMethodParams);
  +      // System.out.println("argsIn.length: "+argsIn.length);
  +      // System.out.println("exprContext: "+exprContext);
         if(numberMethodParams == (argsIn.length+1))
         {
           Class javaClass = paramTypes[0];
  -      System.out.println("first javaClass: "+javaClass.getName());
  +      // System.out.println("first javaClass: "+javaClass.getName());
           if(javaClass.isAssignableFrom(org.w3c.xslt.ExpressionContext.class))
           {
             isFirstExpressionContext = true;
             scoreStart = 5;
             paramStart++;
  -      System.out.println("Incrementing paramStart: "+paramStart);
  +      // System.out.println("Incrementing paramStart: "+paramStart);
           }
         }
         if(argsIn.length == (numberMethodParams - paramStart))
         {
           // then we have our candidate.
           int score = scoreMatch(paramTypes, paramStart, argsIn, scoreStart);
  -      System.out.println("score: "+score);
  +      // System.out.println("score: "+score);
           if(-1 == score)
             continue;
           if(score < bestScore)
           {
  -          System.out.println("Assigning best ctor: "+ctor);
  +          // System.out.println("Assigning best ctor: "+ctor);
             bestConstructor = ctor;
             bestParamTypes = paramTypes;
             bestScore = score;
  @@ -112,6 +112,8 @@
              SecurityException,
              org.xml.sax.SAXException
     {
  +    System.out.println("---> Looking for method: "+name);
  +    System.out.println("---> classObj: "+classObj);
       Method bestMethod = null;
       Class[] bestParamTypes = null;
       Method[] methods = classObj.getMethods();
  @@ -120,6 +122,7 @@
       for(int i = 0; i < nMethods; i++)
       {
         Method method = methods[i];
  +      // System.out.println("looking at method: "+method);
         if(method.getName().equals(name))
         {
           Class[] paramTypes = method.getParameterTypes();
  @@ -127,13 +130,16 @@
           int paramStart = 0;
           boolean isFirstExpressionContext = false;
           int scoreStart = 0;
  +      System.out.println("numberMethodParams: "+numberMethodParams);
  +      System.out.println("argsIn.length: "+argsIn.length);
  +      System.out.println("exprContext: "+exprContext);
           if(numberMethodParams == (argsIn.length+1))
           {
             Class javaClass = paramTypes[0];
             if(javaClass.isAssignableFrom(org.w3c.xslt.ExpressionContext.class))
             {
               isFirstExpressionContext = true;
  -            scoreStart = 10;
  +            scoreStart = 5;
               paramStart++;
             }
           }
  @@ -141,10 +147,12 @@
           {
             // then we have our candidate.
             int score = scoreMatch(paramTypes, paramStart, argsIn, scoreStart);
  +          System.out.println("score: "+score);
             if(-1 == score)
               continue;
             if(score < bestScore)
             {
  +            System.out.println("Assigning best method: "+method);
               bestMethod = method;
               bestParamTypes = paramTypes;
               bestScore = score;
  
  
  
  1.4       +1 -1      xml-xalan/java/src/org/apache/xalan/extensions/XSLTJavaClassEngine.java
  
  Index: XSLTJavaClassEngine.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/extensions/XSLTJavaClassEngine.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- XSLTJavaClassEngine.java	2000/07/30 22:45:16	1.3
  +++ XSLTJavaClassEngine.java	2000/07/31 03:53:49	1.4
  @@ -149,7 +149,7 @@
           Method m = MethodResolver.getMethod(object.getClass(), method,
                                                         methodArgs, 
                                                         convertedArgs, null);
  -        return m.invoke (object, methodArgs);
  +        return m.invoke (object, convertedArgs[0]);
         }
       }
       catch (NoSuchMethodException nsme)