@Override
    public void visitMethodCallExpression(@NotNull PsiMethodCallExpression expression) {
      final PsiReferenceExpression methodExpression = expression.getMethodExpression();
      final String methodName = methodExpression.getReferenceName();
      final PsiExpressionList argumentList = expression.getArgumentList();
      final PsiExpression[] expressions = argumentList.getExpressions();
      if (!((expressions.length == 1 && HardcodedMethodConstants.HASH_CODE.equals(methodName)) ||
            (expressions.length == 2 && HardcodedMethodConstants.EQUALS.equals(methodName)))) {
        return;
      }
      final PsiExpression argument1 = expressions[0];
      final PsiType type1 = argument1.getType();
      if (!(type1 instanceof PsiArrayType)) {
        return;
      }
      final int dimensions = type1.getArrayDimensions();
      if (expressions.length == 2) {
        final PsiExpression argument2 = expressions[1];
        final PsiType type2 = argument2.getType();
        if (!(type2 instanceof PsiArrayType)) {
          return;
        }
        if (dimensions != type2.getArrayDimensions()) {
          return;
        }
      }
      final PsiMethod method = expression.resolveMethod();
      if (method == null) {
        return;
      }
      final PsiClass containingClass = method.getContainingClass();
      if (containingClass == null) {
        return;
      }
      final Kind kind = getKind(containingClass.getQualifiedName(), methodName, dimensions);
      if (kind == null) {
        return;
      }
      registerMethodCallError(expression, kind);
    }
@Override
    public void visitMethodCallExpression(@NotNull PsiMethodCallExpression expression)