@Override
  public @Nullable Icon getIcon(@NotNull PsiElement element, int flags) {
    if (!(element instanceof PsiDirectory psiDirectory)) {
      return null;
    }

    final VirtualFile vFile = psiDirectory.getVirtualFile();
    final Project project = psiDirectory.getProject();

    SourceFolder sourceFolder;
    Icon symbolIcon;
    if (vFile.getParent() == null && vFile.getFileSystem() instanceof ArchiveFileSystem) {
      symbolIcon = PlatformIcons.JAR_ICON;
    }
    else if (ProjectRootsUtil.isModuleContentRoot(vFile, project)) {
      Module module = ProjectRootManager.getInstance(project).getFileIndex().getModuleForFile(vFile);
      symbolIcon = module == null || module.isDisposed() ? PlatformIcons.CONTENT_ROOT_ICON_CLOSED : ModuleType.get(module).getIcon();
    }
    else if (ProjectRootsUtil.findUnloadedModuleByContentRoot(vFile, project) != null) {
      symbolIcon = AllIcons.Modules.UnloadedModule;
    }
    else if ((sourceFolder = ProjectRootsUtil.getModuleSourceRoot(vFile, project)) != null) {
      symbolIcon = SourceRootPresentation.getSourceRootIcon(sourceFolder);
    }
    else if (JrtFileSystem.isModuleRoot(vFile)) {
      symbolIcon = AllIcons.Nodes.Module;
    }
    else if (isValidPackage(psiDirectory)) {
      IconManager iconManager = IconManager.getInstance();
      symbolIcon = iconManager.createLayeredIcon(element, iconManager.tooltipOnlyIfComposite(AllIcons.Nodes.Package), 0);
    }
    else if (!Registry.is("ide.hide.excluded.files") && ProjectRootManager.getInstance(project).getFileIndex().isExcluded(vFile)) {
      symbolIcon = AllIcons.Modules.ExcludeRoot;
    }
    else {
      return null;
    }
    return IconManager.getInstance().createLayeredIcon(element, symbolIcon, 0);
  }
@Override
  public @Nullable Icon getIcon(@NotNull PsiElement element, int flags)