@Override
    public void visitMethodCallExpression(@NotNull PsiMethodCallExpression expression) {
      final PsiMethod method = expression.resolveMethod();
      if (method == null) {
        return;
      }
      List<StandardMethodContract> contracts = JavaMethodContractUtil.getMethodContracts(method);
      ContractReturnValue contractValue = JavaMethodContractUtil.getNonFailingReturnValue(contracts);
      if (ContractReturnValue.returnNew().equals(contractValue)) {
        if (!isInsideEqualsOrHashCode(expression)) {
          return;
        }
        registerMethodCallError(expression, expression);
      }
      else if (method.isVarArgs()) {
        if (!isInsideEqualsOrHashCode(expression)) {
          return;
        }
        registerMethodCallError(expression, expression, "varargs call");
      }
      else {
        if (!"valueOf".equals(method.getName())) {
          return;
        }
        final PsiExpression[] expressions = expression.getArgumentList().getExpressions();
        if (expressions.length != 1) {
          return;
        }
        final PsiClass aClass = method.getContainingClass();
        if (aClass == null) {
          return;
        }
        final String qualifiedName = aClass.getQualifiedName();
        if (CommonClassNames.JAVA_LANG_SHORT.equals(qualifiedName) ||
            CommonClassNames.JAVA_LANG_INTEGER.equals(qualifiedName) ||
            CommonClassNames.JAVA_LANG_LONG.equals(qualifiedName) ||
            CommonClassNames.JAVA_LANG_CHARACTER.equals(qualifiedName)) {
          if (isAutoBoxingFromCache(expressions[0]) || !isInsideEqualsOrHashCode(expression)) {
            return;
          }
          registerError(expression, expression);
        }
      }
    }
@Override
    public void visitMethodCallExpression(@NotNull PsiMethodCallExpression expression)