private @Nullable ProblemDescriptor getAppendSubstringProblem(PsiMethodCallExpression call) {
      PsiExpression[] args = call.getArgumentList().getExpressions();
      PsiExpression stringExpression = call.getMethodExpression().getQualifierExpression();
      if (args.length == 1) {
        if (myInspection.ignoreSingleArgSubstring ||
            ExpressionUtils.isZero(args[0]) ||
            isLengthOf(args[0], stringExpression) ||
            !(PsiUtil.deparenthesizeExpression(stringExpression) instanceof PsiReferenceExpression)) {
          return null;
        }
      }
      else if (args.length == 2) {
        if (ExpressionUtils.isZero(args[0]) && isLengthOf(args[1], stringExpression) || isBetterWithCharAt(call)) {
          return null;
        }
      }
      PsiElement parent = PsiUtil.skipParenthesizedExprUp(call.getParent());
      if (parent instanceof PsiExpressionList list && list.getExpressionCount() == 1 &&
          parent.getParent() instanceof PsiMethodCallExpression parentCall && SINGLE_ARG_STRING_BUILDER_APPEND.test(parentCall)) {
        PsiElement nameElement = Objects.requireNonNull(call.getMethodExpression().getReferenceNameElement());
        return myManager.createProblemDescriptor(nameElement,
                                                 InspectionGadgetsBundle.message("inspection.redundant.string.call.message"),
                                                 new RemoveRedundantStringCallFix(nameElement.getText(), FixType.REPLACE_WITH_ARGUMENTS),
                                                 ProblemHighlightType.GENERIC_ERROR_OR_WARNING, myIsOnTheFly);
      }
      return null;
    }
private @Nullable ProblemDescriptor getAppendSubstringProblem(PsiMethodCallExpression call)