1.1 --- a/boot/src/main/java/org/apidesign/html/boot/impl/FnUtils.java Tue Jun 25 15:34:37 2013 +0200
1.2 +++ b/boot/src/main/java/org/apidesign/html/boot/impl/FnUtils.java Tue Jun 25 21:09:48 2013 +0200
1.3 @@ -26,17 +26,14 @@
1.4 import java.util.Collections;
1.5 import java.util.Enumeration;
1.6 import java.util.List;
1.7 -import java.util.logging.Level;
1.8 -import java.util.logging.Logger;
1.9 -import java.util.regex.Pattern;
1.10 import org.apidesign.html.boot.spi.Fn;
1.11 +import org.objectweb.asm.Type;
1.12
1.13 /**
1.14 *
1.15 * @author Jaroslav Tulach <jtulach@netbeans.org>
1.16 */
1.17 public final class FnUtils {
1.18 -
1.19 private FnUtils() {
1.20 }
1.21
1.22 @@ -104,10 +101,15 @@
1.23
1.24 String fqn = body.substring(next + 2, colon4);
1.25 String method = body.substring(colon4 + 2, sigBeg);
1.26 - String params = body.substring(sigBeg + 1, sigEnd);
1.27 + String params = body.substring(sigBeg, sigEnd + 1);
1.28
1.29 Class<?> clazz = Class.forName(fqn, false, loader);
1.30 - Method m = clazz.getMethod(method);
1.31 + final Type[] argTps = Type.getArgumentTypes(params);
1.32 + Class<?>[] argCls = new Class<?>[argTps.length];
1.33 + for (int i = 0; i < argCls.length; i++) {
1.34 + argCls[i] = toClass(argTps[i], loader);
1.35 + }
1.36 + Method m = clazz.getMethod(method, argCls);
1.37
1.38 sb.append("['").append(m.getName()).append("(");
1.39 String sep = "";
1.40 @@ -121,5 +123,27 @@
1.41 }
1.42 }
1.43
1.44 + private static Class<?> toClass(final Type t, ClassLoader loader) throws ClassNotFoundException {
1.45 + if (t == Type.INT_TYPE) {
1.46 + return Integer.TYPE;
1.47 + } else if (t == Type.VOID_TYPE) {
1.48 + return Void.TYPE;
1.49 + } else if (t == Type.BOOLEAN_TYPE) {
1.50 + return Boolean.TYPE;
1.51 + } else if (t == Type.BYTE_TYPE) {
1.52 + return Byte.TYPE;
1.53 + } else if (t == Type.CHAR_TYPE) {
1.54 + return Character.TYPE;
1.55 + } else if (t == Type.SHORT_TYPE) {
1.56 + return Short.TYPE;
1.57 + } else if (t == Type.DOUBLE_TYPE) {
1.58 + return Double.TYPE;
1.59 + } else if (t == Type.FLOAT_TYPE) {
1.60 + return Float.TYPE;
1.61 + } else if (t == Type.LONG_TYPE) {
1.62 + return Long.TYPE;
1.63 + }
1.64 + return Class.forName(t.getClassName(), false, loader);
1.65 + }
1.66
1.67 }