Compute the breadcrumbs while scanning, reuse previously created Nodes.
authorJan Lahoda <jlahoda@netbeans.org>
Wed, 08 Aug 2012 21:30:55 +0200
changeset 178551a9061819adf
parent 17854 6f7530aa42b8
child 17856 d816f0dd8f7b
Compute the breadcrumbs while scanning, reuse previously created Nodes.
java.breadcrumbs/src/org/netbeans/modules/java/breadcrumbs/BreadCrumbsScanningTask.java
     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