aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/config
diff options
context:
space:
mode:
authorGravatar plf <plf@google.com>2017-07-12 12:58:35 +0200
committerGravatar László Csomor <laszlocsomor@google.com>2017-07-12 16:03:00 +0200
commitad7f531e99706be8ba42ea448bf300be450f15b0 (patch)
tree93ca2215eb8dc6b9bdd896aa0a6a36e42de8b6b4 /src/main/java/com/google/devtools/build/lib/rules/config
parent77e49975862130fd1905239d86cc8da8031f8f02 (diff)
Moves printing method for feature accessibility errors.
The method is moved to FeaturePolicyConfiguration.java so that it can be used by unrelated parts of the code using feature policies for whitelisting. RELNOTES:none PiperOrigin-RevId: 161648169
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/config')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlag.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagFeatureVisibility.java53
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/config/ConfigSetting.java4
3 files changed, 8 insertions, 56 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlag.java b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlag.java
index 87ce548a4a..43928c1f50 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlag.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlag.java
@@ -29,6 +29,7 @@ import com.google.devtools.build.lib.analysis.ConfiguredTarget;
import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder;
import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.RunfilesProvider;
+import com.google.devtools.build.lib.analysis.featurecontrol.FeaturePolicyConfiguration;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException;
import com.google.devtools.build.lib.rules.RuleConfiguredTargetFactory;
@@ -39,12 +40,14 @@ import java.util.List;
* The implementation of the config_feature_flag rule for defining custom flags for Android rules.
*/
public class ConfigFeatureFlag implements RuleConfiguredTargetFactory {
+ /** The name of the policy that is used to restrict access to the config_feature_flag rule. */
+ public static final String POLICY_NAME = "config_feature_flag";
@Override
public ConfiguredTarget create(RuleContext ruleContext)
throws InterruptedException, RuleErrorException {
- ConfigFeatureFlagFeatureVisibility.checkAvailable(
- ruleContext, "the " + ruleContext.getRuleClassNameForLogging() + " rule");
+ FeaturePolicyConfiguration.checkAvailable(
+ ruleContext, POLICY_NAME, "the " + ruleContext.getRuleClassNameForLogging() + " rule");
List<String> specifiedValues = ruleContext.attributes().get("allowed_values", STRING_LIST);
ImmutableSet<String> values = ImmutableSet.copyOf(specifiedValues);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagFeatureVisibility.java b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagFeatureVisibility.java
deleted file mode 100644
index b0909b4fef..0000000000
--- a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagFeatureVisibility.java
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 2017 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License
-
-package com.google.devtools.build.lib.rules.config;
-
-import com.google.devtools.build.lib.analysis.RuleContext;
-import com.google.devtools.build.lib.analysis.featurecontrol.FeaturePolicyConfiguration;
-import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException;
-
-/**
- * A validator utility class which confirms that config_feature_flag-related features can be used by
- * the current rule.
- */
-public class ConfigFeatureFlagFeatureVisibility {
-
- /** The name of the policy that is used to restrict access to the config_feature_flag rule. */
- public static final String POLICY_NAME = "config_feature_flag";
-
- private ConfigFeatureFlagFeatureVisibility() {}
-
- /**
- * Checks whether the rule in the given RuleContext has access to config_feature_flag and related
- * features, and reports an error if not.
- *
- * @param ruleContext The context in which this check is being executed.
- * @param feature The name of the config_feature_flag-related feature being used, to be printed in
- * the error if the policy forbids access to this rule.
- */
- public static void checkAvailable(RuleContext ruleContext, String feature)
- throws RuleErrorException {
- FeaturePolicyConfiguration policy = ruleContext.getFragment(FeaturePolicyConfiguration.class);
- Label label = ruleContext.getLabel();
- if (!policy.isFeatureEnabledForRule(POLICY_NAME, label)) {
- ruleContext.ruleError(
- String.format(
- "%s is not available in package '%s' according to policy '%s'",
- feature, label.getPackageIdentifier(), policy.getPolicyForFeature(POLICY_NAME)));
- throw new RuleErrorException();
- }
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigSetting.java b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigSetting.java
index 48977eb458..8215f4ad78 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigSetting.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigSetting.java
@@ -32,6 +32,7 @@ import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
import com.google.devtools.build.lib.analysis.config.BuildConfigurationOptionDetails;
import com.google.devtools.build.lib.analysis.config.ConfigMatchingProvider;
import com.google.devtools.build.lib.analysis.config.TransitiveOptionDetails;
+import com.google.devtools.build.lib.analysis.featurecontrol.FeaturePolicyConfiguration;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.packages.BuildType;
import com.google.devtools.build.lib.packages.NonconfigurableAttributeMapper;
@@ -70,8 +71,9 @@ public class ConfigSetting implements RuleConfiguredTargetFactory {
ConfigRuleClasses.ConfigSettingRule.FLAG_SETTINGS_ATTRIBUTE,
BuildType.LABEL_KEYED_STRING_DICT);
if (!flagSettings.isEmpty()) {
- ConfigFeatureFlagFeatureVisibility.checkAvailable(
+ FeaturePolicyConfiguration.checkAvailable(
ruleContext,
+ ConfigFeatureFlag.POLICY_NAME,
"the " + ConfigRuleClasses.ConfigSettingRule.FLAG_SETTINGS_ATTRIBUTE + " attribute");
}