# Service management partially broken in recent IDE releases

**URL:** <https://platform.jetbrains.com/t/service-management-partially-broken-in-recent-ide-releases/2402>\
**Category:** IntelliJ Platform\
**Created:** [July 31, 2025, 7:39pm UTC](https://platform.jetbrains.com/t/service-management-partially-broken-in-recent-ide-releases/2402 "2025-07-31T19:39:50Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![jonathanlermitage.1](https://avatars.discourse-cdn.com/v4/letter/j/e480ec/32.png) [@jonathanlermitage.1](https://platform.jetbrains.com/u/jonathanlermitage.1)\
**Post date:** [July 31, 2025, 7:39pm UTC](https://platform.jetbrains.com/t/service-management-partially-broken-in-recent-ide-releases/2402/1 "2025-07-31T19:39:50Z")

</div>

I don’t know if you’re facing the same issues with IJ 2025.1.4.1, WebStorm 2025.1.4.1, etc.

I’m getting a service this way: ``ApplicationManager.getApplication().getService(SettingsService.class)``.

Unfortunately, more and more of my customers are facing various critical issues saying (I can’t reproduce, for now):

- `Class initialization must not depend on services. Consider using instance of the service on-demand instead`. Problem: I’m absolutely not on class init. I’m in `IconPathPatcher:patchPath`. [intellij-community/platform/service-container/src/com/intellij/serviceContainer/ComponentManagerImpl.kt at a8c6da86ad21d6664738639795e636d855ce2e6b · JetBrains/intellij-community · GitHub](https://github.com/JetBrains/intellij-community/blob/a8c6da86ad21d6664738639795e636d855ce2e6b/platform/service-container/src/com/intellij/serviceContainer/ComponentManagerImpl.kt#L1546) (the `checkOutsideClassInitializer` method) seems buggy. I don’t know what do do
- `java.lang.ClassCastException: class lermitage.intellij.extraidetweaks.settings.SettingsIDEService cannot be cast to class lermitage.intellij.extraidetweaks.settings.SettingsIDEService (lermitage.intellij.extraidetweaks.settings.SettingsIDEService is in unnamed module of loader com.intellij.ide.plugins.cl.PluginClassLoader @3cd7f00f; lermitage.intellij.extraidetweaks.settings.SettingsIDEService is in unnamed module of loader com.intellij.ide.plugins.cl.PluginClassLoader @bba969)`. This issue makes me crazy. This happens when getting my service in a `ModuleRootListener`, or an `AppLifecycleListener`. I don’t know why.

This worked perfectly for years (at least 3 years), but the recent IDE releases broke this.

I opened an issue just in case ([Youtrack issue](https://youtrack.jetbrains.com/issue/IDEA-376370/AppLifecycleListeners-constructor-cant-get-service)). I’m wondering if you have the same problem.

---

<div class="post-metadata">

**Author:** ![yuriy.artamonov](https://sea1.discourse-cdn.com/flex001/user_avatar/platform.jetbrains.com/yuriy.artamonov/32/48_2.png) [@yuriy.artamonov](https://platform.jetbrains.com/u/yuriy.artamonov)\
**Post date:** [August 1, 2025, 8:43am UTC](https://platform.jetbrains.com/t/service-management-partially-broken-in-recent-ide-releases/2402/2 "2025-08-01T08:43:21Z")

</div>

> [@jonathanlermitage.1](#):
>
> Class initialization must not depend on services.

This is severe problem in code you usually need to address. Could you share the stack trace?

---

<div class="post-metadata">

**Author:** ![yuriy.artamonov](https://sea1.discourse-cdn.com/flex001/user_avatar/platform.jetbrains.com/yuriy.artamonov/32/48_2.png) [@yuriy.artamonov](https://platform.jetbrains.com/u/yuriy.artamonov)\
**Post date:** [August 1, 2025, 8:46am UTC](https://platform.jetbrains.com/t/service-management-partially-broken-in-recent-ide-releases/2402/3 "2025-08-01T08:46:24Z")

</div>

```auto
java.lang.Throwable: krasa.grepconsole.tail.TailRunExecutor <clinit> 
requests lermitage.intellij.extratci.SettingsService instance. 
Class initialization must not depend on services. Consider using instance of the service on-demand instead.

```

Here the issue seems clear, right? You have a static final field probably in `TailRunExecutor` that want to access the service

---

<div class="post-metadata">

**Author:** ![jonathanlermitage.1](https://avatars.discourse-cdn.com/v4/letter/j/e480ec/32.png) [@jonathanlermitage.1](https://platform.jetbrains.com/u/jonathanlermitage.1)\
**Post date:** [August 1, 2025, 9:17am UTC](https://platform.jetbrains.com/t/service-management-partially-broken-in-recent-ide-releases/2402/4 "2025-08-01T09:17:17Z")

</div>

@yuriy.artamonov No. I have no static field.

`TailRunExecutor` comes fro another plugin (not mine). My plugin registers an IconPathPatcher, which changes many icons, including an icon from the other plugin.

I get my service in the `IconPathPatcher:patchPath` method (previously, I did this in my constructor, but got the same error), but it raises the given stacktrace. I don’t know why it says I’m in an “init” block.

I explain this in [https://youtrack.jetbrains.com/issue/IDEA-376370/AppLifecycleListeners-constructor-cant-get-service](https://youtrack.jetbrains.com/issue/IDEA-376370/AppLifecycleListeners-constructor-cant-get-service).

[intellij-community/platform/service-container/src/com/intellij/serviceContainer/ComponentManagerImpl.kt at a8c6da86ad21d6664738639795e636d855ce2e6b · JetBrains/intellij-community · GitHub](https://github.com/JetBrains/intellij-community/blob/a8c6da86ad21d6664738639795e636d855ce2e6b/platform/service-container/src/com/intellij/serviceContainer/ComponentManagerImpl.kt#L1546) seems wrong. But it explains only some errors, not all of them.

---

<div class="post-metadata">

**Author:** ![jonathanlermitage.1](https://avatars.discourse-cdn.com/v4/letter/j/e480ec/32.png) [@jonathanlermitage.1](https://platform.jetbrains.com/u/jonathanlermitage.1)\
**Post date:** [August 1, 2025, 9:19am UTC](https://platform.jetbrains.com/t/service-management-partially-broken-in-recent-ide-releases/2402/5 "2025-08-01T09:19:44Z")

</div>

You can get the stacktraces here:

- [com.intellij.diagnostic.PluginException: ID 'keepIDlermitage.intellij.extraidetweaks.actions.OpenFilesWithAction2' is already taken by action 'External Program (2) (Open in configured external program (see Extra IDE Tweaks config))' (l) (Plugin: Extra IDE · Issue #6 · jonathanlermitage/intellij-extra-ide-tweaks · GitHub](https://github.com/jonathanlermitage/intellij-extra-ide-tweaks/issues/6)
- [java.lang.ClassCastException: class lermitage.intellij.extraidetweaks.settings.SettingsIDEService cannot be cast to class lermitage.intellij.extraidetweaks.settings.SettingsIDEService (lermitage.intellij.extraidetweaks.settings.SettingsIDEService is in unn · Issue #5 · jonathanlermitage/intellij-extra-ide-tweaks · GitHub](https://github.com/jonathanlermitage/intellij-extra-ide-tweaks/issues/5)
- [com.intellij.diagnostic.PluginException: cannot create class "i" (module=PluginDescriptor(name=Extra IDE Tweaks, id=lermitage.ij.extraidetweaks, descriptorPath=plugin.xml, path=~\AppData\Roaming\JetBrains\PyCharm2025.1\plugins\Extra IDE Tweaks, version=202 · Issue #4 · jonathanlermitage/intellij-extra-ide-tweaks · GitHub](https://github.com/jonathanlermitage/intellij-extra-ide-tweaks/issues/4)
- [java.lang.Throwable: krasa.grepconsole.tail.TailRunExecutor \<clinit\> requests lermitage.intellij.extratci.SettingsService instance. Class initialization must not depend on services. Consider using instance of the service on-demand instead. · Issue #5 · jonathanlermitage/ij-extra-all-plugins-pack-pub · GitHub](https://github.com/jonathanlermitage/ij-extra-all-plugins-pack-pub/issues/5)
- [java.lang.Throwable: icons.AwsIcons$Resources \<clinit\> requests lermitage.intellij.extratci.SettingsService instance. Class initialization must not depend on services. Consider using instance of the service on-demand instead. · Issue #22 · jonathanlermitage/intellij-extra-toolwindow-colorful-icons-pub · GitHub](https://github.com/jonathanlermitage/intellij-extra-toolwindow-colorful-icons-pub/issues/22)
- [com.intellij.diagnostic.PluginException: Cannot create class lermitage.intellij.extratci.d (classloader=PluginClassLoader(plugin=PluginDescriptor(name=Extra ToolWindow Colorful Icons Lifetime, id=lermitage.extratci.lifetime, descriptorPath=plugin.xml, path · Issue #21 · jonathanlermitage/intellij-extra-toolwindow-colorful-icons-pub · GitHub](https://github.com/jonathanlermitage/intellij-extra-toolwindow-colorful-icons-pub/issues/21)
- [com.intellij.diagnostic.PluginException: Cannot create class lermitage.intellij.extratci.d (classloader=PluginClassLoader(plugin=PluginDescriptor(name=Extra ToolWindow Colorful Icons Lifetime, id=lermitage.extratci.lifetime, descriptorPath=plugin.xml, path · Issue #20 · jonathanlermitage/intellij-extra-toolwindow-colorful-icons-pub · GitHub](https://github.com/jonathanlermitage/intellij-extra-toolwindow-colorful-icons-pub/issues/20)

---

<div class="post-metadata">

**Author:** ![yuriy.artamonov](https://sea1.discourse-cdn.com/flex001/user_avatar/platform.jetbrains.com/yuriy.artamonov/32/48_2.png) [@yuriy.artamonov](https://platform.jetbrains.com/u/yuriy.artamonov)\
**Post date:** [August 1, 2025, 9:32am UTC](https://platform.jetbrains.com/t/service-management-partially-broken-in-recent-ide-releases/2402/6 "2025-08-01T09:32:05Z")

</div>

> [@jonathanlermitage.1](#):
>
> registers an IconPathPatcher, which changes many icons

It looks lioke you may not use services in this case. Icons can be used when application have not started yet from static contexts, for instance from `AllIcons` class; in these cases an exception during those classes init will ruin the class init and JVM will not try to init those again anymore.

Please avoid using services from stacks that originate in class loading activities. This is a real and not imaginary problem, that is why the assertion is present

---

<div class="post-metadata">

**Author:** ![yuriy.artamonov](https://sea1.discourse-cdn.com/flex001/user_avatar/platform.jetbrains.com/yuriy.artamonov/32/48_2.png) [@yuriy.artamonov](https://platform.jetbrains.com/u/yuriy.artamonov)\
**Post date:** [August 1, 2025, 9:35am UTC](https://platform.jetbrains.com/t/service-management-partially-broken-in-recent-ide-releases/2402/7 "2025-08-01T09:35:24Z")

</div>

Example:

```auto
java.lang.Throwable: icons.AwsIcons$Resources <clinit> requests lermitage.intellij.extratci.SettingsService instance. Class initialization must not depend on services. Consider using instance of the service on-demand instead.
	at com.intellij.openapi.diagnostic.Logger.error(Logger.java:375)
	at com.intellij.serviceContainer.ComponentManagerImplKt.checkOutsideClassInitializer(ComponentManagerImpl.kt:1585)
	at com.intellij.serviceContainer.ComponentManagerImplKt.getOrCreateInstanceBlocking(ComponentManagerImpl.kt:1554)
	at com.intellij.serviceContainer.ComponentManagerImpl.doGetService(ComponentManagerImpl.kt:752)
	at com.intellij.serviceContainer.ComponentManagerImpl.getService(ComponentManagerImpl.kt:696)
	at lermitage.intellij.extratci.SettingsService.getInstance(SourceFile:47)
	at lermitage.intellij.extratci.d.a(SourceFile:34)
	at lermitage.intellij.extratci.d.a(SourceFile:45)
	at lermitage.intellij.extratci.SettingsService.getAllIcons(SourceFile:51)
	at lermitage.intellij.extratci.d.a(SourceFile:161)
	at lermitage.intellij.extratci.d.patchPath(SourceFile:89)
	at com.intellij.ui.icons.IconTransform.applyPatchers(IconTransform.kt:91)
	at com.intellij.ui.icons.IconTransform.patchPath(IconTransform.kt:77)
	at com.intellij.ui.icons.CachedImageIconKt.patchIconPath(CachedImageIcon.kt:53)
	at com.intellij.openapi.util.IconLoaderKt.findIconUsingDeprecatedImplementation(IconLoader.kt:354)
	at com.intellij.openapi.util.IconLoaderKt.findIconUsingDeprecatedImplementation$default(IconLoader.kt:346)
	at com.intellij.openapi.util.IconLoader.getIcon(IconLoader.kt:113)
	at icons.AwsIcons.load(AwsIcons.kt:190)
	at icons.AwsIcons.access$load(AwsIcons.kt:14)
	at icons.AwsIcons$Resources.<clinit>(AwsIcons.kt:65)

```

Here your service initialized from class loading activity of `AwsIcons` class

---

<div class="post-metadata">

**Author:** ![yuriy.artamonov](https://sea1.discourse-cdn.com/flex001/user_avatar/platform.jetbrains.com/yuriy.artamonov/32/48_2.png) [@yuriy.artamonov](https://platform.jetbrains.com/u/yuriy.artamonov)\
**Post date:** [August 1, 2025, 9:39am UTC](https://platform.jetbrains.com/t/service-management-partially-broken-in-recent-ide-releases/2402/8 "2025-08-01T09:39:05Z")

</div>

I can only suggest some other SPI, your own or ServiceLoader of JVM, but yes accessing services from static context is unsafe and `LOG.error` there is important

---

<div class="post-metadata">

**Author:** ![jonathanlermitage.1](https://avatars.discourse-cdn.com/v4/letter/j/e480ec/32.png) [@jonathanlermitage.1](https://platform.jetbrains.com/u/jonathanlermitage.1)\
**Post date:** [August 1, 2025, 9:48am UTC](https://platform.jetbrains.com/t/service-management-partially-broken-in-recent-ide-releases/2402/9 "2025-08-01T09:48:58Z")

</div>

No, again, I’m not accessing services from static context.

Per example:

```auto
package lermitage.intellij.extratci;

import com.intellij.ide.AppLifecycleListener;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.util.IconLoader;
import com.intellij.openapi.util.IconPathPatcher;
import lermitage.intellij.extratci.iconlists.BaseIcons;
import lermitage.intellij.extratci.iconlists.ClassicUIIcons;
import lermitage.intellij.extratci.iconlists.NewUIIcons;
import lermitage.intellij.extratci.iconlists.NewUIRemixIcons;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.io.File;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class ExtraToolWindowIconsPatcher extends IconPathPatcher implements AppLifecycleListener {

    private final Logger LOG = Logger.getInstance(getClass().getName());

    private Map<String, IconItem> configuredIcons;

    private final boolean IS_LOG_PATCH_PATH = "true".equals(System.getProperty("extra.tci.log.patchPath", "false"));

    @Override
    public void appFrameCreated(@NotNull List<String> commandLineArgs) {
        IconLoader.installPathPatcher(this);
    }

    private static @NotNull IconTheme getIconTheme() {
        return switch (SettingsService.getInstance().getUiTypeIconsPreference()) {
            case BASED_ON_ACTIVE_UI_TYPE -> UIUtils.isNewUIEnabled() ? IconTheme.NEW_UI : IconTheme.CLASSIC;
            case PREFER_NEW_UI_ICONS -> IconTheme.NEW_UI;
            case PREFER_OLD_UI_ICONS -> IconTheme.CLASSIC;
            case USE_NEW_UI_REMIX_ICONS -> IconTheme.NEW_UI_REMIX;

        };
    }

    @NotNull
    public static synchronized Map<String, IconItem> allIcons(boolean isFreemiumMode) {
        IconTheme iconTheme = getIconTheme();

        if (isFreemiumMode) {
            if (UIUtils.isNewUIEnabled()) {
                return Collections.emptyMap();
            } else {
                iconTheme = IconTheme.CLASSIC;
            }
        }

        Map<String, IconItem> icons = new SafeMap<>();

        icons.putAll(BaseIcons.getOrderedIcons());
        if (iconTheme == IconTheme.NEW_UI) {
            icons.putAll(NewUIIcons.getOrderedIcons());
        } else if (iconTheme == IconTheme.NEW_UI_REMIX) {
            icons.putAll(NewUIRemixIcons.getOrderedIcons());
        } else if (iconTheme == IconTheme.CLASSIC) {
            icons.putAll(ClassicUIIcons.getOrderedIcons());
        }

        return icons;
    }

    public ExtraToolWindowIconsPatcher() {
        super();
        //loadConfig();
    }

    @Override
    public @Nullable ClassLoader getContextClassLoader(@NotNull String path, @Nullable ClassLoader originalClassLoader) {
        return ExtraToolWindowIconsPatcher.class.getClassLoader();
    }

    @Override
    public @Nullable String patchPath(@NotNull String path, @Nullable ClassLoader classLoader) {
        if (IS_LOG_PATCH_PATH) {
            LOG.info("patchPath=" + path + " // " + classLoader);
        }
        //LOG.warn("patchPath=" + path);

        //if (true) return "extratci/icons/custom-expui/searchEverywhere.svg";

        if (configuredIcons == null) {
            loadConfig();
        }

        if (path.contains("@20x20")) {
            path = path.replace("@20x20", "");
        }

        for (String iconID : configuredIcons.keySet()/*.stream().sorted(Comparator.comparing(String::toLowerCase)).toList()*/) {
            IconItem iconItem = configuredIcons.get(iconID);
            String iconPathToReturn = iconItem.icon();
            Set<String> iconPluginIds = iconItem.pluginIds();

            // IMPORTANT icons coming from a plugin (like Junie):
            // ignore custom icons that are explicitly associated with different plugins
            if (classLoader != null && iconPluginIds != null && !iconPluginIds.isEmpty()) {
                // classLoaderStr looks like: PluginClassLoader(plugin=PluginDescriptor(name=Name of the plugin, id=id.of.the.plugin, ...
                String classLoaderStr = classLoader.toString();
                boolean isIconFromThirdPartyPlugin = iconPluginIds.stream().anyMatch(s -> classLoaderStr.contains("id=" + s));
                if (!isIconFromThirdPartyPlugin && !classLoaderStr.contains("id=lermitage")) {
                    // IMPORTANT also check id=lermitage because sometimes the 3rd-party icon is loaded
                    // from my plugin (why?).
                    // This may lead to a problem if two 3rd-party plugins define the same icon name.
                    // I dont know what will happen. For now, this situation does not exist.
                    //LOG.warn("path:" + path + ", classLoaderStr:" + classLoaderStr);
                    continue;
                }
            }

            String iconPath = iconID;
            if (iconPath.contains("__alt")) {
                iconPath = iconPath.substring(0, iconPath.indexOf("__alt"));
            }

            if (iconPath.contains("__plugin")) {
                iconPath = iconPath.substring(0, iconPath.indexOf("__plugin"));
            }

            /*if (configuredIcons.containsKey(path)) {
                return configuredIcons.get(path).icon();
            }*/
            if (iconPath.equals(path)) {
                return iconPathToReturn;
            }

            /*if (path.startsWith("/") && path.length() > 2) {
                String simplifiedPath = path.substring(1);
                if (configuredIcons.containsKey(simplifiedPath)) {
                    return configuredIcons.get(simplifiedPath).icon();
                }
            }*/
            if (path.startsWith("/") && path.length() > 2) {
                String simplifiedPath = path.substring(1);
                if (iconPath.equals(simplifiedPath)) {
                    return iconPathToReturn;
                }
            }

            /*String fileName = (new File(path)).getName();
            if (configuredIcons.containsKey(fileName)) {
                return configuredIcons.get(fileName).icon();
            }*/
            String fileName = (new File(path)).getName();
            if (iconPath.equals(fileName)) {
                return iconPathToReturn;
            }
        }

        return null;
    }

    private void loadConfig() {
        Map<String, IconItem> enabledIcons;
        enabledIcons = SettingsService.getAllIcons();
        int allIconsSize = enabledIcons.size();
        List<String> disabledIcons = SettingsService.getInstance().getDisabledIcons();
        disabledIcons.forEach(enabledIcons::remove);
        configuredIcons = enabledIcons;
        LOG.info("config loaded with success, enabled " + configuredIcons.size() + "/" + allIconsSize + " items");
    }
}

```

This worked for years.

Now, `SettingsService.getInstance()` (from `loadConfig`, used in `patchPath`) generates an error.

---

<div class="post-metadata">

**Author:** ![yuriy.artamonov](https://sea1.discourse-cdn.com/flex001/user_avatar/platform.jetbrains.com/yuriy.artamonov/32/48_2.png) [@yuriy.artamonov](https://platform.jetbrains.com/u/yuriy.artamonov)\
**Post date:** [August 1, 2025, 9:51am UTC](https://platform.jetbrains.com/t/service-management-partially-broken-in-recent-ide-releases/2402/10 "2025-08-01T09:51:44Z")

</div>

> [@jonathanlermitage.1](#):
>
> No, again, I’m not accessing services from static context.

You do, because `AwsIcons` does it in their stack. Exceptions in this stack may ruin classloading unrecoverably.

> generates an error.

And it always was a problem even before that, because we barely could find the reasons of crashes reported to us.

---

<div class="post-metadata">

**Author:** ![jonathanlermitage.1](https://avatars.discourse-cdn.com/v4/letter/j/e480ec/32.png) [@jonathanlermitage.1](https://platform.jetbrains.com/u/jonathanlermitage.1)\
**Post date:** [August 1, 2025, 9:53am UTC](https://platform.jetbrains.com/t/service-management-partially-broken-in-recent-ide-releases/2402/11 "2025-08-01T09:53:58Z")

</div>

> [@yuriy.artamonov](#):
>
> `AwsIcons`

comes from another plugin (not mine). I’m only in an IconPathPatcher.

---

<div class="post-metadata">

**Author:** ![yuriy.artamonov](https://sea1.discourse-cdn.com/flex001/user_avatar/platform.jetbrains.com/yuriy.artamonov/32/48_2.png) [@yuriy.artamonov](https://platform.jetbrains.com/u/yuriy.artamonov)\
**Post date:** [August 1, 2025, 9:54am UTC](https://platform.jetbrains.com/t/service-management-partially-broken-in-recent-ide-releases/2402/12 "2025-08-01T09:54:37Z")

</div>

> [@jonathanlermitage.1](#):
>
> IconPathPatcher

I believe since icons used often from static context you must adapt your solution to that. I can only repeat - this is a real problem that needs to be addressed.

---

<div class="post-metadata">

**Author:** ![jonathanlermitage.1](https://avatars.discourse-cdn.com/v4/letter/j/e480ec/32.png) [@jonathanlermitage.1](https://platform.jetbrains.com/u/jonathanlermitage.1)\
**Post date:** [August 1, 2025, 9:55am UTC](https://platform.jetbrains.com/t/service-management-partially-broken-in-recent-ide-releases/2402/13 "2025-08-01T09:55:03Z")

</div>

Also, I cannot reproduce these errors. Some of my customers are facing these errors.

If I was accessing my services from static context, these errors should be easily reproducible?

---

<div class="post-metadata">

**Author:** ![jonathanlermitage.1](https://avatars.discourse-cdn.com/v4/letter/j/e480ec/32.png) [@jonathanlermitage.1](https://platform.jetbrains.com/u/jonathanlermitage.1)\
**Post date:** [August 1, 2025, 9:55am UTC](https://platform.jetbrains.com/t/service-management-partially-broken-in-recent-ide-releases/2402/14 "2025-08-01T09:55:54Z")

</div>

> I believe since icons used often from static context you must adapt your solution to that. I can only repeat - this is a real problem that needs to be addressed.

I’m completely lost. What should I do? IconPathPatcher worked for years.

---

<div class="post-metadata">

**Author:** ![yuriy.artamonov](https://sea1.discourse-cdn.com/flex001/user_avatar/platform.jetbrains.com/yuriy.artamonov/32/48_2.png) [@yuriy.artamonov](https://platform.jetbrains.com/u/yuriy.artamonov)\
**Post date:** [August 1, 2025, 9:56am UTC](https://platform.jetbrains.com/t/service-management-partially-broken-in-recent-ide-releases/2402/15 "2025-08-01T09:56:13Z")

</div>

They are racy I believe because classloading is concurrent and depends on init sequence. You may try to ask for icons classes fields in some early init stages, e.g. ApplicationActivity

---

<div class="post-metadata">

**Author:** ![yuriy.artamonov](https://sea1.discourse-cdn.com/flex001/user_avatar/platform.jetbrains.com/yuriy.artamonov/32/48_2.png) [@yuriy.artamonov](https://platform.jetbrains.com/u/yuriy.artamonov)\
**Post date:** [August 1, 2025, 9:56am UTC](https://platform.jetbrains.com/t/service-management-partially-broken-in-recent-ide-releases/2402/16 "2025-08-01T09:56:48Z")

</div>

> [@jonathanlermitage.1](#):
>
> IconPathPatcher worked for years.

And still works, LOG.error does not throw, but logs and shows errors

---

<div class="post-metadata">

**Author:** ![jonathanlermitage.1](https://avatars.discourse-cdn.com/v4/letter/j/e480ec/32.png) [@jonathanlermitage.1](https://platform.jetbrains.com/u/jonathanlermitage.1)\
**Post date:** [August 1, 2025, 10:01am UTC](https://platform.jetbrains.com/t/service-management-partially-broken-in-recent-ide-releases/2402/17 "2025-08-01T10:01:56Z")

</div>

I’m still lost.

Should I replace AppLifecycleListener (which installs my IconPathPatcher) by ApplicationActivity? This is [internal](https://github.com/JetBrains/intellij-community/blob/idea/251.26094.121/platform/ide-core/src/com/intellij/ide/ApplicationActivity.kt).

---

<div class="post-metadata">

**Author:** ![jonathanlermitage.1](https://avatars.discourse-cdn.com/v4/letter/j/e480ec/32.png) [@jonathanlermitage.1](https://platform.jetbrains.com/u/jonathanlermitage.1)\
**Post date:** [August 1, 2025, 10:04am UTC](https://platform.jetbrains.com/t/service-management-partially-broken-in-recent-ide-releases/2402/18 "2025-08-01T10:04:34Z")

</div>

Just in case, this is my (settings) service:

```auto
@State(
    name = "ExtraTciSettings",
    storages = @Storage(value = "lermitage-extratci.xml", roamingType = RoamingType.DEFAULT),
    category = SettingsCategory.PLUGINS
)
public class SettingsService implements PersistentStateComponent<SettingsService> {

    private static final @NonNls Logger LOGGER = Logger.getInstance(SettingsService.class);

    // the implementation of PersistentStateComponent works by serializing public fields, so keep them public
    @SuppressWarnings("WeakerAccess")
    public List<String> disabledIcons = new ArrayList<>();
    @SuppressWarnings("WeakerAccess")
    public UITypeIconsPreference uiTypeIconsPreference;
    @SuppressWarnings("WeakerAccess")
    public Boolean lifetimeLicHintNotifDisplayed2;

    public static SettingsService getInstance() {
        return ApplicationManager.getApplication().getService(SettingsService.class);
    }
...

```

Should I replace `getInstance()` by `ApplicationManager.getApplication().getService(SettingsService.class)` everywhere? Is it why the IDE thinks I’m in an init block?

Again, all these errors are very new. Something changed recently in the IDE…

---

<div class="post-metadata">

**Author:** ![jonathanlermitage.1](https://avatars.discourse-cdn.com/v4/letter/j/e480ec/32.png) [@jonathanlermitage.1](https://platform.jetbrains.com/u/jonathanlermitage.1)\
**Post date:** [August 1, 2025, 10:11am UTC](https://platform.jetbrains.com/t/service-management-partially-broken-in-recent-ide-releases/2402/19 "2025-08-01T10:11:22Z")

</div>

My customers are also facing ``java.lang.ClassCastException: class lermitage.intellij.extraidetweaks.settings.SettingsIDEService cannot be cast to class lermitage.intellij.extraidetweaks.settings.SettingsIDEService`` errors, which, I guess, breaks my plugins. I can’t explain these errors (the package name is different because I have 4 plugins. They’re all affected by the same errors. Their settings service are very similar).

This error is very new, and it seems related to the `PluginClassLoader`. I do not touch class loaders…

---

<div class="post-metadata">

**Author:** ![yuriy.artamonov](https://sea1.discourse-cdn.com/flex001/user_avatar/platform.jetbrains.com/yuriy.artamonov/32/48_2.png) [@yuriy.artamonov](https://platform.jetbrains.com/u/yuriy.artamonov)\
**Post date:** [August 1, 2025, 10:32am UTC](https://platform.jetbrains.com/t/service-management-partially-broken-in-recent-ide-releases/2402/20 "2025-08-01T10:32:32Z")

</div>

Do you have optionally loaded modules though in the plugin? Usually such errors caused by the fact that a class of an optionally loaded module touched from the main plugin classloader directly. Such things lead to double classloading in two class loaders

[Next page](https://platform.jetbrains.com/t/service-management-partially-broken-in-recent-ide-releases/2402.md?page=2)
