Skip to content

Commit 6eba347

Browse files
committed
refactor: Return unmodifiable view from Request.afterHooks()
1 parent ff4c303 commit 6eba347

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
@@ -4,6 +4,7 @@
44
import java.net.URLDecoder;
55
import java.nio.charset.StandardCharsets;
66
import java.util.ArrayList;
7+
import java.util.Collections;
78
import java.util.LinkedHashMap;
89
import java.util.List;
910
import java.util.Map;
@@ -338,7 +339,7 @@ public void afterResponse(Runnable runnable) {
338339

339340
/** Internal accessor for the after-hook queue; used by RequestPreparationFilter. */
340341
public List<Runnable> afterHooks() {
341-
return afterHooks;
342+
return Collections.unmodifiableList(afterHooks);
342343
}
343344

344345
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
@@ -273,7 +273,12 @@ void withPrincipalsSharesAfterHookQueue() {
273273
}
274274

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

279284
@Test

0 commit comments

Comments
 (0)