< 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 >