void (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); } } }