@Override
  public @NotNull Collection<LookupElement> getLookupElements(@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;
  }
@Override
  public @NotNull Collection<LookupElement> getLookupElements(@NotNull PsiFile file, int invocationCount, @NotNull String prefix)