Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Intern trivial ActionEnvironment and EnvironmentVariables instances #15171

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -81,10 +81,10 @@ default int size() {
*/
static class CompoundEnvironmentVariables implements EnvironmentVariables {

static EnvironmentVariables create(
Map<String, String> fixedVars, Set<String> inheritedVars, EnvironmentVariables base) {
if (fixedVars.isEmpty() && inheritedVars.isEmpty() && base.isEmpty()) {
return EMPTY_ENVIRONMENT_VARIABLES;
static EnvironmentVariables create(Map<String, String> fixedVars, Set<String> inheritedVars,
EnvironmentVariables base) {
if (fixedVars.isEmpty() && inheritedVars.isEmpty()) {
return base;
}
return new CompoundEnvironmentVariables(fixedVars, inheritedVars, base);
}
Expand Down Expand Up @@ -219,18 +219,22 @@ public static ActionEnvironment create(Map<String, String> fixedEnv) {
* Returns a copy of the environment with the given fixed variables added to it, <em>overwriting
* any existing occurrences of those variables</em>.
*/
public ActionEnvironment addFixedVariables(Map<String, String> fixedVars) {
return ActionEnvironment.create(
CompoundEnvironmentVariables.create(fixedVars, ImmutableSet.of(), vars));
public ActionEnvironment withAdditionalFixedVariables(Map<String, String> fixedVars) {
return withAdditionalVariables(fixedVars, ImmutableSet.of());
}

/**
* Returns a copy of the environment with the given fixed and inherited variables added to it,
* <em>overwriting any existing occurrences of those variables</em>.
*/
public ActionEnvironment addVariables(Map<String, String> fixedVars, Set<String> inheritedVars) {
return ActionEnvironment.create(
CompoundEnvironmentVariables.create(fixedVars, inheritedVars, vars));
public ActionEnvironment withAdditionalVariables(Map<String, String> fixedVars,
Set<String> inheritedVars) {
EnvironmentVariables newVars = CompoundEnvironmentVariables.create(fixedVars, inheritedVars,
vars);
if (newVars == vars) {
return this;
}
return ActionEnvironment.create(newVars);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -413,7 +413,7 @@ private TestParams createTestAction(int shards)
testProperties,
runfilesSupport
.getActionEnvironment()
.addVariables(extraTestEnv, extraInheritedEnv),
.withAdditionalVariables(extraTestEnv, extraInheritedEnv),
executionSettings,
shard,
run,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,8 @@ public JavaCompileAction build() {
toolsBuilder.addTransitive(toolsJars);

ActionEnvironment actionEnvironment =
ruleContext.getConfiguration().getActionEnvironment().addFixedVariables(UTF8_ENVIRONMENT);
ruleContext.getConfiguration().getActionEnvironment()
.withAdditionalFixedVariables(UTF8_ENVIRONMENT);

NestedSetBuilder<Artifact> mandatoryInputsBuilder = NestedSetBuilder.stableOrder();
mandatoryInputsBuilder
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -296,7 +296,8 @@ public void build(JavaToolchainProvider javaToolchain) throws InterruptedExcepti
}

ActionEnvironment actionEnvironment =
ruleContext.getConfiguration().getActionEnvironment().addFixedVariables(UTF8_ENVIRONMENT);
ruleContext.getConfiguration().getActionEnvironment()
.withAdditionalFixedVariables(UTF8_ENVIRONMENT);

OnDemandString progressMessage =
new ProgressMessage(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public void compoundEnvOrdering() {
ActionEnvironment.create(
ImmutableMap.of("FOO", "foo1", "BAR", "bar"), ImmutableSet.of("baz"));
// entries added by env2 override the existing entries
ActionEnvironment env2 = env1.addFixedVariables(ImmutableMap.of("FOO", "foo2"));
ActionEnvironment env2 = env1.withAdditionalFixedVariables(ImmutableMap.of("FOO", "foo2"));

assertThat(env1.getFixedEnv()).containsExactly("FOO", "foo1", "BAR", "bar");
assertThat(env1.getInheritedEnv()).containsExactly("baz");
Expand All @@ -45,12 +45,11 @@ public void compoundEnvOrdering() {

@Test
public void fixedInheritedInteraction() {
ActionEnvironment env =
ActionEnvironment.create(
ImmutableMap.of("FIXED_ONLY", "fixed"), ImmutableSet.of("INHERITED_ONLY"))
.addVariables(
ImmutableMap.of("FIXED_AND_INHERITED", "fixed"),
ImmutableSet.of("FIXED_AND_INHERITED"));
ActionEnvironment env = ActionEnvironment.create(
ImmutableMap.of("FIXED_ONLY", "fixed"),
ImmutableSet.of("INHERITED_ONLY"))
.withAdditionalVariables(ImmutableMap.of("FIXED_AND_INHERITED", "fixed"),
ImmutableSet.of("FIXED_AND_INHERITED"));
Map<String, String> clientEnv =
ImmutableMap.of("INHERITED_ONLY", "inherited", "FIXED_AND_INHERITED", "inherited");
Map<String, String> result = new HashMap<>();
Expand All @@ -65,4 +64,17 @@ public void fixedInheritedInteraction() {
"INHERITED_ONLY",
"inherited");
}

@Test
public void emptyEnvironmentInterning() {
ActionEnvironment emptyEnvironment = ActionEnvironment.create(ImmutableMap.of(),
ImmutableSet.of());
assertThat(emptyEnvironment).isSameInstanceAs(ActionEnvironment.EMPTY);

ActionEnvironment base = ActionEnvironment.create(ImmutableMap.of("FOO", "foo1"),
ImmutableSet.of("baz"));
assertThat(base.withAdditionalFixedVariables(ImmutableMap.of())).isSameInstanceAs(base);
assertThat(base.withAdditionalVariables(ImmutableMap.of(), ImmutableSet.of())).isSameInstanceAs(
base);
}
}