DataFlowInstructionVisitor (PsiElement scope, ProblemsHolder holder, StandardDataFlowRunner dfaRunner, Collection<? extends DfaMemoryState> initialStates) { DataFlowInstructionVisitor visitor = new DataFlowInstructionVisitor(TREAT_UNKNOWN_MEMBERS_AS_NULLABLE); ControlFlow flow = dfaRunner.buildFlow(scope); if (flow == null) return visitor; visitor.initInstanceOf(flow.getInstructions()); RunnerResult rc = dfaRunner.analyzeFlow(scope, visitor, initialStates, flow); if (rc == RunnerResult.OK) { if (dfaRunner.wasForciblyMerged() && (ApplicationManager.getApplication().isUnitTestMode() || Registry.is("ide.dfa.report.imprecise"))) { reportAnalysisQualityProblem(holder, scope, "dataflow.not.precise"); } createDescription(holder, visitor, scope, flow.getInstructions()); dfaRunner.forNestedClosures((closure, states) -> analyzeDfaWithNestedClosures(closure, holder, dfaRunner, states)); } else if (rc == RunnerResult.TOO_COMPLEX) { reportAnalysisQualityProblem(holder, scope, "dataflow.too.complex"); } return visitor; }