Compute the breadcrumbs while scanning, reuse previously created Nodes.
1.1 --- a/java.breadcrumbs/src/org/netbeans/modules/java/breadcrumbs/BreadCrumbsScanningTask.java Wed Aug 08 21:27:15 2012 +0200
1.2 +++ b/java.breadcrumbs/src/org/netbeans/modules/java/breadcrumbs/BreadCrumbsScanningTask.java Wed Aug 08 21:30:55 2012 +0200
1.3 @@ -50,6 +50,7 @@
1.4 import javax.swing.text.Document;
1.5 import org.netbeans.api.editor.mimelookup.MimeRegistration;
1.6 import org.netbeans.api.java.source.CompilationInfo;
1.7 +import org.netbeans.api.java.source.CompilationInfo.CacheClearPolicy;
1.8 import org.netbeans.api.java.source.JavaParserResultTask;
1.9 import org.netbeans.api.java.source.JavaSource.Phase;
1.10 import org.netbeans.api.java.source.support.CaretAwareJavaSourceTaskFactory;
1.11 @@ -60,6 +61,7 @@
1.12 import org.netbeans.modules.parsing.spi.SchedulerEvent;
1.13 import org.netbeans.modules.parsing.spi.SchedulerTask;
1.14 import org.netbeans.modules.parsing.spi.TaskFactory;
1.15 +import org.netbeans.modules.parsing.spi.TaskIndexingMode;
1.16 import org.openide.explorer.ExplorerManager;
1.17 import org.openide.nodes.Node;
1.18
1.19 @@ -73,7 +75,7 @@
1.20 private final AtomicBoolean cancel = new AtomicBoolean();
1.21
1.22 private BreadCrumbsScanningTask() {
1.23 - super(Phase.RESOLVED);
1.24 + super(Phase.RESOLVED, TaskIndexingMode.ALLOWED_DURING_SCAN);
1.25 }
1.26
1.27 @Override
1.28 @@ -113,9 +115,11 @@
1.29
1.30 Collections.reverse(pathList);
1.31
1.32 - Node root = null;
1.33 - Node lastNode = null;
1.34 + Node root;
1.35 + Node lastNode;
1.36
1.37 + lastNode = root = (Node) info.getCachedValue(BreadCrumbsScanningTask.class);
1.38 +
1.39 for (TreePath curr : pathList) {
1.40 if (root == null) {
1.41 lastNode = root = NodeImpl.createBreadcrumbs(info, curr);
1.42 @@ -136,6 +140,8 @@
1.43
1.44 manager.setRootContext(root);
1.45 manager.setExploredContext(lastNode);
1.46 +
1.47 + info.putCachedValue(BreadCrumbsScanningTask.class, root, CacheClearPolicy.ON_CHANGE);
1.48 }
1.49
1.50 @Override