mirror of
https://github.com/AdrianKuta/Tree-Data-Structure.git
synced 2026-06-19 19:00:14 +02:00
feat!: v4.0 breaking API cleanup + explicitApi
BREAKING changes to the core: - treeIterator is now a read-only `val`; added `iterator(order)` and use `asSequence(order)`. - removeChild() only removes a direct child of the receiver; added `detach()` to unhook a node. - addChild() rejects re-parenting and cycles (throws TreeNodeException); detach() first to move. - clear() no longer nulls the receiver's own parent; only removes descendants. - path() returns List<TreeNode<T>>? (null) instead of throwing. Also: - Enable strict explicitApi() across core + both modules; add explicit `public` modifiers. - Update tests for the new contracts + add TreeNodeV4Test; refresh .api baselines. - README + CHANGELOG (with migration notes); bump version to 4.0.0. 47 JVM tests green.
This commit is contained in:
30
CHANGELOG.md
30
CHANGELOG.md
@@ -6,6 +6,33 @@ All notable changes to this project are documented here. The format is based on
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
## [4.0.0]
|
||||
|
||||
A breaking release that cleans up the core API and enforces an explicit public surface.
|
||||
|
||||
### Changed (breaking)
|
||||
- `TreeNode.treeIterator` is now a read-only `val` (set it via the constructor). Use
|
||||
`iterator(order)` or `asSequence(order)` to traverse in a different order per call.
|
||||
- `removeChild(child)` now only removes a **direct** child of the receiver (previously it removed
|
||||
the node from its actual parent regardless). Use `child.detach()` to unhook a node from wherever
|
||||
it lives.
|
||||
- `addChild(child)` now throws `TreeNodeException` if `child` already has a parent or if the
|
||||
attachment would create a cycle. Call `detach()` first to move a node.
|
||||
- `clear()` no longer detaches the receiver from its own parent; it only removes its descendants.
|
||||
- `path(descendant)` now returns `List<TreeNode<T>>?` (`null` when `descendant` is the root or not a
|
||||
descendant) instead of throwing `TreeNodeException`.
|
||||
|
||||
### Added
|
||||
- `TreeNode.detach()` — removes a node from its parent.
|
||||
- `TreeNode.iterator(order)` — a one-shot iterator in a specific order.
|
||||
- Strict `explicitApi()` mode across all modules.
|
||||
- New `tree-structure-compose` module: a `LazyTree` composable for Compose Multiplatform.
|
||||
|
||||
### Migration
|
||||
- `node.treeIterator = PostOrder; for (n in node) { … }` → `for (n in node.asSequence(PostOrder)) { … }`
|
||||
- `root.removeChild(deepNode)` → `deepNode.detach()`
|
||||
- `try { node.path(x) } catch (e: TreeNodeException) { … }` → `node.path(x)?.let { … }`
|
||||
|
||||
## [3.4.0]
|
||||
|
||||
### Added
|
||||
@@ -44,7 +71,8 @@ All notable changes to this project are documented here. The format is based on
|
||||
## [3.1.3]
|
||||
- iOS targets and Maven Central (Sonatype Central Portal) publishing.
|
||||
|
||||
[Unreleased]: https://github.com/AdrianKuta/Tree-Data-Structure/compare/v3.4.0...HEAD
|
||||
[Unreleased]: https://github.com/AdrianKuta/Tree-Data-Structure/compare/v4.0.0...HEAD
|
||||
[4.0.0]: https://github.com/AdrianKuta/Tree-Data-Structure/compare/v3.4.0...v4.0.0
|
||||
[3.4.0]: https://github.com/AdrianKuta/Tree-Data-Structure/compare/v3.1.5...v3.4.0
|
||||
[3.1.5]: https://github.com/AdrianKuta/Tree-Data-Structure/compare/v3.1.3...v3.1.5
|
||||
[3.1.4]: https://github.com/AdrianKuta/Tree-Data-Structure/releases/tag/v3.1.4
|
||||
|
||||
Reference in New Issue
Block a user