aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java
diff options
context:
space:
mode:
authorGravatar mstaib <mstaib@google.com>2017-04-05 17:41:22 +0000
committerGravatar Marcel Hlopko <hlopko@google.com>2017-04-06 11:00:12 +0200
commit697a328dd6994bcf8f76d9abf09ac0e8734e3a07 (patch)
treee7472e645cfef8eb3d95fd1825ab11192e5c8dff /src/main/java
parentee77092b52a4792c9c46cc489cf194acd00bce68 (diff)
Move ConfigSetting into rules/config.
ConfigSetting was previously in analysis/config, where it was slightly out of place (as it is a rule, not an integral part of the analysis backend). This is also necessary to integrate it with ConfigFeatureFlag, as otherwise this would be a circular dependency (analysis/config <-> rules/config). ConfigFeatureFlagRule itself has been moved into ConfigRuleClasses, where it can use the ConfigBaseRule and the nonconfigurable reason from the other configuration rules. RELNOTES: None. PiperOrigin-RevId: 152275823
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/BUILD1
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/config/TransitiveOptionDetails.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/config/BUILD1
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagRule.java55
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/config/ConfigRuleClasses.java (renamed from src/main/java/com/google/devtools/build/lib/analysis/config/ConfigRuleClasses.java)35
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/config/ConfigSetting.java (renamed from src/main/java/com/google/devtools/build/lib/analysis/config/ConfigSetting.java)8
7 files changed, 46 insertions, 63 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/BUILD b/src/main/java/com/google/devtools/build/lib/BUILD
index c7a0fcf993..5355dc3723 100644
--- a/src/main/java/com/google/devtools/build/lib/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/BUILD
@@ -1198,6 +1198,7 @@ filegroup(
srcs = glob(["**/*.java"]) + [
"//src/main/java/com/google/devtools/build/lib/rules/apple:srcs",
"//src/main/java/com/google/devtools/build/lib/rules/apple/cpp:srcs",
+ "//src/main/java/com/google/devtools/build/lib/rules/config:srcs",
"//src/main/java/com/google/devtools/build/lib/rules/cpp:srcs",
"//src/main/java/com/google/devtools/build/lib/rules/cpp/proto:srcs",
"//src/main/java/com/google/devtools/build/lib/rules/genquery:srcs",
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/TransitiveOptionDetails.java b/src/main/java/com/google/devtools/build/lib/analysis/config/TransitiveOptionDetails.java
index 8f1a9b66b1..2cd749de08 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/TransitiveOptionDetails.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/TransitiveOptionDetails.java
@@ -135,7 +135,7 @@ public final class TransitiveOptionDetails implements Serializable {
* <p>As declared in {@link Option#allowMultiple}, multi-value options are expected to be
* of type {@code List<T>}.
*/
- boolean allowsMultipleValues(String optionName) {
+ public boolean allowsMultipleValues(String optionName) {
OptionDetails optionData = transitiveOptionsMap.get(optionName);
return (optionData == null) ? false : optionData.allowsMultiple;
}
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java
index 82a34f34af..843b267242 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java
@@ -27,7 +27,6 @@ import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider.RuleSe
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
-import com.google.devtools.build.lib.analysis.config.ConfigRuleClasses;
import com.google.devtools.build.lib.analysis.constraints.EnvironmentRule;
import com.google.devtools.build.lib.bazel.rules.BazelToolchainType.BazelToolchainTypeRule;
import com.google.devtools.build.lib.bazel.rules.android.AndroidNdkRepositoryRule;
@@ -102,7 +101,7 @@ import com.google.devtools.build.lib.rules.apple.cpp.AppleCcToolchainRule;
import com.google.devtools.build.lib.rules.apple.swift.SwiftCommandLineOptions;
import com.google.devtools.build.lib.rules.apple.swift.SwiftConfiguration;
import com.google.devtools.build.lib.rules.config.ConfigFeatureFlagConfiguration;
-import com.google.devtools.build.lib.rules.config.ConfigFeatureFlagRule;
+import com.google.devtools.build.lib.rules.config.ConfigRuleClasses;
import com.google.devtools.build.lib.rules.config.ConfigSkylarkCommon;
import com.google.devtools.build.lib.rules.cpp.CcIncLibraryRule;
import com.google.devtools.build.lib.rules.cpp.CcToolchainRule;
@@ -395,11 +394,11 @@ public class BazelRuleClassProvider {
public void init(Builder builder) {
builder.addRuleDefinition(new ConfigRuleClasses.ConfigBaseRule());
builder.addRuleDefinition(new ConfigRuleClasses.ConfigSettingRule());
+
builder.addConfig(
ConfigFeatureFlagConfiguration.Options.class,
new ConfigFeatureFlagConfiguration.Loader());
-
- builder.addRuleDefinition(new ConfigFeatureFlagRule());
+ builder.addRuleDefinition(new ConfigRuleClasses.ConfigFeatureFlagRule());
builder.addSkylarkAccessibleTopLevels("config_common", new ConfigSkylarkCommon());
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/config/BUILD b/src/main/java/com/google/devtools/build/lib/rules/config/BUILD
index 459150ab5f..5c0096d10e 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/config/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/rules/config/BUILD
@@ -12,6 +12,7 @@ java_library(
]),
deps = [
"//src/main/java/com/google/devtools/build/lib:build-base",
+ "//src/main/java/com/google/devtools/build/lib:build-configuration-option-details",
"//src/main/java/com/google/devtools/build/lib:collect",
"//src/main/java/com/google/devtools/build/lib:concurrent",
"//src/main/java/com/google/devtools/build/lib:packages-internal",
diff --git a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagRule.java b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagRule.java
deleted file mode 100644
index 3600b496aa..0000000000
--- a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagRule.java
+++ /dev/null
@@ -1,55 +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 static com.google.devtools.build.lib.packages.Attribute.attr;
-import static com.google.devtools.build.lib.syntax.Type.STRING;
-import static com.google.devtools.build.lib.syntax.Type.STRING_LIST;
-
-import com.google.devtools.build.lib.analysis.BaseRuleClasses;
-import com.google.devtools.build.lib.analysis.RuleDefinition;
-import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
-import com.google.devtools.build.lib.packages.RuleClass;
-
-/** Rule definition for Android's config_feature_flag rule. */
-public final class ConfigFeatureFlagRule implements RuleDefinition {
-
- @Override
- public RuleClass build(RuleClass.Builder builder, RuleDefinitionEnvironment env) {
- return builder
- .setUndocumented(/* It's unusable as yet, as there are no ways to interact with it. */)
- .requiresConfigurationFragments(ConfigFeatureFlagConfiguration.class)
- .add(
- attr("allowed_values", STRING_LIST)
- .mandatory()
- .nonEmpty()
- .orderIndependent()
- .nonconfigurable("policy decision; this is defining an element of configuration"))
- .add(
- attr("default_value", STRING)
- .mandatory()
- .nonconfigurable("policy decision; this is defining an element of configuration"))
- .build();
- }
-
- @Override
- public RuleDefinition.Metadata getMetadata() {
- return RuleDefinition.Metadata.builder()
- .name("config_feature_flag")
- .ancestors(BaseRuleClasses.BaseRule.class)
- .factoryClass(ConfigFeatureFlag.class)
- .build();
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/ConfigRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigRuleClasses.java
index d79e3c9278..053fa7b1c5 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/ConfigRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigRuleClasses.java
@@ -12,10 +12,12 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package com.google.devtools.build.lib.analysis.config;
+package com.google.devtools.build.lib.rules.config;
import static com.google.devtools.build.lib.packages.Attribute.attr;
+import static com.google.devtools.build.lib.syntax.Type.STRING;
import static com.google.devtools.build.lib.syntax.Type.STRING_DICT;
+import static com.google.devtools.build.lib.syntax.Type.STRING_LIST;
import com.google.common.base.Function;
import com.google.common.collect.ImmutableList;
@@ -234,4 +236,35 @@ config_setting(
</p>
<!-- #END_BLAZE_RULE -->*/
+
+ /** Rule definition for Android's config_feature_flag rule. */
+ public static final class ConfigFeatureFlagRule implements RuleDefinition {
+
+ @Override
+ public RuleClass build(RuleClass.Builder builder, RuleDefinitionEnvironment env) {
+ return builder
+ .setUndocumented(/* It's unusable as yet, as there are no ways to interact with it. */)
+ .requiresConfigurationFragments(ConfigFeatureFlagConfiguration.class)
+ .add(
+ attr("allowed_values", STRING_LIST)
+ .mandatory()
+ .nonEmpty()
+ .orderIndependent()
+ .nonconfigurable(NONCONFIGURABLE_ATTRIBUTE_REASON))
+ .add(
+ attr("default_value", STRING)
+ .mandatory()
+ .nonconfigurable(NONCONFIGURABLE_ATTRIBUTE_REASON))
+ .build();
+ }
+
+ @Override
+ public RuleDefinition.Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("config_feature_flag")
+ .ancestors(ConfigBaseRule.class)
+ .factoryClass(ConfigFeatureFlag.class)
+ .build();
+ }
+ }
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/ConfigSetting.java b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigSetting.java
index 5b097c6cef..bdc40fb8cc 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/ConfigSetting.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigSetting.java
@@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package com.google.devtools.build.lib.analysis.config;
+package com.google.devtools.build.lib.rules.config;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
@@ -23,6 +23,9 @@ import com.google.devtools.build.lib.analysis.LicensesProviderImpl;
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.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.packages.NonconfigurableAttributeMapper;
import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException;
import com.google.devtools.build.lib.rules.RuleConfiguredTargetFactory;
@@ -62,7 +65,8 @@ public class ConfigSetting implements RuleConfiguredTargetFactory {
new ConfigMatchingProvider(
ruleContext.getLabel(),
settings,
- matchesConfig(settings, ruleContext.getConfiguration().getTransitiveOptionDetails()));
+ matchesConfig(
+ settings, BuildConfigurationOptionDetails.get(ruleContext.getConfiguration())));
} catch (OptionsParsingException e) {
ruleContext.attributeError(ConfigRuleClasses.ConfigSettingRule.SETTINGS_ATTRIBUTE,
"error while parsing configuration settings: " + e.getMessage());