private void process(PsiExpression reference) {
      PsiMethodCallExpression qualifiedCall = ExpressionUtils.getCallForQualifier(reference);
      if (qualifiedCall != null) {
        processQualifiedCall(qualifiedCall);
        return;
      }
      if (ExpressionUtils.isVoidContext(reference)) {
        return;
      }
      PsiElement parent = reference.getParent();
      if (parent instanceof PsiExpressionList args && args.getParent() instanceof PsiCallExpression surroundingCall) {
        if (surroundingCall instanceof PsiMethodCallExpression methodCall && processCollectionMethods(methodCall, reference)) {
          return;
        }
        makeQueried();
        if (!isQueryMethod(surroundingCall) && !COLLECTION_SAFE_ARGUMENT_METHODS.matches(surroundingCall)) {
          makeUpdated();
        }
        return;
      }
      if (parent instanceof PsiMethodReferenceExpression methodReference) {
        processQualifiedMethodReference(methodReference);
        return;
      }
      if (parent instanceof PsiForeachStatement forEach && forEach.getIteratedValue() == reference) {
        makeQueried();
        return;
      }
      if (parent instanceof PsiAssignmentExpression assignment && assignment.getLExpression() == reference) {
        process(findEffectiveReference(assignment));
        PsiExpression rValue = assignment.getRExpression();
        if (rValue == null) return;
        if (ExpressionUtils.nonStructuralChildren(rValue)
          .allMatch(MismatchedCollectionQueryUpdateInspection::isEmptyCollectionInitializer)) {
          return;
        }
        if (ExpressionUtils.nonStructuralChildren(rValue)
          .allMatch(MismatchedCollectionQueryUpdateInspection::isCollectionInitializer)) {
          makeUpdated();
          return;
        }
      }
      if (parent instanceof PsiPolyadicExpression polyadic) {
        IElementType tokenType = polyadic.getOperationTokenType();
        if (tokenType.equals(JavaTokenType.PLUS)) {
          // String concatenation
          makeQueried();
          return;
        }
        if (tokenType.equals(JavaTokenType.EQEQ) || tokenType.equals(JavaTokenType.NE)) {
          return;
        }
      }
      if (parent instanceof PsiAssertStatement assertStatement && assertStatement.getAssertDescription() == reference) {
        makeQueried();
        return;
      }
      if (parent instanceof PsiInstanceOfExpression || parent instanceof PsiSynchronizedStatement) return;
      // Any other reference
      makeUpdated();
      makeQueried();
    }
private void process(PsiExpression reference)