aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools
diff options
context:
space:
mode:
authorGravatar Irina Iancu <elenairina@google.com>2016-11-23 12:47:26 +0000
committerGravatar Dmitry Lomov <dslomov@google.com>2016-11-23 13:56:30 +0000
commit4ce3bc9ef34ea38a4e92984f84c9edcd0e40550f (patch)
tree1a40eecb8313fe444d6b09acefa19aec3c59c246 /src/main/java/com/google/devtools
parent74d716bf1b00badbe7f1f028d8f005b1780b06bc (diff)
Gracefully fail when there are duplicate jars in 'jars' attribute of 'java_import' rule via filegroup.
-- MOS_MIGRATED_REVID=140018942
Diffstat (limited to 'src/main/java/com/google/devtools')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaImport.java11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaImport.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaImport.java
index df7cdf8c33..d1f9aabacb 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaImport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaImport.java
@@ -29,7 +29,6 @@ import com.google.devtools.build.lib.analysis.RunfilesProvider;
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
-import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException;
import com.google.devtools.build.lib.rules.RuleConfiguredTargetFactory;
import com.google.devtools.build.lib.rules.cpp.CcLinkParams;
import com.google.devtools.build.lib.rules.cpp.CcLinkParamsProvider;
@@ -37,6 +36,8 @@ import com.google.devtools.build.lib.rules.cpp.CcLinkParamsStore;
import com.google.devtools.build.lib.rules.cpp.CppCompilationContext;
import com.google.devtools.build.lib.rules.cpp.LinkerInput;
import com.google.devtools.build.lib.rules.java.JavaCompilationArgs.ClasspathType;
+import java.util.LinkedHashSet;
+import java.util.Set;
/**
* An implementation for the "java_import" rule.
@@ -203,7 +204,7 @@ public class JavaImport implements RuleConfiguredTargetFactory {
}
private ImmutableList<Artifact> collectJars(RuleContext ruleContext) {
- ImmutableList.Builder<Artifact> jarsBuilder = ImmutableList.builder();
+ Set<Artifact> jars = new LinkedHashSet<>();
for (TransitiveInfoCollection info : ruleContext.getPrerequisites("jars", Mode.TARGET)) {
if (info.getProvider(JavaCompilationArgsProvider.class) != null) {
ruleContext.attributeError("jars", "should not refer to Java rules");
@@ -212,11 +213,13 @@ public class JavaImport implements RuleConfiguredTargetFactory {
if (!JavaSemantics.JAR.matches(jar.getFilename())) {
ruleContext.attributeError("jars", jar.getFilename() + " is not a .jar file");
} else {
- jarsBuilder.add(jar);
+ if (!jars.add(jar)) {
+ ruleContext.attributeError("jars", jar.getFilename() + " is a duplicate");
+ }
}
}
}
- return jarsBuilder.build();
+ return ImmutableList.copyOf(jars);
}
private ImmutableList<Artifact> processWithIjar(ImmutableList<Artifact> jars,