/*
* This file is part or JMathLib
*
* Check it out at http://www.jmathlib.de
*
* Author:
* (c) 2005-2009
*/
package jmathlib.core.functions;
//import MathLib.Tokens.FunctionToken;
//import MathLib.Tokens.VariableToken;
//import MathLib.Tokens.StringToken;
import jmathlib.core.tokens.OperandToken;
import jmathlib.core.tokens.Token;
//import MathLib.Tokens.Expression;
import jmathlib.core.interpreter.*;
//import java.applet.*;
//import java.util.Vector;
//import java.io.*;
//import java.net.*;
import java.lang.reflect.*;
/**Class for call a function from an external class using reflection*/
public class ReflectionFunctionCall extends ExternalFunction
{
private Class externalClass;
/**creates a reflection function call containing the class being called*/
public ReflectionFunctionCall(Class _externalClass, String functionName)
{
super(functionName);
externalClass = _externalClass;
}
public OperandToken evaluate(Token []operands, GlobalValues globals)
{
boolean found = false;
ErrorLogger.debugLine("evaluating reflection function");
Method[] methodList = externalClass.getMethods();
ErrorLogger.debugLine(name);
for(int methodNo = 0; methodNo < methodList.length && !found; methodNo++)
{
String funcName = methodList[methodNo].toString();
funcName = funcName.substring(0, funcName.indexOf("(") );
funcName = funcName.substring( funcName.lastIndexOf(".") + 1);
ErrorLogger.debugLine("method " + methodNo + " = " + funcName);
if(funcName.equalsIgnoreCase(name))
{
ErrorLogger.debugLine("found method*********************************************");
evaluateMethod(methodList[methodNo]);
found = true;
}
}
return null;
}
private void evaluateMethod(Method calledMethod)
{
Class[] paramaterList = calledMethod.getParameterTypes();
for(int paramaterNo = 0; paramaterNo < paramaterList.length; paramaterNo++)
{
ErrorLogger.debugLine("method " + paramaterNo + " = " + paramaterList[paramaterNo].toString());
}
}
public String toString()
{
return "reflection object";
}
}