From 173cae708cc667ef1353b5e65c3b7a62757e5f97 Mon Sep 17 00:00:00 2001 From: hlopko Date: Tue, 19 Dec 2017 04:02:39 -0800 Subject: Remove FeatureSpecification, use plain sets instead RELNOTES: None. PiperOrigin-RevId: 179534164 --- .../devtools/build/lib/rules/cpp/CcCommon.java | 32 ++++++++++++---------- .../build/lib/rules/cpp/CcToolchainFeatures.java | 31 +++++++++------------ .../build/lib/rules/cpp/proto/CcProtoAspect.java | 4 +-- .../build/lib/rules/objc/CompilationSupport.java | 5 +--- 4 files changed, 33 insertions(+), 39 deletions(-) (limited to 'src/main/java') 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 24666bd7b0..d48c9f91cb 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 @@ -599,10 +599,11 @@ public final class CcCommon { */ public static FeatureConfiguration configureFeatures( RuleContext ruleContext, - FeatureSpecification featureSpecification, + ImmutableSet requestedFeatures, + ImmutableSet unsupportedFeatures, CcToolchainProvider toolchain) { ImmutableSet.Builder unsupportedFeaturesBuilder = ImmutableSet.builder(); - unsupportedFeaturesBuilder.addAll(featureSpecification.getUnsupportedFeatures()); + unsupportedFeaturesBuilder.addAll(unsupportedFeatures); if (!toolchain.supportsHeaderParsing()) { // TODO(bazel-team): Remove once supports_header_parsing has been removed from the // cc_toolchain rule. @@ -612,19 +613,19 @@ public final class CcCommon { if (toolchain.getCppCompilationContext().getCppModuleMap() == null) { unsupportedFeaturesBuilder.add(CppRuleClasses.MODULE_MAPS); } - ImmutableSet unsupportedFeatures = unsupportedFeaturesBuilder.build(); - ImmutableSet.Builder requestedFeatures = ImmutableSet.builder(); + ImmutableSet allUnsupportedFeatures = unsupportedFeaturesBuilder.build(); + ImmutableSet.Builder allRequestedFeaturesBuilder = ImmutableSet.builder(); // If STATIC_LINK_MSVCRT feature isn't specified by user, we add DYNAMIC_LINK_MSVCRT_* feature // according to compilation mode. // If STATIC_LINK_MSVCRT feature is specified, we add STATIC_LINK_MSVCRT_* feature // according to compilation mode. if (ruleContext.getFeatures().contains(CppRuleClasses.STATIC_LINK_MSVCRT)) { - requestedFeatures.add( + allRequestedFeaturesBuilder.add( toolchain.getCompilationMode() == CompilationMode.DBG ? CppRuleClasses.STATIC_LINK_MSVCRT_DEBUG : CppRuleClasses.STATIC_LINK_MSVCRT_NO_DEBUG); } else { - requestedFeatures.add( + allRequestedFeaturesBuilder.add( toolchain.getCompilationMode() == CompilationMode.DBG ? CppRuleClasses.DYNAMIC_LINK_MSVCRT_DEBUG : CppRuleClasses.DYNAMIC_LINK_MSVCRT_NO_DEBUG); @@ -636,19 +637,16 @@ public final class CcCommon { DEFAULT_FEATURES, toolchain.getFeatures().getDefaultFeaturesAndActionConfigs(), ruleContext.getFeatures())) { - if (!unsupportedFeatures.contains(feature)) { - requestedFeatures.add(feature); + if (!allUnsupportedFeatures.contains(feature)) { + allRequestedFeaturesBuilder.add(feature); } } - requestedFeatures.addAll(featureSpecification.getRequestedFeatures()); + allRequestedFeaturesBuilder.addAll(requestedFeatures); - requestedFeatures.addAll(DEFAULT_ACTION_CONFIGS); - - FeatureSpecification currentFeatureSpecification = - FeatureSpecification.create(requestedFeatures.build(), unsupportedFeatures); + allRequestedFeaturesBuilder.addAll(DEFAULT_ACTION_CONFIGS); try { FeatureConfiguration configuration = - toolchain.getFeatures().getFeatureConfiguration(currentFeatureSpecification); + toolchain.getFeatures().getFeatureConfiguration(allRequestedFeaturesBuilder.build()); for (String feature : unsupportedFeatures) { if (configuration.isEnabled(feature)) { ruleContext.ruleError( @@ -678,7 +676,11 @@ public final class CcCommon { */ public static FeatureConfiguration configureFeatures( RuleContext ruleContext, CcToolchainProvider toolchain) { - return configureFeatures(ruleContext, FeatureSpecification.EMPTY, toolchain); + return configureFeatures( + ruleContext, + /* requestedFeatures= */ ImmutableSet.of(), + /* unsupportedFeatures= */ ImmutableSet.of(), + toolchain); } /** diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java index c807289a7c..9d3a2f6719 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java @@ -1683,14 +1683,12 @@ public class CcToolchainFeatures implements Serializable { protected FeatureConfiguration() { this( - FeatureSpecification.EMPTY, ImmutableList.of(), ImmutableList.of(), ImmutableMap.of()); } private FeatureConfiguration( - FeatureSpecification featureSpecification, Iterable enabledFeatures, Iterable enabledActionConfigs, ImmutableMap actionConfigByActionName) { @@ -1851,7 +1849,7 @@ public class CcToolchainFeatures implements Serializable { * A cache of feature selection results, so we do not recalculate the feature selection for all * actions. */ - private transient LoadingCache configurationCache = + private transient LoadingCache, FeatureConfiguration> configurationCache = buildConfigurationCache(); /** @@ -1995,24 +1993,24 @@ public class CcToolchainFeatures implements Serializable { in.defaultReadObject(); this.configurationCache = buildConfigurationCache(); } - + /** @return an empty {@code FeatureConfiguration} cache. */ - private LoadingCache buildConfigurationCache() { + private LoadingCache, FeatureConfiguration> buildConfigurationCache() { return CacheBuilder.newBuilder() // TODO(klimek): Benchmark and tweak once we support a larger configuration. .maximumSize(10000) .build( - new CacheLoader() { + new CacheLoader, FeatureConfiguration>() { @Override - public FeatureConfiguration load(FeatureSpecification featureSpecification) + public FeatureConfiguration load(ImmutableSet requestedFeatures) throws CollidingProvidesException { - return computeFeatureConfiguration(featureSpecification); + return computeFeatureConfiguration(requestedFeatures); } }); } /** - * Given a list of {@code requestedFeatures}, returns all features that are enabled by the + * Given a list of {@code requestedSelectables}, returns all features that are enabled by the * toolchain configuration. * *

A requested feature will not be enabled if the toolchain does not support it (which may @@ -2021,10 +2019,10 @@ public class CcToolchainFeatures implements Serializable { *

Additional features will be enabled if the toolchain supports them and they are implied by * requested features. */ - public FeatureConfiguration getFeatureConfiguration(FeatureSpecification featureSpecification) + public FeatureConfiguration getFeatureConfiguration(ImmutableSet requestedSelectables) throws CollidingProvidesException { try { - return configurationCache.get(featureSpecification); + return configurationCache.get(requestedSelectables); } catch (ExecutionException e) { Throwables.throwIfInstanceOf(e.getCause(), CollidingProvidesException.class); Throwables.throwIfUnchecked(e.getCause()); @@ -2042,11 +2040,11 @@ public class CcToolchainFeatures implements Serializable { *

Additional features will be enabled if the toolchain supports them and they are implied by * requested features. */ - public FeatureConfiguration computeFeatureConfiguration(FeatureSpecification featureSpecification) + public FeatureConfiguration computeFeatureConfiguration(ImmutableSet requestedSelectables) throws CollidingProvidesException { // Command line flags will be output in the order in which they are specified in the toolchain // configuration. - return new FeatureSelection(featureSpecification).run(); + return new FeatureSelection(requestedSelectables).run(); } public ImmutableList getDefaultFeaturesAndActionConfigs() { @@ -2133,12 +2131,10 @@ public class CcToolchainFeatures implements Serializable { * from selectables that have unmet requirements. */ private final Set enabled = new HashSet<>(); - private final FeatureSpecification featureSpecification; - private FeatureSelection(FeatureSpecification featureSpecification) { - this.featureSpecification = featureSpecification; + private FeatureSelection(ImmutableSet requestedFeatures) { ImmutableSet.Builder builder = ImmutableSet.builder(); - for (String name : featureSpecification.getRequestedFeatures()) { + for (String name : requestedFeatures) { if (selectablesByName.containsKey(name)) { builder.add(selectablesByName.get(name)); } @@ -2186,7 +2182,6 @@ public class CcToolchainFeatures implements Serializable { } return new FeatureConfiguration( - featureSpecification, enabledFeaturesInOrder, enabledActionConfigsInOrder, actionConfigsByActionName); diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java index 37b68a8ce0..8931024b93 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/proto/CcProtoAspect.java @@ -48,7 +48,6 @@ import com.google.devtools.build.lib.rules.cpp.CppConfiguration; import com.google.devtools.build.lib.rules.cpp.CppHelper; import com.google.devtools.build.lib.rules.cpp.CppRuleClasses; import com.google.devtools.build.lib.rules.cpp.CppSemantics; -import com.google.devtools.build.lib.rules.cpp.FeatureSpecification; import com.google.devtools.build.lib.rules.cpp.transitions.LipoContextCollectorTransition; import com.google.devtools.build.lib.rules.proto.ProtoCommon; import com.google.devtools.build.lib.rules.proto.ProtoCompileActionBuilder; @@ -214,7 +213,8 @@ public class CcProtoAspect extends NativeAspectClass implements ConfiguredAspect FeatureConfiguration featureConfiguration = CcCommon.configureFeatures( ruleContext, - FeatureSpecification.create(requestedFeatures.build(), unsupportedFeatures.build()), + requestedFeatures.build(), + unsupportedFeatures.build(), ccToolchain(ruleContext)); return featureConfiguration; } diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java index 2fb5133119..4b528b92e1 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java @@ -106,7 +106,6 @@ import com.google.devtools.build.lib.rules.cpp.CppModuleMap; import com.google.devtools.build.lib.rules.cpp.CppModuleMapAction; import com.google.devtools.build.lib.rules.cpp.CppRuleClasses; import com.google.devtools.build.lib.rules.cpp.FdoSupportProvider; -import com.google.devtools.build.lib.rules.cpp.FeatureSpecification; import com.google.devtools.build.lib.rules.cpp.IncludeProcessing; import com.google.devtools.build.lib.rules.cpp.Link.LinkStaticness; import com.google.devtools.build.lib.rules.cpp.Link.LinkTargetType; @@ -564,9 +563,7 @@ public class CompilationSupport { try { return ccToolchain .getFeatures() - .getFeatureConfiguration( - FeatureSpecification.create( - activatedCrosstoolSelectables.build(), ImmutableSet.of())); + .getFeatureConfiguration(activatedCrosstoolSelectables.build()); } catch (CollidingProvidesException e) { ruleContext.ruleError(e.getMessage()); return FeatureConfiguration.EMPTY; -- cgit v1.2.3