Commit b4720c6
authored
fix(document): invalidate layout cache on registry().register(...) (I3) (#113)
DocumentSession.registry() returned the raw NodeRegistry, so callers
mutating it directly via `session.registry().register(...)` left the
cached LayoutGraph pinned to the previous compile. Only the dedicated
session.registerNodeDefinition(...) path called invalidate(); the two
entry points had different caching semantics for what is the same
underlying mutation.
Fix:
- Drop the `final` modifier from NodeRegistry so DocumentSession can
install a session-owned subclass. Binary-compatible — japicmp
reports the change as "semver PATCH, compatible bug fix".
- Add a private InvalidatingNodeRegistry subclass inside
DocumentSession that overrides register(...) to call
super.register(...) followed by invalidate(). The session
initialises its registry field with this subclass, so every path
that mutates the registry goes through cache invalidation —
including default-definitions setup at construction time
(layoutCache is field-initialised before the constructor body, so
the early invalidate() calls are safe no-ops on an empty cache).
- Drop the now-redundant explicit invalidate() from
registerNodeDefinition; the wrapper handles it.
- Update Javadoc on registry() and registerNodeDefinition to reflect
the equivalent caching semantics.
Regression test added:
- registryRegisterInvalidatesCachedLayoutFromPreviousCompile in
DocumentSessionTest. Warms the cache by rendering one badge under
the default BadgeNodeDefinition, swaps in a replacement definition
through registry().register(...), and asserts the next render
reflects the replacement. Before the fix the test fails with
"alpha" instead of "UPPER-alpha" because the cached LayoutGraph
is returned unchanged.
Gates: 1032 tests pass; japicmp vs v1.6.6 reports semver PATCH
(compatible bug fix), no incompatible changes.1 parent 63f13dd commit b4720c6
4 files changed
Lines changed: 150 additions & 6 deletions
File tree
- src
- main/java/com/demcha/compose/document
- api
- layout
- test/java/com/demcha/compose/document/api
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
54 | 54 | | |
55 | 55 | | |
56 | 56 | | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
57 | 76 | | |
58 | 77 | | |
59 | 78 | | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
60 | 83 | | |
61 | 84 | | |
62 | 85 | | |
| |||
Lines changed: 35 additions & 5 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
109 | 109 | | |
110 | 110 | | |
111 | 111 | | |
112 | | - | |
| 112 | + | |
113 | 113 | | |
114 | 114 | | |
115 | 115 | | |
| |||
540 | 540 | | |
541 | 541 | | |
542 | 542 | | |
543 | | - | |
| 543 | + | |
| 544 | + | |
| 545 | + | |
| 546 | + | |
| 547 | + | |
544 | 548 | | |
545 | 549 | | |
546 | 550 | | |
547 | 551 | | |
| 552 | + | |
548 | 553 | | |
549 | 554 | | |
550 | 555 | | |
551 | 556 | | |
552 | | - | |
553 | 557 | | |
554 | 558 | | |
555 | 559 | | |
| |||
590 | 594 | | |
591 | 595 | | |
592 | 596 | | |
593 | | - | |
| 597 | + | |
| 598 | + | |
| 599 | + | |
| 600 | + | |
| 601 | + | |
| 602 | + | |
| 603 | + | |
594 | 604 | | |
595 | | - | |
| 605 | + | |
596 | 606 | | |
597 | 607 | | |
598 | 608 | | |
| |||
901 | 911 | | |
902 | 912 | | |
903 | 913 | | |
| 914 | + | |
| 915 | + | |
| 916 | + | |
| 917 | + | |
| 918 | + | |
| 919 | + | |
| 920 | + | |
| 921 | + | |
| 922 | + | |
| 923 | + | |
| 924 | + | |
| 925 | + | |
| 926 | + | |
| 927 | + | |
| 928 | + | |
| 929 | + | |
| 930 | + | |
| 931 | + | |
| 932 | + | |
| 933 | + | |
904 | 934 | | |
905 | 935 | | |
906 | 936 | | |
| |||
Lines changed: 13 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
11 | 23 | | |
12 | | - | |
| 24 | + | |
13 | 25 | | |
14 | 26 | | |
15 | 27 | | |
| |||
Lines changed: 79 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
681 | 681 | | |
682 | 682 | | |
683 | 683 | | |
| 684 | + | |
| 685 | + | |
| 686 | + | |
| 687 | + | |
| 688 | + | |
| 689 | + | |
| 690 | + | |
| 691 | + | |
| 692 | + | |
| 693 | + | |
| 694 | + | |
| 695 | + | |
| 696 | + | |
| 697 | + | |
| 698 | + | |
| 699 | + | |
| 700 | + | |
| 701 | + | |
| 702 | + | |
| 703 | + | |
| 704 | + | |
| 705 | + | |
| 706 | + | |
| 707 | + | |
| 708 | + | |
| 709 | + | |
| 710 | + | |
| 711 | + | |
| 712 | + | |
| 713 | + | |
| 714 | + | |
| 715 | + | |
| 716 | + | |
| 717 | + | |
| 718 | + | |
| 719 | + | |
| 720 | + | |
| 721 | + | |
| 722 | + | |
| 723 | + | |
| 724 | + | |
| 725 | + | |
| 726 | + | |
| 727 | + | |
| 728 | + | |
| 729 | + | |
| 730 | + | |
| 731 | + | |
| 732 | + | |
| 733 | + | |
| 734 | + | |
| 735 | + | |
| 736 | + | |
| 737 | + | |
| 738 | + | |
| 739 | + | |
| 740 | + | |
| 741 | + | |
| 742 | + | |
| 743 | + | |
| 744 | + | |
| 745 | + | |
| 746 | + | |
| 747 | + | |
| 748 | + | |
| 749 | + | |
| 750 | + | |
| 751 | + | |
| 752 | + | |
| 753 | + | |
| 754 | + | |
| 755 | + | |
| 756 | + | |
| 757 | + | |
| 758 | + | |
| 759 | + | |
| 760 | + | |
| 761 | + | |
| 762 | + | |
684 | 763 | | |
685 | 764 | | |
686 | 765 | | |
| |||
0 commit comments