This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.
Implement a ListModel that delegates to another ListModel (which is itself lazy) and moreover support filtering of items out from this model while retaining all characteristics of such model expected by Swing. This is supposed to be useful for example when filtering list of available classes from code completion in editor or when scrolling in lazy explorer.
The work is available in openide/src/org/openide/explorer/view and in openide/test/unit/src/org/openide/explorer/view in a branch lazy_list_46900 which is rooted at BLD200408021800. In order to get the preview you can cvs co openide -f -r lazy_list_46900 and execute the test ant -f openide/test/build.xml -Dxtest.attribs=empty -Dxtest.include=**/LazyListModelTest*
I believe that the code in branch is currently in good state for a working prototype. If the mdr team can provide lazy list and a filter, I we can try this filtering list model as a model for code completion JList and measure the speed up. Especially for "new " + Ctrl-Space it could be really significant. I am going to attach the diff of current state, in the test uncomment "testVisual" method to see the filtering in action (keeps only even numbers).
Created attachment 16718 [details] Implementation and tests of the lazy filtering list model
I have just branched org.openide.nodes so I can implement the laziness in Children.Keys openide/src/org/openide/nodes$ cvs upd -r BLD200409131800 openide/src/org/openide/nodes$ cvs tag -b lazy_list_46900 you can still get the whole branch by cvs co -r lazy_list_46900 -f openide and run the tests ant -f openide/test/build.xml -Dxtest.attribs=empty -Dxtest.include=**/view/*Lazy*
Created attachment 17777 [details] Additinal changes in openide/loaders and TreeView to support lazy explorer over data objects
Created attachment 18028 [details] The additional patch for openide/loaders and TreeView updated to current main trunk
cvs -q ci -m "Creating lazy_list_46900 branch for whole openide and bringing it up-to-date to BLD200410070525"
cvs -q ci -m "Bringing up to date with build BLD200410121800"
cvs ci -m "Bringing up to date with build BLD200411081900" openide
See http://openide.netbeans.org/proposals/arch/scalable-explorer.html for description of what are the goals of such speedup.
cvs -q ci -m "Brought up-to-date with BLD200411281900"
cvs -q ci -m "Merging 34 new tests from the lazy_list_46900 branch to trunk as they seem to test features that are not dependant on the changes in code made in the branch" Checking in src/org/openide/explorer/view/VisualizerNode.java; /cvs/openide/src/org/openide/explorer/view/VisualizerNode.java,v <-- VisualizerNode.java new revision: 1.46; previous revision: 1.45 done Processing log script arguments... More commits to come... Checking in src/org/openide/nodes/Children.java; /cvs/openide/src/org/openide/nodes/Children.java,v <-- Children.java new revision: 1.129; previous revision: 1.128 done Processing log script arguments... More commits to come... Checking in test/unit/src/org/openide/explorer/view/VisualizerNodeTest.java; /cvs/openide/test/unit/src/org/openide/explorer/view/VisualizerNodeTest.java,v <-- VisualizerNodeTest.java new revision: 1.2; previous revision: 1.1 done Processing log script arguments... More commits to come... Checking in test/unit/src/org/openide/nodes/ChildrenArrayNodeAtShouldNotBeSlowTest.java; /cvs/openide/test/unit/src/org/openide/nodes/ChildrenArrayNodeAtShouldNotBeSlowTest.java,v <-- ChildrenArrayNodeAtShouldNotBeSlowTest.java new revision: 1.2; previous revision: 1.1 done Checking in test/unit/src/org/openide/nodes/ChildrenArrayTest.java; /cvs/openide/test/unit/src/org/openide/nodes/ChildrenArrayTest.java,v <-- ChildrenArrayTest.java new revision: 1.6; previous revision: 1.5 done Checking in test/unit/src/org/openide/nodes/ChildrenFilterAsArrayTest.java; /cvs/openide/test/unit/src/org/openide/nodes/ChildrenFilterAsArrayTest.java,v <-- ChildrenFilterAsArrayTest.java new revision: 1.2; previous revision: 1.1 done Checking in test/unit/src/org/openide/nodes/ChildrenFilterAsKeysTest.java; /cvs/openide/test/unit/src/org/openide/nodes/ChildrenFilterAsKeysTest.java,v <-- ChildrenFilterAsKeysTest.java new revision: 1.2; previous revision: 1.1 done Checking in test/unit/src/org/openide/nodes/ChildrenKeysAsArrayTest.java; /cvs/openide/test/unit/src/org/openide/nodes/ChildrenKeysAsArrayTest.java,v <-- ChildrenKeysAsArrayTest.java new revision: 1.2; previous revision: 1.1 done Checking in test/unit/src/org/openide/nodes/ChildrenKeysGarbageCollectTest.java; /cvs/openide/test/unit/src/org/openide/nodes/ChildrenKeysGarbageCollectTest.java,v <-- ChildrenKeysGarbageCollectTest.java new revision: 1.2; previous revision: 1.1 done Checking in test/unit/src/org/openide/nodes/ChildrenKeysTest.java; /cvs/openide/test/unit/src/org/openide/nodes/ChildrenKeysTest.java,v <-- ChildrenKeysTest.java new revision: 1.13; previous revision: 1.12 done Checking in test/unit/src/org/openide/nodes/FilterNodeTest.java; /cvs/openide/test/unit/src/org/openide/nodes/FilterNodeTest.java,v <-- FilterNodeTest.java new revision: 1.19; previous revision: 1.18 done cvs diff: ChildrenArrayNodeAtShouldNotBeSlowTest.java is a new entry, no comparison available cvs diff: ChildrenFilterAsArrayTest.java is a new entry, no comparison available cvs diff: ChildrenFilterAsKeysTest.java is a new entry, no comparison available cvs diff: ChildrenKeysAsArrayTest.java is a new entry, no comparison available cvs diff: ChildrenKeysGarbageCollectTest.java is a new entry, no comparison available
cvs -q ci -m "Bringing up to date with trunk build BLD200411291900, so the backported tests are now synchronized" Checking in test/unit/src/org/openide/loaders/OperationListenerTest.java; /cvs/openide/test/unit/src/org/openide/loaders/OperationListenerTest.java,v <-- OperationListenerTest.java new revision: 1.4.30.1; previous revision: 1.4 done Processing log script arguments... More commits to come... Checking in test/unit/src/org/openide/util/MutexTest.java; /cvs/openide/test/unit/src/org/openide/util/MutexTest.java,v <-- MutexTest.java new revision: 1.12.2.2; previous revision: 1.12.2.1
cvs -q ci -m "Bringing up to date with build BLD200501191900"
I would say that the branch "almost" works, but I am not aware of any plan to really get it into trunk: - people may get LazyListModel, which works without problems - the work on lazy Visualizers and FilterNode is also easily portable - the improvements to Children.Keys may seem controversial the basic problems right now are two - garbage collector negatively influences stability of the work in children and meanwhile there was a reformating effort in trunk and bringing the whole branch up to date may be pretty hard.
> the basic problems right now are ... more to think about: how will quick search functionality live with the lazy list?
Let's give this project new boost: http://wiki.netbeans.org/FitnessViaLaziness
Present since 78bc89404dae