void (PsiClass subclass, List<MemberInfo> result, Filter<PsiMember> filter, final boolean extractInterfacesDeep) { if (extractInterfacesDeep) { extractSuperInterfaces(subclass, filter, result, new HashSet<>()); } else { PsiClass[] interfaces = subclass.getInterfaces(); PsiReferenceList sourceRefList = subclass.isInterface() ? subclass.getExtendsList() : subclass.getImplementsList(); for (PsiClass anInterface : interfaces) { if (filter.includeMember(anInterface)) { result.add(new MemberInfo(anInterface, true, sourceRefList)); } } } PsiClass[] innerClasses = subclass.getInnerClasses(); for (PsiClass innerClass : innerClasses) { if (filter.includeMember(innerClass)) { result.add(new MemberInfo(innerClass)); } } PsiMethod[] methods = subclass.getMethods(); for (PsiMethod method : methods) { if (!method.isConstructor() && filter.includeMember(method)) { result.add(new MemberInfo(method)); } } PsiField[] fields = subclass.getFields(); for (final PsiField field : fields) { if (filter.includeMember(field)) { result.add(new MemberInfo(field)); } } for (PsiClassInitializer initializer : subclass.getInitializers()) { if (filter.includeMember(initializer)) { result.add(new MemberInfo(initializer)); } } }