diff options
author | mstaib <mstaib@google.com> | 2017-04-05 17:41:22 +0000 |
---|---|---|
committer | Marcel Hlopko <hlopko@google.com> | 2017-04-06 11:00:12 +0200 |
commit | 697a328dd6994bcf8f76d9abf09ac0e8734e3a07 (patch) | |
tree | e7472e645cfef8eb3d95fd1825ab11192e5c8dff /src/main/java | |
parent | ee77092b52a4792c9c46cc489cf194acd00bce68 (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/BUILD | 1 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/analysis/config/TransitiveOptionDetails.java | 2 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java | 7 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/config/BUILD | 1 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagRule.java | 55 | ||||
-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()); |