diff options
author | 2016-02-01 13:41:23 +0000 | |
---|---|---|
committer | 2016-02-02 14:55:06 +0000 | |
commit | 076acfff37364351f68adb73ada8c1dac2f95ea7 (patch) | |
tree | 7a8677bdd126621718364810daeb63efa7e09d27 /src | |
parent | 2ac20962867aec785fb6f4616e6b51cbf5a3fb01 (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.java | 2 | ||||
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/skylark/SkylarkAspectsTest.java | 46 |
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 |