diff options
3 files changed, 20 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java index 731f47985b..04810eef4d 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java @@ -275,6 +275,11 @@ final class ConfiguredTargetFunction implements SkyFunction { for (Dependency dep : deps) { SkyKey depKey = TO_KEYS.apply(dep); + // If the same target was declared in different attributes of rule, we should not process it + // twice. + if (result.containsKey(depKey)) { + continue; + } ConfiguredTarget depConfiguredTarget = configuredTargetMap.get(depKey); for (Class<? extends ConfiguredAspectFactory> depAspect : dep.getAspects()) { if (!aspectMatchesConfiguredTarget(depConfiguredTarget, depAspect)) { diff --git a/src/test/java/com/google/devtools/build/lib/analysis/AspectTest.java b/src/test/java/com/google/devtools/build/lib/analysis/AspectTest.java index 4861ace11d..7d17a98cb5 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/AspectTest.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/AspectTest.java @@ -124,4 +124,17 @@ public class AspectTest extends AnalysisTestCase { } assertContainsEvent("Aspect error"); } + + @Test + public void sameTargetInDifferentAttributes() throws Exception { + setRules(new TestAspects.BaseRule(), new TestAspects.AspectRequiringRule(), + new TestAspects.SimpleRule()); + pkg("a", + "aspect(name='a', foo=[':b'], bar=[':b'])", + "aspect(name='b', foo=[])"); + + ConfiguredTarget a = getConfiguredTarget("//a:a"); + assertThat(a.getProvider(TestAspects.RuleInfo.class).getData()) + .containsExactly("aspect //a:b", "rule //a:a"); + } } diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/TestAspects.java b/src/test/java/com/google/devtools/build/lib/analysis/util/TestAspects.java index 4d0fa69619..5438b43d6b 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/util/TestAspects.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/util/TestAspects.java @@ -269,6 +269,8 @@ public class TestAspects { return builder .add(attr("foo", LABEL_LIST).allowedFileTypes(FileTypeSet.ANY_FILE) .aspect(SimpleAspect.class)) + .add(attr("bar", LABEL_LIST).allowedFileTypes(FileTypeSet.ANY_FILE) + .aspect(SimpleAspect.class)) .build(); } |