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)