@Override
    public Object @NotNull [] getVariants() {
      Module module = ModuleUtilCore.findModuleForPsiElement(myElement);
      if (module == null) return ArrayUtilRt.EMPTY_OBJECT_ARRAY;
      final Project project = module.getProject();
      final JavaPsiFacade javaPsiFacade = JavaPsiFacade.getInstance(project);

      GlobalSearchScope productionScope = GlobalSearchScope.moduleRuntimeScope(module, false);

      List<LookupElement> variants = new ArrayList<>();

      // AllIcons
      addIconVariants(variants, javaPsiFacade.findClass(ALL_ICONS_FQN, productionScope), false, Collections.emptyList());

      // icons.*Icons
      final PsiPackage iconsPackage = javaPsiFacade.findPackage("icons");
      if (iconsPackage != null) {
        for (PsiClass psiClass : iconsPackage.getClasses(productionScope)) {
          final String className = psiClass.getName();
          if (className == null || !StringUtil.endsWith(className, ICONS_CLASSNAME_SUFFIX)) continue;

          addIconVariants(variants, psiClass, false, Collections.emptyList());
        }
      }

      // FQN *Icons
      GlobalSearchScope notIconsPackageScope =
        iconsPackage != null ? PackageScope.packageScope(iconsPackage, false) : GlobalSearchScope.EMPTY_SCOPE;
      final Query<PsiClass> allIconsSearch =
        AllClassesSearch.search(productionScope.intersectWith(GlobalSearchScope.notScope(notIconsPackageScope)),
                                project, s -> StringUtil.endsWith(s, ICONS_CLASSNAME_SUFFIX) && !s.equals(ICONS_CLASSNAME_SUFFIX));
      allIconsSearch.forEach(psiClass -> {
        if (ALL_ICONS_FQN.equals(psiClass.getQualifiedName()) ||
            psiClass.isInterface() ||
            psiClass.getContainingClass() != null ||
            !psiClass.hasModifier(JvmModifier.PUBLIC)) {
          return;
        }

        addIconVariants(variants, psiClass, true, Collections.emptyList());
      });
      return variants.toArray();
    }
@Override
    public Object @NotNull [] getVariants()