diff --git a/smithy-build/src/main/java/software/amazon/smithy/build/PluginContext.java b/smithy-build/src/main/java/software/amazon/smithy/build/PluginContext.java index a416f7c7caa..f2408bd58a7 100644 --- a/smithy-build/src/main/java/software/amazon/smithy/build/PluginContext.java +++ b/smithy-build/src/main/java/software/amazon/smithy/build/PluginContext.java @@ -254,16 +254,17 @@ private int findOffsetFromStart(String location) { @Override public Builder toBuilder() { - return builder() - .projection(projectionName, projection) + Builder builder = builder() .model(model) - .originalModel(originalModel) .events(events) .settings(settings) .fileManifest(fileManifest) .pluginClassLoader(pluginClassLoader) .sources(sources) .artifactName(artifactName); + getProjection().ifPresent(config -> builder.projection(projectionName, config)); + getOriginalModel().ifPresent(builder::originalModel); + return builder; } /** diff --git a/smithy-build/src/test/java/software/amazon/smithy/build/PluginContextTest.java b/smithy-build/src/test/java/software/amazon/smithy/build/PluginContextTest.java index aa26b499e4e..f70e7724be9 100644 --- a/smithy-build/src/test/java/software/amazon/smithy/build/PluginContextTest.java +++ b/smithy-build/src/test/java/software/amazon/smithy/build/PluginContextTest.java @@ -82,4 +82,16 @@ public void convertsToBuilder() { assertThat(context.getSources(), equalTo(context2.getSources())); assertThat(context.getEvents(), equalTo(context2.getEvents())); } + + @Test + public void roundTripsDefaults() { + PluginContext before = PluginContext.builder() + .model(Model.builder().build()) + .fileManifest(new MockManifest()) + .build(); + PluginContext after = before.toBuilder().build(); + assertThat(before.getModel(), equalTo(after.getModel())); + assertThat(before.getFileManifest(), equalTo(after.getFileManifest())); + assertThat(before.getProjectionName(), equalTo(after.getProjectionName())); + } }