Buggy code:
) ) ; } final ILocalVariableTypeTableAttribute localVariableTypeAttribute = ( ( ILocalVariableTypeTableAttribute ) ( getAttribute ( IAttributeNamesConstants . LOCAL_VARIABLE_TYPE_TABLE , codeAttribute ) ) ) ; final int localVariableTypeTableLength = ( localVariableTypeAttribute == null ) ? 0 : localVariableTypeAttribute . getLocalVariableTypeTableLength ( ) ; if ( localVariableTypeTableLength != 0 ) { int tabNumberForLocalVariableAttribute = tabNumber + 2 ; if ( ! isFirstAttribute ) { writeNewLine ( buffer , lineSeparator , tabNumberForLocalVariableAttribute ) ; } else { isFirstAttribute = false ; dumpTab ( tabNumberForLocalVariableAttribute , buffer ) ; } buffer . append ( Messages . disassembler_localvariabletypetableattributeheader ) ; writeNewLine ( buffer , lineSeparator , ( tabNumberForLocalVariableAttribute + 1 ) ) ; ILocalVariableTypeTableEntry [ ] localVariableTypeTableEntries = localVariableTypeAttribute . getLocalVariableTypeTable ( ) ; for ( int i = 0 ; i < ( localVariableTypeTableLength - 1 ) ; i ++ ) { ILocalVariableTypeTableEntry localVariableTypeTableEntry = localVariableTypeTableEntries [ i ] ; int index = localVariableTypeTableEntry . getIndex ( ) ; int startPC = localVariableTypeTableEntry . getStartPC ( ) ; int length = localVariableTypeTableEntry . getLength ( ) ; final char [ ] typeName = Signature . toCharArray ( localVariableTypeTableEntry . getSignature ( ) ) ; CharOperation . replace ( typeName , '//' , '.' ) ; buffer . append ( Messages . bind ( Messages . classfileformat_localvariabletableentry , new String [ ] { Integer . toString ( startPC ) , Integer . toString ( ( startPC + length ) ) , new String ( localVariableTypeTableEntry . getName ( ) ) , Integer . toString ( index ) , new String ( returnClassName ( typeName , '.' , mode ) ) } ) ) ; writeNewLine ( buffer , lineSeparator , ( tabNumberForLocalVariableAttribute + 1 ) ) ; } ILocalVariableTypeTableEntry localVariableTypeTableEntry = localVariableTypeTableEntries [ ( localVariableTypeTableLength - 1 ) ] ; int index = localVariableTypeTableEntry . getIndex ( ) ; int startPC = localVariableTypeTableEntry . getStartPC ( ) ; int length = localVariableTypeTableEntry . getLength ( ) ; final char [ ] typeName = Signature . toCharArray ( localVariableTypeTableEntry . getSignature ( ) ) ; CharOperation . replace ( typeName , '//' , '.' ) ; buffer . append ( Messages . bind ( Messages . classfileformat_localvariabletableentry , new String [ ] { Integer . toString ( startPC ) , Integer . toString ( ( startPC + length ) ) , new String ( localVariableTypeTableEntry . getName ( ) ) , Integer . toString ( index ) , new String ( returnClassName ( typeName , '.' , mode ) ) } ) ) ; } final int length = codeAttribute . getAttributesCount ( ) ; if ( length != 0 ) { IClassFileAttribute [ ] attributes = codeAttribute . getAttributes ( ) ; for ( int i = 0 ; i < length ; i ++ ) { IClassFileAttribute attribute = attributes [ i ] ; if ( CharOperation . equals ( attribute . getAttributeName ( ) , IAttributeNamesConstants . STACK_MAP_TABLE ) ) { IStackMapTableAttribute stackMapTableAttribute = ( ( IStackMapTableAttribute ) ( attribute ) ) ; if ( ! isFirstAttribute ) { writeNewLine ( buffer , lineSeparator , ( tabNumber + 2 ) ) ; } else { isFirstAttribute = false ; dumpTab ( ( tabNumber + 1 ) , buffer ) ; } int numberOfEntries = stackMapTableAttribute . getNumberOfEntries ( ) ; buffer . append ( Messages . bind ( Messages . disassembler_stackmaptableattributeheader , Integer . toString ( numberOfEntries ) ) ) ; if ( numberOfEntries != 0 ) { writeNewLine ( buffer , lineSeparator , ( tabNumber + 3 ) ) ; final IStackMapFrame [ ] stackMapFrames = stackMapTableAttribute . getStackMapFrame ( ) ; for ( int j = 0 ; j < numberOfEntries ; j ++ ) { <START_BUG> disassemble ( stackMapFrames [ j ] , buffer , lineSeparator , ( tabNumber + 2 ) , mode ) ; <END_BUG> } } } else if ( ( ( attribute != lineNumberAttribute ) && ( attribute != localVariableAttribute ) ) && ( attribute != localVariableTypeAttribute ) ) { if ( ! isFirstAttribute ) { writeNewLine ( buffer , lineSeparator , ( tabNumber + 2 ) ) ; } else { isFirstAttribute = false ; dumpTab ( ( tabNumber + 1 ) , buffer ) ; } buffer . append ( Messages . bind ( Messages . disassembler_genericattributeheader , new String [ ] { new String ( attribute . getAttributeName ( ) ) , Long . toString ( attribute . getAttributeLength ( ) ) } ) ) ; } } } } private void disassemble ( IConstantPool constantPool , StringBuffer buffer , String lineSeparator , int tabNumber ) { } private void disassemble ( IEnclosingMethodAttribute enclosingMethodAttribute , StringBuffer buffer , String lineSeparator , int tabNumber ) { } private void disassembleEnumConstants ( IFieldInfo fieldInfo , StringBuffer buffer , String lineSeparator , int tabNumber , char [ ] [ ] argumentTypes , int mode ) { } private void disassemble ( IFieldInfo fieldInfo , StringBuffer buffer , String lineSeparator , int tabNumber , int mode ) { } private void disassemble ( IInnerClassesAttribute innerClassesAttribute , StringBuffer buffer , String lineSeparator , int tabNumber ) { } private void disassemble ( int index , IParameterAnnotation parameterAnnotation , StringBuffer buffer , String lineSeparator , int tabNumber ) { } private void disassemble ( IRuntimeInvisibleAnnotationsAttribute runtimeInvisibleAnnotationsAttribute , StringBuffer buffer , String lineSeparator , int tabNumber ) { } private void disassemble ( IRuntimeInvisibleParameterAnnotationsAttribute runtimeInvisibleParameterAnnotationsAttribute , StringBuffer buffer , String lineSeparator , int tabNumber ) { } private void disassemble ( IRuntimeVisibleAnnotationsAttribute runtimeVisibleAnnotationsAttribute , StringBuffer buffer , String lineSeparator , int tabNumber ) { } private void disassemble ( IRuntimeVisibleParameterAnnotationsAttribute runtimeVisibleParameterAnnotationsAttribute , StringBuffer buffer , String lineSeparator , int tabNumber ) { } private String disassemble ( IVerificationTypeInfo [ ] infos , String lineSeparator , int tabNumber , int mode ) { } private void disassemble ( IStackMapFrame frame , StringBuffer buffer , String lineSeparator , int tabNumber , int mode ) { }

Fix:
disassemble ( stackMapFrames [ j ] , buffer , lineSeparator , ( tabNumber + 3 ) , mode ) ;