# HG changeset patch # User Jaroslav Tulach # Date 1357579621 -3600 # Node ID c91483c86597836e29d312ac9a47171da76fc9b5 # Parent 777b9b841f1519a570988e400e3cbb1fdfadd5ad @Compare method can throw exceptions diff -r 777b9b841f15 -r c91483c86597 emul/src/main/java/java/lang/reflect/Method.java --- a/emul/src/main/java/java/lang/reflect/Method.java Mon Jan 07 17:22:59 2013 +0100 +++ b/emul/src/main/java/java/lang/reflect/Method.java Mon Jan 07 18:27:01 2013 +0100 @@ -512,6 +512,9 @@ throws IllegalAccessException, IllegalArgumentException, InvocationTargetException { + if ((getModifiers() & Modifier.STATIC) == 0 && obj == null) { + throw new NullPointerException(); + } Object res = invoke0(this, obj, args); if (getReturnType().isPrimitive()) { res = fromPrimitive(getReturnType(), res); @@ -547,7 +550,9 @@ if (type == Short.TYPE) { return fromRaw(Short.class, "valueOf__Ljava_lang_Short_2S", o); } -// case 'V': return Void.TYPE; + if (type.getName().equals("void")) { + return null; + } throw new IllegalStateException("Can't convert " + o); } diff -r 777b9b841f15 -r c91483c86597 launcher/src/main/java/org/apidesign/bck2brwsr/launcher/Console.java --- a/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/Console.java Mon Jan 07 17:22:59 2013 +0100 +++ b/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/Console.java Mon Jan 07 18:27:01 2013 +0100 @@ -161,10 +161,14 @@ } Object res; if (found != null) { - if ((found.getModifiers() & Modifier.STATIC) != 0) { - res = found.invoke(null); - } else { - res = found.invoke(c.newInstance()); + try { + if ((found.getModifiers() & Modifier.STATIC) != 0) { + res = found.invoke(null); + } else { + res = found.invoke(c.newInstance()); + } + } catch (Exception ex) { + res = ex.getClass().getName() + ":" + ex.getMessage(); } } else { res = "Can't find method " + method + " in " + clazz; diff -r 777b9b841f15 -r c91483c86597 vmtest/src/main/java/org/apidesign/bck2brwsr/vmtest/impl/Bck2BrwsrCase.java --- a/vmtest/src/main/java/org/apidesign/bck2brwsr/vmtest/impl/Bck2BrwsrCase.java Mon Jan 07 17:22:59 2013 +0100 +++ b/vmtest/src/main/java/org/apidesign/bck2brwsr/vmtest/impl/Bck2BrwsrCase.java Mon Jan 07 18:27:01 2013 +0100 @@ -20,6 +20,7 @@ import java.io.File; import java.io.FileWriter; import java.io.IOException; +import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Map; import java.util.WeakHashMap; @@ -52,7 +53,12 @@ MethodInvocation c = l.invokeMethod(m.getDeclaringClass(), m.getName()); value = c.toString(); } else { - value = m.invoke(m.getDeclaringClass().newInstance()); + try { + value = m.invoke(m.getDeclaringClass().newInstance()); + } catch (InvocationTargetException ex) { + Throwable t = ex.getTargetException(); + value = t.getClass().getName() + ":" + t.getMessage(); + } } } diff -r 777b9b841f15 -r c91483c86597 vmtest/src/test/java/org/apidesign/bck2brwsr/tck/CloneTest.java --- a/vmtest/src/test/java/org/apidesign/bck2brwsr/tck/CloneTest.java Mon Jan 07 17:22:59 2013 +0100 +++ b/vmtest/src/test/java/org/apidesign/bck2brwsr/tck/CloneTest.java Mon Jan 07 18:27:01 2013 +0100 @@ -28,12 +28,9 @@ public class CloneTest { private int value; - @Compare public Object notSupported() { - try { - return this.clone(); - } catch (CloneNotSupportedException ex) { - return ex.getClass().getName() + ":" + ex.getMessage(); - } + @Compare + public Object notSupported() throws CloneNotSupportedException { + return this.clone(); } @Compare public String sameClass() throws CloneNotSupportedException { diff -r 777b9b841f15 -r c91483c86597 vmtest/src/test/java/org/apidesign/bck2brwsr/tck/ReflectionTest.java --- a/vmtest/src/test/java/org/apidesign/bck2brwsr/tck/ReflectionTest.java Mon Jan 07 17:22:59 2013 +0100 +++ b/vmtest/src/test/java/org/apidesign/bck2brwsr/tck/ReflectionTest.java Mon Jan 07 18:27:01 2013 +0100 @@ -39,6 +39,10 @@ return Integer.TYPE.toString(); } + @Compare public String voidType() throws Exception { + return void.class.toString(); + } + @Compare public String longClass() { return long.class.toString(); } @@ -56,6 +60,15 @@ return sb.toString(); } + @Compare public String cannotCallNonStaticMethodWithNull() throws Exception { + try { + StaticUse.class.getMethod("instanceMethod").invoke(null); + return "should not happen"; + } catch (Exception ex) { + return ex.getClass().getName() + ":" + ex.getMessage(); + } + } + @Compare public String newInstanceFails() throws InstantiationException { try { return "success: " + StaticUse.class.newInstance(); diff -r 777b9b841f15 -r c91483c86597 vmtest/src/test/java/org/apidesign/bck2brwsr/tck/StaticUse.java --- a/vmtest/src/test/java/org/apidesign/bck2brwsr/tck/StaticUse.java Mon Jan 07 17:22:59 2013 +0100 +++ b/vmtest/src/test/java/org/apidesign/bck2brwsr/tck/StaticUse.java Mon Jan 07 18:27:01 2013 +0100 @@ -21,4 +21,8 @@ public static final Object NON_NULL = new Object(); private StaticUse() { } + + public int instanceMethod() { + return 0; + } }