Skip to content

Commit

Permalink
Intern StringSequences in CcToolchainVariables.
Browse files Browse the repository at this point in the history
PiperOrigin-RevId: 549597772
Change-Id: I24fa0413104fc4cce54c7ebe39f9ddfa7815581e
  • Loading branch information
meisterT authored and copybara-github committed Jul 20, 2023
1 parent 6609d6d commit 03b2462
Showing 1 changed file with 17 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -574,7 +574,7 @@ public StringSequenceBuilder addValue(String value) {
/** Returns an immutable string sequence. */
@Override
public StringSequence build() {
return new StringSequence(values.build());
return StringSequence.of(values.build());
}
}

Expand Down Expand Up @@ -638,7 +638,7 @@ public StructureBuilder addField(String name, String value) {
/** Adds a field to the structure. */
@CanIgnoreReturnValue
public StructureBuilder addField(String name, ImmutableList<String> values) {
fields.put(name, new StringSequence(values));
fields.put(name, StringSequence.of(values));
return this;
}

Expand Down Expand Up @@ -892,7 +892,7 @@ public VariableValue getFieldValue(
expandedObjectFiles.add(objectFile.getExecPathString());
}
}
return new StringSequence(expandedObjectFiles.build());
return StringSequence.of(expandedObjectFiles.build());
}

return super.getFieldValue(variableName, field, expander, throwOnMissingVariable);
Expand Down Expand Up @@ -983,10 +983,19 @@ public int hashCode() {
*/
@Immutable
private static final class StringSequence extends VariableValueAdapter {
private final Iterable<String> values;
static final Interner<StringSequence> stringSequenceInterner = BlazeInterners.newWeakInterner();
private final ImmutableList<String> values;

StringSequence(Iterable<String> values) {
this.values = Preconditions.checkNotNull(values);
static StringSequence of(Iterable<String> values) {
return stringSequenceInterner.intern(new StringSequence(values));
}

private StringSequence(Iterable<String> values) {
ImmutableList.Builder<String> valuesBuilder = new ImmutableList.Builder<>();
for (String value : values) {
valuesBuilder.add(value.intern());
}
this.values = valuesBuilder.build();
}

@Override
Expand Down Expand Up @@ -1267,7 +1276,7 @@ public Builder addStringSequenceVariable(String name, ImmutableSet<String> value
Preconditions.checkNotNull(values, "Cannot set null as a value for variable '%s'", name);
ImmutableList.Builder<String> builder = ImmutableList.builder();
builder.addAll(values);
variablesMap.put(name, new StringSequence(builder.build()));
variablesMap.put(name, StringSequence.of(builder.build()));
return this;
}

Expand Down Expand Up @@ -1296,7 +1305,7 @@ public Builder addStringSequenceVariable(String name, NestedSet<String> values)
public Builder addStringSequenceVariable(String name, Iterable<String> values) {
checkVariableNotPresentAlready(name);
Preconditions.checkNotNull(values, "Cannot set null as a value for variable '%s'", name);
variablesMap.put(name, new StringSequence(values));
variablesMap.put(name, StringSequence.of(values));
return this;
}

Expand Down

0 comments on commit 03b2462

Please sign in to comment.