diff --git a/platform/core-impl/src/com/intellij/ide/plugins/ClassLoaderConfigurationData.java b/platform/core-impl/src/com/intellij/ide/plugins/ClassLoaderConfigurationData.java deleted file mode 100644 index f6a7f95f4e1a..000000000000 --- a/platform/core-impl/src/com/intellij/ide/plugins/ClassLoaderConfigurationData.java +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2000-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. -package com.intellij.ide.plugins; - -import com.intellij.openapi.extensions.PluginId; -import it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet; -import org.jetbrains.annotations.ApiStatus; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.Set; - -@ApiStatus.Internal -public final class ClassLoaderConfigurationData { - private ClassLoaderConfigurationData() { - } - - static final Set SEPARATE_CLASSLOADER_FOR_SUB_EXCLUDE = new ReferenceOpenHashSet<>(new PluginId[]{ - PluginId.getId("org.jetbrains.kotlin"), - PluginId.getId("com.intellij.java"), - }); - - public static boolean isClassloaderPerDescriptorEnabled(@NotNull PluginId pluginId, @Nullable String packagePrefix) { - return packagePrefix != null && !SEPARATE_CLASSLOADER_FOR_SUB_EXCLUDE.contains(pluginId); - } -} diff --git a/platform/core-impl/src/com/intellij/ide/plugins/ClassLoaderConfigurator.kt b/platform/core-impl/src/com/intellij/ide/plugins/ClassLoaderConfigurator.kt index 18ad3b0fece5..ec24a5b934c7 100644 --- a/platform/core-impl/src/com/intellij/ide/plugins/ClassLoaderConfigurator.kt +++ b/platform/core-impl/src/com/intellij/ide/plugins/ClassLoaderConfigurator.kt @@ -5,6 +5,7 @@ package com.intellij.ide.plugins import com.intellij.diagnostic.PluginException import com.intellij.ide.plugins.cl.PluginClassLoader import com.intellij.openapi.diagnostic.Logger +import com.intellij.openapi.extensions.PluginId import com.intellij.util.SmartList import com.intellij.util.lang.ClassPath import com.intellij.util.lang.ResourceFile @@ -27,6 +28,21 @@ class ClassLoaderConfigurator( private val coreLoader: ClassLoader = ClassLoaderConfigurator::class.java.classLoader, private val usePluginClassLoader: Boolean = true, /* grab classes from platform loader only if nothing is found in any of plugin dependencies */ ) { + + companion object { + + @ApiStatus.Internal + @JvmStatic + fun isMigratedToNewModel(idString: String): Boolean { + return idString != "org.jetbrains.kotlin" + && idString != "com.intellij.java" + } + + @ApiStatus.Internal + @JvmStatic + fun isMigratedToNewModel(pluginId: PluginId) = isMigratedToNewModel(pluginId.idString) + } + private var javaDep: Optional? = null // temporary set to produce arrays (avoid allocation for each plugin) @@ -60,7 +76,8 @@ class ClassLoaderConfigurator( dependencyPlugin: IdeaPluginDescriptorImpl) { for ((mainDependent, modules) in mainToModule) { val mainDependentClassLoader = mainDependent.classLoader as PluginClassLoader - if (ClassLoaderConfigurationData.isClassloaderPerDescriptorEnabled(mainDependent.id, mainDependent.packagePrefix)) { + if (mainDependent.packagePrefix != null + && isMigratedToNewModel(mainDependent.id)) { for (module in modules) { assert(module.packagePrefix != null) configureModule(module, mainDependentClassLoader, diff --git a/platform/platform-impl/src/com/intellij/ide/plugins/DynamicPlugins.kt b/platform/platform-impl/src/com/intellij/ide/plugins/DynamicPlugins.kt index fd90a5c20f0e..2e3047c0a099 100644 --- a/platform/platform-impl/src/com/intellij/ide/plugins/DynamicPlugins.kt +++ b/platform/platform-impl/src/com/intellij/ide/plugins/DynamicPlugins.kt @@ -280,7 +280,8 @@ object DynamicPlugins { var dependencyMessage: String? = null processOptionalDependenciesOnPlugin(descriptor, pluginSet, isLoaded = true) { mainDescriptor, subDescriptor -> - if (!ClassLoaderConfigurationData.isClassloaderPerDescriptorEnabled(mainDescriptor.pluginId, subDescriptor.packagePrefix)) { + if (subDescriptor.packagePrefix == null + || !ClassLoaderConfigurator.isMigratedToNewModel(mainDescriptor.pluginId)) { dependencyMessage = "Plugin ${subDescriptor.pluginId} that optionally depends on ${descriptor.pluginId} does not have a separate classloader for the dependency" return@processOptionalDependenciesOnPlugin false } diff --git a/plugins/devkit/devkit-core/src/internal/AnalyzeUnloadablePluginsAction.kt b/plugins/devkit/devkit-core/src/internal/AnalyzeUnloadablePluginsAction.kt index 14b0d559e203..7aa68454492c 100644 --- a/plugins/devkit/devkit-core/src/internal/AnalyzeUnloadablePluginsAction.kt +++ b/plugins/devkit/devkit-core/src/internal/AnalyzeUnloadablePluginsAction.kt @@ -1,13 +1,12 @@ -// Copyright 2000-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +// Copyright 2000-2021 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. package org.jetbrains.idea.devkit.internal -import com.intellij.ide.plugins.ClassLoaderConfigurationData +import com.intellij.ide.plugins.ClassLoaderConfigurator import com.intellij.ide.plugins.PluginManagerCore import com.intellij.openapi.actionSystem.AnAction import com.intellij.openapi.actionSystem.AnActionEvent import com.intellij.openapi.actionSystem.LangDataKeys import com.intellij.openapi.application.runReadAction -import com.intellij.openapi.extensions.PluginId import com.intellij.openapi.fileEditor.FileEditorManager import com.intellij.openapi.fileEditor.OpenFileDescriptor import com.intellij.openapi.progress.ProgressManager @@ -209,7 +208,8 @@ class AnalyzeUnloadablePluginsAction : AnAction() { continue } descriptor.pluginId?.let { pluginId -> - if (!ClassLoaderConfigurationData.isClassloaderPerDescriptorEnabled(PluginId.getId(pluginId), depIdeaPlugin.`package`.rawText)) { + if (depIdeaPlugin.`package`.rawText == null + || !ClassLoaderConfigurator.isMigratedToNewModel(pluginId)) { dependenciesWithoutSeparateClassloaders.add(pluginId) } }