private void processFieldsViaDfa(PsiElement body, ProblemsHolder holder) {
    DfaValueFactory factory = new DfaValueFactory(holder.getProject());
    var flow = ControlFlowAnalyzer.buildFlow(body, factory, true);
    Set<AssignInstruction> variables = OverwrittenFieldAnalyzer.getOverwrittenFields(flow);
    for (AssignInstruction instruction : variables) {
      DfaValue value = instruction.getAssignedValue();
      if (!(value instanceof DfaVariableValue)) continue;
      PsiField field = ObjectUtils.tryCast(((DfaVariableValue)value).getPsiVariable(), PsiField.class);
      if (field == null) continue;
      PsiExpression lExpression = instruction.getLExpression();
      PsiExpression expression = instruction.getRExpression();
      if (lExpression == null) continue;
      PsiElement parent = PsiUtil.skipParenthesizedExprUp(lExpression.getParent());
      if (parent instanceof PsiPrefixExpression && REPORT_PREFIX_EXPRESSIONS ||
          parent instanceof PsiPostfixExpression && REPORT_POSTFIX_EXPRESSIONS) {
        holder.registerProblem(parent, JavaBundle.message("inspection.unused.assignment.problem.descriptor4"));
      }
      else if (parent instanceof PsiAssignmentExpression) {
        if (expression instanceof PsiArrayInitializerExpression ||
            expression instanceof PsiNewExpression && ((PsiNewExpression)expression).getArrayInitializer() != null) {
          // Due to implementation quirk, array initializers are reassigned in CFG, so false warnings appear there
          continue;
        }
        reportAssignmentProblem((PsiAssignmentExpression)parent, holder);
      }
    }
  }
private void processFieldsViaDfa(PsiElement body, ProblemsHolder holder)