void (@NotNull PsiClass aClass, @NotNull Map<String, CandidateInfo> allFields, @NotNull Map<String, List<CandidateInfo>> allMethods, @NotNull Map<String, CandidateInfo> allInnerClasses, @NotNull Set<? super PsiClass> visitedClasses, @NotNull PsiSubstitutor substitutor, boolean includeSynthetic) { PsiUtilCore.ensureValid(aClass); if (!visitedClasses.add(aClass)) return; if (visitedClasses.size() == 1 || !GrTraitUtil.isTrait(aClass)) { for (PsiField field : getFields(aClass, includeSynthetic)) { String name = field.getName(); if (!allFields.containsKey(name)) { allFields.put(name, new CandidateInfo(field, substitutor)); } } } for (PsiMethod method : getMethods(aClass, includeSynthetic)) { addMethod(allMethods, method, substitutor); } for (final PsiClass inner : getInnerClasses(aClass, includeSynthetic)) { final String name = inner.getName(); if (name != null && !allInnerClasses.containsKey(name)) { allInnerClasses.put(name, new CandidateInfo(inner, substitutor)); } } for (PsiClass superClass : getSupers(aClass, includeSynthetic)) { final PsiSubstitutor superSubstitutor = includeSynthetic ? TypeConversionUtil.getSuperClassSubstitutor(superClass, aClass, substitutor) : PsiSubstitutor.EMPTY; processClass(superClass, allFields, allMethods, allInnerClasses, visitedClasses, superSubstitutor, includeSynthetic); } }