From bf362bcf0e61b70446072c34965b98a677acaf4b Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Wed, 21 Oct 2020 09:51:02 +0200 Subject: [PATCH] ensure that parent list of classloaders doesn't have duplicates GitOrigin-RevId: fbd26deee597d458333715a9022a0f1267f2d34d --- .../ide/plugins/ClassLoaderConfigurator.java | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/platform/core-impl/src/com/intellij/ide/plugins/ClassLoaderConfigurator.java b/platform/core-impl/src/com/intellij/ide/plugins/ClassLoaderConfigurator.java index f1e62cd29753..004bb00c70d3 100644 --- a/platform/core-impl/src/com/intellij/ide/plugins/ClassLoaderConfigurator.java +++ b/platform/core-impl/src/com/intellij/ide/plugins/ClassLoaderConfigurator.java @@ -15,10 +15,7 @@ import java.lang.invoke.MethodType; import java.net.MalformedURLException; import java.net.URL; import java.nio.file.Path; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Optional; +import java.util.*; @SuppressWarnings({"OptionalUsedAsFieldOrParameterType", "OptionalAssignedToNull"}) final class ClassLoaderConfigurator { @@ -33,8 +30,9 @@ final class ClassLoaderConfigurator { private Optional javaDep; - // temporary list to produce arrays (avoid allocation for each plugin) - private final ArrayList loaders = new ArrayList<>(); + // temporary set to produce arrays (avoid allocation for each plugin) + // set to remove duplicated classloaders + private final Set loaders = new LinkedHashSet<>(); private final boolean hasAllModules; private final UrlClassLoader.Builder urlClassLoaderBuilder; @@ -121,7 +119,7 @@ final class ClassLoaderConfigurator { getLogger().error(PluginLoadingError.formatErrorMessage(mainDependent, "requires missing class loader for '" + dependencyDescriptor.getName() + "'")); } - else if (!usePluginClassLoader || loader != coreLoader) { + else if (loader != coreLoader || !usePluginClassLoader) { loaders.add(loader); } } @@ -199,7 +197,7 @@ final class ClassLoaderConfigurator { private static void addLoaderOrLogError(@NotNull IdeaPluginDescriptorImpl dependent, @NotNull IdeaPluginDescriptorImpl dependency, - @NotNull List loaders) { + @NotNull Collection loaders) { ClassLoader loader = dependency.getClassLoader(); if (loader == null) { getLogger().error(PluginLoadingError.formatErrorMessage(dependent,