diff options
author | 2015-08-04 14:23:58 +0000 | |
---|---|---|
committer | 2015-08-04 20:25:51 +0000 | |
commit | ea11fc54f4224094bc3793eec1e2eaf7d397c65f (patch) | |
tree | fc2a5b84adedbed150cc160b2a044fadd8a12593 /src/main/java/com/google/devtools/build/lib | |
parent | d1367eae6ab5824b5b9f23f2d93e764e1e47de84 (diff) |
Add more configuration fragment annotations, and a runtime check.
--
MOS_MIGRATED_REVID=99819719
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib')
4 files changed, 10 insertions, 2 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java index fad5cd4979..92b3dbd89f 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java @@ -259,12 +259,15 @@ public final class RuleContext extends TargetContext public <T extends Fragment> T getFragment(Class<T> fragment) { // TODO(bazel-team): The fragments can also be accessed directly through BuildConfiguration. // Can we lock that down somehow? - Preconditions.checkArgument( - rule.getRuleClassObject().isLegalConfigurationFragment(fragment), + Preconditions.checkArgument(isLegalFragment(fragment), "%s does not have access to %s", rule.getRuleClass(), fragment); return getConfiguration().getFragment(fragment); } + public <T extends Fragment> boolean isLegalFragment(Class<T> fragment) { + return rule.getRuleClassObject().isLegalConfigurationFragment(fragment); + } + @Override public ArtifactOwner getOwner() { return getAnalysisEnvironment().getOwner(); diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainRule.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainRule.java index 30690379c5..c1674a96fd 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainRule.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainRule.java @@ -47,6 +47,7 @@ public final class CcToolchainRule implements RuleDefinition { public RuleClass build(Builder builder, RuleDefinitionEnvironment env) { return builder .setUndocumented() + .requiresConfigurationFragments(CppConfiguration.class) .add(attr("output_licenses", LICENSE)) .add(attr("cpu", STRING).mandatory()) .add(attr("all_files", LABEL).legacyAllowAnyFileType().cfg(HOST).mandatory()) diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainRule.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainRule.java index 1f7b90fa47..00adebeeed 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainRule.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainRule.java @@ -31,6 +31,7 @@ public final class JavaToolchainRule implements RuleDefinition { @Override public RuleClass build(Builder builder, RuleDefinitionEnvironment env) { return builder.setUndocumented() + .requiresConfigurationFragments(JavaConfiguration.class) /* <!-- #BLAZE_RULE(java_toolchain).ATTRIBUTE(source_version) --> The Java source version (e.g., '6' or '7'). It specifies which set of code structures are allowed in the Java source code. diff --git a/src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java b/src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java index 90a10a68a5..8c22344955 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/nativedeps/NativeDepsHelper.java @@ -14,6 +14,7 @@ package com.google.devtools.build.lib.rules.nativedeps; +import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; import com.google.devtools.build.lib.Constants; import com.google.devtools.build.lib.actions.Artifact; @@ -130,6 +131,8 @@ public abstract class NativeDepsHelper { private static NativeDepsRunfiles maybeCreateNativeDepsAction(final RuleContext ruleContext, CcLinkParams linkParams, Collection<String> extraLinkOpts, BuildConfiguration configuration, CcToolchainProvider toolchain, PathFragment nativeDepsPath, Root bindirIfShared) { + Preconditions.checkState(ruleContext.isLegalFragment(CppConfiguration.class), + "%s does not have access to CppConfiguration", ruleContext.getRule().getRuleClass()); if (linkParams.getLibraries().isEmpty()) { return NativeDepsRunfiles.EMPTY; } |