本文整理匯總了Java中edu.umd.cs.findbugs.ba.jsr305.BackwardTypeQualifierDataflow類的典型用法代碼示例。如果您正苦於以下問題:Java BackwardTypeQualifierDataflow類的具體用法?Java BackwardTypeQualifierDataflow怎麽用?Java BackwardTypeQualifierDataflow使用的例子?那麽, 這裏精選的類代碼示例或許可以為您提供幫助。
BackwardTypeQualifierDataflow類屬於edu.umd.cs.findbugs.ba.jsr305包,在下文中一共展示了BackwardTypeQualifierDataflow類的1個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Java代碼示例。
示例1: checkDataflow
import edu.umd.cs.findbugs.ba.jsr305.BackwardTypeQualifierDataflow; //導入依賴的package包/類
private void checkDataflow(XMethod xmethod, CFG cfg, TypeQualifierValue typeQualifierValue,
ValueNumberDataflow vnaDataflow, ForwardTypeQualifierDataflow forwardDataflow,
BackwardTypeQualifierDataflow backwardDataflow) throws DataflowAnalysisException, CheckedAnalysisException {
for (Iterator<Location> i = cfg.locationIterator(); i.hasNext();) {
Location loc = i.next();
TypeQualifierValueSet forwardsFact = forwardDataflow.getFactAtLocation(loc);
TypeQualifierValueSet backwardsFact = backwardDataflow.getFactAfterLocation(loc);
if (!forwardsFact.isValid() || !backwardsFact.isValid()) {
continue;
}
if (DEBUG) {
checkLocation = "location " + loc.toCompactString();
}
checkForConflictingValues(xmethod, cfg, typeQualifierValue, forwardsFact, backwardsFact, loc,
loc, vnaDataflow.getFactAtLocation(loc));
checkForEqualityTest(xmethod, cfg, typeQualifierValue, forwardsFact, loc, vnaDataflow.getFactAtLocation(loc));
}
for (Iterator<Edge> i = cfg.edgeIterator(); i.hasNext();) {
Edge edge = i.next();
// NOTE: when checking forwards and backwards values on an edge,
// we don't want to apply BOTH edge transfer functions,
// since the purpose of the edge transfer function is to
// propagate information across phi nodes (effectively
// copying information about one value to another).
// Due to pruning of backwards values when a conflict is detected,
// we need to check backwards values as "early" as possible,
// meaning that we want to check at the edge target
// (before the backwards edge transfer function has pruned
// the backwards value.)
TypeQualifierValueSet forwardFact = forwardDataflow.getFactOnEdge(edge);
TypeQualifierValueSet backwardFact = backwardDataflow.getResultFact(edge.getTarget());
// The edge target location is where we can check
// for conflicting flow values.
Location edgeTargetLocation = getEdgeTargetLocation(cfg, edge);
ValueNumberFrame vnaFrame = (edgeTargetLocation != null) ? vnaDataflow.getFactAtLocation(edgeTargetLocation) : null;
// What location do we want to report to the user
// as where the conflict occurs?
// The edge source location is generally better,
// but edge target location is ok as a fallback.
Location locationToReport;
if (edge.getSource().getLastInstruction() != null) {
locationToReport = getEdgeSourceLocation(cfg, edge);
} else {
locationToReport = edgeTargetLocation;
}
checkForConflictingValues(xmethod, cfg, typeQualifierValue, forwardFact, backwardFact,
locationToReport, edgeTargetLocation, vnaFrame);
}
}