Prefer RuleContext.getFragment over BuildConfiguration.getFragment.
This improves the coverage of the legality check in RuleContext.getFragment.
--
MOS_MIGRATED_REVID=101208822
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaSemantics.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaSemantics.java
index ebf472d..9432147 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaSemantics.java
@@ -157,7 +157,6 @@
Preconditions.checkNotNull(executable);
Preconditions.checkNotNull(javaStartClass);
Preconditions.checkNotNull(javaExecutable);
- BuildConfiguration config = ruleContext.getConfiguration();
List<Substitution> arguments = new ArrayList<>();
String workspacePrefix = ruleContext.getWorkspaceName();
@@ -167,7 +166,7 @@
arguments.add(Substitution.of("%workspace_prefix%", workspacePrefix));
arguments.add(Substitution.of("%javabin%", javaExecutable));
arguments.add(Substitution.of("%needs_runfiles%",
- config.getFragment(Jvm.class).getJavaExecutable().isAbsolute() ? "0" : "1"));
+ ruleContext.getFragment(Jvm.class).getJavaExecutable().isAbsolute() ? "0" : "1"));
arguments.add(new ComputedSubstitution("%classpath%") {
@Override
public String getValue() {
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/objc/BazelIosTestRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/objc/BazelIosTestRule.java
index 40c254e..4b7c7c4 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/objc/BazelIosTestRule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/objc/BazelIosTestRule.java
@@ -23,6 +23,8 @@
import com.google.devtools.build.lib.packages.ImplicitOutputsFunction;
import com.google.devtools.build.lib.packages.RuleClass;
import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassType;
+import com.google.devtools.build.lib.rules.java.J2ObjcConfiguration;
+import com.google.devtools.build.lib.rules.objc.ObjcConfiguration;
import com.google.devtools.build.lib.rules.objc.ObjcRuleClasses;
import com.google.devtools.build.lib.rules.objc.ReleaseBundlingSupport;
import com.google.devtools.build.lib.rules.objc.XcodeSupport;
@@ -34,6 +36,7 @@
@Override
public RuleClass build(RuleClass.Builder builder, final RuleDefinitionEnvironment env) {
return builder
+ .requiresConfigurationFragments(ObjcConfiguration.class, J2ObjcConfiguration.class)
/*<!-- #BLAZE_RULE(ios_test).IMPLICIT_OUTPUTS -->
<ul>
<li><code><var>name</var>.ipa</code>: the test bundle as an
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Attribute.java b/src/main/java/com/google/devtools/build/lib/packages/Attribute.java
index 655edad..65688bd 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Attribute.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Attribute.java
@@ -825,6 +825,10 @@
this((Label) null);
}
+ public LateBoundLabel(Class<?>... requiredConfigurationFragments) {
+ this((Label) null, requiredConfigurationFragments);
+ }
+
public LateBoundLabel(Label label) {
this.label = label;
this.requiredConfigurationFragments = ImmutableSet.of();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java
index e0e4c7f..81f3af5 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java
@@ -773,7 +773,6 @@
static boolean shouldDexWithJack(RuleContext ruleContext) {
return ruleContext
- .getConfiguration()
.getFragment(AndroidConfiguration.class)
.isJackUsedForDexing();
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java
index fa24bbb..7928a1b 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java
@@ -153,7 +153,7 @@
* Implementation for the :proguard attribute.
*/
static final LateBoundLabel<BuildConfiguration> PROGUARD =
- new LateBoundLabel<BuildConfiguration>() {
+ new LateBoundLabel<BuildConfiguration>(AndroidConfiguration.class) {
@Override
public Label getDefault(Rule rule, BuildConfiguration configuration) {
// If --proguard_top is not specified, null is returned. AndroidSdk will take care of using
@@ -163,7 +163,7 @@
};
public static final LateBoundLabel<BuildConfiguration> ANDROID_SDK =
- new LateBoundLabel<BuildConfiguration>(DEFAULT_ANDROID_SDK) {
+ new LateBoundLabel<BuildConfiguration>(DEFAULT_ANDROID_SDK, AndroidConfiguration.class) {
@Override
public Label getDefault(Rule rule, BuildConfiguration configuration) {
return configuration.getFragment(AndroidConfiguration.class).getSdk();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/JackCompilationHelper.java b/src/main/java/com/google/devtools/build/lib/rules/android/JackCompilationHelper.java
index de9c089..3c6964a 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/JackCompilationHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/JackCompilationHelper.java
@@ -784,7 +784,6 @@
boolean useSanityChecks =
ruleContext
- .getConfiguration()
.getFragment(AndroidConfiguration.class)
.isJackSanityChecked();
FilesToRunProvider jackBinary = androidSdk.getJack();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
index 69b79ed..0f644f3 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
@@ -530,8 +530,7 @@
requestedFeatures.addAll(ruleSpecificRequestedFeatures);
// Enable FDO related features requested by options.
- CppConfiguration cppConfiguration =
- ruleContext.getConfiguration().getFragment(CppConfiguration.class);
+ CppConfiguration cppConfiguration = ruleContext.getFragment(CppConfiguration.class);
FdoSupport fdoSupport = cppConfiguration.getFdoSupport();
if (fdoSupport.getFdoInstrument() != null) {
requestedFeatures.add(CppRuleClasses.FDO_INSTRUMENT);
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 c1674a9..1ab0316 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
@@ -36,7 +36,7 @@
*/
public final class CcToolchainRule implements RuleDefinition {
private static final LateBoundLabel<BuildConfiguration> LIBC_LINK =
- new LateBoundLabel<BuildConfiguration>() {
+ new LateBoundLabel<BuildConfiguration>(CppConfiguration.class) {
@Override
public Label getDefault(Rule rule, BuildConfiguration configuration) {
return configuration.getFragment(CppConfiguration.class).getLibcLabel();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java
index 2f12d4a..9ffaba5 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java
@@ -80,10 +80,10 @@
private FeatureConfiguration featureConfiguration;
public CppModel(RuleContext ruleContext, CppSemantics semantics) {
- this.ruleContext = ruleContext;
+ this.ruleContext = Preconditions.checkNotNull(ruleContext);
this.semantics = semantics;
configuration = ruleContext.getConfiguration();
- cppConfiguration = configuration.getFragment(CppConfiguration.class);
+ cppConfiguration = ruleContext.getFragment(CppConfiguration.class);
}
/**
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkCommandLine.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkCommandLine.java
index b9a4fb9..a64a892 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkCommandLine.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkCommandLine.java
@@ -1047,7 +1047,7 @@
featureConfiguration = CcCommon.configureFeatures(ruleContext);
CcToolchainFeatures.Variables.Builder buildVariables =
new CcToolchainFeatures.Variables.Builder();
- CppConfiguration cppConfiguration = configuration.getFragment(CppConfiguration.class);
+ CppConfiguration cppConfiguration = ruleContext.getFragment(CppConfiguration.class);
cppConfiguration.getFdoSupport().getLinkOptions(featureConfiguration, buildVariables);
variables = buildVariables.build();
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSemantics.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSemantics.java
index b582bd9..010e3b9 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSemantics.java
@@ -83,7 +83,7 @@
static final String JAVA_TOOLCHAIN_LABEL = "//tools/defaults:java_toolchain";
public static final LateBoundLabel<BuildConfiguration> JAVA_TOOLCHAIN =
- new LateBoundLabel<BuildConfiguration>(JAVA_TOOLCHAIN_LABEL) {
+ new LateBoundLabel<BuildConfiguration>(JAVA_TOOLCHAIN_LABEL, JavaConfiguration.class) {
@Override
public Label getDefault(Rule rule, BuildConfiguration configuration) {
return configuration.getFragment(JavaConfiguration.class).getToolchainLabel();
@@ -146,7 +146,7 @@
* Implementation for the :jvm attribute.
*/
public static final LateBoundLabel<BuildConfiguration> JVM =
- new LateBoundLabel<BuildConfiguration>(JDK_LABEL) {
+ new LateBoundLabel<BuildConfiguration>(JDK_LABEL, Jvm.class) {
@Override
public Label getDefault(Rule rule, BuildConfiguration configuration) {
return configuration.getFragment(Jvm.class).getJvmLabel();
@@ -157,7 +157,7 @@
* Implementation for the :host_jdk attribute.
*/
public static final LateBoundLabel<BuildConfiguration> HOST_JDK =
- new LateBoundLabel<BuildConfiguration>(JDK_LABEL) {
+ new LateBoundLabel<BuildConfiguration>(JDK_LABEL, Jvm.class) {
@Override
public boolean useHostConfiguration() {
return true;
@@ -174,7 +174,7 @@
* default, so it returns null for the configuration-independent default value.
*/
public static final LateBoundLabel<BuildConfiguration> JAVA_LAUNCHER =
- new LateBoundLabel<BuildConfiguration>() {
+ new LateBoundLabel<BuildConfiguration>(JavaConfiguration.class) {
@Override
public Label getDefault(Rule rule, BuildConfiguration configuration) {
return configuration.getFragment(JavaConfiguration.class).getJavaLauncherLabel();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/IosFrameworkBinaryRule.java b/src/main/java/com/google/devtools/build/lib/rules/objc/IosFrameworkBinaryRule.java
index af8f8b0..f331aba 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/IosFrameworkBinaryRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/IosFrameworkBinaryRule.java
@@ -19,6 +19,7 @@
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.packages.RuleClass;
import com.google.devtools.build.lib.packages.RuleClass.Builder;
+import com.google.devtools.build.lib.rules.java.J2ObjcConfiguration;
/**
* Rule definition for ios_framework_binary.
@@ -28,6 +29,7 @@
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment environment) {
return builder
+ .requiresConfigurationFragments(ObjcConfiguration.class, J2ObjcConfiguration.class)
/*<!-- #BLAZE_RULE(ios_framework_binary).IMPLICIT_OUTPUTS -->
<ul>
<li><code><var>name</var>.xcodeproj/project.pbxproj</code>: An Xcode project file which
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/IosFrameworkRule.java b/src/main/java/com/google/devtools/build/lib/rules/objc/IosFrameworkRule.java
index 766b86c..838c113 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/IosFrameworkRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/IosFrameworkRule.java
@@ -33,6 +33,7 @@
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment environment) {
return builder
+ .requiresConfigurationFragments(ObjcConfiguration.class)
// TODO(blaze-team): IPA is not right here, should probably be just zipped framework bundle.
.setImplicitOutputsFunction(
ImplicitOutputsFunction.fromFunctions(ReleaseBundlingSupport.IPA, XcodeSupport.PBXPROJ))
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibrary.java
index ce1709a..4c404d8 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibrary.java
@@ -163,7 +163,7 @@
boolean libPerProtoIncludes =
ruleContext.attributes().get(
ObjcProtoLibraryRule.PER_PROTO_INCLUDES, Type.BOOLEAN);
- if (ruleContext.getConfiguration().getFragment(ObjcConfiguration.class).perProtoIncludes()
+ if (ruleContext.getFragment(ObjcConfiguration.class).perProtoIncludes()
|| libPerProtoIncludes) {
searchPathEntriesBuilder
.add(generatedProtoDir)
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java
index ec3f279..60e4d29 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java
@@ -712,7 +712,7 @@
.add(attr(":dumpsyms", LABEL)
.cfg(HOST)
.singleArtifact()
- .value(new LateBoundLabel<BuildConfiguration>() {
+ .value(new LateBoundLabel<BuildConfiguration>(ObjcConfiguration.class) {
@Override
public Label getDefault(Rule rule, BuildConfiguration configuration) {
if (!configuration.getFragment(ObjcConfiguration.class).generateDebugSymbols()) {
@@ -892,7 +892,7 @@
.add(attr(":default_provisioning_profile", LABEL)
.singleArtifact()
.allowedFileTypes(FileType.of(".mobileprovision"))
- .value(new LateBoundLabel<BuildConfiguration>() {
+ .value(new LateBoundLabel<BuildConfiguration>(ObjcConfiguration.class) {
@Override
public Label getDefault(Rule rule, BuildConfiguration configuration) {
ObjcConfiguration objcConfiguration =