@Override
    public UnconditionalValueDerefDataflow analyze(IAnalysisCache analysisCache, MethodDescriptor descriptor)
            throws CheckedAnalysisException {
        MethodGen methodGen = getMethodGen(analysisCache, descriptor);
        if (methodGen == null) {
            throw new MethodUnprofitableException(descriptor);
        }

        CFG cfg = getCFG(analysisCache, descriptor);

        ValueNumberDataflow vnd = getValueNumberDataflow(analysisCache, descriptor);

        UnconditionalValueDerefAnalysis analysis = new UnconditionalValueDerefAnalysis(getReverseDepthFirstSearch(analysisCache,
                descriptor), getDepthFirstSearch(analysisCache, descriptor), cfg, getMethod(analysisCache, descriptor),
                methodGen, vnd, getAssertionMethods(analysisCache, descriptor.getClassDescriptor()));

        IsNullValueDataflow inv = getIsNullValueDataflow(analysisCache, descriptor);
        // XXX: hack to clear derefs on not-null branches
        analysis.clearDerefsOnNonNullBranches(inv);

        TypeDataflow typeDataflow = getTypeDataflow(analysisCache, descriptor);
        // XXX: type analysis is needed to resolve method calls for
        // checking whether call targets unconditionally dereference parameters
        analysis.setTypeDataflow(typeDataflow);

        UnconditionalValueDerefDataflow dataflow = new UnconditionalValueDerefDataflow(cfg, analysis);
        dataflow.execute();
        if (ClassContext.DUMP_DATAFLOW_ANALYSIS) {
            dataflow.dumpDataflow(analysis);
        }
        if (UnconditionalValueDerefAnalysis.DEBUG) {
            ClassContext.dumpDataflowInformation(getMethod(analysisCache, descriptor), cfg, vnd, inv, dataflow, typeDataflow);
        }

        return dataflow;
    }
@ Override public UnconditionalValueDerefDataflow analyze ( IAnalysisCache analysisCache , MethodDescriptor descriptor ) throws CheckedAnalysisException { MethodGen methodGen = getMethodGen ( analysisCache , descriptor ) ; if ( methodGen == null ) { throw new MethodUnprofitableException ( descriptor ) ; } CFG cfg = getCFG ( analysisCache , descriptor ) ; ValueNumberDataflow vnd = getValueNumberDataflow ( analysisCache , descriptor ) ; UnconditionalValueDerefAnalysis analysis = new UnconditionalValueDerefAnalysis ( getReverseDepthFirstSearch ( analysisCache , descriptor ) , getDepthFirstSearch ( analysisCache , descriptor ) , cfg , getMethod ( analysisCache , descriptor ) , methodGen , vnd , getAssertionMethods ( analysisCache , descriptor . getClassDescriptor ( ) ) ) ; IsNullValueDataflow inv = getIsNullValueDataflow ( analysisCache , descriptor ) ; analysis . clearDerefsOnNonNullBranches ( inv ) ; TypeDataflow typeDataflow = getTypeDataflow ( analysisCache , descriptor ) ; analysis . setTypeDataflow ( typeDataflow ) ; UnconditionalValueDerefDataflow dataflow = new UnconditionalValueDerefDataflow ( cfg , analysis ) ; dataflow . execute ( ) ; if ( ClassContext . DUMP_DATAFLOW_ANALYSIS ) { dataflow . dumpDataflow ( analysis ) ; } if ( UnconditionalValueDerefAnalysis . DEBUG ) { ClassContext . dumpDataflowInformation ( getMethod ( analysisCache , descriptor ) , cfg , vnd , inv , dataflow , typeDataflow ) ; } return dataflow ; }
/*
(non-Javadoc)

@see
edu.umd.cs.findbugs.classfile.IAnalysisEngine#analyze(edu.umd.cs.findbugs
.classfile.IAnalysisCache, java.lang.Object)