aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools
diff options
context:
space:
mode:
authorGravatar lberki <lberki@google.com>2018-04-09 03:16:19 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-04-09 03:17:36 -0700
commit406199f6d2f8f12af0d8338877a901bbc8293bce (patch)
tree28a5db5ac26d5b1039f13b9e1c643e6184ebc66b /src/main/java/com/google/devtools
parentf3de7d5ff2834ad601975929aa189cfe268a6fb9 (diff)
Remove BuildConfiguration.Fragment#getReservedActionMnemonics() in favor of encoding the same in ConfiguredRuleClassProvider.
This is a step towards dumbing down BuildConfiguration.Fragment and the ConfigurationFactoryLoader, which is in needed so that we can rewrite C++/Java/Python rules in Skylark without having to introduce the concept of "configuration loader" in Skylark, too. RELNOTES: None. PiperOrigin-RevId: 192104912
Diffstat (limited to 'src/main/java/com/google/devtools')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java19
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java21
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/BuildConfigurationFunction.java7
3 files changed, 32 insertions, 15 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
index e55b44aba2..8cd2b7bef3 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
@@ -25,6 +25,7 @@ import com.google.common.cache.LoadingCache;
import com.google.common.collect.ImmutableBiMap;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
import com.google.common.collect.ImmutableSortedSet;
import com.google.devtools.build.lib.analysis.buildinfo.BuildInfoFactory;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
@@ -69,6 +70,8 @@ import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
/**
* Knows about every rule Blaze supports and the associated configuration options.
@@ -233,6 +236,7 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider {
private ImmutableList.Builder<Class<?>> skylarkModules =
ImmutableList.<Class<?>>builder().addAll(SkylarkModules.MODULES);
private ImmutableList.Builder<NativeProvider> nativeProviders = ImmutableList.builder();
+ private Set<String> reservedActionMnemonics = new TreeSet<>();
private ImmutableBiMap.Builder<String, Class<? extends TransitiveInfoProvider>>
registeredSkylarkProviders = ImmutableBiMap.builder();
@@ -362,6 +366,11 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider {
return this;
}
+ public Builder addReservedActionMnemonic(String mnemonic) {
+ this.reservedActionMnemonics.add(mnemonic);
+ return this;
+ }
+
/**
* Sets the C++ LIPO data transition, as defined in {@link
* com.google.devtools.build.lib.rules.cpp.transitions.DisableLipoTransition}.
@@ -461,6 +470,7 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider {
prerequisiteValidator,
skylarkAccessibleTopLevels.build(),
skylarkModules.build(),
+ ImmutableSet.copyOf(reservedActionMnemonics),
nativeProviders.build());
}
@@ -567,6 +577,8 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider {
private final Environment.GlobalFrame globals;
+ private final ImmutableSet<String> reservedActionMnemonics;
+
private final ImmutableList<NativeProvider> nativeProviders;
private final ImmutableMap<String, Class<?>> configurationFragmentMap;
@@ -588,6 +600,7 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider {
PrerequisiteValidator prerequisiteValidator,
ImmutableMap<String, Object> skylarkAccessibleJavaClasses,
ImmutableList<Class<?>> skylarkModules,
+ ImmutableSet<String> reservedActionMnemonics,
ImmutableList<NativeProvider> nativeProviders) {
this.preludeLabel = preludeLabel;
this.runfilesPrefix = runfilesPrefix;
@@ -604,6 +617,7 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider {
this.universalFragments = universalFragments;
this.prerequisiteValidator = prerequisiteValidator;
this.globals = createGlobals(skylarkAccessibleJavaClasses, skylarkModules);
+ this.reservedActionMnemonics = reservedActionMnemonics;
this.nativeProviders = nativeProviders;
this.configurationFragmentMap = createFragmentMap(configurationFragmentFactories);
}
@@ -813,6 +827,11 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider {
return fragmentsBuilder.build();
}
+ /** Returns a reserved set of action mnemonics. These cannot be used from a Skylark action. */
+ public ImmutableSet<String> getReservedActionMnemonics() {
+ return reservedActionMnemonics;
+ }
+
/**
* Returns all registered {@link NativeProvider} instances, i.e. all built-in provider types that
* are based on {@link Provider} rather than {@link TransitiveInfoProvider}.
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java
index a068e51b72..4646a73565 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java
@@ -209,11 +209,6 @@ public class BuildConfiguration {
public PatchTransition topLevelConfigurationHook(Target toTarget) {
return null;
}
-
- /** Returns a reserved set of action mnemonics. These cannot be used from a Skylark action. */
- public ImmutableSet<String> getReservedActionMnemonics() {
- return ImmutableSet.of();
- }
}
public static final Label convertOptionsLabel(String input) throws OptionsParsingException {
@@ -1273,6 +1268,7 @@ public class BuildConfiguration {
Map<Class<? extends Fragment>, Fragment> fragmentsMap,
BuildOptions buildOptions,
BuildOptions.OptionsDiffForReconstruction buildOptionsDiff,
+ ImmutableSet<String> reservedActionMnemonics,
String repositoryName) {
this.directories = directories;
this.fragments = makeFragmentsMap(fragmentsMap);
@@ -1347,11 +1343,7 @@ public class BuildConfiguration {
checksum = buildOptions.computeChecksum();
hashCode = computeHashCode();
- ImmutableSet.Builder<String> reservedActionMnemonics = ImmutableSet.builder();
- for (Fragment fragment : fragments.values()) {
- reservedActionMnemonics.addAll(fragment.getReservedActionMnemonics());
- }
- this.reservedActionMnemonics = reservedActionMnemonics.build();
+ this.reservedActionMnemonics = reservedActionMnemonics;
this.buildEventSupplier = Suppliers.memoize(this::createBuildEvent);
}
@@ -1378,6 +1370,7 @@ public class BuildConfiguration {
fragmentsMap,
options,
BuildOptions.diffForReconstruction(defaultBuildOptions, options),
+ reservedActionMnemonics,
mainRepositoryName.strippedName());
return newConfig;
}
@@ -1960,10 +1953,6 @@ public class BuildConfiguration {
return skylarkVisibleFragments.keySet();
}
- public ImmutableSet<String> getReservedActionMnemonics() {
- return reservedActionMnemonics;
- }
-
/**
* Returns an extra transition that should apply to top-level targets in this
* configuration. Returns null if no transition is needed.
@@ -2007,4 +1996,8 @@ public class BuildConfiguration {
.build());
return new BuildConfigurationEvent(eventId, builder.build());
}
+
+ public ImmutableSet<String> getReservedActionMnemonics() {
+ return reservedActionMnemonics;
+ }
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BuildConfigurationFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/BuildConfigurationFunction.java
index 6b39f2883b..093cbb015a 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/BuildConfigurationFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/BuildConfigurationFunction.java
@@ -80,7 +80,12 @@ public class BuildConfigurationFunction implements SkyFunction {
BuildConfiguration config =
new BuildConfiguration(
- directories, fragmentsMap, options, key.getOptionsDiff(), workspaceNameValue.getName());
+ directories,
+ fragmentsMap,
+ options,
+ key.getOptionsDiff(),
+ ruleClassProvider.getReservedActionMnemonics(),
+ workspaceNameValue.getName());
return new BuildConfigurationValue(config);
}