diff options
author | Dmitry Lomov <dslomov@google.com> | 2017-03-01 15:44:00 +0000 |
---|---|---|
committer | Yue Gan <yueg@google.com> | 2017-03-01 16:16:42 +0000 |
commit | 6cd98976031448f4d75d084493a253dbd97b9dab (patch) | |
tree | 94912dc1323207f7f6803b5c0b9e516f526c5a64 /src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java | |
parent | 01120026dc313ee7ad9ea95069a29252eb19173b (diff) |
Do not execute aspect implementation if target advertizes but fails to provide a provider.
Previously we always executed the function, but didn't add the aspect to
the deps.
--
PiperOrigin-RevId: 148887089
MOS_MIGRATED_REVID=148887089
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java index 71f691255b..8437ab91bf 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java @@ -427,17 +427,21 @@ public final class AspectFunction implements SkyFunction { return null; } - ConfiguredAspect configuredAspect = - view.getConfiguredTargetFactory().createAspect( - analysisEnvironment, - associatedTarget, - aspectPath, - aspectFactory, - aspect, - directDeps, - configConditions, - aspectConfiguration, - view.getHostConfiguration(aspectConfiguration)); + ConfiguredAspect configuredAspect; + if (ConfiguredTargetFunction.aspectMatchesConfiguredTarget(associatedTarget, aspect)) { + configuredAspect = view.getConfiguredTargetFactory().createAspect( + analysisEnvironment, + associatedTarget, + aspectPath, + aspectFactory, + aspect, + directDeps, + configConditions, + aspectConfiguration, + view.getHostConfiguration(aspectConfiguration)); + } else { + configuredAspect = ConfiguredAspect.forNonapplicableTarget(aspect.getDescriptor()); + } events.replayOn(env.getListener()); if (events.hasErrors()) { |