if (DEBUG) {
System.out.println("RRR: " + f + " " + data.nullTested.contains(f) + " "
+ data.writtenInConstructorFields.contains(f) + " " + data.writtenNonNullFields.contains(f));
}
ProgramPoint p = new ProgramPoint(this);
Set<ProgramPoint> s = data.assumedNonNull.get(f);
if (s == null) {
s = Collections.singleton(p);
} else {
s = Util.addTo(s, p);
}
data.assumedNonNull.put(f, s);
if (DEBUG) {
System.out.println(f + " assumed non-null in " + getFullyQualifiedMethodName());
}
}
}
}
if (seen == ALOAD_1) {
count_aload_1++;
} else if (seen == GETFIELD || seen == GETSTATIC) {
XField f = XFactory.createReferencedXField(this);
pendingGetField = f;
if (getMethodName().equals("readResolve") && seen == GETFIELD) {
data.writtenFields.add(f);
data.writtenNonNullFields.add(f);
}
if (DEBUG) {
System.out.println("get: " + f);
}
if (data.writtenFields.contains(f)) {
data.fieldAccess.remove(f);
} else if (!data.fieldAccess.containsKey(f)) {
data.fieldAccess.put(f, SourceLineAnnotation.fromVisitedInstruction(this));
}
} else if ((seen == PUTFIELD || seen == PUTSTATIC) && !selfAssignment) {
XField f = XFactory.createReferencedXField(this);
OpcodeStack.Item item = null;
if (stack.getStackDepth() > 0) {
item = stack.getStackItem(0);
if (!item.isNull()) {
data.nullTested.add(f);
}
}
data.writtenFields.add(f);
boolean writtingNonNull = previousOpcode != ACONST_NULL || previousPreviousOpcode == GOTO;
if (writtingNonNull) {
data.writtenNonNullFields.add(f);
if (DEBUG) {
System.out.println("put nn: " + f);
}
} else if (DEBUG) {
System.out.println("put: " + f);
}
if (writtingNonNull && data.readFields.contains(f)) {
data.fieldAccess.remove(f);
} else if (!data.fieldAccess.containsKey(f)) {
data.fieldAccess.put(f, SourceLineAnnotation.fromVisitedInstruction(this));
}
boolean isConstructor = getMethodName().equals("<init>") || getMethodName().equals("<clinit>");
if (getMethod().isStatic() == f.isStatic()
&& (isConstructor || data.calledFromConstructors.contains(getMethodName() + ":" + getMethodSig())
|| getMethodName().equals("init") || getMethodName().equals("init")
|| getMethodName().equals("initialize") || getMethod().isPrivate())) {
if (isConstructor) {
data.writtenInConstructorFields.add(f);
if (f.getSignature().equals("Ljava/lang/ThreadLocal;") && item != null && item.isNewlyAllocated()) {
data.threadLocalAssignedInConstructor.put(f, new ProgramPoint(this));
}
} else {
data.writtenInInitializationFields.add(f);
}
if (writtingNonNull) {