blob: 623f6c39d9a0ba7c3fabea30c68bfb4dd1b9e5a7 [file] [log] [blame]
package com.ibm.text.utility;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import com.ibm.icu.dev.test.util.BagFormatter;
public class CallArgs {
static BagFormatter bf = new BagFormatter();
public static String getPrefix(Class c) {
String prefix = c.getName();
int pos = prefix.lastIndexOf('.');
if (pos < 0) return "";
return prefix.substring(0,pos+1);
}
public static void call(String[] args, String prefix) throws Exception {
for (int i = 0; i < args.length; ++i) {
String arg = args[i];
if (arg.startsWith("#")) break; // comments out rest of line
String[] methodArgs = null;
int par = arg.indexOf('(');
if (par >= 0) {
methodArgs = Utility.split(arg.substring(par+1, arg.length()-1),',');
arg = arg.substring(0,par);
}
int pos = arg.indexOf('.');
Method method = null;
String className = "Main";
String methodName = "";
if (pos >= 0) {
className = prefix + arg.substring(0,pos);
methodName = arg.substring(pos+1);
method = tryMethod(className, methodName, methodArgs);
} else {
method = tryMethod(className, arg, methodArgs);
if (method == null) {
className = arg;
methodName = "main";
method = tryMethod(className, methodName, methodArgs);
}
}
if (method == null) throw new IllegalArgumentException("Bad parameter: " + className + ", " + methodName);
System.out.println(method.getName() + "\t" + bf.join(methodArgs));
method.invoke(null,methodArgs);
}
}
private static Method tryMethod(String className, String methodName, String[] methodArgs)
throws IllegalAccessException, InvocationTargetException {
try {
Class foo = Class.forName(className);
Class[] parameterTypes = null;
if (methodArgs != null) {
parameterTypes = new Class[methodArgs.length];
for (int i = 0; i < methodArgs.length; ++i) {
parameterTypes[i] = String.class;
}
}
return foo.getDeclaredMethod(methodName,parameterTypes);
} catch (Exception e) {
return null;
}
}
}