@Override
    public void visitMethodCallExpression(@NotNull PsiMethodCallExpression expression) {
      super.visitMethodCallExpression(expression);
      final PsiReferenceExpression methodExpression = expression.getMethodExpression();
      final String referenceName = methodExpression.getReferenceName();
      if (!logNames.contains(referenceName)) {
        return;
      }
      switch (warnLevel) {
        case 4:
          if ("debug".equals(referenceName)) return;
        case 3:
          if ("info".equals(referenceName)) return;
        case 2:
          if ("warn".equals(referenceName)) return;
        case 1:
          if ("error".equals(referenceName) || "fatal".equals(referenceName)) return;
      }
      final PsiMethod method = expression.resolveMethod();
      if (method == null) {
        return;
      }
      final PsiClass containingClass = method.getContainingClass();
      if (!InheritanceUtil.isInheritor(containingClass, SLF4J_LOGGER) &&
          !InheritanceUtil.isInheritor(containingClass, LOG4J_LOGGER) &&
          !InheritanceUtil.isInheritor(containingClass, LOG4J_BUILDER)) {
        return;
      }
      final PsiExpressionList argumentList = expression.getArgumentList();
      final PsiExpression[] arguments = argumentList.getExpressions();
      if (arguments.length == 0) {
        return;
      }

      LogConcatenationContext result = getLogConcatenationContext(arguments);
      if (result == null) return;

      registerMethodCallError(expression, result.problemType(), expression, result.argument());
    }
@Override
    public void visitMethodCallExpression(@NotNull PsiMethodCallExpression expression)