public static void analyzeExpression(PsiExpression expr,
                                       List<? super UsageInfo> localVars,
                                       List<? super UsageInfo> classMemberRefs,
                                       List<? super UsageInfo> params) {

    if (expr instanceof PsiQualifiedExpression) {
      classMemberRefs.add(new ClassMemberInExprUsageInfo(expr));
    }
    else if (expr instanceof PsiReferenceExpression refExpr) {
      PsiElement subj = refExpr.resolve();

      if (subj instanceof PsiParameter) {
        params.add(new ParameterInExprUsageInfo(refExpr));
      }
      else if (subj instanceof PsiLocalVariable) {
        localVars.add(new LocalVariableInExprUsageInfo(refExpr));
      }
      else if (subj instanceof PsiField || subj instanceof PsiMethod) {
        classMemberRefs.add(new ClassMemberInExprUsageInfo(refExpr));
      }

    }

    PsiElement[] children = expr.getChildren();

    for (PsiElement child : children) {
      if (child instanceof PsiExpression) {
        analyzeExpression((PsiExpression)child, localVars, classMemberRefs, params);
      }
    }
  }
public static void analyzeExpression(PsiExpression expr,
                                       List<? super UsageInfo> localVars,
                                       List<? super UsageInfo> classMemberRefs,
                                       List<? super UsageInfo> params)