當前位置: 首頁>>代碼示例>>Java>>正文


Java BackwardTypeQualifierDataflow類代碼示例

本文整理匯總了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);

    }
}
 
開發者ID:ytus,項目名稱:findbugs-all-the-bugs,代碼行數:60,代碼來源:CheckTypeQualifiers.java


注:本文中的edu.umd.cs.findbugs.ba.jsr305.BackwardTypeQualifierDataflow類示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。