[PY-76337] disable plugins with use-idea-classloader if appcds is enable

GitOrigin-RevId: 6097121559ae18571cad8ee239fe8dda9e085f85
This commit is contained in:
Vladimir Koshelev
2024-09-30 14:54:11 +02:00
committed by intellij-monorepo-bot
parent bfb4e40f3c
commit b4921470f5
3 changed files with 16 additions and 4 deletions

View File

@@ -470,7 +470,15 @@ private fun createModuleContentBasedScope(descriptor: IdeaPluginDescriptorImpl):
}
return ""
}
}}
}
}
internal val canExtendIdeaClassLoader: Boolean by lazy {
runCatching {
MethodHandles.lookup().findVirtual(ClassLoaderConfigurator::class.java.classLoader.javaClass, "addFiles",
MethodType.methodType(Void.TYPE, MutableList::class.java))
}.isSuccess
}
private fun configureUsingIdeaClassloader(classPath: List<Path>, descriptor: IdeaPluginDescriptorImpl): ClassLoader {
log.warn("${descriptor.pluginId} uses deprecated `use-idea-classloader` attribute")

View File

@@ -12,8 +12,6 @@ import org.jetbrains.annotations.Nls
import org.jetbrains.annotations.PropertyKey
import java.util.*
import java.util.function.Supplier
import kotlin.collections.ArrayList
import kotlin.collections.HashMap
@ApiStatus.Internal
class PluginSetBuilder(@JvmField val unsortedPlugins: Set<IdeaPluginDescriptorImpl>) {
@@ -88,6 +86,12 @@ class PluginSetBuilder(@JvmField val unsortedPlugins: Set<IdeaPluginDescriptorIm
val disabledModuleToProblematicPlugin = HashMap<String, PluginId>()
m@ for (module in moduleGraph.nodes) {
if (module.isUseIdeaClassLoader && !canExtendIdeaClassLoader) {
module.isEnabled = false
logMessages.add("Module ${module.moduleName ?: module.pluginId} is not enabled because it uses deprecated `use-idea-classloader` attribute but PathClassLoader is disabled")
continue@m
}
if (module.moduleName == null) {
if (module.pluginId != PluginManagerCore.CORE_ID && (!module.isEnabled || (disabler != null && disabler(module)))) {
continue

View File

@@ -1,4 +1,4 @@
<idea-plugin use-idea-classloader="true">
<idea-plugin>
<id>com.intellij.workspace.ide.tests</id>
<name>com.intellij.workspace.ide.tests</name>