private void sawOpcodeLoop ( final int seen ) { try { stack . mergeJumps ( this ) ; switch ( state ) { case SAW_NOTHING : if ( ( seen == Const . IINC ) && ( getIntConstant ( ) == 1 ) ) { loopReg = getRegisterOperand ( ) ; state = State . SAW_IINC ; } break ; case SAW_IINC : if ( ( seen == Const . GOTO ) || ( seen == Const . GOTO_W ) ) { int branchTarget = getBranchTarget ( ) ; int pc = getPC ( ) ; if ( branchTarget < pc ) { possibleForLoops . add ( new ForLoop ( branchTarget , pc , loopReg ) ) ; } } state = State . SAW_NOTHING ; break ; } if ( ( seen == Const . INVOKEINTERFACE ) && Values . SLASHED_JAVA_UTIL_LIST . equals ( getClassConstantOperand ( ) ) && "size" . equals ( getNameConstantOperand ( ) ) && SignatureBuilder . SIG_VOID_TO_INT . equals ( getSigConstantOperand ( ) ) ) { sawListSize = true ; } } finally { stack . sawOpcode ( this , seen ) ; } }
the first pass of the method opcode to collet for loops information