aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com
diff options
context:
space:
mode:
authorGravatar dslomov <dslomov@google.com>2017-08-04 17:32:47 +0200
committerGravatar Jakob Buchgraber <buchgr@google.com>2017-08-07 11:20:10 +0200
commitce59d4dc6c7ea461c2945e80e508fa7b4d2c7c4e (patch)
treeb82c76a397f86b99521fb26a59ba6ab4232fc33a /src/main/java/com
parent05f563a97581959db5da0cb02daf87cfa20c6b88 (diff)
Aspects that apply to files cannot apply to source files.
Make them not crash. RELNOTES: None. PiperOrigin-RevId: 164265379
Diffstat (limited to 'src/main/java/com')
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/Target.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java4
3 files changed, 11 insertions, 3 deletions
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 <code>false</code>.
- * 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());
}