ensure that parent list of classloaders doesn't have duplicates

GitOrigin-RevId: fbd26deee597d458333715a9022a0f1267f2d34d
This commit is contained in:
Vladimir Krivosheev
2020-10-21 08:29:25 +00:00
committed by intellij-monorepo-bot
parent f4e1e7ff86
commit bf362bcf0e
@@ -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<IdeaPluginDescriptorImpl> javaDep;
// temporary list to produce arrays (avoid allocation for each plugin)
private final ArrayList<ClassLoader> loaders = new ArrayList<>();
// temporary set to produce arrays (avoid allocation for each plugin)
// set to remove duplicated classloaders
private final Set<ClassLoader> 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<ClassLoader> loaders) {
@NotNull Collection<ClassLoader> loaders) {
ClassLoader loader = dependency.getClassLoader();
if (loader == null) {
getLogger().error(PluginLoadingError.formatErrorMessage(dependent,