Skip to content

Commit 832a9f7

Browse files
committed
refactor: Return unmodifiable view from Request.afterHooks()
1 parent 54d483c commit 832a9f7

2 files changed

Lines changed: 8 additions & 2 deletions

File tree

src/main/java/com/retailsvc/http/Request.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.net.URLDecoder;
44
import java.nio.charset.StandardCharsets;
55
import java.util.ArrayList;
6+
import java.util.Collections;
67
import java.util.LinkedHashMap;
78
import java.util.List;
89
import java.util.Map;
@@ -271,7 +272,7 @@ public void afterResponse(Runnable runnable) {
271272

272273
/** Internal accessor for the after-hook queue; used by RequestPreparationFilter. */
273274
public List<Runnable> afterHooks() {
274-
return afterHooks;
275+
return Collections.unmodifiableList(afterHooks);
275276
}
276277

277278
private static Map<String, String> parseQuery(String query) {

src/test/java/com/retailsvc/http/RequestTest.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,12 @@ void withPrincipalsSharesAfterHookQueue() {
272272
}
273273

274274
assertThat(log).containsExactly("from-original", "from-enriched");
275-
assertThat(original.afterHooks()).isSameAs(enriched.afterHooks());
275+
// Adding via one Request is visible via the other — the backing list is shared.
276+
original.afterResponse(() -> log.add("from-original-again"));
277+
List<Runnable> enrichedView = enriched.afterHooks();
278+
assertThat(enrichedView).hasSize(3);
279+
enrichedView.get(2).run();
280+
assertThat(log).containsExactly("from-original", "from-enriched", "from-original-again");
276281
}
277282

278283
@Test

0 commit comments

Comments
 (0)