GithubHelp home page GithubHelp logo

jonathanlermitage / intellij-extra-icons-plugin Goto Github PK

View Code? Open in Web Editor NEW
170.0 7.0 50.0 14.66 MB

:jigsaw: IntelliJ IDEA based IDEs plugin that overrides common file/folder icons like gitlab-ci.yaml, Git sub-modules, etc. Fully configurable. Users can register their own icons. Can customize IDE UI icons.

Home Page: https://plugins.jetbrains.com/plugin/11058-extra-icons

License: Other

Python 77.84% Java 22.16%
icons-pack extra-icons intellij-plugin jetbrains-ides gradle

intellij-extra-icons-plugin's Introduction

Stand With Ukraine

Extra Icons

plugin's version plugin's downloads

⚠️ 2024-01-08 update: Extra Icons is no longer open-source. Please see the license faq for details. ⚠️
You can still access old code's history and build the plugin for free.
You can still open issues and discussions.


Intellij IDEA (Community and Ultimate) plugin that adds icons for files like Travis YML, Appveyor YML, Git sub-modules, etc.
You can also register your own icons in order to override file icons, but also all IDE icons (including toolbars, menus, etc.). It works with all JetBrains products like IntelliJ (ultimate and community), PyCharm, WebStorm, DataGrip, etc.
To get started with this plugin, please see this guide.

Code modified from 3rd party projects

Please see modified_external_code.

Download

Download plugin from the JetBrains marketplace or via your IDE: File, Settings..., Plugins, Marketplace.

intellij-extra-icons-plugin's People

Contributors

bertyhell avatar bouteilleralan avatar diakovidis avatar fcannizzaro avatar franmc01 avatar fvoronin avatar gaetanmaisse avatar iamkyun avatar jonathanlermitage avatar juandgiraldom avatar koolskateguy89 avatar lauragra-y avatar lppedd avatar lromanov avatar luke-denton-aligent avatar matthiaskunnen avatar serial-ata avatar sheigutn avatar valery1707 avatar yoavain avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

intellij-extra-icons-plugin's Issues

Icons not working - WebStorm 2019.3.3 - Material UI plugin installed

Hey.

Would love to get some info on why / how to add the icons to the IDE.

I've tried everything and I can't get them to display on the files.

icons
iconsBreadcrumbs

It's funny that the icons seem to be displayed in the breadcrumbs of the IDE, but the project window can't seem to bind the icons to the files.

Add file extension

How do set another user icon with a file extension?

*.facade.ts

The extension set to *.facade.ts won't work.

screenshot 2020-05-16 um 14 20 56

Regex will work but only for extension that don't exist yet.
This works.
^.*.facade.test$

This won't work.
^.*.facade.ts$

Can't open the Extra Icons settings if Angular plugin is disabled

Extra Icons 1.20.0.183

Can't open the Extra Icons settings if Angular plugin is disabled.

java.lang.NoClassDefFoundError: icons/AngularJSIcons
	at lermitage.intellij.extra.icons.providers.Angular2IconProvider.allModels(Angular2IconProvider.java:26)
	at lermitage.intellij.extra.icons.cfg.SettingsService.getAllRegisteredModels(SettingsService.java:81)
	at lermitage.intellij.extra.icons.cfg.SettingsForm.loadPluginIconsTable(SettingsForm.java:258)
	at lermitage.intellij.extra.icons.cfg.SettingsForm.initComponents(SettingsForm.java:157)
	at lermitage.intellij.extra.icons.cfg.SettingsForm.createComponent(SettingsForm.java:80)
	at com.intellij.openapi.options.ex.ConfigurableWrapper.createComponent(ConfigurableWrapper.java:162)
	at com.intellij.openapi.options.ex.ConfigurableCardPanel.lambda$createConfigurableComponent$4(ConfigurableCardPanel.java:109)
	at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:895)
	at com.intellij.openapi.application.ReadAction.compute(ReadAction.java:61)
	at com.intellij.openapi.options.ex.ConfigurableCardPanel.createConfigurableComponent(ConfigurableCardPanel.java:105)
	at com.intellij.openapi.options.ex.ConfigurableCardPanel.lambda$create$0(ConfigurableCardPanel.java:54)
	at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:895)
	at com.intellij.openapi.application.ReadAction.compute(ReadAction.java:61)
	at com.intellij.openapi.options.ex.ConfigurableCardPanel.create(ConfigurableCardPanel.java:53)
	at com.intellij.openapi.options.newEditor.ConfigurableEditor$1.create(ConfigurableEditor.java:56)
	at com.intellij.openapi.options.newEditor.ConfigurableEditor$1.create(ConfigurableEditor.java:53)
	at com.intellij.ui.CardLayoutPanel.createValue(CardLayoutPanel.java:73)
	at com.intellij.ui.CardLayoutPanel.select(CardLayoutPanel.java:101)
	at com.intellij.ui.CardLayoutPanel.lambda$null$0(CardLayoutPanel.java:117)
	at com.intellij.openapi.application.TransactionGuardImpl$2.run(TransactionGuardImpl.java:205)
	at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:832)
	at com.intellij.openapi.application.impl.ApplicationImpl.lambda$invokeLater$4(ApplicationImpl.java:311)
	at com.intellij.openapi.application.impl.FlushQueue.doRun(FlushQueue.java:80)
	at com.intellij.openapi.application.impl.FlushQueue.runNextEvent(FlushQueue.java:128)
	at com.intellij.openapi.application.impl.FlushQueue.flushNow(FlushQueue.java:46)
	at com.intellij.openapi.application.impl.FlushQueue$FlushNow.run(FlushQueue.java:184)
	at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:776)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:727)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:746)
	at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:974)
	at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:847)
	at com.intellij.ide.IdeEventQueue.lambda$null$8(IdeEventQueue.java:449)
	at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:729)
	at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$9(IdeEventQueue.java:448)
	at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:832)
	at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:496)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:117)
	at java.desktop/java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:190)
	at java.desktop/java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:235)
	at java.desktop/java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:233)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.desktop/java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:233)
	at java.desktop/java.awt.Dialog.show(Dialog.java:1063)
	at com.intellij.openapi.ui.impl.DialogWrapperPeerImpl$MyDialog.show(DialogWrapperPeerImpl.java:708)
	at com.intellij.openapi.ui.impl.DialogWrapperPeerImpl.show(DialogWrapperPeerImpl.java:437)
	at com.intellij.openapi.ui.DialogWrapper.doShow(DialogWrapper.java:1706)
	at com.intellij.openapi.ui.DialogWrapper.show(DialogWrapper.java:1665)
	at com.intellij.ide.actions.ShowSettingsUtilImpl.showSettingsDialog(ShowSettingsUtilImpl.java:80)
	at com.intellij.ide.actions.ShowSettingsAction.perform(ShowSettingsAction.java:54)
	at com.intellij.ide.actions.ShowSettingsAction.actionPerformed(ShowSettingsAction.java:41)
	at com.intellij.openapi.actionSystem.ex.ActionUtil.performActionDumbAware(ActionUtil.java:289)
	at com.intellij.openapi.actionSystem.impl.ActionMenuItem$ActionTransmitter.lambda$actionPerformed$0(ActionMenuItem.java:295)
	at com.intellij.openapi.wm.impl.FocusManagerImpl.runOnOwnContext(FocusManagerImpl.java:280)
	at com.intellij.openapi.wm.impl.IdeFocusManagerImpl.runOnOwnContext(IdeFocusManagerImpl.java:77)
	at com.intellij.openapi.actionSystem.impl.ActionMenuItem$ActionTransmitter.actionPerformed(ActionMenuItem.java:284)
	at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1967)
	at com.intellij.openapi.actionSystem.impl.ActionMenuItem.lambda$fireActionPerformed$0(ActionMenuItem.java:111)
	at com.intellij.openapi.application.TransactionGuardImpl.performUserActivity(TransactionGuardImpl.java:95)
	at com.intellij.openapi.actionSystem.impl.ActionMenuItem.fireActionPerformed(ActionMenuItem.java:111)
	at com.intellij.ui.plaf.beg.BegMenuItemUI.doClick(BegMenuItemUI.java:517)
	at com.intellij.ui.plaf.beg.BegMenuItemUI.access$300(BegMenuItemUI.java:36)
	at com.intellij.ui.plaf.beg.BegMenuItemUI$MyMouseInputHandler.mouseReleased(BegMenuItemUI.java:539)
	at java.desktop/java.awt.Component.processMouseEvent(Component.java:6651)
	at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3342)
	at java.desktop/java.awt.Component.processEvent(Component.java:6416)
	at java.desktop/java.awt.Container.processEvent(Container.java:2263)
	at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5026)
	at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)
	at java.desktop/java.awt.Component.dispatchEvent(Component.java:4858)
	at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4918)
	at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4547)
	at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4488)
	at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307)
	at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2773)
	at java.desktop/java.awt.Component.dispatchEvent(Component.java:4858)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:778)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:727)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95)
	at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:751)
	at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:749)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:748)
	at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:974)
	at com.intellij.ide.IdeEventQueue.dispatchMouseEvent(IdeEventQueue.java:912)
	at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:844)
	at com.intellij.ide.IdeEventQueue.lambda$null$8(IdeEventQueue.java:449)
	at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:740)
	at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$9(IdeEventQueue.java:448)
	at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:832)
	at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:502)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

IntelliJ Fatal error

Does not seem to be critical. IntelliJ IDEA 2020.2.3 (Ultimate) with extra icons 1.40.0.201

com.intellij.diagnostic.PluginException:  [Plugin: lermitage.intellij.extra.icons]
	at com.intellij.openapi.options.ConfigurableEP.createProducer(ConfigurableEP.java:301)
	at com.intellij.openapi.util.AtomicNotNullLazyValue$1.compute(AtomicNotNullLazyValue.java:59)
	at com.intellij.openapi.util.AtomicNotNullLazyValue.getValue(AtomicNotNullLazyValue.java:37)
	at com.intellij.openapi.options.ConfigurableEP.canCreateConfigurable(ConfigurableEP.java:362)
	at com.intellij.openapi.options.ex.ConfigurableWrapper.wrapConfigurable(ConfigurableWrapper.java:32)
	at com.intellij.openapi.options.ex.ConfigurableExtensionPointUtil.getConfigurables(ConfigurableExtensionPointUtil.java:371)
	at com.intellij.openapi.options.ex.ConfigurableExtensionPointUtil.lambda$getConfigurableGroup$1(ConfigurableExtensionPointUtil.java:119)
	at com.intellij.openapi.util.ClearableLazyValue$2.compute(ClearableLazyValue.java:26)
	at com.intellij.openapi.util.ClearableLazyValue.getValue(ClearableLazyValue.java:39)
	at com.intellij.openapi.util.AtomicClearableLazyValue.getValue(AtomicClearableLazyValue.java:9)
	at com.intellij.openapi.options.ex.EpBasedConfigurableGroup.<init>(EpBasedConfigurableGroup.kt:113)
	at com.intellij.openapi.options.ex.ConfigurableExtensionPointUtil.getConfigurableGroup(ConfigurableExtensionPointUtil.java:118)
	at com.intellij.ide.actions.ShowSettingsUtilImpl.getConfigurables(ShowSettingsUtilImpl.java:61)
	at com.intellij.ide.util.gotoByName.GotoActionModel.lambda$new$0(GotoActionModel.java:125)
	at com.intellij.openapi.util.VolatileNotNullLazyValue$1.compute(VolatileNotNullLazyValue.java:56)
	at com.intellij.openapi.util.VolatileNotNullLazyValue.getValue(VolatileNotNullLazyValue.java:36)
	at com.intellij.ide.util.gotoByName.GotoActionModel.getConfigurablesNames(GotoActionModel.java:411)
	at com.intellij.ide.util.gotoByName.GotoActionItemProvider.processOptions(GotoActionItemProvider.java:166)
	at com.intellij.ide.util.gotoByName.GotoActionItemProvider.filterElements(GotoActionItemProvider.java:116)
	at com.intellij.ide.actions.searcheverywhere.ActionSearchEverywhereContributor.fetchWeightedElements(ActionSearchEverywhereContributor.java:92)
	at com.intellij.ide.actions.searcheverywhere.MultiThreadSearcher$ContributorSearchTask.lambda$run$1(MultiThreadSearcher.java:177)
	at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$2(CoreProgressManager.java:170)
	at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:629)
	at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:581)
	at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:60)
	at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:157)
	at com.intellij.ide.actions.searcheverywhere.MultiThreadSearcher$ContributorSearchTask.run(MultiThreadSearcher.java:185)
	at com.intellij.util.ConcurrencyUtil.runUnderThreadName(ConcurrencyUtil.java:207)
	at com.intellij.util.ConcurrencyUtil.lambda$underThreadNameRunnable$3(ConcurrencyUtil.java:195)
	at com.intellij.util.RunnableCallable.call(RunnableCallable.java:20)
	at com.intellij.util.RunnableCallable.call(RunnableCallable.java:11)
	at com.intellij.openapi.application.impl.ApplicationImpl$1.call(ApplicationImpl.java:268)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:668)
	at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:665)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1.run(Executors.java:665)
	at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: com.intellij.openapi.progress.ProcessCanceledException
	at com.intellij.openapi.progress.util.AbstractProgressIndicatorBase.throwIfCanceled(AbstractProgressIndicatorBase.java:135)
	at com.intellij.openapi.progress.util.AbstractProgressIndicatorBase.checkCanceled(AbstractProgressIndicatorBase.java:126)
	at com.intellij.openapi.progress.util.AbstractProgressIndicatorExBase.checkCanceled(AbstractProgressIndicatorExBase.java:101)
	at com.intellij.openapi.progress.util.ProgressWrapper.checkCanceled(ProgressWrapper.java:96)
	at com.intellij.openapi.progress.impl.CoreProgressManager.doCheckCanceled(CoreProgressManager.java:128)
	at com.intellij.openapi.progress.ProgressManager.checkCanceled(ProgressManager.java:227)
	at com.intellij.serviceContainer.ContainerUtilKt.checkCanceledIfNotInClassInit(containerUtil.kt:93)
	at com.intellij.serviceContainer.ComponentManagerImpl.instantiateClass(ComponentManagerImpl.kt:609)
	at com.intellij.serviceContainer.ComponentManagerImpl.instantiateExtensionWithPicoContainerOnlyIfNeeded(ComponentManagerImpl.kt:685)
	at com.intellij.openapi.options.ConfigurableEP.instantiateConfigurableProvider(ConfigurableEP.java:309)
	at com.intellij.openapi.options.ConfigurableEP.createProducer(ConfigurableEP.java:288)
	... 39 more

NoSuchFileException: Problem after dynamic update?

One of the users of the AsciiDoc plugin I maintain reported the following exception: a missing JAR file for the Extra Icons plugin.

Can this be due to a dynamically updated plugin Extra Icons plugin? Maybe the plugin update was incomplete/waiting for a restart, or some bundles were still pointing to the old file?

Unfortunately the user didn't provide additional information and stayed anonymous.

java.nio.file.NoSuchFileException: ***/.local/share/JetBrains/Toolbox/apps/IDEA-U/ch-0/203.7148.57.plugins/Extra Icons/lib/ij-extra-icons-1.46.1.201.jar
    at sun.nio.fs.UnixException.translateToIOException(UnixException.java:92)
    at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111)
    at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:116)
    at sun.nio.fs.UnixFileAttributeViews$Basic.readAttributes(UnixFileAttributeViews.java:55)
    at sun.nio.fs.UnixFileSystemProvider.readAttributes(UnixFileSystemProvider.java:149)
    at sun.nio.fs.LinuxFileSystemProvider.readAttributes(LinuxFileSystemProvider.java:99)
    at java.nio.file.Files.readAttributes(Files.java:1838)
    at java.util.zip.ZipFile$Source.get(ZipFile.java:1225)
    at java.util.zip.ZipFile$CleanableResource.<init>(ZipFile.java:727)
    at java.util.zip.ZipFile$CleanableResource.get(ZipFile.java:844)
    at java.util.zip.ZipFile.<init>(ZipFile.java:247)
    at java.util.zip.ZipFile.<init>(ZipFile.java:177)
    at java.util.zip.ZipFile.<init>(ZipFile.java:148)
    at com.intellij.util.lang.JarLoader.createZipFile(JarLoader.java:322)
    at com.intellij.util.lang.JarLoader.getZipFile(JarLoader.java:312)
    at com.intellij.util.lang.JarLoader.getResource(JarLoader.java:217)
    at com.intellij.util.lang.ClassPath$ResourceStringLoaderIterator.findInLoader(ClassPath.java:374)
    at com.intellij.util.lang.ClassPath$ResourceStringLoaderIterator.process(ClassPath.java:369)
    at com.intellij.util.lang.ClassPath$ResourceStringLoaderIterator.process(ClassPath.java:366)
    at com.intellij.util.lang.ClasspathCache.iterateLoaders(ClasspathCache.java:150)
    at com.intellij.util.lang.ClassPath.getResource(ClassPath.java:102)
    at com.intellij.util.lang.UrlClassLoader.findResourceImpl(UrlClassLoader.java:419)
    at com.intellij.util.lang.UrlClassLoader.getResourceAsStream(UrlClassLoader.java:442)
    at com.intellij.ide.plugins.cl.PluginClassLoader.getOwnResourceAsStream(PluginClassLoader.java:379)
    at com.intellij.ide.plugins.cl.PluginClassLoader.getResourceAsStream(PluginClassLoader.java:372)
    at com.intellij.util.ImageLoader.getResourceData(ImageLoader.java:325)
    at com.intellij.util.SVGLoader.loadFromClassResource(SVGLoader.java:155)
    at com.intellij.util.ImageLoader.loadByDescriptor(ImageLoader.java:299)
    at com.intellij.util.ImageLoader.load(ImageLoader.java:224)
    at com.intellij.openapi.util.IconLoader$ImageDataResolverImpl.loadImage(IconLoader.java:1266)
    at com.intellij.openapi.util.IconLoader$CachedImageIcon.loadImage(IconLoader.java:1017)
    at com.intellij.openapi.util.IconLoader$ScaledIconCache.getOrScaleIcon(IconLoader.java:1087)
    at com.intellij.openapi.util.IconLoader$CachedImageIcon.getRealIcon(IconLoader.java:905)
    at com.intellij.openapi.util.IconLoader$CachedImageIcon.paintIcon(IconLoader.java:828)
    at com.intellij.ui.LayeredIcon.paintIcon(LayeredIcon.java:229)
    at com.intellij.ui.RowIcon.paintIcon(RowIcon.java:160)
    at com.intellij.ui.DeferredIconImpl.paintIcon(DeferredIconImpl.java:146)
    at com.intellij.ui.SimpleColoredComponent.paintIcon(SimpleColoredComponent.java:1052)
    at com.intellij.ui.SimpleColoredComponent.doPaintIcon(SimpleColoredComponent.java:765)
    at com.intellij.ui.SimpleColoredComponent.doPaint(SimpleColoredComponent.java:725)
    at com.intellij.ui.SimpleColoredComponent.paintComponent(SimpleColoredComponent.java:712)
    at javax.swing.JComponent.paint(JComponent.java:1077)
    at javax.swing.CellRendererPane.paintComponent(CellRendererPane.java:165)
    at com.intellij.ui.tree.ui.DefaultTreeUI.paint(DefaultTreeUI.java:246)
    at javax.swing.plaf.ComponentUI.update(ComponentUI.java:161)
    at javax.swing.JComponent.paintComponent(JComponent.java:800)
    at com.intellij.ui.treeStructure.Tree.paintComponent(Tree.java:321)
    at javax.swing.JComponent.paint(JComponent.java:1077)
    at com.intellij.ui.treeStructure.Tree.paint(Tree.java:235)
    at javax.swing.JComponent.paintChildren(JComponent.java:910)
    at javax.swing.JComponent.paint(JComponent.java:1086)
    at javax.swing.JViewport.paint(JViewport.java:737)
    at com.intellij.ui.components.JBViewport.paint(JBViewport.java:241)
    at javax.swing.JComponent.paintToOffscreen(JComponent.java:5263)
    at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:246)
    at javax.swing.RepaintManager.paint(RepaintManager.java:1333)
    at javax.swing.JComponent._paintImmediately(JComponent.java:5211)
    at javax.swing.JComponent.paintImmediately(JComponent.java:5021)
    at javax.swing.RepaintManager$4.run(RepaintManager.java:868)
    at javax.swing.RepaintManager$4.run(RepaintManager.java:851)
    at java.security.AccessController.doPrivileged(AccessController.java)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:851)
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:826)
    at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:775)
    at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1901)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:776)
    at java.awt.EventQueue$4.run(EventQueue.java:727)
    at java.awt.EventQueue$4.run(EventQueue.java:721)
    at java.security.AccessController.doPrivileged(AccessController.java)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:746)
    at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:976)
    at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:843)
    at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$8(IdeEventQueue.java:454)
    at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:762)
    at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$9(IdeEventQueue.java:453)
    at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:497)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:117)
    at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:190)
    at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:235)
    at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:233)
    at java.security.AccessController.doPrivileged(AccessController.java)
    at java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:233)
    at java.awt.Dialog.show(Dialog.java:1063)
    at com.intellij.openapi.ui.impl.DialogWrapperPeerImpl$MyDialog.show(DialogWrapperPeerImpl.java:694)
    at com.intellij.openapi.ui.impl.DialogWrapperPeerImpl.show(DialogWrapperPeerImpl.java:435)
    at com.intellij.openapi.ui.DialogWrapper.doShow(DialogWrapper.java:1715)
    at com.intellij.openapi.ui.DialogWrapper.show(DialogWrapper.java:1674)
    at com.intellij.openapi.fileChooser.ex.FileSaverDialogImpl.save(FileSaverDialogImpl.java:81)
    at org.asciidoc.intellij.editor.jcef.AsciiDocJCEFHtmlPanel.saveImage(AsciiDocJCEFHtmlPanel.java:550)
    at org.asciidoc.intellij.editor.jcef.AsciiDocJCEFHtmlPanel.lambda$reregisterHandlers$8(AsciiDocJCEFHtmlPanel.java:408)
    at com.intellij.openapi.application.TransactionGuardImpl.runWithWritingAllowed(TransactionGuardImpl.java:216)
    at com.intellij.openapi.application.TransactionGuardImpl.access$200(TransactionGuardImpl.java:24)
    at com.intellij.openapi.application.TransactionGuardImpl$2.run(TransactionGuardImpl.java:199)
    at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:822)
    at com.intellij.openapi.application.impl.ApplicationImpl.lambda$invokeLater$4(ApplicationImpl.java:324)
    at com.intellij.openapi.application.impl.FlushQueue.doRun(FlushQueue.java:85)
    at com.intellij.openapi.application.impl.FlushQueue.runNextEvent(FlushQueue.java:134)
    at com.intellij.openapi.application.impl.FlushQueue.flushNow(FlushQueue.java:47)
    at com.intellij.openapi.application.impl.FlushQueue$FlushNow.run(FlushQueue.java:190)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:776)
    at java.awt.EventQueue$4.run(EventQueue.java:727)
    at java.awt.EventQueue$4.run(EventQueue.java:721)
    at java.security.AccessController.doPrivileged(AccessController.java)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:746)
    at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:976)
    at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:843)
    at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$8(IdeEventQueue.java:454)
    at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:773)
    at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$9(IdeEventQueue.java:453)
    at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:822)
    at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:501)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

User icons location

Where plugin stores "User icons" settings? Is there any possibility to share/backup my "User icons"? Or even import "User icons" json/xml file, not icon by icon.
After last update my settings with user icons were reset to default, just want to avoid it in future 🙃.

P.S. Thanks for the plugin.

Change rules for storybook

Is it possible to change the rule for storybook file names to make the beginning optional?
I have a component called LendingHistories.tsx in my project, but I'm having trouble with it being recognized as a storybook under the current rules.

#53 (comment)
In order to meet @kubijo 's requirements, I think we just need to allow the filename stor(y|ies).(js|ts)x instead of making the beginning of the filename optional.

Upgrading ExtraIcons removes project specific user icons

I'm currently using goland and every time I upgrade extra icons, I notice the all of my project specific User Icons are blown away and the Override IDE settings was no longer checked.

This only appears to happen on upgrade

IDEConfigurableProvider has been compiled by a more recent version of the Java Runtime

Running Android Studio 3.6.3 and 4.x side-by-side, Extra Icons work in 3.6.3 but not in 4.1.1.

I'm using latest OpenJDK (15.0.1) and latest JRE (8, update 271).

The 4.x IDE reports the following:

com.intellij.diagnostic.PluginException: While loading class lermitage.intellij.extra.icons.cfg.providers.IDEConfigurableProvider: lermitage/intellij/extra/icons/cfg/providers/IDEConfigurableProvider has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0 [Plugin: lermitage.intellij.extra.icons] [Plugin: lermitage.intellij.extra.icons]
	at com.intellij.openapi.options.ConfigurableEP.createProducer(ConfigurableEP.java:299)
	at com.intellij.openapi.util.AtomicNotNullLazyValue$1.compute(AtomicNotNullLazyValue.java:59)
	at com.intellij.openapi.util.AtomicNotNullLazyValue.getValue(AtomicNotNullLazyValue.java:37)
	at com.intellij.openapi.options.ConfigurableEP.getConfigurableType(ConfigurableEP.java:353)
	at com.intellij.remoteServer.impl.configuration.RemoteServerListConfigurableProvider.tryGetServerTypes(RemoteServerListConfigurableProvider.java:52)
	at java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:269)
	at java.util.Iterator.forEachRemaining(Iterator.java:116)
	at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482)
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472)
	at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:566)
	at com.intellij.remoteServer.impl.configuration.RemoteServerListConfigurableProvider.getServerTypesInCloudsList(RemoteServerListConfigurableProvider.java:35)
	at com.intellij.remoteServer.impl.configuration.RemoteServerListConfigurableProvider.canCreateConfigurable(RemoteServerListConfigurableProvider.java:22)
	at com.intellij.openapi.options.ConfigurableEP$ProviderProducer.canCreateElement(ConfigurableEP.java:384)
	at com.intellij.openapi.options.ConfigurableEP.canCreateConfigurable(ConfigurableEP.java:342)
	at com.intellij.openapi.options.ex.ConfigurableWrapper.wrapConfigurable(ConfigurableWrapper.java:34)
	at com.intellij.openapi.options.ex.ConfigurableExtensionPointUtil.getConfigurables(ConfigurableExtensionPointUtil.java:377)
	at com.intellij.openapi.options.ex.ConfigurableExtensionPointUtil.lambda$getConfigurableGroup$0(ConfigurableExtensionPointUtil.java:128)
	at com.intellij.openapi.util.ClearableLazyValue$2.compute(ClearableLazyValue.java:30)
	at com.intellij.openapi.util.ClearableLazyValue.getValue(ClearableLazyValue.java:45)
	at com.intellij.openapi.util.AtomicClearableLazyValue.getValue(AtomicClearableLazyValue.java:21)
	at com.intellij.openapi.options.ex.EpBasedConfigurableGroup.<init>(EpBasedConfigurableGroup.kt:100)
	at com.intellij.openapi.options.ex.ConfigurableExtensionPointUtil.getConfigurableGroup(ConfigurableExtensionPointUtil.java:127)
	at com.intellij.ide.actions.ShowSettingsUtilImpl.getConfigurableGroups(ShowSettingsUtilImpl.java:50)
	at com.intellij.ide.actions.ShowSettingsAction.perform(ShowSettingsAction.java:54)
	at com.intellij.ide.actions.ShowSettingsAction.actionPerformed(ShowSettingsAction.java:41)
	at com.intellij.openapi.actionSystem.ex.ActionUtil.performActionDumbAware(ActionUtil.java:280)
	at com.intellij.openapi.actionSystem.impl.ActionMenuItem$ActionTransmitter.lambda$actionPerformed$0(ActionMenuItem.java:296)
	at com.intellij.openapi.wm.impl.FocusManagerImpl.runOnOwnContext(FocusManagerImpl.java:281)
	at com.intellij.openapi.wm.impl.IdeFocusManagerImpl.runOnOwnContext(IdeFocusManagerImpl.java:77)
	at com.intellij.openapi.actionSystem.impl.ActionMenuItem$ActionTransmitter.actionPerformed(ActionMenuItem.java:285)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
	at com.intellij.openapi.actionSystem.impl.ActionMenuItem.lambda$fireActionPerformed$0(ActionMenuItem.java:112)
	at com.intellij.openapi.application.TransactionGuardImpl.performUserActivity(TransactionGuardImpl.java:94)
	at com.intellij.openapi.actionSystem.impl.ActionMenuItem.fireActionPerformed(ActionMenuItem.java:112)
	at com.intellij.ui.plaf.beg.BegMenuItemUI.doClick(BegMenuItemUI.java:517)
	at com.intellij.ui.plaf.beg.BegMenuItemUI.access$300(BegMenuItemUI.java:36)
	at com.intellij.ui.plaf.beg.BegMenuItemUI$MyMouseInputHandler.mouseReleased(BegMenuItemUI.java:539)
	at java.awt.Component.processMouseEvent(Component.java:6550)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3325)
	at java.awt.Component.processEvent(Component.java:6315)
	at java.awt.Container.processEvent(Container.java:2239)
	at java.awt.Component.dispatchEventImpl(Component.java:4899)
	at java.awt.Container.dispatchEventImpl(Container.java:2297)
	at java.awt.Component.dispatchEvent(Component.java:4721)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476)
	at java.awt.Container.dispatchEventImpl(Container.java:2283)
	at java.awt.Window.dispatchEventImpl(Window.java:2746)
	at java.awt.Component.dispatchEvent(Component.java:4721)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:766)
	at java.awt.EventQueue.access$500(EventQueue.java:98)
	at java.awt.EventQueue$3.run(EventQueue.java:715)
	at java.awt.EventQueue$3.run(EventQueue.java:709)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
	at java.awt.EventQueue$4.run(EventQueue.java:739)
	at java.awt.EventQueue$4.run(EventQueue.java:737)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:736)
	at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:974)
	at com.intellij.ide.IdeEventQueue.dispatchMouseEvent(IdeEventQueue.java:912)
	at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:844)
	at com.intellij.ide.IdeEventQueue.lambda$null$8(IdeEventQueue.java:449)
	at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:741)
	at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$9(IdeEventQueue.java:448)
	at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:831)
	at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:502)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Caused by: com.intellij.diagnostic.PluginException: While loading class lermitage.intellij.extra.icons.cfg.providers.IDEConfigurableProvider: lermitage/intellij/extra/icons/cfg/providers/IDEConfigurableProvider has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0 [Plugin: lermitage.intellij.extra.icons]
	at com.intellij.ide.plugins.cl.PluginClassLoader.loadClassInsideSelf(PluginClassLoader.java:262)
	at com.intellij.ide.plugins.cl.PluginClassLoader.tryLoadingClass(PluginClassLoader.java:205)
	at com.intellij.ide.plugins.cl.PluginClassLoader.loadClass(PluginClassLoader.java:113)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:352)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:348)
	at com.intellij.openapi.extensions.AbstractExtensionPointBean.findClass(AbstractExtensionPointBean.java:59)
	at com.intellij.openapi.extensions.AbstractExtensionPointBean.findExtensionClass(AbstractExtensionPointBean.java:48)
	at com.intellij.openapi.extensions.AbstractExtensionPointBean.instantiateClass(AbstractExtensionPointBean.java:92)
	at com.intellij.openapi.options.ConfigurableEP.createProducer(ConfigurableEP.java:288)
	... 78 more
Caused by: java.lang.UnsupportedClassVersionError: lermitage/intellij/extra/icons/cfg/providers/IDEConfigurableProvider has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:757)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:636)
	at com.intellij.util.lang.UrlClassLoader._defineClass(UrlClassLoader.java:380)
	at com.intellij.util.lang.UrlClassLoader.defineClass(UrlClassLoader.java:376)
	at com.intellij.util.lang.UrlClassLoader._findClass(UrlClassLoader.java:340)
	at com.intellij.ide.plugins.cl.PluginClassLoader.loadClassInsideSelf(PluginClassLoader.java:259)
	... 87 more

New icon Avro .avsc file

Please add an icon for .ascv avro schema file.
It is json based
At least reuse json icon is fine.
Thanks

Storybook icon missing for mdx

Storybook allows you to write stories using mdx, but there isn't a match for *.stories.mdx files in the Storybook icon regex.

Changing icons with folder

I can't change icons with folder of svg files named html,css etc. how i can do this instead of changing icons one by one in settings?

Icons for NestJS

File patterns are:
*.module.ts
*.controller.ts
*.service.ts
*.guard.ts
*.interceptor.ts
*.filter.ts
*.decorator.ts
*.adapter.ts
*.gateway.ts
*.pipe.ts

Look at https://github.com/vscode-icons/vscode-icons/wiki/ListOfFiles for examples.

Some of them could have unit tests with appropriate names such as some-file.controller.spec.ts, some-file.service.spec.ts. I think a good idea to make unit tests icons for *.controller.spec.ts and *.service.spec.ts files patterns same colored as originals (*.controller.ts and *.service.ts) but contoured or shaded.

It seams to me it's not good idea to make icons language dependent (.js or .ts). Too much graphical info.
I think icons could be the same for both languages. I'm not interested in .js versions of icons cause NestJS is mostly TypeSript based.

Storybook icon is matching too much

Currently the storybook icon pattern is ".*stor(y|ies)\\.(js|jsx|ts|tsx|mdx)$", which will match, for example, history.js.

The pattern needs to be updated to place an escaped full stop directory before the s, so ".*\\.stor(y|ies)\\.(js|jsx|ts|tsx|mdx)$"

TransactionGuardImpl - Write-unsafe context when invoking FileChooser.chooseFiles

lermitage.intellij.extra.icons.cfg.dialogs.ModelDialog:loadCustomIcon() invokes FileChooser.chooseFiles to choose a custom PNG/SVG icon file, but IDE's TransactionGuard complains about Write-unsafe context.
Plugin still works, chosen file is selected, but user will see an annoying error notification.

To reproduce this error, open IJ settings, Extra Icons config panel, User Icons, add an item, then select an icon file (choose icon button). A modal form is opened and you will see an error notification.

See error message:

2020-10-17 03:13:10,622 [  28255]  ERROR - plication.TransactionGuardImpl - Write-unsafe context! Model changes are allowed from write-safe contexts only. Please ensure you're using invokeLater/invokeAndWait with a correct modality state (not "any"). See TransactionGuard documentation for details.
  current modality=ModalityState:{[com.intellij.openapi.ui.impl.DialogWrapperPeerImpl$MyDialog[dialog0,249,0,914x711,invalid,layout=java.awt.BorderLayout,APPLICATION_MODAL,title=Settings,defaultCloseOperation=DO_NOTHING_ON_CLOSE,rootPane=com.intellij.openapi.ui.impl.DialogWrapperPeerImpl$MyDialog$DialogRootPane[,7,0,900x704,invalid,layout=javax.swing.JRootPane$RootLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=449,maximumSize=,minimumSize=java.awt.Dimension[width=900,height=700],preferredSize=],rootPaneCheckingEnabled=true]], [com.intellij.openapi.ui.impl.DialogWrapperPeerImpl$MyDialog[dialog1,545,171,321x369,invalid,layout=java.awt.BorderLayout,APPLICATION_MODAL,title=Add New Model,defaultCloseOperation=DO_NOTHING_ON_CLOSE,rootPane=com.intellij.openapi.ui.impl.DialogWrapperPeerImpl$MyDialog$DialogRootPane[,7,0,307x362,layout=javax.swing.JRootPane$RootLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=449,maximumSize=,minimumSize=,preferredSize=],rootPaneCheckingEnabled=true]], [com.intellij.openapi.ui.impl.DialogWrapperPeerImpl$MyDialog[dialog2,521,110,438x490,invalid,layout=java.awt.BorderLayout,APPLICATION_MODAL,title=Select Path,defaultCloseOperation=DO_NOTHING_ON_CLOSE,rootPane=com.intellij.openapi.ui.impl.DialogWrapperPeerImpl$MyDialog$DialogRootPane[,7,0,424x483,invalid,layout=javax.swing.JRootPane$RootLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=449,maximumSize=,minimumSize=,preferredSize=],rootPaneCheckingEnabled=true]]} 
java.lang.Throwable: Write-unsafe context! Model changes are allowed from write-safe contexts only. Please ensure you're using invokeLater/invokeAndWait with a correct modality state (not "any"). See TransactionGuard documentation for details.
  current modality=ModalityState:{[com.intellij.openapi.ui.impl.DialogWrapperPeerImpl$MyDialog[dialog0,249,0,914x711,invalid,layout=java.awt.BorderLayout,APPLICATION_MODAL,title=Settings,defaultCloseOperation=DO_NOTHING_ON_CLOSE,rootPane=com.intellij.openapi.ui.impl.DialogWrapperPeerImpl$MyDialog$DialogRootPane[,7,0,900x704,invalid,layout=javax.swing.JRootPane$RootLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=449,maximumSize=,minimumSize=java.awt.Dimension[width=900,height=700],preferredSize=],rootPaneCheckingEnabled=true]], [com.intellij.openapi.ui.impl.DialogWrapperPeerImpl$MyDialog[dialog1,545,171,321x369,invalid,layout=java.awt.BorderLayout,APPLICATION_MODAL,title=Add New Model,defaultCloseOperation=DO_NOTHING_ON_CLOSE,rootPane=com.intellij.openapi.ui.impl.DialogWrapperPeerImpl$MyDialog$DialogRootPane[,7,0,307x362,layout=javax.swing.JRootPane$RootLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=449,maximumSize=,minimumSize=,preferredSize=],rootPaneCheckingEnabled=true]], [com.intellij.openapi.ui.impl.DialogWrapperPeerImpl$MyDialog[dialog2,521,110,438x490,invalid,layout=java.awt.BorderLayout,APPLICATION_MODAL,title=Select Path,defaultCloseOperation=DO_NOTHING_ON_CLOSE,rootPane=com.intellij.openapi.ui.impl.DialogWrapperPeerImpl$MyDialog$DialogRootPane[,7,0,424x483,invalid,layout=javax.swing.JRootPane$RootLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=449,maximumSize=,minimumSize=,preferredSize=],rootPaneCheckingEnabled=true]]}
	at com.intellij.openapi.diagnostic.Logger.error(Logger.java:143)
	at com.intellij.openapi.application.TransactionGuardImpl.assertWriteSafeContext(TransactionGuardImpl.java:159)
	at com.intellij.openapi.vfs.newvfs.RefreshSessionImpl.<init>(RefreshSessionImpl.java:60)
	at com.intellij.openapi.vfs.newvfs.RefreshQueueImpl.createSession(RefreshQueueImpl.java:164)
	at com.intellij.openapi.vfs.newvfs.RefreshQueue.refresh(RefreshQueue.java:40)
	at com.intellij.openapi.fileChooser.ex.FileSystemTreeImpl$MyExpansionListener.treeExpanded(FileSystemTreeImpl.java:563)
	at java.desktop/javax.swing.JTree.fireTreeExpanded(JTree.java:2812)
	at java.desktop/javax.swing.JTree.setExpandedState(JTree.java:3702)
	at java.desktop/javax.swing.JTree.expandPath(JTree.java:2244)
	at com.intellij.ide.util.treeView.AbstractTreeUi$48.perform(AbstractTreeUi.java:3222)
	at com.intellij.ide.util.treeView.TreeRunnable.run(TreeRunnable.java:20)
	at com.intellij.ide.util.treeView.UpdaterTreeState.process(UpdaterTreeState.java:102)
	at com.intellij.ide.util.treeView.AbstractTreeUi.processInnerChange(AbstractTreeUi.java:3243)
	at com.intellij.ide.util.treeView.AbstractTreeUi.expandPath(AbstractTreeUi.java:3211)
	at com.intellij.ide.util.treeView.AbstractTreeUi.expand(AbstractTreeUi.java:1490)
	at com.intellij.ide.util.treeView.AbstractTreeUi.expand(AbstractTreeUi.java:1457)
	at com.intellij.ide.util.treeView.AbstractTreeUi.processExpand(AbstractTreeUi.java:4362)
	at com.intellij.ide.util.treeView.AbstractTreeUi._expand(AbstractTreeUi.java:4301)
	at com.intellij.ide.util.treeView.AbstractTreeUi.doSelect(AbstractTreeUi.java:3910)
	at com.intellij.ide.util.treeView.AbstractTreeUi.addNext(AbstractTreeUi.java:3871)
	at com.intellij.ide.util.treeView.AbstractTreeUi.access$8300(AbstractTreeUi.java:56)
	at com.intellij.ide.util.treeView.AbstractTreeUi$57.perform(AbstractTreeUi.java:3760)
	at com.intellij.ide.util.treeView.TreeRunnable.run(TreeRunnable.java:20)
	at com.intellij.ide.util.treeView.AbstractTreeUi.execute(AbstractTreeUi.java:1828)
	at com.intellij.ide.util.treeView.AbstractTreeUi.runDone(AbstractTreeUi.java:4229)
	at com.intellij.ide.util.treeView.AbstractTreeUi._select(AbstractTreeUi.java:3719)
	at com.intellij.ide.util.treeView.AbstractTreeUi.select(AbstractTreeUi.java:3650)
	at com.intellij.ide.util.treeView.AbstractTreeUi$58.perform(AbstractTreeUi.java:3817)
	at com.intellij.ide.util.treeView.TreeRunnable.run(TreeRunnable.java:20)
	at com.intellij.ide.util.treeView.AbstractTreeUi.processDeferredActions(AbstractTreeUi.java:979)
	at com.intellij.ide.util.treeView.AbstractTreeUi.processDeferredActions(AbstractTreeUi.java:971)
	at com.intellij.ide.util.treeView.AbstractTreeUi.lambda$initRootNodeNowIfNeeded$2(AbstractTreeUi.java:687)
	at com.intellij.ide.util.treeView.AbstractTreeUi.processActions(AbstractTreeUi.java:2835)
	at com.intellij.ide.util.treeView.AbstractTreeUi.processNodeActionsIfReady(AbstractTreeUi.java:2800)
	at com.intellij.ide.util.treeView.AbstractTreeUi.access$2400(AbstractTreeUi.java:56)
	at com.intellij.ide.util.treeView.AbstractTreeUi$MyExpansionListener.treeExpanded(AbstractTreeUi.java:4691)
	at java.desktop/javax.swing.JTree.fireTreeExpanded(JTree.java:2812)
	at java.desktop/javax.swing.JTree.setExpandedState(JTree.java:3702)
	at java.desktop/javax.swing.JTree.expandPath(JTree.java:2244)
	at com.intellij.ide.util.treeView.AbstractTreeUi$48.perform(AbstractTreeUi.java:3222)
	at com.intellij.ide.util.treeView.TreeRunnable.run(TreeRunnable.java:20)
	at com.intellij.ide.util.treeView.UpdaterTreeState.process(UpdaterTreeState.java:102)
	at com.intellij.ide.util.treeView.AbstractTreeUi.processInnerChange(AbstractTreeUi.java:3243)
	at com.intellij.ide.util.treeView.AbstractTreeUi.expandPath(AbstractTreeUi.java:3211)
	at com.intellij.ide.util.treeView.AbstractTreeUi.expand(AbstractTreeUi.java:1469)
	at com.intellij.ide.util.treeView.AbstractTreeUi.expand(AbstractTreeUi.java:1457)
	at com.intellij.ide.util.treeView.AbstractTreeUi.access$2000(AbstractTreeUi.java:56)
	at com.intellij.ide.util.treeView.AbstractTreeUi$27$2.perform(AbstractTreeUi.java:1395)
	at com.intellij.ide.util.treeView.TreeRunnable.run(TreeRunnable.java:20)
	at com.intellij.openapi.util.ActionCallback$ExecutedExecutionCallback.doWhenExecuted(ActionCallback.java:177)
	at com.intellij.openapi.util.ActionCallback.doWhenDone(ActionCallback.java:111)
	at com.intellij.ide.util.treeView.AbstractTreeUi$27.lambda$perform$0(AbstractTreeUi.java:1387)
	at com.intellij.openapi.util.AsyncResult.lambda$doWhenDone$1(AsyncResult.java:38)
	at com.intellij.openapi.util.ExecutionCallback.doWhenExecuted(ExecutionCallback.java:100)
	at com.intellij.openapi.util.ActionCallback.doWhenDone(ActionCallback.java:111)
	at com.intellij.openapi.util.AsyncResult.doWhenDone(AsyncResult.java:38)
	at com.intellij.ide.util.treeView.AbstractTreeUi$27.perform(AbstractTreeUi.java:1384)
	at com.intellij.ide.util.treeView.TreeRunnable.run(TreeRunnable.java:20)
	at com.intellij.ide.util.treeView.TreeRunnable$TreeConsumer.accept(TreeRunnable.java:34)
	at org.jetbrains.concurrency.DonePromise.onSuccess(promise.kt:348)
	at org.jetbrains.concurrency.DonePromise.onSuccess(promise.kt:317)
	at com.intellij.ide.util.treeView.AbstractTreeUi.updateNodeChildrenNow(AbstractTreeUi.java:1364)
	at com.intellij.ide.util.treeView.AbstractTreeUi.doUpdateChildren(AbstractTreeUi.java:1272)
	at com.intellij.ide.util.treeView.AbstractTreeUi.access$3000(AbstractTreeUi.java:56)
	at com.intellij.ide.util.treeView.AbstractTreeUi$23$1.perform(AbstractTreeUi.java:1164)
	at com.intellij.ide.util.treeView.TreeRunnable.run(TreeRunnable.java:20)
	at com.intellij.ide.util.treeView.AbstractTreeUi.execute(AbstractTreeUi.java:1828)
	at com.intellij.ide.util.treeView.AbstractTreeUi.access$2600(AbstractTreeUi.java:56)
	at com.intellij.ide.util.treeView.AbstractTreeUi$23.perform(AbstractTreeUi.java:1161)
	at com.intellij.ide.util.treeView.TreeRunnable.run(TreeRunnable.java:20)
	at com.intellij.openapi.util.ActionCallback$ExecutedExecutionCallback.doWhenExecuted(ActionCallback.java:177)
	at com.intellij.openapi.util.ActionCallback.doWhenDone(ActionCallback.java:111)
	at com.intellij.ide.util.treeView.AbstractTreeUi.updateNodeChildren(AbstractTreeUi.java:1156)
	at com.intellij.ide.util.treeView.AbstractTreeUi.access$2100(AbstractTreeUi.java:56)
	at com.intellij.ide.util.treeView.AbstractTreeUi$41.perform(AbstractTreeUi.java:2728)
	at com.intellij.ide.util.treeView.TreeRunnable.run(TreeRunnable.java:20)
	at com.intellij.ide.util.treeView.AbstractTreeUi.execute(AbstractTreeUi.java:1828)
	at com.intellij.ide.util.treeView.AbstractTreeUi.access$2600(AbstractTreeUi.java:56)
	at com.intellij.ide.util.treeView.AbstractTreeUi$50$1$1.perform(AbstractTreeUi.java:3362)
	at com.intellij.ide.util.treeView.TreeRunnable.run(TreeRunnable.java:20)
	at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:776)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:727)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:746)
	at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:971)
	at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:841)
	at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$8(IdeEventQueue.java:452)
	at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:733)
	at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$9(IdeEventQueue.java:451)
	at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:802)
	at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:505)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:117)
	at java.desktop/java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:190)
	at java.desktop/java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:235)
	at java.desktop/java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:233)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.desktop/java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:233)
	at java.desktop/java.awt.Dialog.show(Dialog.java:1063)
	at com.intellij.openapi.ui.impl.DialogWrapperPeerImpl$MyDialog.show(DialogWrapperPeerImpl.java:711)
	at com.intellij.openapi.ui.impl.DialogWrapperPeerImpl.show(DialogWrapperPeerImpl.java:438)
	at com.intellij.openapi.ui.DialogWrapper.doShow(DialogWrapper.java:1700)
	at com.intellij.openapi.ui.DialogWrapper.show(DialogWrapper.java:1659)
	at com.intellij.openapi.fileChooser.ex.FileChooserDialogImpl.choose(FileChooserDialogImpl.java:124)
	at com.intellij.openapi.fileChooser.FileChooser.chooseFiles(FileChooser.java:45)
	at com.intellij.openapi.fileChooser.FileChooser.chooseFiles(FileChooser.java:37)
	at lermitage.intellij.extra.icons.cfg.dialogs.ModelDialog.loadCustomIcon(ModelDialog.java:176)
	at lermitage.intellij.extra.icons.cfg.dialogs.ModelDialog.lambda$initComponents$1(ModelDialog.java:77)
	at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:776)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:727)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:746)
	at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:971)
	at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:841)
	at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$8(IdeEventQueue.java:452)
	at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:733)
	at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$9(IdeEventQueue.java:451)
	at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:802)
	at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:505)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:117)
	at java.desktop/java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:190)
	at java.desktop/java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:235)
	at java.desktop/java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:233)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.desktop/java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:233)
	at java.desktop/java.awt.Dialog.show(Dialog.java:1063)
	at com.intellij.openapi.ui.impl.DialogWrapperPeerImpl$MyDialog.show(DialogWrapperPeerImpl.java:711)
	at com.intellij.openapi.ui.impl.DialogWrapperPeerImpl.show(DialogWrapperPeerImpl.java:438)
	at com.intellij.openapi.ui.DialogWrapper.doShow(DialogWrapper.java:1700)
	at com.intellij.openapi.ui.DialogWrapper.show(DialogWrapper.java:1659)
	at com.intellij.openapi.ui.DialogWrapper.showAndGet(DialogWrapper.java:1673)
	at lermitage.intellij.extra.icons.cfg.SettingsForm.lambda$createToolbarDecorator$8(SettingsForm.java:361)
	at com.intellij.ui.ToolbarDecorator$3.doAdd(ToolbarDecorator.java:490)
	at com.intellij.ui.CommonActionsPanel$AddButton.actionPerformed(CommonActionsPanel.java:314)
	at com.intellij.openapi.actionSystem.ex.ActionUtil.performActionDumbAware(ActionUtil.java:282)
	at com.intellij.openapi.actionSystem.ex.ActionUtil.performActionDumbAwareWithCallbacks(ActionUtil.java:276)
	at com.intellij.openapi.actionSystem.impl.ActionButton.actionPerformed(ActionButton.java:182)
	at com.intellij.openapi.actionSystem.impl.ActionButton.performAction(ActionButton.java:155)
	at com.intellij.openapi.actionSystem.impl.ActionButton.processMouseEvent(ActionButton.java:439)
	at java.desktop/java.awt.Component.processEvent(Component.java:6419)
	at java.desktop/java.awt.Container.processEvent(Container.java:2263)
	at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5029)
	at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)
	at java.desktop/java.awt.Component.dispatchEvent(Component.java:4861)
	at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4918)
	at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4547)
	at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4488)
	at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307)
	at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2773)
	at java.desktop/java.awt.Component.dispatchEvent(Component.java:4861)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:778)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:727)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95)
	at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:751)
	at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:749)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:748)
	at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:971)
	at com.intellij.ide.IdeEventQueue.dispatchMouseEvent(IdeEventQueue.java:906)
	at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:838)
	at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$8(IdeEventQueue.java:452)
	at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:733)
	at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$9(IdeEventQueue.java:451)
	at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:802)
	at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:505)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:117)
	at java.desktop/java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:190)
	at java.desktop/java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:235)
	at java.desktop/java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:233)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.desktop/java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:233)
	at java.desktop/java.awt.Dialog.show(Dialog.java:1063)
	at com.intellij.openapi.ui.impl.DialogWrapperPeerImpl$MyDialog.show(DialogWrapperPeerImpl.java:711)
	at com.intellij.openapi.ui.impl.DialogWrapperPeerImpl.show(DialogWrapperPeerImpl.java:438)
	at com.intellij.openapi.ui.DialogWrapper.doShow(DialogWrapper.java:1700)
	at com.intellij.openapi.ui.DialogWrapper.show(DialogWrapper.java:1659)
	at com.intellij.ide.actions.ShowSettingsUtilImpl.showSettingsDialog(ShowSettingsUtilImpl.java:80)
	at com.intellij.ide.actions.ShowSettingsAction.perform(ShowSettingsAction.java:54)
	at com.intellij.ide.actions.ShowSettingsAction.actionPerformed(ShowSettingsAction.java:41)
	at com.intellij.openapi.actionSystem.ex.ActionUtil.performActionDumbAware(ActionUtil.java:282)
	at com.intellij.openapi.actionSystem.impl.ActionMenuItem$ActionTransmitter.lambda$actionPerformed$0(ActionMenuItem.java:296)
	at com.intellij.openapi.wm.impl.FocusManagerImpl.runOnOwnContext(FocusManagerImpl.java:288)
	at com.intellij.openapi.wm.impl.IdeFocusManagerImpl.runOnOwnContext(IdeFocusManagerImpl.java:77)
	at com.intellij.openapi.actionSystem.impl.ActionMenuItem$ActionTransmitter.actionPerformed(ActionMenuItem.java:285)
	at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1967)
	at com.intellij.openapi.actionSystem.impl.ActionMenuItem.lambda$fireActionPerformed$0(ActionMenuItem.java:112)
	at com.intellij.openapi.application.TransactionGuardImpl.performUserActivity(TransactionGuardImpl.java:94)
	at com.intellij.openapi.actionSystem.impl.ActionMenuItem.fireActionPerformed(ActionMenuItem.java:112)
	at com.intellij.ui.plaf.beg.BegMenuItemUI.doClick(BegMenuItemUI.java:519)
	at com.intellij.ui.plaf.beg.BegMenuItemUI.access$300(BegMenuItemUI.java:36)
	at com.intellij.ui.plaf.beg.BegMenuItemUI$MyMouseInputHandler.mouseReleased(BegMenuItemUI.java:541)
	at java.desktop/java.awt.Component.processMouseEvent(Component.java:6654)
	at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3345)
	at java.desktop/java.awt.Component.processEvent(Component.java:6419)
	at java.desktop/java.awt.Container.processEvent(Container.java:2263)
	at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5029)
	at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)
	at java.desktop/java.awt.Component.dispatchEvent(Component.java:4861)
	at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4918)
	at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4547)
	at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4488)
	at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307)
	at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2773)
	at java.desktop/java.awt.Component.dispatchEvent(Component.java:4861)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:778)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:727)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95)
	at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:751)
	at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:749)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:748)
	at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:971)
	at com.intellij.ide.IdeEventQueue.dispatchMouseEvent(IdeEventQueue.java:906)
	at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:838)
	at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$8(IdeEventQueue.java:452)
	at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:744)
	at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$9(IdeEventQueue.java:451)
	at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:802)
	at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:505)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

Support Angular-specific files

Is there a way to establish the "type" of file by scanning the content? This could be helpful for frameworks.
I just asked to the IDEA team, lets see how they manage to discover the file "type", but I think it's only by file name, just as you are doing now.

So for Angular Components, it would be *.component.ts.

Improve tests

I have no experience in UI testing, so I currently made minimal unit test only (I check there's no icons duplicates).

If it is feasible, it would be cool to test plugin on IJ Community and Ultimate, and check that Swing forms (like Settings panel) work fine - even if we can't run these tests on Travis CI.
We recently introduced a bug that affected Settings panel, and I admit I regularly forget to manually test plugin on IJ Community.

Ability to reuse bundled icon when creating user rule

I would like to be able to reuse the existing/bundled icon instead of providing my own.

An example:

  • I have maybe like 20 bundled rules enabled only (disabled the rest: less regex checks on files).
  • I want to have a rule for robots.txt file.
  • I do not have any suitable icons for such file so I thought I will reuse existing one that I do not use (e.g. from Robot Framework rule). Sadly I cannot do that as I MUST provide my own icon.

The reasoning:

Normally I would not bother with this kind of file: it's just 1 file in the website root, you are not editing it often (very rarely) and that's basically it.

But I have a particular project where 35+ domains share the same code base (very simple sites to show forms powered by Typeform and a few related actions; just 5-6 site-specific files). robots.txt is one of such "specific" files and they need to be different per site. So I though it makes sense to give them a separate icon in the Project View tree.

This also can be used if a user wants to add an additional pattern/rule to existing rule: you cannot edit bundled rule but can create a custom one and having the ability to use the same icon as bundled one will be great.

The idea is:

Have a dropdown box with all bundled icons in addition to "specify your custom icon" element so the user can fill any of those 2 (and if both provided then give custom icon file a priority).

Performance optimization

Hi, thank you for the great plugin!
I have a large project with a lot of modules and opened branches of the tries. Also, this project has a lot of facets. I've noticed that I see a pretty visible glitches in the project tree. After a small (and not really deep) investigation, I've found that you're collecting all the facts of all the modules on each icon resolution. That seems not very effective at first glance, so maybe you could cache the list of the facets? This is especially interesting because, as far as I understand, there are no default rules that use facets, so they aren't actually used in most cases.
Also, the double for inside of lermitage.intellij.extra.icons.ModelCondition#check also seems a little bit slow, so maybe you could just collect the names of facets in small letters and use the power of set?

Thank you in advance!

Settings panel

Being the amount of icons will grow over time, a setting panel is a must-have.
This is the state of my current implementation, using the same Swing style of the "Gutter Icons" one, to maintain consistency.
Groups are ordered by name (ascending).

Required changes:

  • Search contributor
  • BaseIconProvider will expose a new attribute name or description
    (need to find a better name for the class)
  • Model class will expose a new attribute name (maybe a better name would be IconModel)

image

Add an option to use your own icons

Rework settings panel and icon providers to let user choose alternative icons: PNG 16x16 + 32x32 (plugin may automatically create the 16x16 file), or SVG.

Display custom file icons in Remote Host panel

This plugin shows custom file icons in Project View panel as well as Favorites.

What about Remote Host (when browsing the deployment target over FTP/SFTP/FTPS)? Can this be done there as well?


Here are a few screenshots. Files in question: .editorconfig and readme.md

Local / Project View panel:
image

Favorites panel:
image

Remote Host:
image

Improve rendering of custom icons

SVG and PNG custom icons rendering is no optimal (scaling makes images pixelated). See how hdpi icons are rendered by IntelliJ when they are loaded from (IJ or plugin) resources, and do the same thing for custom icons.
This issue affects the IconViewer 2 plugin too. So, if Extra Icons is too complex, we can work on IconViewer 2 (they share the same code base), and I will backport improvements to Extra icons. It could be a good starting point.

Exception with version 1.5.0.183 in CLion

Since the last update since CLion of "Extra Icons", I get this message regularly:

java.lang.StringIndexOutOfBoundsException: String index out of range: -26
	at java.lang.String.substring(String.java:1931)
	at lermitage.intellij.extra.icons.BaseIconProvider.getPathRelativeToProject(BaseIconProvider.java:84)
	at lermitage.intellij.extra.icons.BaseIconProvider.getIcon(BaseIconProvider.java:54)
	at com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode.setupIcon(PsiDirectoryNode.java:171)
	at com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode.updateImpl(PsiDirectoryNode.java:135)
	at com.intellij.ide.projectView.impl.nodes.AbstractPsiBasedNode.lambda$doUpdate$1(AbstractPsiBasedNode.java:163)
	at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:940)
	at com.intellij.ide.projectView.impl.nodes.AbstractPsiBasedNode.doUpdate(AbstractPsiBasedNode.java:138)
	at com.intellij.ide.projectView.impl.nodes.AbstractPsiBasedNode.lambda$update$0(AbstractPsiBasedNode.java:134)
	at com.intellij.util.AstLoadingFilter.lambda$toComputable$2(AstLoadingFilter.java:169)
	at com.intellij.util.AstLoadingFilter.disallowTreeLoading(AstLoadingFilter.java:127)
	at com.intellij.util.AstLoadingFilter.disallowTreeLoading(AstLoadingFilter.java:116)
	at com.intellij.util.AstLoadingFilter.disallowTreeLoading(AstLoadingFilter.java:111)
	at com.intellij.ide.projectView.impl.nodes.AbstractPsiBasedNode.update(AbstractPsiBasedNode.java:134)
	at com.intellij.ide.util.treeView.PresentableNodeDescriptor.getUpdatedPresentation(PresentableNodeDescriptor.java:89)
	at com.intellij.ide.util.treeView.PresentableNodeDescriptor.update(PresentableNodeDescriptor.java:41)
	at com.intellij.ui.tree.StructureTreeModel$Node.update(StructureTreeModel.java:451)
	at com.intellij.ui.tree.StructureTreeModel$Node.<init>(StructureTreeModel.java:433)
	at com.intellij.ui.tree.StructureTreeModel$Node.<init>(StructureTreeModel.java:425)
	at com.intellij.ui.tree.StructureTreeModel$Node.<init>(StructureTreeModel.java:419)
	at com.intellij.ui.tree.StructureTreeModel.getValidChildren(StructureTreeModel.java:389)
	at com.intellij.ui.tree.StructureTreeModel.validateChildren(StructureTreeModel.java:297)
	at com.intellij.ui.tree.StructureTreeModel$Node.isLeaf(StructureTreeModel.java:554)
	at com.intellij.ui.tree.StructureTreeModel$Node.access$400(StructureTreeModel.java:419)
	at com.intellij.ui.tree.StructureTreeModel.isLeaf(StructureTreeModel.java:333)
	at com.intellij.ui.tree.AsyncTreeModel$CmdGetChildren.load(AsyncTreeModel.java:597)
	at com.intellij.ui.tree.AsyncTreeModel$CmdGetChildren.getNode(AsyncTreeModel.java:571)
	at com.intellij.ui.tree.AsyncTreeModel$ObsolescentCommand.get(AsyncTreeModel.java:463)
	at com.intellij.ui.tree.AsyncTreeModel$ObsolescentCommand.get(AsyncTreeModel.java:429)
	at com.intellij.util.concurrency.Command$Processor.lambda$process$1(Command.java:48)
	at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1166)
	at com.intellij.openapi.progress.util.ProgressIndicatorUtils.lambda$runInReadActionWithWriteActionPriority$0(ProgressIndicatorUtils.java:68)
	at com.intellij.openapi.progress.util.ProgressIndicatorUtils.lambda$runWithWriteActionPriority$1(ProgressIndicatorUtils.java:121)
	at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$2(CoreProgressManager.java:164)
	at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:586)
	at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:532)
	at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:86)
	at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:151)
	at com.intellij.openapi.progress.util.ProgressIndicatorUtils.runWithWriteActionPriority(ProgressIndicatorUtils.java:110)
	at com.intellij.openapi.progress.util.ProgressIndicatorUtils.runInReadActionWithWriteActionPriority(ProgressIndicatorUtils.java:68)
	at com.intellij.util.concurrency.Invoker.invokeSafely(Invoker.java:153)
	at com.intellij.util.concurrency.Invoker.lambda$invokeLater$0(Invoker.java:91)
	at com.intellij.util.concurrency.Invoker$BackgroundThread.lambda$offer$0(Invoker.java:320)
	at com.intellij.util.concurrency.BoundedTaskExecutor.doRun(BoundedTaskExecutor.java:220)
	at com.intellij.util.concurrency.BoundedTaskExecutor.access$100(BoundedTaskExecutor.java:26)
	at com.intellij.util.concurrency.BoundedTaskExecutor$2.lambda$run$0(BoundedTaskExecutor.java:198)
	at com.intellij.util.ConcurrencyUtil.runUnderThreadName(ConcurrencyUtil.java:224)
	at com.intellij.util.concurrency.BoundedTaskExecutor$2.run(BoundedTaskExecutor.java:194)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)

[Feature Request] Get composer icons by default

PHP devs would be enormously happy to have Composer (dependencies tool) composer.json and composer.lock icons with the shape of the little composer man logo. Can you add these please?

Thanks for the work. Cheers.

Possible Infinite Recursion

IDEA just warned me of this:

com.intellij.openapi.util.StackOverflowPreventedException: isValid leads to endless recursion in class com.intellij.freemarker.psi.files.FtlFileViewProvider: [Language: HTML, Language: FTL>]
	at com.intellij.psi.impl.file.impl.FileManagerImpl.shouldResurrect(FileManagerImpl.java:632)
	at com.intellij.psi.impl.file.impl.FileManagerImpl.evaluateValidity(FileManagerImpl.java:606)
	at com.intellij.psi.impl.file.impl.FileManagerImpl.findCachedViewProvider(FileManagerImpl.java:225)
	at com.intellij.psi.impl.file.impl.FileManagerImpl.getCachedPsiFileInner(FileManagerImpl.java:466)
	at com.intellij.psi.impl.file.impl.FileManagerImpl.getCachedPsiFile(FileManagerImpl.java:380)
	at com.intellij.psi.impl.PsiDocumentManagerBase.getCachedPsiFile(PsiDocumentManagerBase.java:143)
	at com.intellij.psi.impl.PsiDocumentManagerImpl$1.lambda$fileContentLoaded$0(PsiDocumentManagerImpl.java:55)
	at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:854)
	at com.intellij.openapi.application.ReadAction.compute(ReadAction.java:61)
	at com.intellij.psi.impl.PsiDocumentManagerImpl$1.fileContentLoaded(PsiDocumentManagerImpl.java:55)
	at com.intellij.util.messages.impl.MessageBusImpl.invokeMethod(MessageBusImpl.java:645)
	at com.intellij.util.messages.impl.MessageBusImpl.invokeListener(MessageBusImpl.java:620)
	at com.intellij.util.messages.impl.MessageBusImpl.deliverMessage(MessageBusImpl.java:417)
	at com.intellij.util.messages.impl.MessageBusImpl.pumpWaitingBuses(MessageBusImpl.java:390)
	at com.intellij.util.messages.impl.MessageBusImpl.pumpMessages(MessageBusImpl.java:372)
	at com.intellij.util.messages.impl.MessageBusImpl.access$200(MessageBusImpl.java:33)
	at com.intellij.util.messages.impl.MessageBusImpl$MessagePublisher.invoke(MessageBusImpl.java:179)
	at com.sun.proxy.$Proxy20.fileContentLoaded(Unknown Source)
	at jdk.internal.reflect.GeneratedMethodAccessor92.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at com.intellij.openapi.fileEditor.impl.FileDocumentManagerImpl.multiCast(FileDocumentManagerImpl.java:174)
	at com.intellij.openapi.fileEditor.impl.FileDocumentManagerImpl.lambda$new$0(FileDocumentManagerImpl.java:129)
	at com.sun.proxy.$Proxy20.fileContentLoaded(Unknown Source)
	at com.intellij.openapi.fileEditor.impl.FileDocumentManagerImpl.fileContentLoaded(FileDocumentManagerImpl.java:864)
	at com.intellij.openapi.fileEditor.impl.FileDocumentManagerBase.getDocument(FileDocumentManagerBase.java:70)
	at com.intellij.freemarker.lexer.FtlLexer.guessDirectiveStyle(FtlLexer.java:65)
	at com.intellij.freemarker.psi.files.FtlFileViewProvider.<init>(FtlFileViewProvider.java:43)
	at com.intellij.freemarker.psi.files.FtlFileViewProviderFactory.createFileViewProvider(FtlFileViewProviderFactory.java:21)
	at com.intellij.psi.impl.file.impl.FileManagerImpl.createFileViewProvider(FileManagerImpl.java:267)
	at com.intellij.psi.impl.file.impl.FileManagerImpl.shouldResurrect(FileManagerImpl.java:636)
	at com.intellij.psi.impl.file.impl.FileManagerImpl.evaluateValidity(FileManagerImpl.java:606)
	at com.intellij.psi.impl.file.impl.FileManagerImpl.findCachedViewProvider(FileManagerImpl.java:225)
	at com.intellij.psi.impl.file.impl.FileManagerImpl.findViewProvider(FileManagerImpl.java:182)
	at com.intellij.psi.impl.file.impl.FileManagerImpl.findFile(FileManagerImpl.java:361)
	at com.intellij.psi.impl.PsiManagerImpl.findFile(PsiManagerImpl.java:154)
	at lermitage.intellij.extra.icons.BaseIconProvider.getIcon(BaseIconProvider.java:96)
	at com.intellij.openapi.vcs.changes.ui.ChangesBrowserNodeRenderer.lambda$setIcon$0(ChangesBrowserNodeRenderer.java:102)
	at com.intellij.openapi.extensions.impl.ExtensionProcessingHelper.computeSafeIfAny(ExtensionProcessingHelper.java:56)
	at com.intellij.openapi.extensions.ExtensionPointName.computeSafeIfAny(ExtensionPointName.java:54)
	at com.intellij.openapi.vcs.changes.ui.ChangesBrowserNodeRenderer.setIcon(ChangesBrowserNodeRenderer.java:102)
	at com.intellij.openapi.vcs.changes.ui.ChangesBrowserChangeNode.setIcon(ChangesBrowserChangeNode.java:83)
	at com.intellij.openapi.vcs.changes.ui.ChangesBrowserChangeNode.render(ChangesBrowserChangeNode.java:70)
	at com.intellij.openapi.vcs.changes.ui.ChangesBrowserNodeRenderer.customizeCellRenderer(ChangesBrowserNodeRenderer.java:53)
	at com.intellij.ui.ColoredTreeCellRenderer.rendererComponentInner(ColoredTreeCellRenderer.java:122)
	at com.intellij.ui.ColoredTreeCellRenderer.getTreeCellRendererComponent(ColoredTreeCellRenderer.java:54)
	at com.intellij.openapi.vcs.changes.ui.ChangesTreeCellRenderer.getTreeCellRendererComponent(ChangesTreeCellRenderer.kt:50)
	at com.intellij.openapi.vcs.changes.ui.HoverChangesTree$MyTreeRenderer.getTreeCellRendererComponent(HoverChangesTree.kt:91)
	at com.intellij.ui.tree.ui.DefaultTreeUI.getRenderer(DefaultTreeUI.java:172)
	at com.intellij.ui.tree.ui.DefaultTreeUI$2.getNodeDimensions(DefaultTreeUI.java:458)
	at java.desktop/javax.swing.tree.AbstractLayoutCache.getNodeDimensions(AbstractLayoutCache.java:493)
	at java.desktop/javax.swing.tree.VariableHeightLayoutCache$TreeStateNode.updatePreferredSize(VariableHeightLayoutCache.java:1344)
	at java.desktop/javax.swing.tree.VariableHeightLayoutCache$TreeStateNode.expand(VariableHeightLayoutCache.java:1465)
	at java.desktop/javax.swing.tree.VariableHeightLayoutCache$TreeStateNode.expand(VariableHeightLayoutCache.java:1272)
	at java.desktop/javax.swing.tree.VariableHeightLayoutCache.ensurePathIsExpanded(VariableHeightLayoutCache.java:967)
	at java.desktop/javax.swing.tree.VariableHeightLayoutCache.setExpandedState(VariableHeightLayoutCache.java:181)
	at com.intellij.ui.tree.ui.DefaultTreeUI$3.setExpandedState(DefaultTreeUI.java:489)
	at java.desktop/javax.swing.plaf.basic.BasicTreeUI.updateExpandedDescendants(BasicTreeUI.java:1975)
	at java.desktop/javax.swing.plaf.basic.BasicTreeUI$Handler.treeExpanded(BasicTreeUI.java:4212)
	at java.desktop/javax.swing.JTree.fireTreeExpanded(JTree.java:2801)
	at java.desktop/javax.swing.JTree.setExpandedState(JTree.java:3702)
	at java.desktop/javax.swing.JTree.expandPath(JTree.java:2244)
	at com.intellij.ide.util.treeView.TreeState$JTreeFacade.expand(TreeState.java:385)
	at com.intellij.ide.util.treeView.TreeState.expandImpl(TreeState.java:337)
	at com.intellij.ide.util.treeView.TreeState$3.perform(TreeState.java:351)
	at com.intellij.ide.util.treeView.TreeRunnable.run(TreeRunnable.java:20)
	at com.intellij.openapi.util.ActionCallback$ExecutedExecutionCallback.doWhenExecuted(ActionCallback.java:177)
	at com.intellij.openapi.util.ActionCallback.doWhenDone(ActionCallback.java:111)
	at com.intellij.ide.util.treeView.TreeState.expandImpl(TreeState.java:337)
	at com.intellij.ide.util.treeView.TreeState.applyExpandedTo(TreeState.java:282)
	at com.intellij.ide.util.treeView.TreeState$1.lambda$perform$0(TreeState.java:259)
	at com.intellij.ide.util.treeView.TreeState$JTreeFacade.batch(TreeState.java:399)
	at com.intellij.ide.util.treeView.TreeState$1.perform(TreeState.java:259)
	at com.intellij.ide.util.treeView.TreeRunnable.run(TreeRunnable.java:20)
	at com.intellij.openapi.util.ActionCallback$ExecutedExecutionCallback.doWhenExecuted(ActionCallback.java:177)
	at com.intellij.openapi.util.ActionCallback.doWhenDone(ActionCallback.java:111)
	at com.intellij.ide.util.treeView.TreeState.applyTo(TreeState.java:256)
	at com.intellij.openapi.vcs.changes.ui.ChangesListView.updateModel(ChangesListView.java:97)
	at com.intellij.openapi.vcs.changes.ChangesViewManager$ChangesViewToolWindowPanel.lambda$refreshView$18(ChangesViewManager.java:780)
	at com.intellij.openapi.application.TransactionGuardImpl.runWithWritingAllowed(TransactionGuardImpl.java:214)
	at com.intellij.openapi.application.TransactionGuardImpl.access$200(TransactionGuardImpl.java:21)
	at com.intellij.openapi.application.TransactionGuardImpl$2.run(TransactionGuardImpl.java:196)
	at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:794)
	at com.intellij.openapi.application.impl.ApplicationImpl.lambda$invokeLater$4(ApplicationImpl.java:350)
	at com.intellij.openapi.application.impl.FlushQueue.doRun(FlushQueue.java:84)
	at com.intellij.openapi.application.impl.FlushQueue.runNextEvent(FlushQueue.java:133)
	at com.intellij.openapi.application.impl.FlushQueue.flushNow(FlushQueue.java:46)
	at com.intellij.openapi.application.impl.FlushQueue$FlushNow.run(FlushQueue.java:189)
	at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:776)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:727)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:746)
	at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:887)
	at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:756)
	at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$7(IdeEventQueue.java:443)
	at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:825)
	at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$8(IdeEventQueue.java:442)
	at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:794)
	at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:488)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

Incorrect Storybook extension regex

Your storybook icon regex is *.tsx and *.jsx. This causes all files use the Storybook icon including React components. These should be removed.

Only stories should use the Storybook icon. React components should still use the React icon.

You already have two other rules in the set for this which could actually become one rule.

*.stories.mdx and *.stor(y|ies).(js|jsx|ts|tsx)

You can make this into a single rule:

*.stor(y|ies).(js|jsx|ts|tsx|mdx)

General Rule

Hi, I want to create general rule, for example all directories should have this icon, if there is no specific icon. is it possible?

Different Dockerfiles with prefix not supported

It is common when dealing with multiple Dockerfiles to prefix the name of the files with their purpose, eg:

dev.Dockerfile
integration.Dockerfile

It would be nice if these Files would be recognized aswell and have the Docker Icon applied to them.

Feature: Preset Icon Set for User Icons

Show an example icon set to choose from on creating a new user icon. e.g. those from Atom Material Icons Plugin or similar.

I am too lazy to search for all my custom Icons :-)

Exception in plugin Extra Icons

Latest CLion under Ubuntu 20.4

java.lang.Throwable: Project is already disposed: Project(name=mycode, containerState=DISPOSE_IN_PROGRESS, componentStore=/home/user/Development/mycode2)
at com.intellij.openapi.diagnostic.Logger.error(Logger.java:143)
at com.intellij.psi.impl.file.impl.FileManagerImpl.dispatchPendingEvents(FileManagerImpl.java:305)
at com.intellij.psi.impl.file.impl.FileManagerImpl.findFile(FileManagerImpl.java:356)
at com.intellij.psi.impl.PsiManagerImpl.findFile(PsiManagerImpl.java:153)
at lermitage.intellij.extra.icons.BaseIconProvider.getIcon(BaseIconProvider.java:77)
at com.intellij.openapi.vcs.changes.ui.ChangesBrowserNodeRenderer.lambda$setIcon$0(ChangesBrowserNodeRenderer.java:100)
at com.intellij.openapi.extensions.impl.ExtensionProcessingHelper.computeSafeIfAny(ExtensionProcessingHelper.java:55)
at com.intellij.openapi.extensions.ExtensionPointName.computeSafeIfAny(ExtensionPointName.java:57)
at com.intellij.openapi.vcs.changes.ui.ChangesBrowserNodeRenderer.setIcon(ChangesBrowserNodeRenderer.java:100)
at com.intellij.openapi.vcs.changes.ui.ChangesBrowserChangeNode.setIcon(ChangesBrowserChangeNode.java:82)
at com.intellij.openapi.vcs.changes.ui.ChangesBrowserChangeNode.render(ChangesBrowserChangeNode.java:69)
at com.intellij.openapi.vcs.changes.ui.ChangesBrowserNodeRenderer.customizeCellRenderer(ChangesBrowserNodeRenderer.java:51)
at com.intellij.ui.ColoredTreeCellRenderer.rendererComponentInner(ColoredTreeCellRenderer.java:118)
at com.intellij.ui.ColoredTreeCellRenderer.getTreeCellRendererComponent(ColoredTreeCellRenderer.java:53)
at com.intellij.openapi.vcs.changes.ui.ChangesTreeCellRenderer.getTreeCellRendererComponent(ChangesTreeCellRenderer.kt:41)
at com.intellij.ui.tree.ui.DefaultTreeUI.getRenderer(DefaultTreeUI.java:159)
at com.intellij.ui.tree.ui.DefaultTreeUI.access$500(DefaultTreeUI.java:50)
at com.intellij.ui.tree.ui.DefaultTreeUI$1.getNodeDimensions(DefaultTreeUI.java:365)
at java.desktop/javax.swing.tree.AbstractLayoutCache.getNodeDimensions(AbstractLayoutCache.java:493)
at java.desktop/javax.swing.tree.VariableHeightLayoutCache$TreeStateNode.updatePreferredSize(VariableHeightLayoutCache.java:1344)
at java.desktop/javax.swing.tree.VariableHeightLayoutCache.updateNodeSizes(VariableHeightLayoutCache.java:903)
at java.desktop/javax.swing.tree.VariableHeightLayoutCache.invalidateSizes(VariableHeightLayoutCache.java:371)
at java.desktop/javax.swing.plaf.basic.BasicTreeUI$Handler.propertyChange(BasicTreeUI.java:3850)
at com.intellij.ui.tree.ui.DefaultTreeUI$4.propertyChange(DefaultTreeUI.java:472)
at java.desktop/java.beans.PropertyChangeSupport.fire(PropertyChangeSupport.java:341)
at java.desktop/java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:333)
at java.desktop/java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:266)
at java.desktop/java.awt.Component.firePropertyChange(Component.java:8757)
at java.desktop/java.awt.Component.updateGraphicsData(Component.java:1185)
at java.desktop/java.awt.Container.updateChildGraphicsData(Container.java:1183)
at java.desktop/java.awt.Component.updateGraphicsData(Component.java:1177)
at java.desktop/java.awt.Container.updateChildGraphicsData(Container.java:1183)
at java.desktop/java.awt.Component.updateGraphicsData(Component.java:1177)
at java.desktop/java.awt.Container.updateChildGraphicsData(Container.java:1183)
at java.desktop/java.awt.Component.updateGraphicsData(Component.java:1177)
at java.desktop/java.awt.Container.updateChildGraphicsData(Container.java:1183)
at java.desktop/java.awt.Component.updateGraphicsData(Component.java:1177)
at java.desktop/java.awt.Container.updateChildGraphicsData(Container.java:1183)
at java.desktop/java.awt.Component.updateGraphicsData(Component.java:1177)
at java.desktop/java.awt.Container.updateChildGraphicsData(Container.java:1183)
at java.desktop/java.awt.Component.updateGraphicsData(Component.java:1177)
at java.desktop/java.awt.Container.updateChildGraphicsData(Container.java:1183)
at java.desktop/java.awt.Component.updateGraphicsData(Component.java:1177)
at java.desktop/java.awt.Container.updateChildGraphicsData(Container.java:1183)
at java.desktop/java.awt.Component.updateGraphicsData(Component.java:1177)
at java.desktop/java.awt.Container.updateChildGraphicsData(Container.java:1183)
at java.desktop/java.awt.Component.updateGraphicsData(Component.java:1177)
at java.desktop/java.awt.Container.updateChildGraphicsData(Container.java:1183)
at java.desktop/java.awt.Component.updateGraphicsData(Component.java:1177)
at java.desktop/java.awt.Container.updateChildGraphicsData(Container.java:1183)
at java.desktop/java.awt.Component.updateGraphicsData(Component.java:1177)
at java.desktop/java.awt.Container.updateChildGraphicsData(Container.java:1183)
at java.desktop/java.awt.Component.updateGraphicsData(Component.java:1177)
at java.desktop/java.awt.Container.updateChildGraphicsData(Container.java:1183)
at java.desktop/java.awt.Component.updateGraphicsData(Component.java:1177)
at java.desktop/java.awt.Container.updateChildGraphicsData(Container.java:1183)
at java.desktop/java.awt.Component.updateGraphicsData(Component.java:1177)
at java.desktop/java.awt.Container.updateChildGraphicsData(Container.java:1183)
at java.desktop/java.awt.Component.updateGraphicsData(Component.java:1177)
at java.desktop/java.awt.Container.updateChildGraphicsData(Container.java:1183)
at java.desktop/java.awt.Component.updateGraphicsData(Component.java:1177)
at java.desktop/java.awt.Container.updateChildGraphicsData(Container.java:1183)
at java.desktop/java.awt.Component.updateGraphicsData(Component.java:1177)
at java.desktop/java.awt.Component.setGraphicsConfiguration(Component.java:1165)
at java.desktop/java.awt.Container.remove(Container.java:1245)
at java.desktop/java.awt.Container.remove(Container.java:1289)
at java.desktop/javax.swing.JFrame.remove(JFrame.java:574)
at java.desktop/javax.swing.JFrame.setRootPane(JFrame.java:626)
at com.intellij.openapi.wm.impl.IdeFrameImpl.setRootPane(IdeFrameImpl.java:75)
at com.intellij.openapi.wm.impl.ProjectFrameHelper.dispose(ProjectFrameHelper.java:422)
at com.intellij.openapi.util.ObjectNode.lambda$execute$0(ObjectNode.java:111)
at com.intellij.openapi.util.ObjectTree.executeActionWithRecursiveGuard(ObjectTree.java:193)
at com.intellij.openapi.util.ObjectNode.execute(ObjectNode.java:71)
at com.intellij.openapi.util.ObjectTree.executeAll(ObjectTree.java:141)
at com.intellij.openapi.util.Disposer.dispose(Disposer.java:130)
at com.intellij.openapi.util.Disposer.dispose(Disposer.java:120)
at com.intellij.openapi.wm.impl.WindowManagerImpl.releaseFrame(WindowManagerImpl.kt:376)
at com.intellij.openapi.wm.impl.ProjectFrameHelper.releaseFrame(ProjectFrameHelper.java:183)
at com.intellij.openapi.wm.impl.ToolWindowManagerImpl.projectClosed(ToolWindowManagerImpl.kt:553)
at com.intellij.openapi.wm.impl.ToolWindowManagerImpl$ToolWindowManagerAppLevelHelper$2.projectClosed(ToolWindowManagerImpl.kt:218)
at jdk.internal.reflect.GeneratedMethodAccessor187.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at com.intellij.util.messages.impl.MessageBusImpl.invokeListener(MessageBusImpl.java:632)
at com.intellij.util.messages.impl.MessageBusImpl.deliverMessage(MessageBusImpl.java:406)
at com.intellij.util.messages.impl.MessageBusImpl.pumpWaitingBuses(MessageBusImpl.java:384)
at com.intellij.util.messages.impl.MessageBusImpl.pumpMessages(MessageBusImpl.java:366)
at com.intellij.util.messages.impl.MessageBusImpl.access$100(MessageBusImpl.java:32)
at com.intellij.util.messages.impl.MessageBusImpl$MessagePublisher.invoke(MessageBusImpl.java:187)
at com.sun.proxy.$Proxy78.projectClosed(Unknown Source)
at com.intellij.openapi.project.impl.ProjectManagerImpl.fireProjectClosed(ProjectManagerImpl.java:473)
at com.intellij.openapi.project.impl.ProjectManagerImpl.lambda$closeProject$5(ProjectManagerImpl.java:383)
at com.intellij.openapi.application.impl.ApplicationImpl.runWriteAction(ApplicationImpl.java:980)
at com.intellij.openapi.project.impl.ProjectManagerImpl.closeProject(ProjectManagerImpl.java:372)
at com.intellij.openapi.project.impl.ProjectManagerImpl.closeAndDispose(ProjectManagerImpl.java:407)
at com.intellij.openapi.project.impl.ProjectManagerExImplKt.checkExistingProjectOnOpen(ProjectManagerExImpl.kt:285)
at com.intellij.openapi.project.impl.ProjectManagerExImplKt.access$checkExistingProjectOnOpen(ProjectManagerExImpl.kt:1)
at com.intellij.openapi.project.impl.ProjectManagerExImpl.openProject(ProjectManagerExImpl.kt:90)
at com.intellij.ide.RecentProjectsManagerBase.openProject(RecentProjectsManagerBase.kt:305)
at com.intellij.ide.ReopenProjectAction.actionPerformed(ReopenProjectAction.java:65)
at com.intellij.openapi.actionSystem.ex.ActionUtil.performActionDumbAware(ActionUtil.java:282)
at com.intellij.openapi.actionSystem.impl.ActionMenuItem$ActionTransmitter.lambda$actionPerformed$0(ActionMenuItem.java:296)
at com.intellij.openapi.wm.impl.FocusManagerImpl.runOnOwnContext(FocusManagerImpl.java:281)
at com.intellij.openapi.wm.impl.IdeFocusManagerImpl.runOnOwnContext(IdeFocusManagerImpl.java:77)
at com.intellij.openapi.actionSystem.impl.ActionMenuItem$ActionTransmitter.actionPerformed(ActionMenuItem.java:285)
at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1967)
at com.intellij.openapi.actionSystem.impl.ActionMenuItem.lambda$fireActionPerformed$0(ActionMenuItem.java:112)
at com.intellij.openapi.application.TransactionGuardImpl.performUserActivity(TransactionGuardImpl.java:94)
at com.intellij.openapi.actionSystem.impl.ActionMenuItem.fireActionPerformed(ActionMenuItem.java:112)
at com.intellij.ui.plaf.beg.BegMenuItemUI.doClick(BegMenuItemUI.java:519)
at com.intellij.ui.plaf.beg.BegMenuItemUI.access$300(BegMenuItemUI.java:36)
at com.intellij.ui.plaf.beg.BegMenuItemUI$MyMouseInputHandler.mouseReleased(BegMenuItemUI.java:541)
at java.desktop/java.awt.Component.processMouseEvent(Component.java:6654)
at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3345)
at java.desktop/java.awt.Component.processEvent(Component.java:6419)
at java.desktop/java.awt.Container.processEvent(Container.java:2263)
at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5029)
at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)
at java.desktop/java.awt.Component.dispatchEvent(Component.java:4861)
at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4918)
at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4547)
at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4488)
at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307)
at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2773)
at java.desktop/java.awt.Component.dispatchEvent(Component.java:4861)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:778)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:727)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95)
at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:751)
at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:749)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:748)
at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:971)
at com.intellij.ide.IdeEventQueue.dispatchMouseEvent(IdeEventQueue.java:906)
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:838)
at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$8(IdeEventQueue.java:452)
at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:744)
at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$9(IdeEventQueue.java:451)
at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:802)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:505)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

ClassCastException on some custom PNG icons

Create a User icon with a PNG file like https://github.com/jonathanlermitage/intellij-extra-icons-plugin/blob/master/resources/icons/bash.png

An error occurs when this User icon is saved:

java.lang.ClassCastException: class sun.awt.image.ToolkitImage cannot be cast to class java.awt.image.BufferedImage (sun.awt.image.ToolkitImage and java.awt.image.BufferedImage are in module java.desktop of loader 'bootstrap')
at lermitage.intellij.extra.icons.CustomIconLoader.toBase64(CustomIconLoader.java:93)
at lermitage.intellij.extra.icons.cfg.dialogs.ModelDialog.getModelFromInput(ModelDialog.java:97)
at lermitage.intellij.extra.icons.cfg.SettingsForm.lambda$createToolbarDecorator$6(SettingsForm.java:291)
at com.intellij.ui.ToolbarDecorator$2.doAdd(ToolbarDecorator.java:427)
at com.intellij.ui.CommonActionsPanel$Buttons.performAction(CommonActionsPanel.java:57)
at com.intellij.ui.CommonActionsPanel$MyActionButton.actionPerformed(CommonActionsPanel.java:252)
at com.intellij.openapi.actionSystem.ex.ActionUtil$1.run(ActionUtil.java:298)
at com.intellij.openapi.actionSystem.ex.ActionUtil.performActionDumbAware(ActionUtil.java:315)
at com.intellij.openapi.actionSystem.ex.ActionUtil.performActionDumbAwareWithCallbacks(ActionUtil.java:289)
at com.intellij.openapi.actionSystem.impl.ActionButton.actionPerformed(ActionButton.java:194)
at com.intellij.openapi.actionSystem.impl.ActionButton.performAction(ActionButton.java:157)
at com.intellij.openapi.actionSystem.impl.ActionButton.processMouseEvent(ActionButton.java:447)
at java.desktop/java.awt.Component.processEvent(Component.java:6416)
at java.desktop/java.awt.Container.processEvent(Container.java:2263)
at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5026)
at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)
at java.desktop/java.awt.Component.dispatchEvent(Component.java:4858)
at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4918)
at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4547)
at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4488)
at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307)
at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2773)
at java.desktop/java.awt.Component.dispatchEvent(Component.java:4858)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:778)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:727)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95)
at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:751)
at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:749)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:748)
at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:908)
at com.intellij.ide.IdeEventQueue.dispatchMouseEvent(IdeEventQueue.java:846)
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:778)
at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$8(IdeEventQueue.java:424)
at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:687)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:423)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:117)
at java.desktop/java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:190)
at java.desktop/java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:235)
at java.desktop/java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:233)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.desktop/java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:233)
at java.desktop/java.awt.Dialog.show(Dialog.java:1063)
at com.intellij.openapi.ui.impl.DialogWrapperPeerImpl$MyDialog.show(DialogWrapperPeerImpl.java:708)
at com.intellij.openapi.ui.impl.DialogWrapperPeerImpl.show(DialogWrapperPeerImpl.java:433)
at com.intellij.openapi.ui.DialogWrapper.doShow(DialogWrapper.java:1698)
at com.intellij.openapi.ui.DialogWrapper.show(DialogWrapper.java:1657)
at com.intellij.openapi.options.newEditor.SettingsDialog.lambda$show$0(SettingsDialog.java:86)
at com.intellij.openapi.application.TransactionGuardImpl.runSyncTransaction(TransactionGuardImpl.java:83)
at com.intellij.openapi.application.TransactionGuardImpl.submitTransactionAndWait(TransactionGuardImpl.java:149)
at com.intellij.openapi.options.newEditor.SettingsDialog.show(SettingsDialog.java:86)
at com.intellij.ide.actions.ShowSettingsUtilImpl.showSettingsDialog(ShowSettingsUtilImpl.java:84)
at com.intellij.ide.actions.ShowSettingsAction.perform(ShowSettingsAction.java:54)
at com.intellij.ide.actions.ShowSettingsAction.actionPerformed(ShowSettingsAction.java:41)
at com.intellij.openapi.actionSystem.ex.ActionUtil$1.run(ActionUtil.java:298)
at com.intellij.openapi.actionSystem.ex.ActionUtil.performActionDumbAware(ActionUtil.java:315)
at com.intellij.openapi.actionSystem.impl.ActionMenuItem$ActionTransmitter.lambda$actionPerformed$0(ActionMenuItem.java:294)
at com.intellij.openapi.wm.impl.FocusManagerImpl.runOnOwnContext(FocusManagerImpl.java:263)
at com.intellij.openapi.wm.impl.IdeFocusManagerImpl.runOnOwnContext(IdeFocusManagerImpl.java:77)
at com.intellij.openapi.actionSystem.impl.ActionMenuItem$ActionTransmitter.actionPerformed(ActionMenuItem.java:284)
at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1967)
at com.intellij.openapi.actionSystem.impl.ActionMenuItem.lambda$fireActionPerformed$0(ActionMenuItem.java:112)
at com.intellij.openapi.application.TransactionGuardImpl.runSyncTransaction(TransactionGuardImpl.java:83)
at com.intellij.openapi.application.TransactionGuardImpl.lambda$submitTransaction$1(TransactionGuardImpl.java:107)
at com.intellij.openapi.application.TransactionGuardImpl.submitTransaction(TransactionGuardImpl.java:116)
at com.intellij.openapi.application.TransactionGuard.submitTransaction(TransactionGuard.java:121)
at com.intellij.openapi.actionSystem.impl.ActionMenuItem.fireActionPerformed(ActionMenuItem.java:112)
at com.intellij.ui.plaf.beg.BegMenuItemUI.doClick(BegMenuItemUI.java:517)
at com.intellij.ui.plaf.beg.BegMenuItemUI.access$300(BegMenuItemUI.java:36)
at com.intellij.ui.plaf.beg.BegMenuItemUI$MyMouseInputHandler.mouseReleased(BegMenuItemUI.java:539)
at java.desktop/java.awt.Component.processMouseEvent(Component.java:6651)
at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3342)
at java.desktop/java.awt.Component.processEvent(Component.java:6416)
at java.desktop/java.awt.Container.processEvent(Container.java:2263)
at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5026)
at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)
at java.desktop/java.awt.Component.dispatchEvent(Component.java:4858)
at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4918)
at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4547)
at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4488)
at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307)
at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2773)
at java.desktop/java.awt.Component.dispatchEvent(Component.java:4858)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:778)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:727)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95)
at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:751)
at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:749)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:748)
at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:908)
at com.intellij.ide.IdeEventQueue.dispatchMouseEvent(IdeEventQueue.java:846)
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:778)
at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$8(IdeEventQueue.java:424)
at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:698)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:423)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

Feat: edit icons list

Double click on a row in Plugin icons list and edit regexp/pattern/wildcard (similar to Preferences/Editor/File Types settings).

See #9 (comment)


Motivation

Extra Icons is an IntelliJ plugin that registers some icons for common files like Travis YML, Appveyor YML, etc. Evey icon is associated to a file (or folder) pattern.
Install the plugin, then Go to File, Settings, Appearance, Extra icons. You will see a table with two tabs: Plugin icons and User icons.

  • Plugin icons: icons bundled with plugin. You can only select or deselect icons.
  • User icons: additional icons provided by user. You can add a new icon, then register a file pattern.

It would be nice to allow user to customize the Plugin icons file patterns or icons.

Proposed solution

Step 1: make the Plugin icons table configurable.

Plugin icons table is populated with a static list of icons and file patterns.
lermitage.intellij.extra.icons.ExtraIconProvider contains this static list. You should rework the lermitage.intellij.extra.icons.Model class to make it configurable (customize file pattern, maybe icon too), then rework lermitage.intellij.extra.icons.cfg.SettingsService to store (and load) customized Model entries.

Step 2: add UI dialogs to configure Plugin icons entries.

Configuration classes (UI and services) are located in the lermitage.intellij.extra.icons.cfg package. ModelDialog and ModelConditionDialog classes are associated to the User icons tab, they show dialogs to pick a new icon then create a file pattern. You can reuse them in the Plugin icons tab: add an action listener on the icons table (to catch double-clicks), then invoke UI dialogs. Finally, use SettingsService to persist changes.

This is not an easy task and you may prefer small pull requests (big pull requests are too difficult to review). Don't hesitate to ask for help ;-)
Also, feel free to add your name/nickname/Linkedin/Twitter/whatever to the contributors list.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.