From f8d597af331ddb4565365dec81143666f1efaaf1 Mon Sep 17 00:00:00 2001 From: Dmitry Kichinsky Date: Mon, 6 Mar 2023 18:35:18 +0100 Subject: [PATCH] IDEA-314388 get rid of unnecessary iterations over maven project list GitOrigin-RevId: a8396693eb9c2712cec3c207bbc946b0638d459d --- .../maven/project/MavenProjectResolver.java | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectResolver.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectResolver.java index c9cae34bc12e..c64b0bc3cfae 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectResolver.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectResolver.java @@ -19,7 +19,10 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.TestOnly; import org.jetbrains.idea.maven.execution.RunnerBundle; import org.jetbrains.idea.maven.importing.MavenImporter; -import org.jetbrains.idea.maven.model.*; +import org.jetbrains.idea.maven.model.MavenArtifact; +import org.jetbrains.idea.maven.model.MavenConstants; +import org.jetbrains.idea.maven.model.MavenExplicitProfiles; +import org.jetbrains.idea.maven.model.MavenPlugin; import org.jetbrains.idea.maven.server.MavenConfigParseException; import org.jetbrains.idea.maven.server.MavenEmbedderWrapper; import org.jetbrains.idea.maven.server.MavenServerProgressIndicator; @@ -29,6 +32,7 @@ import org.jetbrains.idea.maven.utils.*; import java.lang.reflect.InvocationTargetException; import java.nio.file.Path; import java.util.*; +import java.util.stream.Collectors; public class MavenProjectResolver { public static final Key> UNRESOLVED_ARTIFACTS = new Key<>("Unresolved Artifacts"); @@ -151,20 +155,28 @@ public class MavenProjectResolver { @NotNull MavenGeneralSettings generalSettings, @NotNull MavenEmbedderWrapper embedder, @NotNull ResolveContext context) throws MavenProcessCanceledException { + var artifactIdToMavenProjects = mavenProjects.stream() + .filter(mavenProject -> null != mavenProject.getMavenId().getArtifactId()) + .collect(Collectors.groupingBy(mavenProject -> mavenProject.getMavenId().getArtifactId())); ParallelRunner.runInParallelRethrow(results, result -> { - doResolve(project, result, mavenProjects, generalSettings, embedder, context); + doResolve(project, result, artifactIdToMavenProjects, generalSettings, embedder, context); }); } private void doResolve(@NotNull Project project, @NotNull MavenProjectReaderResult result, - @NotNull Collection mavenProjects, + @NotNull Map> artifactIdToMavenProjects, @NotNull MavenGeneralSettings generalSettings, @NotNull MavenEmbedderWrapper embedder, @NotNull ResolveContext context) throws MavenProcessCanceledException { + var mavenId = result.mavenModel.getMavenId(); + var artifactId = mavenId.getArtifactId(); + + List mavenProjects = artifactIdToMavenProjects.get(artifactId); + if (null == mavenProjects) return; + MavenProject mavenProjectCandidate = null; for (MavenProject mavenProject : mavenProjects) { - MavenId mavenId = result.mavenModel.getMavenId(); if (mavenProject.getMavenId().equals(mavenId)) { mavenProjectCandidate = mavenProject; break;