diff -r 77f7135b6eb1 -r 3ee23267706c javap/src/main/java/org/apidesign/javap/StackMapTableData.java --- a/javap/src/main/java/org/apidesign/javap/StackMapTableData.java Fri Nov 16 08:08:36 2012 +0100 +++ b/javap/src/main/java/org/apidesign/javap/StackMapTableData.java Thu Nov 29 20:19:00 2012 +0100 @@ -32,7 +32,7 @@ /* represents one entry of StackMapTable attribute */ -class StackMapTableData { +abstract class StackMapTableData { final int frameType; int offsetDelta; @@ -40,11 +40,26 @@ this.frameType = frameType; } + abstract int getStackItemsCount(); + static class SameFrame extends StackMapTableData { SameFrame(int frameType, int offsetDelta) { super(frameType); this.offsetDelta = offsetDelta; } + + @Override + int getStackItemsCount() { + return 0; + } + + @Override + public String toString() { + return "SAME" + + ((frameType == SAME_FRAME_EXTENDED) + ? "_FRAME_EXTENDED" : "") + + "(" + offsetDelta + ")"; + } } static class SameLocals1StackItem extends StackMapTableData { @@ -54,6 +69,19 @@ this.offsetDelta = offsetDelta; this.stack = stack; } + + @Override + int getStackItemsCount() { + return 1; + } + + @Override + public String toString() { + return "SAME_LOCALS_1_STACK_ITEM" + + ((frameType == SAME_LOCALS_1_STACK_ITEM_EXTENDED) + ? "_EXTENDED" : "") + + "(" + offsetDelta + ")"; + } } static class ChopFrame extends StackMapTableData { @@ -61,6 +89,16 @@ super(frameType); this.offsetDelta = offsetDelta; } + + @Override + int getStackItemsCount() { + return 0; + } + + @Override + public String toString() { + return "CHOP(" + offsetDelta + ")"; + } } static class AppendFrame extends StackMapTableData { @@ -70,6 +108,16 @@ this.offsetDelta = offsetDelta; this.locals = locals; } + + @Override + int getStackItemsCount() { + return 0; + } + + @Override + public String toString() { + return "APPEND(" + offsetDelta + ")"; + } } static class FullFrame extends StackMapTableData { @@ -81,6 +129,16 @@ this.locals = locals; this.stack = stack; } + + @Override + int getStackItemsCount() { + return stack.length; + } + + @Override + public String toString() { + return "FULL(" + offsetDelta + ")"; + } } static StackMapTableData getInstance(DataInputStream in, MethodData method)