aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-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
-rw-r--r--src/test/java/com/google/devtools/build/lib/analysis/AspectTest.java22
4 files changed, 32 insertions, 4 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());
}
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 a2bac61ceb..4488f733c8 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
@@ -800,7 +800,7 @@ public class AspectTest extends AnalysisTestCase {
}
@Test
- public void aspectApplyingtToFiles() throws Exception {
+ public void aspectApplyingToFiles() throws Exception {
AspectApplyingToFiles aspectApplyingToFiles = new AspectApplyingToFiles();
setRulesAndAspectsAvailableInTests(
ImmutableList.<NativeAspectClass>of(aspectApplyingToFiles),
@@ -818,4 +818,24 @@ public class AspectTest extends AnalysisTestCase {
assertThat(provider.getLabel())
.isEqualTo(Label.parseAbsoluteUnchecked("//a:x_deploy.jar"));
}
+
+ @Test
+ public void aspectApplyingToSourceFilesIgnored() throws Exception {
+ AspectApplyingToFiles aspectApplyingToFiles = new AspectApplyingToFiles();
+ setRulesAndAspectsAvailableInTests(
+ ImmutableList.<NativeAspectClass>of(aspectApplyingToFiles),
+ ImmutableList.<RuleDefinition>of());
+ pkg(
+ "a",
+ "java_binary(name = 'x', main_class = 'x.FooBar', srcs = ['x.java'])"
+ );
+ scratch.file("a/x.java", "");
+ AnalysisResult analysisResult = update(new EventBus(), defaultFlags(),
+ ImmutableList.of(aspectApplyingToFiles.getName()),
+ "//a:x.java");
+ AspectValue aspect = Iterables.getOnlyElement(analysisResult.getAspects());
+ assertThat(aspect.getConfiguredAspect().getProvider(AspectApplyingToFiles.Provider.class))
+ .isNull();
+ }
+
}