IDEA-306034 Performance optimization: iterate over all maven ids -> iterate over those with the required artifactId

GitOrigin-RevId: e887caa1d438b04671505f66e691252e356fa792
This commit is contained in:
Dmitry Kichinsky
2022-11-15 09:01:02 +00:00
committed by intellij-monorepo-bot
parent 821ebfbb84
commit a96de4aa84
4 changed files with 59 additions and 23 deletions
@@ -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<String, Set<MavenId>> 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<MavenId> getAvailableIdsForArtifactId(String artifactId) {
Set<MavenId> ids = myArtifactToIdToMavenIdMapping.get(artifactId);
return null == ids ? Collections.emptySet() : ids;
}
}
@@ -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());
}
}
@@ -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<String> findVersions(Artifact artifact) {
List<String> res = new ArrayList<String>();
List<String> res = new ArrayList<>();
for (MavenId id : myWorkspaceMap.getAvailableIds()) {
if (equals(id.getArtifactId(), artifact.getArtifactId()) && equals(id.getGroupId(), artifact.getGroupId())) {
Set<MavenId> ids = myWorkspaceMap.getAvailableIdsForArtifactId(artifact.getArtifactId());
for (MavenId id : ids) {
if (Objects.equals(id.getGroupId(), artifact.getGroupId())) {
String version = id.getVersion();
if (version != null) {
@@ -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<String> findVersions(Artifact artifact) {
List<String> res = new ArrayList<String>();
List<String> 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) {