diff --git a/plugins/maven-server-api/src/main/java/org/jetbrains/idea/maven/model/MavenWorkspaceMapWrapper.java b/plugins/maven-server-api/src/main/java/org/jetbrains/idea/maven/model/MavenWorkspaceMapWrapper.java new file mode 100644 index 000000000000..651031336d4a --- /dev/null +++ b/plugins/maven-server-api/src/main/java/org/jetbrains/idea/maven/model/MavenWorkspaceMapWrapper.java @@ -0,0 +1,35 @@ +// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package org.jetbrains.idea.maven.model; + +import org.jetbrains.annotations.NotNull; + +import java.util.*; + +public class MavenWorkspaceMapWrapper { + private final MavenWorkspaceMap myWorkspaceMap; + + private final Map> myArtifactToIdToMavenIdMapping = new HashMap<>(); + + public MavenWorkspaceMapWrapper(MavenWorkspaceMap workspaceMap) { + myWorkspaceMap = workspaceMap; + + if (null != myWorkspaceMap) { + for (MavenId mavenId : myWorkspaceMap.getAvailableIds()) { + if (!myArtifactToIdToMavenIdMapping.containsKey(mavenId.getArtifactId())) { + myArtifactToIdToMavenIdMapping.put(mavenId.getArtifactId(), new HashSet<>()); + } + myArtifactToIdToMavenIdMapping.get(mavenId.getArtifactId()).add(mavenId); + } + } + } + + public MavenWorkspaceMap.Data findFileAndOriginalId(MavenId mavenId) { + return myWorkspaceMap.findFileAndOriginalId(mavenId); + } + + @NotNull + public Set getAvailableIdsForArtifactId(String artifactId) { + Set ids = myArtifactToIdToMavenIdMapping.get(artifactId); + return null == ids ? Collections.emptySet() : ids; + } +} diff --git a/plugins/maven/maven3-server-common/src/org/jetbrains/idea/maven/server/embedder/CustomMaven3RepositoryMetadataManager.java b/plugins/maven/maven3-server-common/src/org/jetbrains/idea/maven/server/embedder/CustomMaven3RepositoryMetadataManager.java index 789e6d647b7f..e29334baf121 100644 --- a/plugins/maven/maven3-server-common/src/org/jetbrains/idea/maven/server/embedder/CustomMaven3RepositoryMetadataManager.java +++ b/plugins/maven/maven3-server-common/src/org/jetbrains/idea/maven/server/embedder/CustomMaven3RepositoryMetadataManager.java @@ -20,13 +20,16 @@ import org.apache.maven.artifact.repository.metadata.*; import org.codehaus.plexus.component.annotations.Component; import org.jetbrains.idea.maven.model.MavenId; import org.jetbrains.idea.maven.model.MavenWorkspaceMap; +import org.jetbrains.idea.maven.model.MavenWorkspaceMapWrapper; + +import java.util.Objects; @Component(role = RepositoryMetadataManager.class, hint = "ide") public class CustomMaven3RepositoryMetadataManager extends DefaultRepositoryMetadataManager { - private MavenWorkspaceMap myWorkspaceMap; + private MavenWorkspaceMapWrapper myWorkspaceMap; public void customize(MavenWorkspaceMap workspaceMap) { - myWorkspaceMap = workspaceMap; + myWorkspaceMap = new MavenWorkspaceMapWrapper(workspaceMap); } public void reset() { @@ -37,7 +40,7 @@ public class CustomMaven3RepositoryMetadataManager extends DefaultRepositoryMeta public void resolve(RepositoryMetadata metadata, RepositoryRequest request) throws RepositoryMetadataResolutionException { super.resolve(metadata, request); - MavenWorkspaceMap map = myWorkspaceMap; + MavenWorkspaceMapWrapper map = myWorkspaceMap; if (map == null) return; Metadata data = metadata.getMetadata(); @@ -46,8 +49,8 @@ public class CustomMaven3RepositoryMetadataManager extends DefaultRepositoryMeta data.setVersioning(versioning = new Versioning()); } - for (MavenId each : map.getAvailableIds()) { - if (each.equals(data.getGroupId(), data.getArtifactId())) { + for (MavenId each : map.getAvailableIdsForArtifactId(data.getArtifactId())) { + if (Objects.equals(each.getGroupId(), data.getGroupId())) { versioning.addVersion(each.getVersion()); } } diff --git a/plugins/maven/maven3-server-impl/src/org/jetbrains/idea/maven/server/Workspace3Reader.java b/plugins/maven/maven3-server-impl/src/org/jetbrains/idea/maven/server/Workspace3Reader.java index cde42937cdc8..f049d68f3d37 100644 --- a/plugins/maven/maven3-server-impl/src/org/jetbrains/idea/maven/server/Workspace3Reader.java +++ b/plugins/maven/maven3-server-impl/src/org/jetbrains/idea/maven/server/Workspace3Reader.java @@ -20,19 +20,22 @@ import org.eclipse.aether.repository.WorkspaceReader; import org.eclipse.aether.repository.WorkspaceRepository; import org.jetbrains.idea.maven.model.MavenId; import org.jetbrains.idea.maven.model.MavenWorkspaceMap; +import org.jetbrains.idea.maven.model.MavenWorkspaceMapWrapper; import java.io.File; import java.util.ArrayList; import java.util.List; +import java.util.Objects; +import java.util.Set; public class Workspace3Reader implements WorkspaceReader { private final WorkspaceRepository myRepository = new WorkspaceRepository(); - private final MavenWorkspaceMap myWorkspaceMap; + private final MavenWorkspaceMapWrapper myWorkspaceMap; public Workspace3Reader(MavenWorkspaceMap workspaceMap) { - myWorkspaceMap = workspaceMap; + myWorkspaceMap = new MavenWorkspaceMapWrapper(workspaceMap); } @Override @@ -48,16 +51,13 @@ public class Workspace3Reader implements WorkspaceReader { return resolved.getFile(artifact.getExtension()); } - private static boolean equals(String s1, String s2) { - return s1 == null ? s2 == null : s1.equals(s2); - } - @Override public List findVersions(Artifact artifact) { - List res = new ArrayList(); + List res = new ArrayList<>(); - for (MavenId id : myWorkspaceMap.getAvailableIds()) { - if (equals(id.getArtifactId(), artifact.getArtifactId()) && equals(id.getGroupId(), artifact.getGroupId())) { + Set ids = myWorkspaceMap.getAvailableIdsForArtifactId(artifact.getArtifactId()); + for (MavenId id : ids) { + if (Objects.equals(id.getGroupId(), artifact.getGroupId())) { String version = id.getVersion(); if (version != null) { diff --git a/plugins/maven/maven30-server-impl/src/org/jetbrains/idea/maven/server/Maven30WorkspaceReader.java b/plugins/maven/maven30-server-impl/src/org/jetbrains/idea/maven/server/Maven30WorkspaceReader.java index c9054fd69bb0..8a19a1008a71 100644 --- a/plugins/maven/maven30-server-impl/src/org/jetbrains/idea/maven/server/Maven30WorkspaceReader.java +++ b/plugins/maven/maven30-server-impl/src/org/jetbrains/idea/maven/server/Maven30WorkspaceReader.java @@ -17,6 +17,7 @@ package org.jetbrains.idea.maven.server; import org.jetbrains.idea.maven.model.MavenId; import org.jetbrains.idea.maven.model.MavenWorkspaceMap; +import org.jetbrains.idea.maven.model.MavenWorkspaceMapWrapper; import org.sonatype.aether.artifact.Artifact; import org.sonatype.aether.repository.WorkspaceReader; import org.sonatype.aether.repository.WorkspaceRepository; @@ -24,6 +25,7 @@ import org.sonatype.aether.repository.WorkspaceRepository; import java.io.File; import java.util.ArrayList; import java.util.List; +import java.util.Objects; /** * @author Sergey Evdokimov @@ -32,10 +34,10 @@ public class Maven30WorkspaceReader implements WorkspaceReader { private final WorkspaceRepository myRepository = new WorkspaceRepository(); - private final MavenWorkspaceMap myWorkspaceMap; + private final MavenWorkspaceMapWrapper myWorkspaceMap; public Maven30WorkspaceReader(MavenWorkspaceMap workspaceMap) { - myWorkspaceMap = workspaceMap; + myWorkspaceMap = new MavenWorkspaceMapWrapper(workspaceMap); } @Override @@ -51,16 +53,12 @@ public class Maven30WorkspaceReader implements WorkspaceReader { return resolved.getFile(artifact.getExtension()); } - private static boolean equals(String s1, String s2) { - return s1 == null ? s2 == null : s1.equals(s2); - } - @Override public List findVersions(Artifact artifact) { - List res = new ArrayList(); + List res = new ArrayList<>(); - for (MavenId id : myWorkspaceMap.getAvailableIds()) { - if (equals(id.getArtifactId(), artifact.getArtifactId()) && equals(id.getGroupId(), artifact.getGroupId())) { + for (MavenId id : myWorkspaceMap.getAvailableIdsForArtifactId(artifact.getArtifactId())) { + if (Objects.equals(id.getGroupId(), artifact.getGroupId())) { String version = id.getVersion(); if (version != null) {