@Override
    public void visitMethodCallExpression(@NotNull PsiMethodCallExpression expression) {
      if (OBJECTS_CALL.test(expression)) {
        for (PsiExpression argument : expression.getArgumentList().getExpressions()) {
          PsiReferenceExpression fieldRef = ObjectUtils.tryCast(argument, PsiReferenceExpression.class);
          if (fieldRef == null || !myNonVisitedFields.remove(fieldRef.resolve())) {
            stopWalking();
            return;
          }
        }
        return;
      }

      PsiType expectedType = null;
      if (FLOAT_CALL.test(expression)) {
        expectedType = PsiTypes.floatType();
      }
      else if (DOUBLE_CALL.test(expression)) {
        expectedType = PsiTypes.doubleType();
      }
      if (expectedType != null) {
        PsiExpression[] expressions = expression.getArgumentList().getExpressions();
        if (expressions.length == 1) {
          PsiReferenceExpression refExpr = ObjectUtils.tryCast(expressions[0], PsiReferenceExpression.class);
          if (refExpr != null) {
            PsiField field = ObjectUtils.tryCast(refExpr.resolve(), PsiField.class);
            if (field != null && expectedType.equals(field.getType())) {
              myNonVisitedFields.remove(field);
              return;
            }
          }
        }
        stopWalking();
        return;
      }

      if (INSTANCE_CALL.test(expression)) {
        PsiExpression qualifier = expression.getMethodExpression().getQualifierExpression();
        PsiReferenceExpression fieldRef = ObjectUtils.tryCast(qualifier, PsiReferenceExpression.class);
        if (fieldRef != null) {
          PsiField field = ObjectUtils.tryCast(fieldRef.resolve(), PsiField.class);
          if (field != null) {
            myNonVisitedFields.remove(field);
            return;
          }
        }
      }
      stopWalking();
    }
@Override
    public void visitMethodCallExpression(@NotNull PsiMethodCallExpression expression)