aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Dmitry Lomov <dslomov@google.com>2016-02-01 13:41:23 +0000
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2016-02-02 14:55:06 +0000
commit076acfff37364351f68adb73ada8c1dac2f95ea7 (patch)
tree7a8677bdd126621718364810daeb63efa7e09d27 /src
parent2ac20962867aec785fb6f4616e6b51cbf5a3fb01 (diff)
Add a test that asserts aspects propagating along implicit deps.
Fix a minor bug in the process. -- MOS_MIGRATED_REVID=113519574
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTarget.java2
-rw-r--r--src/test/java/com/google/devtools/build/lib/skylark/SkylarkAspectsTest.java46
2 files changed, 47 insertions, 1 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTarget.java
index fec081a6b5..c70b5b0843 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTarget.java
@@ -259,7 +259,7 @@ public final class RuleConfiguredTarget extends AbstractConfiguredTarget {
public UnmodifiableIterator<TransitiveInfoProvider> iterator() {
Map<Class<? extends TransitiveInfoProvider>, TransitiveInfoProvider> allProviders =
new LinkedHashMap<>();
- for (int i = configuredAspects.size() - 1; i >= 0; i++) {
+ for (int i = configuredAspects.size() - 1; i >= 0; i--) {
for (TransitiveInfoProvider tip : configuredAspects.get(i)) {
allProviders.put(tip.getClass(), tip);
}
diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkAspectsTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkAspectsTest.java
index c8960cb48b..e393a84726 100644
--- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkAspectsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkAspectsTest.java
@@ -185,7 +185,53 @@ public class SkylarkAspectsTest extends AnalysisTestCase {
Object ruleKinds = skylarkProviders.getValue("rule_kinds");
assertThat(ruleKinds).isInstanceOf(SkylarkNestedSet.class);
assertThat((SkylarkNestedSet) ruleKinds).containsExactly("java_library");
+ }
+ @Test
+ public void aspectsPropagatingForDefaultAndImplicit() throws Exception {
+ scratch.file(
+ "test/aspect.bzl",
+ "def _impl(target, ctx):",
+ " s = set([target.label])",
+ " c = set([ctx.rule.kind])",
+ " a = ctx.rule.attr",
+ " if hasattr(a, '_stl') and a._stl:",
+ " s += a._stl.target_labels",
+ " c += a._stl.rule_kinds",
+ " if hasattr(a, '_stl_default') and a._stl_default:",
+ " s += a._stl_default.target_labels",
+ " c += a._stl_default.rule_kinds",
+ " return struct(target_labels = s, rule_kinds = c)",
+ "",
+ "MyAspect = aspect(",
+ " implementation=_impl,",
+ " attr_aspects=[':stl', '$stl_default'],",
+ ")");
+ scratch.file(
+ "test/BUILD",
+ "cc_library(",
+ " name = 'xxx',",
+ ")");
+ AnalysisResult analysisResult =
+ update(ImmutableList.of("test/aspect.bzl%MyAspect"), "//test:xxx");
+ AspectValue aspectValue = analysisResult.getAspects().iterator().next();
+ SkylarkProviders skylarkProviders =
+ aspectValue.getConfiguredAspect().getProvider(SkylarkProviders.class);
+ assertThat(skylarkProviders).isNotNull();
+ Object names = skylarkProviders.getValue("target_labels");
+ assertThat(names).isInstanceOf(SkylarkNestedSet.class);
+ assertThat(
+ transform(
+ (SkylarkNestedSet) names,
+ new Function<Object, String>() {
+ @Nullable
+ @Override
+ public String apply(Object o) {
+ assertThat(o).isInstanceOf(Label.class);
+ return ((Label) o).getName();
+ }
+ }))
+ .containsExactly("stl", "xxx");
}
@Test