.addMethod(methodGen)
.addMethod(methodGen, sourceFile)
		public void scanInstruction(InstructionHandle handle) {			Instruction ins = handle.getInstruction();			FieldAnnotation f;			switch (state) {			case START_STATE:				if ((f = FieldAnnotation.isRead(ins, cpg)) != null) {					if (DEBUG) debug(ins, "START -> GETFIELD1");					field = f;					state = GETFIELD1_STATE;					start = handle;				}				else if (DEBUG) debug(ins, "not a read!");				break;			case IFNULL1_STATE:				if (ins instanceof MONITORENTER) {					if (DEBUG) debug(ins, "IFNULL1 -> LOCK");					state = LOCK_STATE;				}				break;			case LOCK_STATE:				if ((f = FieldAnnotation.isRead(ins, cpg)) != null && f.equals(field)) {					if (DEBUG) debug(ins, "LOCK -> GETFIELD2");					state = GETFIELD2_STATE;					end = handle;				}				break;			case IFNULL2_STATE:				if ((f = FieldAnnotation.isWrite(ins, cpg)) != null && f.equals(field)) {					if (DEBUG) debug(ins, "IFNULL2 -> PUTFIELD");					state = PUTFIELD_STATE;				}				break;			case PUTFIELD_STATE:				if (ins instanceof MONITOREXIT) {					// That's it!					state = FINAL_STATE;					String bugType = field.isStatic() ? "SPDC_STATIC_DOUBLECHECK" : "SPDC_DOUBLECHECK";					bugReporter.reportBug(new BugInstance(bugType, NORMAL_PRIORITY)						.addClass(getJavaClass())						.addMethod(methodGen)						.addField(field)						.addSourceLine(methodGen, start, end)					);					break;				}			}		}