diff --git a/common/src/main/java/dev/cel/common/CelContainer.java b/common/src/main/java/dev/cel/common/CelContainer.java index ee33c1da0..6d9fcd612 100644 --- a/common/src/main/java/dev/cel/common/CelContainer.java +++ b/common/src/main/java/dev/cel/common/CelContainer.java @@ -252,7 +252,13 @@ public ImmutableSet resolveCandidateNames(String typeName) { return candidates.add(typeName).build(); } - public abstract Builder toBuilder(); + abstract Builder autoToBuilder(); + + public Builder toBuilder() { + Builder builder = autoToBuilder(); + builder.aliases.putAll(aliases()); + return builder; + } public static Builder newBuilder() { return new AutoValue_CelContainer.Builder().setName(""); diff --git a/common/src/test/java/dev/cel/common/CelContainerTest.java b/common/src/test/java/dev/cel/common/CelContainerTest.java index ab1b322b9..f116039c8 100644 --- a/common/src/test/java/dev/cel/common/CelContainerTest.java +++ b/common/src/test/java/dev/cel/common/CelContainerTest.java @@ -198,4 +198,15 @@ public void containerBuilder_addAbbreviationsCollidesWithContainer_throws() { "abbreviation collides with container name: name=my.alias.a, abbreviation=a," + " container=a.b.c.M.N"); } + + @Test + public void container_toBuilderRoundTrip_retainsExistingProperties() { + CelContainer container = + CelContainer.newBuilder().setName("hello").addAlias("foo", "x.y").build(); + + container = container.toBuilder().addAlias("bar", "a.b").build(); + + assertThat(container.name()).isEqualTo("hello"); + assertThat(container.aliases()).containsExactly("foo", "x.y", "bar", "a.b").inOrder(); + } }