From ede398e2bbb5ec3476e68597ee3aca28570bcecf Mon Sep 17 00:00:00 2001 From: Michael Dowling Date: Tue, 31 Mar 2026 17:06:44 -0500 Subject: [PATCH] Add toModifiableCopy to request and response --- .../amazon/smithy/java/http/api/HttpRequest.java | 11 +++++++++-- .../amazon/smithy/java/http/api/HttpRequestImpl.java | 7 ++++++- .../amazon/smithy/java/http/api/HttpResponse.java | 7 +++++++ .../amazon/smithy/java/http/api/HttpResponseImpl.java | 7 ++++++- .../smithy/java/http/api/ModifiableHttpRequest.java | 7 ------- .../java/http/api/ModifiableHttpRequestImpl.java | 2 +- .../smithy/java/http/api/ModifiableHttpResponse.java | 7 ------- .../java/http/api/ModifiableHttpResponseImpl.java | 2 +- .../java/http/api/SmithyHttpRequestImplTest.java | 2 +- .../java/http/api/SmithyHttpResponseImplTest.java | 2 +- 10 files changed, 32 insertions(+), 22 deletions(-) diff --git a/http/http-api/src/main/java/software/amazon/smithy/java/http/api/HttpRequest.java b/http/http-api/src/main/java/software/amazon/smithy/java/http/api/HttpRequest.java index 8a3242306..ec122e9b0 100644 --- a/http/http-api/src/main/java/software/amazon/smithy/java/http/api/HttpRequest.java +++ b/http/http-api/src/main/java/software/amazon/smithy/java/http/api/HttpRequest.java @@ -27,12 +27,19 @@ public interface HttpRequest extends HttpMessage { SmithyUri uri(); /** - * Get a modifiable version of the request. + * Get a modifiable version of the request, or returns the current request if it's already modifiable. * - * @return the modifiable request. + * @return the modifiable request or current request. */ ModifiableHttpRequest toModifiable(); + /** + * Creates a modifiable copy of the request, even if the current request is modifiable. + * + * @return the modifiable copy of this request. + */ + ModifiableHttpRequest toModifiableCopy(); + /** * Creates an unmodifiable copy of the request, or returns it as is if it is already unmodifiable. * diff --git a/http/http-api/src/main/java/software/amazon/smithy/java/http/api/HttpRequestImpl.java b/http/http-api/src/main/java/software/amazon/smithy/java/http/api/HttpRequestImpl.java index 6dac05912..dc673abf3 100644 --- a/http/http-api/src/main/java/software/amazon/smithy/java/http/api/HttpRequestImpl.java +++ b/http/http-api/src/main/java/software/amazon/smithy/java/http/api/HttpRequestImpl.java @@ -31,6 +31,11 @@ public HttpRequest toUnmodifiable() { @Override public ModifiableHttpRequest toModifiable() { + return toModifiableCopy(); + } + + @Override + public ModifiableHttpRequest toModifiableCopy() { var mod = new ModifiableHttpRequestImpl(); mod.setHttpVersion(httpVersion); mod.setMethod(method); @@ -113,7 +118,7 @@ public HttpRequest build() { @Override public ModifiableHttpRequest buildModifiable() { beforeBuild(); - return modifiableHttpRequest.copy(); + return modifiableHttpRequest.toModifiableCopy(); } } } diff --git a/http/http-api/src/main/java/software/amazon/smithy/java/http/api/HttpResponse.java b/http/http-api/src/main/java/software/amazon/smithy/java/http/api/HttpResponse.java index 03099d556..0b65e69bc 100644 --- a/http/http-api/src/main/java/software/amazon/smithy/java/http/api/HttpResponse.java +++ b/http/http-api/src/main/java/software/amazon/smithy/java/http/api/HttpResponse.java @@ -23,6 +23,13 @@ public interface HttpResponse extends HttpMessage { */ ModifiableHttpResponse toModifiable(); + /** + * Creates a modifiable copy of the response, even if the current response is modifiable. + * + * @return the modifiable copy of this response. + */ + ModifiableHttpResponse toModifiableCopy(); + /** * Creates an unmodifiable copy of the request, or returns it as is if it is already unmodifiable. * diff --git a/http/http-api/src/main/java/software/amazon/smithy/java/http/api/HttpResponseImpl.java b/http/http-api/src/main/java/software/amazon/smithy/java/http/api/HttpResponseImpl.java index 3a4042970..8b1fa320a 100644 --- a/http/http-api/src/main/java/software/amazon/smithy/java/http/api/HttpResponseImpl.java +++ b/http/http-api/src/main/java/software/amazon/smithy/java/http/api/HttpResponseImpl.java @@ -26,6 +26,11 @@ public HttpResponse toUnmodifiable() { @Override public ModifiableHttpResponse toModifiable() { + return toModifiableCopy(); + } + + @Override + public ModifiableHttpResponse toModifiableCopy() { var mod = new ModifiableHttpResponseImpl(); mod.setHttpVersion(httpVersion); mod.setStatusCode(statusCode); @@ -94,7 +99,7 @@ public HttpResponse build() { @Override public ModifiableHttpResponse buildModifiable() { - return modifiableResponse.copy(); + return modifiableResponse.toModifiableCopy(); } } } diff --git a/http/http-api/src/main/java/software/amazon/smithy/java/http/api/ModifiableHttpRequest.java b/http/http-api/src/main/java/software/amazon/smithy/java/http/api/ModifiableHttpRequest.java index 0eee204b6..306fcf9c6 100644 --- a/http/http-api/src/main/java/software/amazon/smithy/java/http/api/ModifiableHttpRequest.java +++ b/http/http-api/src/main/java/software/amazon/smithy/java/http/api/ModifiableHttpRequest.java @@ -39,11 +39,4 @@ default void setUri(URI uri) { default ModifiableHttpRequest toModifiable() { return this; } - - /** - * Create a copy of the modifiable request. - * - * @return the standalone copy. - */ - ModifiableHttpRequest copy(); } diff --git a/http/http-api/src/main/java/software/amazon/smithy/java/http/api/ModifiableHttpRequestImpl.java b/http/http-api/src/main/java/software/amazon/smithy/java/http/api/ModifiableHttpRequestImpl.java index 317c46667..d8979dcf7 100644 --- a/http/http-api/src/main/java/software/amazon/smithy/java/http/api/ModifiableHttpRequestImpl.java +++ b/http/http-api/src/main/java/software/amazon/smithy/java/http/api/ModifiableHttpRequestImpl.java @@ -88,7 +88,7 @@ public HttpRequest toUnmodifiable() { } @Override - public ModifiableHttpRequest copy() { + public ModifiableHttpRequest toModifiableCopy() { return new ModifiableHttpRequestImpl(this); } diff --git a/http/http-api/src/main/java/software/amazon/smithy/java/http/api/ModifiableHttpResponse.java b/http/http-api/src/main/java/software/amazon/smithy/java/http/api/ModifiableHttpResponse.java index c24dec1e1..7e97ed31b 100644 --- a/http/http-api/src/main/java/software/amazon/smithy/java/http/api/ModifiableHttpResponse.java +++ b/http/http-api/src/main/java/software/amazon/smithy/java/http/api/ModifiableHttpResponse.java @@ -20,11 +20,4 @@ public interface ModifiableHttpResponse extends ModifiableHttpMessage, HttpRespo default ModifiableHttpResponse toModifiable() { return this; } - - /** - * Create a copy of the modifiable response. - * - * @return the standalone copy. - */ - ModifiableHttpResponse copy(); } diff --git a/http/http-api/src/main/java/software/amazon/smithy/java/http/api/ModifiableHttpResponseImpl.java b/http/http-api/src/main/java/software/amazon/smithy/java/http/api/ModifiableHttpResponseImpl.java index 74e0f04c0..895a8e238 100644 --- a/http/http-api/src/main/java/software/amazon/smithy/java/http/api/ModifiableHttpResponseImpl.java +++ b/http/http-api/src/main/java/software/amazon/smithy/java/http/api/ModifiableHttpResponseImpl.java @@ -86,7 +86,7 @@ public HttpResponse toUnmodifiable() { } @Override - public ModifiableHttpResponse copy() { + public ModifiableHttpResponse toModifiableCopy() { return new ModifiableHttpResponseImpl(this); } diff --git a/http/http-api/src/test/java/software/amazon/smithy/java/http/api/SmithyHttpRequestImplTest.java b/http/http-api/src/test/java/software/amazon/smithy/java/http/api/SmithyHttpRequestImplTest.java index 85b10edf5..764067a4a 100644 --- a/http/http-api/src/test/java/software/amazon/smithy/java/http/api/SmithyHttpRequestImplTest.java +++ b/http/http-api/src/test/java/software/amazon/smithy/java/http/api/SmithyHttpRequestImplTest.java @@ -161,7 +161,7 @@ public void modifiableCopyIsIndependent() throws Exception { .withAddedHeader("foo", "bar") .buildModifiable(); - var copy = modifiable.copy(); + var copy = modifiable.toModifiableCopy(); copy.headers().addHeader("foo", "baz"); assertThat(modifiable.headers().allValues("foo"), contains("bar")); diff --git a/http/http-api/src/test/java/software/amazon/smithy/java/http/api/SmithyHttpResponseImplTest.java b/http/http-api/src/test/java/software/amazon/smithy/java/http/api/SmithyHttpResponseImplTest.java index 1a1a688fc..aebcf6b23 100644 --- a/http/http-api/src/test/java/software/amazon/smithy/java/http/api/SmithyHttpResponseImplTest.java +++ b/http/http-api/src/test/java/software/amazon/smithy/java/http/api/SmithyHttpResponseImplTest.java @@ -150,7 +150,7 @@ public void modifiableCopyIsIndependent() { .withAddedHeader("foo", "bar") .buildModifiable(); - var copy = modifiable.copy(); + var copy = modifiable.toModifiableCopy(); copy.headers().addHeader("foo", "baz"); assertThat(modifiable.headers().allValues("foo"), contains("bar"));