< prev index next >

test/java/lang/StackWalker/Basic.java

Print this page

        

*** 72,81 **** --- 72,116 ---- ConstructorNewInstance.class.getName()+"::create", Basic.class.getName()+"::testWalkFromConstructor"), found); } + @Test + public static void testMethodDescriptor() { + List<StackFrame> frames = new StackBuilder(16, 16).build(); + for (StackFrame f : frames) { + System.out.format("%s.%s %s%n", f.getClassName(), f.getMethodName(), + f.getMethodDescriptor()); + switch (f.getMethodName()) { + case "m1": + if (!f.getMethodDescriptor().equals("()V")) { + throw new RuntimeException("unexpected m1 descriptor: " + + f.getMethodDescriptor()); + } + break; + case "m2": + if (!f.getMethodDescriptor().equals("()Ljava/util/List;")) { + throw new RuntimeException("unexpected m2 descriptor: " + + f.getMethodDescriptor()); + } + break; + case "m3": + if (!f.getMethodDescriptor().equals("()I")) { + throw new RuntimeException("unexpected m3 descriptor: " + + f.getMethodDescriptor()); + } + break; + case "m4": + if (!f.getMethodDescriptor().equals("(Ljava/lang/Object;)V")) { + throw new RuntimeException("unexpected m3 descriptor: " + + f.getMethodDescriptor()); + } + break; + } + } + } + private final int depth; Basic(int depth) { this.depth = depth; }
*** 130,140 **** public static ConstructorNewInstance create() throws Exception { return ConstructorNewInstance.class.getConstructor().newInstance(); } } ! class StackBuilder { private final int stackDepth; private final int limit; private int depth = 0; private List<StackFrame> result; StackBuilder(int stackDepth, int limit) { --- 165,175 ---- public static ConstructorNewInstance create() throws Exception { return ConstructorNewInstance.class.getConstructor().newInstance(); } } ! static class StackBuilder { private final int stackDepth; private final int limit; private int depth = 0; private List<StackFrame> result; StackBuilder(int stackDepth, int limit) {
*** 148,166 **** } void m1() { trace("m1"); m2(); } ! void m2() { trace("m2"); m3(); } ! void m3() { trace("m3"); ! m4(); } ! void m4() { trace("m4"); int remaining = stackDepth-depth-1; if (remaining >= 4) { m1(); } else { --- 183,203 ---- } void m1() { trace("m1"); m2(); } ! List m2() { trace("m2"); m3(); + return null; } ! int m3() { trace("m3"); ! m4(null); ! return 0; } ! void m4(Object o) { trace("m4"); int remaining = stackDepth-depth-1; if (remaining >= 4) { m1(); } else {
< prev index next >