You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@netbeans.apache.org by mb...@apache.org on 2023/01/14 11:21:32 UTC

[netbeans] branch master updated: Improving java.debug.

This is an automated email from the ASF dual-hosted git repository.

mbien pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/netbeans.git


The following commit(s) were added to refs/heads/master by this push:
     new d3d679dfde Improving java.debug.
     new d72bbab196 Merge pull request #4879 from jlahoda/java-debug-improvements
d3d679dfde is described below

commit d3d679dfde30035772d40c4e7813ee5488062b04
Author: Jan Lahoda <jl...@netbeans.org>
AuthorDate: Fri Oct 28 14:53:00 2022 +0200

    Improving java.debug.
---
 .../java/debug/TreeNavigatorProviderImpl.java      |  84 ++-
 .../org/netbeans/modules/java/debug/TreeNode.java  | 822 +--------------------
 2 files changed, 83 insertions(+), 823 deletions(-)

diff --git a/java/java.debug/src/org/netbeans/modules/java/debug/TreeNavigatorProviderImpl.java b/java/java.debug/src/org/netbeans/modules/java/debug/TreeNavigatorProviderImpl.java
index ab9e668a00..647782dcee 100644
--- a/java/java.debug/src/org/netbeans/modules/java/debug/TreeNavigatorProviderImpl.java
+++ b/java/java.debug/src/org/netbeans/modules/java/debug/TreeNavigatorProviderImpl.java
@@ -29,6 +29,8 @@ import java.awt.Color;
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
 import java.beans.PropertyVetoException;
+import java.lang.ref.Reference;
+import java.lang.ref.WeakReference;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.logging.Level;
 import java.util.logging.Logger;
@@ -122,6 +124,7 @@ public class TreeNavigatorProviderImpl implements NavigatorPanel {
     public void panelDeactivated() {
         TreeNavigatorJavaSourceFactory.getInstance().setLookup(Lookup.EMPTY, null);
         TreeNavigatorJavaSourceFactory.CaretAwareFactoryImpl.getInstance().setTask(null);
+        setHighlights(null, null);
     }
 
     static OffsetsBag getBag(Document doc) {
@@ -133,50 +136,63 @@ public class TreeNavigatorProviderImpl implements NavigatorPanel {
         
         return bag;
     }
-    
-    static void setHighlights(FileObject file, ExplorerManager manager) {
-        if (file == null) {
+
+    private static Reference<FileObject> lastFile = null;
+    static synchronized void setHighlights(FileObject file, ExplorerManager manager) {
+        FileObject last = lastFile != null ? lastFile.get() : null;
+        Document lastDoc = documentFor(last);
+
+        if (lastDoc != null) {
+            getBag(lastDoc).clear();
+        }
+
+        Document doc = documentFor(file);
+
+        if (doc == null) {
             return;
         }
-        try {
-            DataObject od = DataObject.find(file);
 
-            EditorCookie ec = od.getLookup().lookup(EditorCookie.class);
+        OffsetsBag bag = new OffsetsBag(doc, true);
 
-            if (ec == null) {
-                return;
-            }
-            Document doc = ec.getDocument();
+        for (Node n : manager.getSelectedNodes()) {
+            if (n instanceof OffsetProvider) {
+                OffsetProvider p = (OffsetProvider) n;
+                final int start = p.getStart();
+                final int end = p.getEnd();
+                final int pref = p.getPreferredPosition();
 
-            if (doc == null) {
-                return;
-            }
-            OffsetsBag bag = new OffsetsBag(doc, true);
-
-            for (Node n : manager.getSelectedNodes()) {
-                if (n instanceof OffsetProvider) {
-                    OffsetProvider p = (OffsetProvider) n;
-                    final int start = p.getStart();
-                    final int end = p.getEnd();
-                    final int pref = p.getPreferredPosition();
-                    
-                    if (start >= 0 && end >= 0) {
-                        bag.addHighlight(start, end, HIGHLIGHT);
-                    }
-                    
-                    if (pref >= 0) {
-                        bag.addHighlight(pref, pref+1, HIGHLIGHT_PREF);
-                    }
+                if (start >= 0 && end >= 0) {
+                    bag.addHighlight(start, end, HIGHLIGHT);
+                }
+
+                if (pref >= 0) {
+                    bag.addHighlight(pref, pref+1, HIGHLIGHT_PREF);
                 }
             }
+        }
+
+        getBag(doc).setHighlights(bag);
 
-            getBag(doc).setHighlights(bag);
-        } catch (DataObjectNotFoundException ex) {
-            Logger.getLogger(TreeNavigatorProviderImpl.class.getName()).log(Level.FINE, null, ex);
+        if (last != file) {
+            lastFile = new WeakReference<>(file);
         }
     }
-    
-    private static final AttributeSet HIGHLIGHT = AttributesUtilities.createImmutable(StyleConstants.Background, new Color(150, 190, 180));
+
+    private static Document documentFor(FileObject file) {
+        if (file == null) {
+            return null;
+        }
+
+        EditorCookie ec = file.getLookup().lookup(EditorCookie.class);
+
+        if (ec == null) {
+            return null;
+        }
+
+        return ec.getDocument();
+    }
+
+    private static final AttributeSet HIGHLIGHT = AttributesUtilities.createImmutable(StyleConstants.Background, new Color(220, 220, 220));
     private static final AttributeSet HIGHLIGHT_PREF = AttributesUtilities.createImmutable(StyleConstants.Underline, new Color(30, 255, 0));
     
     private final class TaskImpl implements CancellableTask<CompilationInfo> {
diff --git a/java/java.debug/src/org/netbeans/modules/java/debug/TreeNode.java b/java/java.debug/src/org/netbeans/modules/java/debug/TreeNode.java
index 2d93bdc483..1dfb98d6f0 100644
--- a/java/java.debug/src/org/netbeans/modules/java/debug/TreeNode.java
+++ b/java/java.debug/src/org/netbeans/modules/java/debug/TreeNode.java
@@ -19,65 +19,7 @@
 package org.netbeans.modules.java.debug;
 
 import com.sun.source.doctree.DocCommentTree;
-import com.sun.source.tree.AnnotatedTypeTree;
-import com.sun.source.tree.AnnotationTree;
-import com.sun.source.tree.ArrayAccessTree;
-import com.sun.source.tree.ArrayTypeTree;
-import com.sun.source.tree.AssertTree;
-import com.sun.source.tree.AssignmentTree;
-import com.sun.source.tree.BinaryTree;
-import com.sun.source.tree.BlockTree;
-import com.sun.source.tree.BreakTree;
-import com.sun.source.tree.CaseTree;
-import com.sun.source.tree.CatchTree;
-import com.sun.source.tree.ClassTree;
-import com.sun.source.tree.CompilationUnitTree;
-import com.sun.source.tree.CompoundAssignmentTree;
-import com.sun.source.tree.ConditionalExpressionTree;
-import com.sun.source.tree.ContinueTree;
-import com.sun.source.tree.DoWhileLoopTree;
-import com.sun.source.tree.EmptyStatementTree;
-import com.sun.source.tree.EnhancedForLoopTree;
-import com.sun.source.tree.ErroneousTree;
-import com.sun.source.tree.ExportsTree;
-import com.sun.source.tree.ExpressionStatementTree;
-import com.sun.source.tree.ForLoopTree;
-import com.sun.source.tree.IdentifierTree;
-import com.sun.source.tree.IfTree;
-import com.sun.source.tree.ImportTree;
-import com.sun.source.tree.InstanceOfTree;
-import com.sun.source.tree.IntersectionTypeTree;
-import com.sun.source.tree.LabeledStatementTree;
-import com.sun.source.tree.LambdaExpressionTree;
-import com.sun.source.tree.LiteralTree;
-import com.sun.source.tree.MemberReferenceTree;
-import com.sun.source.tree.MemberSelectTree;
-import com.sun.source.tree.MethodTree;
-import com.sun.source.tree.MethodInvocationTree;
-import com.sun.source.tree.ModifiersTree;
-import com.sun.source.tree.ModuleTree;
-import com.sun.source.tree.NewArrayTree;
-import com.sun.source.tree.NewClassTree;
-import com.sun.source.tree.PackageTree;
-import com.sun.source.tree.ParameterizedTypeTree;
-import com.sun.source.tree.ParenthesizedTree;
-import com.sun.source.tree.PrimitiveTypeTree;
-import com.sun.source.tree.ProvidesTree;
-import com.sun.source.tree.RequiresTree;
-import com.sun.source.tree.ReturnTree;
-import com.sun.source.tree.SwitchTree;
-import com.sun.source.tree.SynchronizedTree;
-import com.sun.source.tree.ThrowTree;
 import com.sun.source.tree.Tree;
-import com.sun.source.tree.TryTree;
-import com.sun.source.tree.TypeCastTree;
-import com.sun.source.tree.TypeParameterTree;
-import com.sun.source.tree.UnaryTree;
-import com.sun.source.tree.UnionTypeTree;
-import com.sun.source.tree.UsesTree;
-import com.sun.source.tree.VariableTree;
-import com.sun.source.tree.WhileLoopTree;
-import com.sun.source.tree.WildcardTree;
 import com.sun.source.util.DocTrees;
 import com.sun.source.util.TreePath;
 import java.util.ArrayList;
@@ -91,7 +33,7 @@ import javax.lang.model.type.TypeMirror;
 import org.netbeans.api.annotations.common.CheckForNull;
 import org.netbeans.api.annotations.common.NonNull;
 import org.netbeans.api.java.source.CompilationInfo;
-import org.netbeans.api.java.source.support.CancellableTreePathScanner;
+import org.netbeans.api.java.source.support.CancellableTreeScanner;
 import org.openide.nodes.AbstractNode;
 import org.openide.nodes.Children;
 import org.openide.nodes.Node;
@@ -213,764 +155,66 @@ public class TreeNode extends AbstractNode implements OffsetProvider {
         }
     }
     
-    private static class FindChildrenTreeVisitor extends CancellableTreePathScanner<Void, List<Node>> {
+    private static class FindChildrenTreeVisitor extends CancellableTreeScanner<Void, List<Node>> {
         
         private final CompilationInfo info;
+        private TreePath currentPath;
         
         public FindChildrenTreeVisitor(CompilationInfo info, AtomicBoolean cancel) {
             super(cancel);
             this.info = info;
         }
-        
-        @Override
-        public Void visitAnnotation(AnnotationTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            //???
-            addCorrespondingElement(below);
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            
-            super.visitAnnotation(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitMethodInvocation(MethodInvocationTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingElement(below);
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            
-            super.visitMethodInvocation(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitAssert(AssertTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitAssert(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitAssignment(AssignmentTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitAssignment(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitCompoundAssignment(CompoundAssignmentTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitCompoundAssignment(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitBinary(BinaryTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitBinary(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitBlock(BlockTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitBlock(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitBreak(BreakTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitBreak(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitCase(CaseTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitCase(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitCatch(CatchTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitCatch(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitClass(ClassTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingElement(below);
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            addCorrespondingJavadoc(below);
-            
-            super.visitClass(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitConditionalExpression(ConditionalExpressionTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitConditionalExpression(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitContinue(ContinueTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitContinue(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitUnionType(UnionTypeTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitUnionType(tree, below);
-
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitDoWhileLoop(DoWhileLoopTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitDoWhileLoop(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitErroneous(ErroneousTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            scan(tree.getErrorTrees(), below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitExports(ExportsTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitExports(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitExpressionStatement(ExpressionStatementTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitExpressionStatement(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitEnhancedForLoop(EnhancedForLoopTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitEnhancedForLoop(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitForLoop(ForLoopTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitForLoop(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitIdentifier(IdentifierTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingElement(below);
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            
-            super.visitIdentifier(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitIf(IfTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitIf(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitImport(ImportTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitImport(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitArrayAccess(ArrayAccessTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitArrayAccess(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitLabeledStatement(LabeledStatementTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitLabeledStatement(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitLambdaExpression(LambdaExpressionTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitLambdaExpression(tree, below);
-
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitLiteral(LiteralTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitLiteral(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitMemberReference(MemberReferenceTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-
-            addCorrespondingElement(below);
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-
-            super.visitMemberReference(tree, below);
-
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitMethod(MethodTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingElement(below);
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            addCorrespondingJavadoc(below);
-            
-            super.visitMethod(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitModifiers(ModifiersTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitModifiers(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitModule(ModuleTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingElement(below);
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitModule(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitNewArray(NewArrayTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingElement(below);
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            
-            super.visitNewArray(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitNewClass(NewClassTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingElement(below);
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            
-            super.visitNewClass(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitParenthesized(ParenthesizedTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitParenthesized(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitProvides(ProvidesTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitProvides(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitRequires(RequiresTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitRequires(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitReturn(ReturnTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitReturn(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitMemberSelect(MemberSelectTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingElement(below);
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            
-            super.visitMemberSelect(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitEmptyStatement(EmptyStatementTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitEmptyStatement(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitSwitch(SwitchTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitSwitch(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitSynchronized(SynchronizedTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitSynchronized(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitThrow(ThrowTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitThrow(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitCompilationUnit(CompilationUnitTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingElement(below);
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            
-            super.visitCompilationUnit(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitPackage(PackageTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitPackage(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitTry(TryTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitTry(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitAnnotatedType(AnnotatedTypeTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingElement(below);
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            
-            super.visitAnnotatedType(tree, below);
-
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitParameterizedType(ParameterizedTypeTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingElement(below);
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            
-            super.visitParameterizedType(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitArrayType(ArrayTypeTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingElement(below);
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            
-            super.visitArrayType(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitTypeCast(TypeCastTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitTypeCast(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitIntersectionType(IntersectionTypeTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitIntersectionType(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
-
-        @Override
-        public Void visitPrimitiveType(PrimitiveTypeTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitPrimitiveType(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
 
-        @Override
-        public Void visitTypeParameter(TypeParameterTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingElement(below);
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            
-            super.visitTypeParameter(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
+        public Void scan(TreePath path, List<Node> d) {
+            currentPath = path.getParentPath();
 
-        @Override
-        public Void visitInstanceOf(InstanceOfTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitInstanceOf(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
+            scan(path.getLeaf(), d);
 
-        @Override
-        public Void visitUnary(UnaryTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitUnary(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
             return null;
         }
 
         @Override
-        public Void visitUses(UsesTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitUses(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
+        public Void scan(Tree tree, List<Node> d) {
+            if (tree != null) {
+                TreePath oldPath = currentPath;
+                try {
+                    List<Node> below = new ArrayList<Node>();
+                    currentPath = new TreePath(currentPath, tree);
 
-        @Override
-        public Void visitVariable(VariableTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingElement(below);
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            addCorrespondingJavadoc(below);
-            
-            super.visitVariable(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
+                    //???
+                    addCorrespondingElement(currentPath, below);
+                    addCorrespondingType(currentPath, below);
+                    addCorrespondingComments(currentPath, below);
+                    addCorrespondingJavadoc(currentPath, below);
 
-        @Override
-        public Void visitWhileLoop(WhileLoopTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitWhileLoop(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
-            return null;
-        }
+                    super.scan(tree, below);
 
-        @Override
-        public Void visitWildcard(WildcardTree tree, List<Node> d) {
-            List<Node> below = new ArrayList<Node>();
-            
-            addCorrespondingType(below);
-            addCorrespondingComments(below);
-            super.visitWildcard(tree, below);
-            
-            d.add(new TreeNode(info, getCurrentPath(), below));
+                    d.add(new TreeNode(info, currentPath, below));
+                } finally {
+                    currentPath = oldPath;
+                }
+            }
             return null;
         }
         
-        private void addCorrespondingJavadoc(List<Node> below) {
-            DocCommentTree docCommentTree = ((DocTrees) info.getTrees()).getDocCommentTree(getCurrentPath());
+        private void addCorrespondingJavadoc(TreePath currentPath, List<Node> below) {
+            DocCommentTree docCommentTree = ((DocTrees) info.getTrees()).getDocCommentTree(currentPath);
             
             if (docCommentTree != null) {
-                below.add(new DocTreeNode(info, getCurrentPath(), docCommentTree, docCommentTree));
+                below.add(new DocTreeNode(info, currentPath, docCommentTree, docCommentTree));
             } else {
                 below.add(new NotFoundJavadocNode("<javadoc-not-found>"));
             }
         }
 
-        private void addCorrespondingElement(List<Node> below) {
-            Element el = info.getTrees().getElement(getCurrentPath());
+        private void addCorrespondingElement(TreePath currentPath, List<Node> below) {
+            Element el = info.getTrees().getElement(currentPath);
             
             below.add(nodeForElement(info, el));
         }
 
-        private void addCorrespondingType(List<Node> below) {
-            TypeMirror tm = info.getTrees().getTypeMirror(getCurrentPath());
+        private void addCorrespondingType(TreePath currentPath, List<Node> below) {
+            TypeMirror tm = info.getTrees().getTypeMirror(currentPath);
             
             if (tm != null) {
                 below.add(new TypeNode(tm));
@@ -979,9 +223,9 @@ public class TreeNode extends AbstractNode implements OffsetProvider {
             }
         }
         
-        private void addCorrespondingComments(List<Node> below) {
-            below.add(new CommentsNode(NbBundle.getMessage(TreeNode.class, "NM_Preceding_Comments"), info.getTreeUtilities().getComments(getCurrentPath().getLeaf(), true)));
-            below.add(new CommentsNode(NbBundle.getMessage(TreeNode.class, "NM_Trailing_Comments"), info.getTreeUtilities().getComments(getCurrentPath().getLeaf(), false)));
+        private void addCorrespondingComments(TreePath currentPath, List<Node> below) {
+            below.add(new CommentsNode(NbBundle.getMessage(TreeNode.class, "NM_Preceding_Comments"), info.getTreeUtilities().getComments(currentPath.getLeaf(), true)));
+            below.add(new CommentsNode(NbBundle.getMessage(TreeNode.class, "NM_Trailing_Comments"), info.getTreeUtilities().getComments(currentPath.getLeaf(), false)));
         }
     }
     


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@netbeans.apache.org
For additional commands, e-mail: commits-help@netbeans.apache.org

For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists