@Override
    public void visitMethodCallExpression(@NotNull PsiMethodCallExpression expression) {
      super.visitMethodCallExpression(expression);
      final PsiReferenceExpression methodExpression = expression.getMethodExpression();
      final String methodName = methodExpression.getReferenceName();
      final PsiExpressionList argumentList = expression.getArgumentList();
      if (HardcodedMethodConstants.HASH_CODE.equals(methodName)) {
        if (!argumentList.isEmpty()) return;
        final PsiExpression qualifier = methodExpression.getQualifierExpression();
        if (qualifier == null) return;
        final PsiType type = qualifier.getType();
        if (!(type instanceof PsiArrayType)) return;
        registerMethodCallError(expression, type, Kind.ARRAY_HASH_CODE);
      } else if ("hash".equals(methodName)) {
        if (argumentList.getExpressionCount() == 1) return;
        final PsiMethod method = expression.resolveMethod();
        if (method == null) {
          return;
        }
        final PsiClass containingClass = method.getContainingClass();
        if (containingClass == null || !CommonClassNames.JAVA_UTIL_OBJECTS.equals(containingClass.getQualifiedName())) {
          return;
        }
        final PsiExpression[] expressions = argumentList.getExpressions();
        for (PsiExpression arg : expressions) {
          final PsiType type = arg.getType();
          if (!(type instanceof PsiArrayType)) continue;
          registerError(arg, type, Kind.OBJECTS_HASH);
        }
      }
    }
@Override
    public void visitMethodCallExpression(@NotNull PsiMethodCallExpression expression)