if (!sawMonitorEnter) fields.add(f);
if (!sawMonitorEnter) { fields.add(f); startPC = PC; }
    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);		else if(fields.contains(f))			twice.add(f);		}	switch (stage) {	 case 0:		if (seen == IFNULL || seen == IFNONNULL) 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) {			stage++;			}		else { 			count++;			if (count > 10) stage = 0;			}		break;	 case 3:		if (seen == PUTFIELD || seen == PUTSTATIC) {			FieldAnnotation f = FieldAnnotation.fromReferencedField(this);			if (fields.contains(f) && !nameConstant.startsWith("class$")) {				bugReporter.reportBug(new BugInstance("DC_DOUBLECHECK", NORMAL_PRIORITY)					.addClassAndMethod(this)					.addField(f));				stage++;				}			}		break;	default:	}	}