This is an automated email from the ASF dual-hosted git repository.
jamesbognar pushed a commit to branch docs
in repository https://gitbox.apache.org/repos/asf/juneau.git
The following commit(s) were added to refs/heads/docs by this push:
new d996764044 Add 10.0.0 release note for BasicResource CRTP conversion
(TODO-274)
d996764044 is described below
commit d996764044746fe5e69c47dd40a566b68f6620d8
Author: James Bognar <[email protected]>
AuthorDate: Tue Jul 21 10:37:09 2026 -0400
Add 10.0.0 release note for BasicResource CRTP conversion (TODO-274)
Co-authored-by: Cursor <[email protected]>
---
pages/release-notes/10.0.0.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/pages/release-notes/10.0.0.md b/pages/release-notes/10.0.0.md
index 7211ba67b5..61ce798df7 100644
--- a/pages/release-notes/10.0.0.md
+++ b/pages/release-notes/10.0.0.md
@@ -765,6 +765,7 @@ _TBD — to be filled in as development continues._
- **`ControlledArrayList` is removed.** `HeaderList` / `PartList` are
reparented directly onto `ArrayList`, with a nested `Unmodifiable` subclass
overriding the full collection-mutator set
(`add`/`remove`/`set`/`clear`/`addAll`/… plus iterator mutation) to throw. List
`equals()`/`hashCode()` are now content-only, ignoring mutability.
- **Two bug fixes bundled with this migration:** the `Thrown` response
header now reports the *logical* (declared) exception type rather than a frozen
`INSTANCE` snapshot's synthetic `$Unmodifiable` subclass name, so client-side
exception reconstruction from a frozen shared instance (e.g.
`BadRequest.INSTANCE`) no longer breaks; and `BasicStatusLine`'s copy
constructor now faithfully copies `reasonPhraseCatalog` (previously dropped on
copy).
- **Migration:** replace every `x.setUnmodifiable()` call with `x =
x.unmodifiable()` (or use the returned snapshot directly), and audit any direct
`new BasicHttpResponse(...)` / `new BasicHttpEntity(...)` construction to
instantiate a concrete leaf instead.
+ - **`BasicResource` becomes an abstract self-typed (CRTP) root (TODO-274).**
`BasicResource` is now `BasicResource<SELF extends BasicResource<SELF>>`
(mirroring `BasicHttpEntity`/`BasicHttpResponse`) and can no longer be
instantiated directly — use a concrete leaf (`StreamResource`,
`ByteArrayResource`, `StringResource`, `FileResource`, `ReaderResource`). The
breaking surface is narrow: `.as(BasicResource.class)` and `@Remote` methods
declared to return `BasicResource`/`HttpResource` s [...]
_Other entries TBD — to be filled in before release. See also the major
version bump note above._