From ce59d4dc6c7ea461c2945e80e508fa7b4d2c7c4e Mon Sep 17 00:00:00 2001 From: dslomov Date: Fri, 4 Aug 2017 17:32:47 +0200 Subject: Aspects that apply to files cannot apply to source files. Make them not crash. RELNOTES: None. PiperOrigin-RevId: 164265379 --- .../com/google/devtools/build/lib/packages/AspectDefinition.java | 8 +++++--- src/main/java/com/google/devtools/build/lib/packages/Target.java | 2 ++ .../devtools/build/lib/skyframe/ConfiguredTargetFunction.java | 4 ++++ 3 files changed, 11 insertions(+), 3 deletions(-) (limited to 'src/main/java/com') diff --git a/src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java b/src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java index 4b8750da07..7fcd60f4f7 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java +++ b/src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java @@ -159,9 +159,10 @@ public final class AspectDefinition { } /** - * Returns whether this aspect applies to files. + * Returns whether this aspect applies to (output) files. * - * Currently only supported for top-level aspects and targets. + * Currently only supported for top-level aspects and targets, and + * only for output files. */ public boolean applyToFiles() { return applyToFiles; @@ -459,7 +460,8 @@ public final class AspectDefinition { * Sets whether this aspect should apply to files. * * Default is false. - * Currently only supported for top-level aspects and targets. + * Currently only supported for top-level aspects and targets, and only for + * output files. */ public Builder applyToFiles(boolean propagateOverGeneratedFiles) { this.applyToFiles = propagateOverGeneratedFiles; diff --git a/src/main/java/com/google/devtools/build/lib/packages/Target.java b/src/main/java/com/google/devtools/build/lib/packages/Target.java index f503aa8568..ad83dafeed 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/Target.java +++ b/src/main/java/com/google/devtools/build/lib/packages/Target.java @@ -21,6 +21,7 @@ import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; import java.util.Set; +import javax.annotation.Nullable; /** * A node in the build dependency graph, identified by a Label. @@ -60,6 +61,7 @@ public interface Target { * If this is a Rule, returns itself; it this is an OutputFile, returns its * generating rule; if this is an input file, returns null. */ + @Nullable Rule getAssociatedRule(); /** 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 1b783b9926..d650fdbc13 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 @@ -985,6 +985,10 @@ public final class ConfiguredTargetFunction implements SkyFunction { if (!aspect.getDefinition().applyToFiles() && !(dep.getTarget() instanceof Rule)) { return false; } + if (dep.getTarget().getAssociatedRule() == null) { + // even aspects that 'apply to files' cannot apply to input files. + return false; + } return dep.satisfies(aspect.getDefinition().getRequiredProviders()); } -- cgit v1.2.3