Currently it is hard to customize Node, Explorer and PropertySheet behavior, because there are too many private instead of protected methods, package private and final classes in the API.
Some examples I have stumbled on include
- private doSetNodes method in PropertySheet (no way to override the use of ProxyNodes)
- final and package private ProxyNode class
- package private constructor in ProxyNode
- package private getOriginalNodes method in ProxyNode
- package private and final ProxyProperty class in ProxyNode
- final Sheet class and its inner class Sheet.Set
- most private methods in Sheet and Sheet.Set should be protected instead
- PropertySupport.Reflection class should have getters for read and write methods
I wonder, what is the rationale for so strict and static API design? I would assume the performance gains from these limitations are meager. Opening these classes for sub-classing and modifications would result in much more flexible system with much less code duplication.