void (PsiElement element, final PsiClass targetClass, final PsiClass aClass, List<? super PsiElementClassMember> result) { final PsiField[] fields = aClass.getAllFields(); PsiResolveHelper helper = JavaPsiFacade.getInstance(aClass.getProject()).getResolveHelper(); for (PsiField field : fields) { final PsiType type = field.getType(); if (helper.isAccessible(field, aClass, aClass) && type instanceof PsiClassType && !(PsiTreeUtil.isAncestor(field, element, false) && targetClass != aClass)) { final PsiClass containingClass = field.getContainingClass(); if (containingClass != null) { result.add(new PsiFieldMember(field, TypeConversionUtil.getSuperClassSubstitutor(containingClass, aClass, PsiSubstitutor.EMPTY))); } } } final PsiMethod[] methods = aClass.getAllMethods(); for (PsiMethod method : methods) { final PsiClass containingClass = method.getContainingClass(); if (containingClass == null || CommonClassNames.JAVA_LANG_OBJECT.equals(containingClass.getQualifiedName())) continue; final PsiType returnType = method.getReturnType(); if (PropertyUtilBase.isSimplePropertyGetter(method) && helper.isAccessible(method, aClass, aClass) && returnType instanceof PsiClassType && !(PsiTreeUtil.isAncestor(method, element, false) && targetClass != aClass)) { result.add(new PsiMethodMember(method, TypeConversionUtil.getSuperClassSubstitutor( containingClass, aClass,PsiSubstitutor.EMPTY))); } } if (aClass instanceof PsiAnonymousClass) { VariablesProcessor proc = new VariablesProcessor(false) { @Override protected boolean check(PsiVariable var, ResolveState state) { return var.hasModifierProperty(PsiModifier.FINAL) && var instanceof PsiLocalVariable || var instanceof PsiParameter; } }; PsiElement scope = aClass; while (scope != null) { if (scope instanceof PsiFile || scope instanceof PsiMethod || scope instanceof PsiClassInitializer) break; scope = scope.getParent(); } if (scope != null) { PsiScopesUtil.treeWalkUp(proc, aClass, scope); for (int i = 0; i < proc.size(); i++) { final PsiVariable psiVariable = proc.getResult(i); final PsiElementFactory elementFactory = JavaPsiFacade.getElementFactory(aClass.getProject()); final PsiType type = psiVariable.getType(); if (LambdaUtil.notInferredType(type) || PsiTypes.nullType().equals(type)) { continue; } result.add(new PsiFieldMember(elementFactory.createField(psiVariable.getName(), type instanceof PsiEllipsisType ? ((PsiEllipsisType)type).toArrayType() : type)) { @Override protected PsiClass getContainingClass() { return aClass; } }); } } } }