diff options
author | 2017-07-12 12:58:35 +0200 | |
---|---|---|
committer | 2017-07-12 16:03:00 +0200 | |
commit | ad7f531e99706be8ba42ea448bf300be450f15b0 (patch) | |
tree | 93ca2215eb8dc6b9bdd896aa0a6a36e42de8b6b4 /src/main/java/com/google/devtools/build/lib/rules/config | |
parent | 77e49975862130fd1905239d86cc8da8031f8f02 (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')
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"); } |