Skip to content

Commit 694e6b9

Browse files
sellophaneGoogler
andauthored
Do not configure duplicate jars in one library (bazelbuild#7587)
When building library definitions: - remember already included jars - when selecting path for identical jars prefer already used paths Bug: n/a Test: n/a (existing) Change-Id: Ie6e0b59394ac71635bf1d55298ae10d996d6ee3d AOSP: 1ad3ce17ddd5bbe2dea9b6e92cce9017c814f576 Co-authored-by: Googler <[email protected]>
1 parent 59a480f commit 694e6b9

File tree

1 file changed

+19
-2
lines changed

1 file changed

+19
-2
lines changed

querysync/java/com/google/idea/blaze/qsync/java/AddCompiledJavaDeps.java

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import static com.google.common.collect.ImmutableSet.toImmutableSet;
1919

2020
import com.google.idea.blaze.common.Context;
21+
import com.google.idea.blaze.common.PrintOutput;
2122
import com.google.idea.blaze.qsync.artifacts.BuildArtifact;
2223
import com.google.idea.blaze.qsync.deps.ArtifactDirectories;
2324
import com.google.idea.blaze.qsync.deps.ArtifactDirectoryBuilder;
@@ -27,10 +28,12 @@
2728
import com.google.idea.blaze.qsync.deps.ProjectProtoUpdateOperation;
2829
import com.google.idea.blaze.qsync.deps.TargetBuildInfo;
2930
import com.google.idea.blaze.qsync.project.ProjectProto.JarDirectory;
31+
import java.util.Comparator;
3032
import java.util.HashMap;
3133
import java.util.HashSet;
3234
import java.util.Map;
3335
import java.util.Set;
36+
import java.util.stream.Collectors;
3437

3538
/** Adds compiled jars from dependencies to the project. */
3639
public class AddCompiledJavaDeps implements ProjectProtoUpdateOperation {
@@ -43,18 +46,32 @@ public AddCompiledJavaDeps(boolean enableBazelAdditionalLibraryRootsProvider) {
4346
@Override
4447
public void update(ProjectProtoUpdate update, ArtifactTracker.State artifactState, Context<?> context) {
4548
ArtifactDirectoryBuilder javaDepsDir = update.artifactDirectory(ArtifactDirectories.JAVADEPS);
49+
Set<String> skipped = new HashSet<>();
50+
Set<String> seen = new HashSet<>();
4651
Map<String, Set<String>> libNameToJars = new HashMap<>();
4752
for (TargetBuildInfo target : artifactState.targets()) {
4853
if (target.javaInfo().isPresent()) {
4954
JavaArtifactInfo javaInfo = target.javaInfo().get();
50-
for (BuildArtifact jar : javaInfo.jars()) {
55+
Set<String> locallySeen = new HashSet<>();
56+
for (BuildArtifact jar :
57+
javaInfo.jars().stream()
58+
// Prefer already added artifactPaths.
59+
.sorted(Comparator.comparing(it -> !seen.contains(it.artifactPath().toString())))
60+
.toList()) {
61+
if (locallySeen.contains(jar.digest())) {
62+
skipped.add(jar.artifactPath().toString());
63+
continue;
64+
}
65+
locallySeen.add(jar.digest());
66+
seen.add(jar.artifactPath().toString());
5167
javaDepsDir.addIfNewer(jar.artifactPath(), jar, target.buildContext());
5268
libNameToJars
53-
.computeIfAbsent(target.label().toString(), t -> new HashSet())
69+
.computeIfAbsent(target.label().toString(), t -> new HashSet<>())
5470
.add(javaDepsDir.path().resolve(jar.artifactPath()).toString());
5571
}
5672
}
5773
}
74+
context.output(PrintOutput.output("Skipped " + skipped.size() + " duplicate jars"));
5875
if (!enableBazelAdditionalLibraryRootsProvider) {
5976
updateProjectProtoUpdateAllJarsInOneLibrary(javaDepsDir, update);
6077
} else {

0 commit comments

Comments
 (0)