Files
openide/python/python-core-impl/resources/intellij.python.community.core.impl.xml
T
Vitaly Legchilkinandintellij-monorepo-bot 637a4c2078 PY-89898 register PyModuleService in an always-loaded content module
PythonCore content module intellij.python.community.impl was changed to
loading="optional" in PY-85882 so that PythonCore can load in JetBrains
Client, where some of its descriptor dependencies (externalSystem.impl,
json, toml.core, yaml, ...) are not present. In non-PyCharm IDEs
(GoLand, CLion, DataGrip, IDEA, WebStorm, JetBrains Client) the same
optional content module also silently fails to load, leaving the
PyModuleService interface in intellij.python.community on the
classpath but no implementation registered.

PythonSdkUtil.findPythonSdk (in the always-loaded intellij.python.sdk)
calls PyModuleService.getInstance(project) unconditionally during stub
indexing, which then throws "Cannot find service ... PyModuleService"
and aborts the index update for every .py file. Diogen reports 5312
events across 49 users on 2026.2 EAP1/2/3.

Move PyModuleServiceImpl and its <projectService> registration into
intellij.python.community.core.impl, which is a required content module
of PythonCore (no loading="optional") and only depends on basic modules
(psi.impl, sdk, regexp) available wherever PythonCore loads. Drop the
"type is PythonModuleTypeBase" check in isPythonModule: it is fully
subsumed by the existing type.id == PYTHON_MODULE_ID check
(PythonModuleTypeBase's sole constructor passes that id to super), and
removing it avoids a circular dep on intellij.python.community.impl
from core.impl.

Add the needed compile/runtime deps to core.impl (intellij.python.community,
intellij.platform.lang.core, intellij.libraries.kotlinx.coroutines.core)
and declare intellij.python.community explicitly in the plugin descriptor
so the classloader wiring does not rely on transitive deps elsewhere.

GitOrigin-RevId: 7fb2a70e557c22409ea6f36f577faa59ec4cf6d9
2026-05-26 12:20:32 +00:00

14 lines
498 B
XML

<idea-plugin visibility="public">
<dependencies>
<module name="intellij.python.community"/>
<module name="intellij.python.psi.impl"/>
<module name="intellij.python.sdk"/>
<module name="intellij.regexp"/>
</dependencies>
<extensions defaultExtensionNs="com.intellij">
<projectService serviceInterface="com.jetbrains.python.module.PyModuleService"
serviceImplementation="com.jetbrains.python.module.PyModuleServiceImpl"/>
</extensions>
</idea-plugin>