public void buildMonitorFlags() { for (Statement st : stats) { st.buildMonitorFlags(); } switch (type) { case TYPE_BASICBLOCK: BasicBlockStatement bblock = (BasicBlockStatement) this; InstructionSequence seq = bblock.getBlock().getSeq(); if (seq != null && seq.length() > 0) { for (int i = 0; i < seq.length(); i++) { if (seq.getInstr(i).opcode == CodeConstants.opc_monitorexit) { containsMonitorExit = true; break; } } isMonitorEnter = (seq.getLastInstr().opcode == CodeConstants.opc_monitorenter); } break; case TYPE_SEQUENCE: case TYPE_IF: containsMonitorExit = false; for (Statement st : stats) { containsMonitorExit |= st.isContainsMonitorExit(); } break; case TYPE_SYNCRONIZED: case TYPE_ROOT: case TYPE_GENERAL: break; default: containsMonitorExit = false; for (Statement st : stats) { containsMonitorExit |= st.isContainsMonitorExit(); } } }