docs: @Override
      protected BackwardTypeQualifierDataflow getDataflow(DepthFirstSearch dfs, XMethod xmethod, CFG cfg,
              ValueNumberDataflow vnaDataflow, ConstantPoolGen cpg, IAnalysisCache analysisCache,
              MethodDescriptor methodDescriptor, TypeQualifierValue<?> typeQualifierValue) throws CheckedAnalysisException {
          ReverseDepthFirstSearch rdfs = analysisCache.getMethodAnalysis(ReverseDepthFirstSearch.class, methodDescriptor);
  
          BackwardTypeQualifierDataflowAnalysis analysis = new BackwardTypeQualifierDataflowAnalysis(dfs, rdfs, xmethod, cfg,
                  vnaDataflow, cpg, typeQualifierValue);
  
          // Get the corresponding forward dataflow.
          // We use it to halt tracking of backwards values once we know
          // that they encounter a conflicting forward value.
          ForwardTypeQualifierDataflowFactory forwardFactory = analysisCache.getMethodAnalysis(
                  ForwardTypeQualifierDataflowFactory.class, methodDescriptor);
          ForwardTypeQualifierDataflow forwardDataflow = forwardFactory.getDataflow(typeQualifierValue);
          analysis.setForwardTypeQualifierDataflow(forwardDataflow);
          analysis.registerSourceSinkLocations();
  
          BackwardTypeQualifierDataflow dataflow = new BackwardTypeQualifierDataflow(cfg, analysis);
  
          dataflow.execute();
          if (ClassContext.DUMP_DATAFLOW_ANALYSIS) {
              dataflow.dumpDataflow(analysis);
          }
          return dataflow;
      }