addUnsyncAccess(stats, methodGen, handle);
	public void visitInstruction(InstructionHandle handle, BasicBlock bb, MethodGen methodGen) {		try {			if (inConstructor) throw new IllegalStateException("visiting instruction in constructor!");			// Special case: if this is a private method whose callers			// always hold a lock, then its accesses are also locked.			boolean callerAlwaysLocked = lockedPrivateMethods.contains(methodGen);			ConstantPoolGen cpg = methodGen.getConstantPool();			Instruction ins = handle.getInstruction();			FieldAnnotation field;			if ((field = FieldAnnotation.isRead(ins, cpg)) != null) {				FieldStats stats = getStats(field);				LockCount lockCount = getLockCount(dataflow, handle, bb);				if (lockCount.getCount() > 0 || callerAlwaysLocked) {					if (DEBUG) debug(field, methodGen, "R/L");					stats.nReadLocked++;					if (isLocal(field))						localLocks.add(field);				} else if (lockCount.getCount() == 0) {					if (DEBUG) debug(field, methodGen, "R/U");					stats.nReadUnlocked++;				}			} else if ((field = FieldAnnotation.isWrite(ins, cpg)) != null) {				writtenOutsideOfConstructor.add(field);				FieldStats stats = getStats(field);				LockCount lockCount = getLockCount(dataflow, handle, bb);				if (lockCount.getCount() > 0 || callerAlwaysLocked) {					if (DEBUG) debug(field, methodGen, "W/L");					stats.nWriteLocked++;					if (isLocal(field))						localLocks.add(field);				} else if (lockCount.getCount() == 0) {					if (DEBUG) debug(field, methodGen, "W/U");					stats.nWriteUnlocked++;				}			}		} catch (DataflowAnalysisException e) {			throw new AnalysisException(e.getMessage());		}	}