Set<SourceSinkInfo> sourceSet = forwardDataflow.getAnalysis().getSourceSinkInfoSet(location);
for (SourceSinkInfo source : sourceSet) {
ValueNumber vn = source.getValueNumber();
TypeQualifierValueSet backwardsFact = backwardDataflow.getFactAtLocation(location);
FlowValue backwardsFlowValue = backwardsFact.getValue(vn);
if (!(backwardsFlowValue == FlowValue.ALWAYS || backwardsFlowValue == FlowValue.NEVER)) {
continue;
}
if (DEBUG) {
System.out.println("Checking value source at " + location.toCompactString() + " for " + typeQualifierValue);
System.out.println(" back=" + backwardsFact);
System.out.println(" source=" + source);
}
// Check to see if this warning has already been reported
// because
// the dataflow values conflict directly with each other.
TypeQualifierValueSet forwardsFact = forwardDataflow.getFactAfterLocation(location);
FlowValue forwardsFlowValue = forwardsFact.getValue(vn);
if (FlowValue.valuesConflict(typeQualifierValue.isStrictQualifier() && !xMethod.isIdentity(), forwardsFlowValue, backwardsFlowValue)) {
continue;
}
if (FlowValue.backwardsValueConflictsWithSource(backwardsFlowValue, source, typeQualifierValue, xMethod.isIdentity())) {