handleAccess(classContext, method, vnaDataflow.getFactAtLocation(location), !method.isStatic() ? vnaDataflow.getAnalysis().getThisValue() : null, lockDataflow.getFactAtLocation(location), xfield, location.getHandle(), isWrite, isLocal, cpg, lockedMethodSet);
if (xfield.isStatic() || xfield.isPublic() || xfield.isVolatile() || xfield.isFinal()) return;  ValueNumberFrame frame = vnaDataflow.getFactAtLocation(location); ValueNumber thisValue = !method.isStatic() ? vnaDataflow.getAnalysis().getThisValue() : null; LockSet lockSet = lockDataflow.getFactAtLocation(location); InstructionHandle handle = location.getHandle();       ValueNumber instance = frame.getInstance(handle.getInstruction(), cpg); boolean isLocked = lockSet.getLockCount(instance.getNumber()) > 0 || (lockedMethodSet.contains(method) && thisValue != null && thisValue.equals(instance));  int kind = 0; kind |= isLocked ? LOCKED : UNLOCKED; kind |= isWrite ? WRITE : READ;  if (DEBUG) System.out.println("IS2:\t" + SignatureConverter.convertMethodSignature(classContext.getMethodGen(method)) + "\t" + xfield + "\t" + ((isWrite ? "W" : "R") + "/" + (isLocked ? "L" : "U")));  FieldStats stats = getStats(xfield); stats.addAccess(kind);  if (isLocked && isLocal) stats.addLocalLock();  if (!isLocked) stats.addUnsyncAccess(classContext, method, handle);
			public void visitLocation(Location location) throws CFGBuilderException, DataflowAnalysisException {				try {					Instruction ins = location.getHandle().getInstruction();					XField xfield = null;					boolean isWrite = false;					boolean isLocal = false;					if (ins instanceof FieldInstruction) {						FieldInstruction fins = (FieldInstruction) ins;						xfield = Lookup.findXField(fins, cpg);						isWrite = ins.getOpcode() == Constants.PUTFIELD;						isLocal = fins.getClassName(cpg).equals(classContext.getJavaClass().getClassName());						if (DEBUG) System.out.println("Handling field access: " + location.getHandle() +							" (frame=" + vnaDataflow.getFactAtLocation(location) + ")");					} else if (ins instanceof INVOKESTATIC) {						INVOKESTATIC inv = (INVOKESTATIC) ins;						InnerClassAccess access = icam.getInnerClassAccess(inv, cpg);						if (access != null && access.getMethodSignature().equals(inv.getSignature(cpg))) {							xfield = access.getField();							isWrite = !access.isLoad();							isLocal = false;							if (DEBUG) System.out.println("Handling inner class access: " + location.getHandle() +								" (frame=" + vnaDataflow.getFactAtLocation(location) + ")");						}					}					if (xfield != null) {						handleAccess(classContext, method,							vnaDataflow.getFactAtLocation(location),							!method.isStatic() ? vnaDataflow.getAnalysis().getThisValue() : null,							lockDataflow.getFactAtLocation(location),							xfield, location.getHandle(), isWrite, isLocal, cpg,							lockedMethodSet);					}					// FIXME: should we do something for static fields?				} catch (ClassNotFoundException e) {					bugReporter.reportMissingClass(e);				}			}