Collection<LookupElement> (@NotNull PsiFile file, int invocationCount, @NotNull String prefix) { PsiClassOwner jvmFile = ObjectUtils.tryCast(file, PsiClassOwner.class); if (jvmFile == null) return Collections.emptyList(); List<LookupElement> result = new ArrayList<>(); for (PsiClass aClass : jvmFile.getClasses()) { String name = aClass.getName(); if (name == null) continue; if (aClass instanceof SyntheticElement) { processSyntheticClass(result, aClass); } else { result.add(LookupElementBuilder.create(name).withIcon(aClass.getIcon(0))); String infix = getInfix(prefix, name); String memberPrefix = null; String rest = null; if (infix != null) { int offset = name.length() + infix.length(); memberPrefix = prefix.substring(0, offset); rest = prefix.substring(offset); } else if (invocationCount <= 0) continue; processClassBody(invocationCount, result, aClass, infix, memberPrefix, rest); } } return result; }