diff options
author | 2016-11-23 12:47:26 +0000 | |
---|---|---|
committer | 2016-11-23 13:56:30 +0000 | |
commit | 4ce3bc9ef34ea38a4e92984f84c9edcd0e40550f (patch) | |
tree | 1a40eecb8313fe444d6b09acefa19aec3c59c246 /src/main/java | |
parent | 74d716bf1b00badbe7f1f028d8f005b1780b06bc (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')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/java/JavaImport.java | 11 |
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, |