static HighlightInfo.Builder checkConstructorCallProblems(@NotNull PsiMethodCallExpression methodCall) {
    if (!JavaPsiConstructorUtil.isConstructorCall(methodCall)) return null;
    PsiMethod method = PsiTreeUtil.getParentOfType(methodCall, PsiMethod.class, true, PsiClass.class, PsiLambdaExpression.class);
    PsiReferenceExpression expression = methodCall.getMethodExpression();
    if (method == null || !method.isConstructor()) {
      String message = JavaErrorBundle.message("constructor.call.only.allowed.in.constructor", expression.getText() + "()");
      return HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).range(methodCall).descriptionAndTooltip(message);
    }
    PsiMethodCallExpression constructorCall = JavaPsiConstructorUtil.findThisOrSuperCallInConstructor(method);
    if (constructorCall != methodCall) {
      return HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).range(methodCall).descriptionAndTooltip(
        JavaErrorBundle.message("only.one.constructor.call.allowed.in.constructor", expression.getText() + "()"));
    }
    PsiElement codeBlock = methodCall.getParent().getParent();
    if (codeBlock instanceof PsiCodeBlock) {
      PsiMethod ctor = tryCast(codeBlock.getParent(), PsiMethod.class);
      if (ctor != null && ctor.isConstructor()) {
        if (JavaPsiRecordUtil.isCompactConstructor(ctor) ||
            JavaPsiRecordUtil.isExplicitCanonicalConstructor(ctor)) {
          String message = JavaErrorBundle.message("record.constructor.call.in.canonical");
          return HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).range(methodCall).descriptionAndTooltip(message);
        }
        PsiElement prevSibling = methodCall.getParent().getPrevSibling();
        while (true) {
          if (prevSibling == null) return null;
          if (prevSibling instanceof PsiStatement) break;
          prevSibling = prevSibling.getPrevSibling();
        }
      }
    }
    if (!(codeBlock instanceof PsiCodeBlock) || !(codeBlock.getParent() instanceof PsiMethod)) {
      String message = JavaErrorBundle.message("constructor.call.must.be.top.level.statement", expression.getText() + "()");
      return HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).range(methodCall).descriptionAndTooltip(message);
    }
    String message = JavaErrorBundle.message("constructor.call.must.be.first.statement", expression.getText() + "()");
    return HighlightUtil.checkFeature(methodCall, JavaFeature.STATEMENTS_BEFORE_SUPER, PsiUtil.getLanguageLevel(methodCall),
                                      methodCall.getContainingFile(), message, HighlightInfoType.ERROR);
  }
static HighlightInfo.Builder checkConstructorCallProblems(@NotNull PsiMethodCallExpression methodCall)