else { count++; if (count > 10) stage = 0;
    public void sawOpcode(int seen) {	if (seen == MONITORENTER) sawMonitorEnter = true;	if (seen == GETFIELD || seen == GETSTATIC)  {		FieldAnnotation f = FieldAnnotation.fromReferencedField(this);		if (!sawMonitorEnter) {			fields.add(f);			startPC = getPC();			}		else if(fields.contains(f))			twice.add(f);		}	switch (stage) {	 case 0:		if (seen == IFNULL || seen == IFNONNULL) {			int b = getBranchOffset();			if (b > 0 && (seen == IFNONNULL || b < 10))				stage++;			}		count = 0;		break;	 case 1:		if (seen == MONITORENTER)  stage++;		else { 			count++;			if (count > 10) stage = 0;			}		break;	 case 2:		if ((seen == IFNULL || seen == IFNONNULL) && getBranchOffset() >= 0) {			endPC = getPC();			stage++;			}		else { 			count++;			if (count > 10) stage = 0;			}		break;	 case 3:		if (seen == PUTFIELD || seen == PUTSTATIC) {			FieldAnnotation f = FieldAnnotation.fromReferencedField(this);			if (twice.contains(f) && !getNameConstantOperand().startsWith("class$")					&& !getSigConstantOperand().equals("Ljava/lang/String;")) {				Field declaration = findField(getClassConstantOperand(), getNameConstantOperand());				/*				System.out.println(f);				System.out.println(declaration);				System.out.println(getSigConstantOperand());				*/				if (declaration == null || !declaration.isVolatile())				bugReporter.reportBug(new BugInstance("DC_DOUBLECHECK", NORMAL_PRIORITY)					.addClassAndMethod(this)					.addField(f).describe("FIELD_ON")					.addSourceLineRange(this, startPC, endPC));				stage++;				}			}		break;	default:	}	}