diff --git a/platform/core-impl/src/com/intellij/ide/plugins/PluginLoadingResult.java b/platform/core-impl/src/com/intellij/ide/plugins/PluginLoadingResult.java index 0128c0a48dab..55d655d7a5f2 100644 --- a/platform/core-impl/src/com/intellij/ide/plugins/PluginLoadingResult.java +++ b/platform/core-impl/src/com/intellij/ide/plugins/PluginLoadingResult.java @@ -8,6 +8,7 @@ import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.ContainerUtilRt; import com.intellij.util.text.VersionComparatorUtil; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -166,6 +167,12 @@ final class PluginLoadingResult { } } + @Contract(pure = true) + boolean contains(@NotNull IdeaPluginDescriptorImpl descriptor) { + PluginId pluginId = descriptor.getPluginId(); + return (pluginId != null && plugins.containsKey(pluginId)); + } + private boolean isCompatible(@NotNull IdeaPluginDescriptorImpl descriptor) { return PluginManagerCore.isIncompatible(productBuildNumber, descriptor.getSinceBuild(), descriptor.getUntilBuild()) == null; } diff --git a/platform/core-impl/src/com/intellij/ide/plugins/PluginManagerCore.java b/platform/core-impl/src/com/intellij/ide/plugins/PluginManagerCore.java index e5668045e9c5..c0bf3621a81d 100644 --- a/platform/core-impl/src/com/intellij/ide/plugins/PluginManagerCore.java +++ b/platform/core-impl/src/com/intellij/ide/plugins/PluginManagerCore.java @@ -1163,7 +1163,8 @@ public final class PluginManagerCore { PluginLoadingResult result = context.parentContext.result; for (Future task : tasks) { IdeaPluginDescriptorImpl descriptor = task.get(); - if (descriptor != null) { + // plugins added via property shouldn't be overridden to avoid plugin root detection issues when running external plugin tests + if (descriptor != null && !result.contains(descriptor)) { descriptor.setUseCoreClassLoader(); result.add(descriptor, context.parentContext); }