You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@netbeans.apache.org by jl...@apache.org on 2017/10/04 19:41:24 UTC

[12/13] incubator-netbeans git commit: Work in progress: an experiment on using javac from JDK for source code modeling.

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.editor/src/org/netbeans/modules/java/editor/rename/InstantRenamePerformer.java
----------------------------------------------------------------------
diff --git a/java.editor/src/org/netbeans/modules/java/editor/rename/InstantRenamePerformer.java b/java.editor/src/org/netbeans/modules/java/editor/rename/InstantRenamePerformer.java
index 936eaef..9b98b86 100644
--- a/java.editor/src/org/netbeans/modules/java/editor/rename/InstantRenamePerformer.java
+++ b/java.editor/src/org/netbeans/modules/java/editor/rename/InstantRenamePerformer.java
@@ -24,7 +24,7 @@ import com.sun.source.tree.LabeledStatementTree;
 import com.sun.source.tree.StatementTree;
 import com.sun.source.tree.Tree.Kind;
 import com.sun.source.util.TreePath;
-import com.sun.source.util.TreePathScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreePathScanner;
 
 import java.awt.Color;
 import java.awt.event.KeyEvent;
@@ -413,7 +413,7 @@ public class InstantRenamePerformer implements DocumentListener, KeyListener {
         if (labeledStatement.getLeaf().getKind() == Kind.LABELED_STATEMENT) {
             result.add(org.netbeans.modules.java.editor.base.semantic.Utilities.findIdentifierSpan(info, document, labeledStatement));
             final Name label = ((LabeledStatementTree)labeledStatement.getLeaf()).getLabel();
-            new TreePathScanner <Void, Void>() {
+            new ErrorAwareTreePathScanner <Void, Void>() {
                 @Override
                 public Void visitBreak(BreakTree node, Void p) {
                     if (node.getLabel() != null && label.contentEquals(node.getLabel())) {

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.editor/test/unit/src/org/netbeans/modules/editor/java/GoToSupportTest.java
----------------------------------------------------------------------
diff --git a/java.editor/test/unit/src/org/netbeans/modules/editor/java/GoToSupportTest.java b/java.editor/test/unit/src/org/netbeans/modules/editor/java/GoToSupportTest.java
index 2f28db2..bf44269 100644
--- a/java.editor/test/unit/src/org/netbeans/modules/editor/java/GoToSupportTest.java
+++ b/java.editor/test/unit/src/org/netbeans/modules/editor/java/GoToSupportTest.java
@@ -38,12 +38,13 @@ import org.netbeans.api.java.source.CompilationController;
 import org.netbeans.api.java.source.ElementHandle;
 import org.netbeans.api.java.source.JavaSource;
 import org.netbeans.api.java.source.SourceUtilsTestUtil;
+import org.netbeans.api.java.source.SourceUtilsTestUtil2;
 import org.netbeans.api.java.source.Task;
 import org.netbeans.api.java.source.TestUtilities;
 import org.netbeans.api.lexer.Language;
 import org.netbeans.junit.NbTestCase;
 import org.netbeans.modules.editor.java.GoToSupport.UiUtilsCaller;
-import org.netbeans.modules.java.source.TreeLoader;
+//import org.netbeans.modules.java.source.TreeLoader;
 import org.netbeans.modules.java.source.parsing.JavacParser;
 import org.openide.cookies.EditorCookie;
 import org.openide.filesystems.FileObject;
@@ -68,7 +69,7 @@ public class GoToSupportTest extends NbTestCase {
     protected void setUp() throws Exception {
         SourceUtilsTestUtil.prepareTest(new String[] {"org/netbeans/modules/java/editor/resources/layer.xml"}, new Object[0]);
         org.netbeans.api.project.ui.OpenProjects.getDefault().getOpenProjects();
-        TreeLoader.DISABLE_ARTIFICAL_PARAMETER_NAMES = true;
+        SourceUtilsTestUtil2.disableArtificalParameterNames();
         JavacParser.DISABLE_SOURCE_LEVEL_DOWNGRADE = false;
     }
     

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.editor/test/unit/src/org/netbeans/modules/editor/java/UtilitiesTest.java
----------------------------------------------------------------------
diff --git a/java.editor/test/unit/src/org/netbeans/modules/editor/java/UtilitiesTest.java b/java.editor/test/unit/src/org/netbeans/modules/editor/java/UtilitiesTest.java
index 0887c79..9c0181a 100644
--- a/java.editor/test/unit/src/org/netbeans/modules/editor/java/UtilitiesTest.java
+++ b/java.editor/test/unit/src/org/netbeans/modules/editor/java/UtilitiesTest.java
@@ -22,7 +22,7 @@ package org.netbeans.modules.editor.java;
 import java.util.ArrayList;
 import com.sun.source.tree.MethodInvocationTree;
 import com.sun.source.tree.NewClassTree;
-import com.sun.source.util.TreePathScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreePathScanner;
 import java.util.Arrays;
 import java.util.LinkedList;
 import java.util.List;
@@ -226,7 +226,7 @@ public class UtilitiesTest extends NbTestCase {
             public void run(final CompilationController cc) throws Exception {
                 cc.toPhase(Phase.RESOLVED);
                 
-                new TreePathScanner<Void, Void>() {
+                new ErrorAwareTreePathScanner<Void, Void>() {
                     @Override
                     public Void visitMethodInvocation(MethodInvocationTree node, Void p) {
                         if (!cc.getTreeUtilities().isSynthetic(getCurrentPath())) {

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.editor/test/unit/src/org/netbeans/modules/java/editor/codegen/DelegateMethodGeneratorTest.java
----------------------------------------------------------------------
diff --git a/java.editor/test/unit/src/org/netbeans/modules/java/editor/codegen/DelegateMethodGeneratorTest.java b/java.editor/test/unit/src/org/netbeans/modules/java/editor/codegen/DelegateMethodGeneratorTest.java
index cb5cfdb..ef07d10 100644
--- a/java.editor/test/unit/src/org/netbeans/modules/java/editor/codegen/DelegateMethodGeneratorTest.java
+++ b/java.editor/test/unit/src/org/netbeans/modules/java/editor/codegen/DelegateMethodGeneratorTest.java
@@ -53,7 +53,7 @@ import org.netbeans.api.java.source.TreePathHandle;
 import org.netbeans.api.java.source.WorkingCopy;
 import org.netbeans.junit.NbTestCase;
 import org.netbeans.modules.java.editor.codegen.ui.ElementNode;
-import org.netbeans.modules.java.source.TreeLoader;
+//import org.netbeans.modules.java.source.TreeLoader;
 import org.openide.filesystems.FileObject;
 import org.openide.filesystems.FileUtil;
 
@@ -68,7 +68,7 @@ public class DelegateMethodGeneratorTest extends NbTestCase {
     }
 
     protected void setUp() throws Exception {
-        TreeLoader.DISABLE_CONFINEMENT_TEST = true;
+//        TreeLoader.DISABLE_CONFINEMENT_TEST = true;
     }
 
     public void testFindUsableFields() throws Exception {

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.editor/test/unit/src/org/netbeans/modules/java/editor/completion/CompletionTestBase.java
----------------------------------------------------------------------
diff --git a/java.editor/test/unit/src/org/netbeans/modules/java/editor/completion/CompletionTestBase.java b/java.editor/test/unit/src/org/netbeans/modules/java/editor/completion/CompletionTestBase.java
index 502e583..843a367 100644
--- a/java.editor/test/unit/src/org/netbeans/modules/java/editor/completion/CompletionTestBase.java
+++ b/java.editor/test/unit/src/org/netbeans/modules/java/editor/completion/CompletionTestBase.java
@@ -51,6 +51,7 @@ import org.netbeans.api.java.lexer.JavaTokenId;
 import org.netbeans.api.java.source.ClasspathInfo;
 import org.netbeans.api.java.source.CompilationController;
 import org.netbeans.api.java.source.JavaSource;
+import org.netbeans.api.java.source.SourceUtilsTestUtil2;
 import org.netbeans.api.java.source.Task;
 import org.netbeans.api.java.source.gen.WhitespaceIgnoringDiff;
 import org.netbeans.api.lexer.Language;
@@ -60,7 +61,7 @@ import org.netbeans.modules.editor.completion.CompletionItemComparator;
 import org.netbeans.modules.editor.java.JavaCompletionProvider;
 import org.netbeans.modules.editor.java.JavaKit;
 import org.netbeans.modules.java.JavaDataLoader;
-import org.netbeans.modules.java.source.TreeLoader;
+//import org.netbeans.modules.java.source.TreeLoader;
 import org.netbeans.modules.java.source.indexing.TransactionContext;
 import org.netbeans.modules.java.source.parsing.JavacParserFactory;
 import org.netbeans.modules.java.source.usages.BinaryAnalyser;
@@ -100,7 +101,7 @@ public class CompletionTestBase extends NbTestCase {
         System.setProperty("org.openide.util.Lookup", Lkp.class.getName());
         Assert.assertEquals(Lkp.class, Lookup.getDefault().getClass());
 
-        TreeLoader.DISABLE_ARTIFICAL_PARAMETER_NAMES = true;
+        SourceUtilsTestUtil2.disableArtificalParameterNames();
     }
 
     static final int FINISH_OUTTIME = 5 * 60 * 1000;

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.editor/test/unit/src/org/netbeans/modules/java/editor/overridden/IsOverriddenAnnotationCreatorTest.java
----------------------------------------------------------------------
diff --git a/java.editor/test/unit/src/org/netbeans/modules/java/editor/overridden/IsOverriddenAnnotationCreatorTest.java b/java.editor/test/unit/src/org/netbeans/modules/java/editor/overridden/IsOverriddenAnnotationCreatorTest.java
index 39a0994..c689e06 100644
--- a/java.editor/test/unit/src/org/netbeans/modules/java/editor/overridden/IsOverriddenAnnotationCreatorTest.java
+++ b/java.editor/test/unit/src/org/netbeans/modules/java/editor/overridden/IsOverriddenAnnotationCreatorTest.java
@@ -32,9 +32,10 @@ import org.netbeans.api.java.source.CompilationInfo;
 import org.netbeans.api.java.source.JavaSource;
 import org.netbeans.api.java.source.JavaSource.Phase;
 import org.netbeans.api.java.source.SourceUtilsTestUtil;
+import org.netbeans.api.java.source.SourceUtilsTestUtil2;
 import org.netbeans.junit.NbTestCase;
 import org.netbeans.modules.java.source.TestUtil;
-import org.netbeans.modules.java.source.TreeLoader;
+//import org.netbeans.modules.java.source.TreeLoader;
 import org.openide.cookies.EditorCookie;
 import org.openide.filesystems.FileObject;
 import org.openide.filesystems.FileUtil;
@@ -120,8 +121,8 @@ public class IsOverriddenAnnotationCreatorTest extends NbTestCase {
 
         ComputeOverriders.dependenciesOverride = Collections.singletonMap(sourceRoot.getURL(), Collections.<URL>emptyList());
         ComputeOverriders.reverseSourceRootsInOrderOverride = Arrays.asList(sourceRoot.getURL());
-        TreeLoader.DISABLE_CONFINEMENT_TEST = true;
-        TreeLoader.DISABLE_ARTIFICAL_PARAMETER_NAMES = true;
+//        TreeLoader.DISABLE_CONFINEMENT_TEST = true;
+        SourceUtilsTestUtil2.disableArtificalParameterNames();
     }
     
     //does not work as recursive lookup does not work:

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.hints.declarative/src/org/netbeans/modules/java/hints/declarative/DeclarativeHintsParser.java
----------------------------------------------------------------------
diff --git a/java.hints.declarative/src/org/netbeans/modules/java/hints/declarative/DeclarativeHintsParser.java b/java.hints.declarative/src/org/netbeans/modules/java/hints/declarative/DeclarativeHintsParser.java
index 3a31049..79d8a5b 100644
--- a/java.hints.declarative/src/org/netbeans/modules/java/hints/declarative/DeclarativeHintsParser.java
+++ b/java.hints.declarative/src/org/netbeans/modules/java/hints/declarative/DeclarativeHintsParser.java
@@ -419,13 +419,14 @@ public class DeclarativeHintsParser {
         if (javacApiJar != null) {
             Logger.getLogger(DeclarativeHintsParser.class.getName()).log(Level.FINE, "javacApiJar={0}", javacApiJar);
             File aj = FileUtil.archiveOrDirForURL(javacApiJar);
-            res = ClassPathSupport.createClassPath(FileUtil.urlForArchiveOrDir(aj));
-            javacApiClasspath = new WeakReference<>(res);
-            return res;
-        } else {
-            javacApiClasspath = NONE;
-            return null;
+            if (aj != null) {
+                res = ClassPathSupport.createClassPath(FileUtil.urlForArchiveOrDir(aj));
+                javacApiClasspath = new WeakReference<>(res);
+                return res;
+            }
         }
+        javacApiClasspath = NONE;
+        return null;
     }
     
     /**

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.hints.declarative/src/org/netbeans/modules/java/hints/declarative/conditionapi/Matcher.java
----------------------------------------------------------------------
diff --git a/java.hints.declarative/src/org/netbeans/modules/java/hints/declarative/conditionapi/Matcher.java b/java.hints.declarative/src/org/netbeans/modules/java/hints/declarative/conditionapi/Matcher.java
index abe2cab..46f8391 100644
--- a/java.hints.declarative/src/org/netbeans/modules/java/hints/declarative/conditionapi/Matcher.java
+++ b/java.hints.declarative/src/org/netbeans/modules/java/hints/declarative/conditionapi/Matcher.java
@@ -21,7 +21,7 @@ package org.netbeans.modules.java.hints.declarative.conditionapi;
 
 import com.sun.source.tree.Tree;
 import com.sun.source.util.TreePath;
-import com.sun.source.util.TreePathScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreePathScanner;
 import java.util.Collection;
 import java.util.LinkedList;
 import javax.lang.model.element.Element;
@@ -69,7 +69,7 @@ public final class Matcher {
 
         for (TreePath toSearch : paths) {
             //XXX:
-            new TreePathScanner<Void, Void>() {
+            new ErrorAwareTreePathScanner<Void, Void>() {
                 @Override
                 public Void scan(Tree tree, Void p) {
                     if (tree == null) return null;
@@ -98,7 +98,7 @@ public final class Matcher {
         }
 
         for (TreePath tp : ctx.getVariable(in)) {
-            boolean occurs = new TreePathScanner<Boolean, Void>() {
+            boolean occurs = new ErrorAwareTreePathScanner<Boolean, Void>() {
                 @Override
                 public Boolean scan(Tree tree, Void p) {
                     if (tree == null) {

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.hints.declarative/test/unit/src/org/netbeans/modules/java/hints/declarative/debugging/EvaluationSpanTaskTest.java
----------------------------------------------------------------------
diff --git a/java.hints.declarative/test/unit/src/org/netbeans/modules/java/hints/declarative/debugging/EvaluationSpanTaskTest.java b/java.hints.declarative/test/unit/src/org/netbeans/modules/java/hints/declarative/debugging/EvaluationSpanTaskTest.java
index c94dc22..df3d3ff 100644
--- a/java.hints.declarative/test/unit/src/org/netbeans/modules/java/hints/declarative/debugging/EvaluationSpanTaskTest.java
+++ b/java.hints.declarative/test/unit/src/org/netbeans/modules/java/hints/declarative/debugging/EvaluationSpanTaskTest.java
@@ -37,7 +37,7 @@ import org.netbeans.api.java.source.SourceUtilsTestUtil;
 import org.netbeans.api.java.source.TestUtilities;
 import org.netbeans.api.lexer.Language;
 import org.netbeans.junit.NbTestCase;
-import org.netbeans.modules.java.source.TreeLoader;
+//import org.netbeans.modules.java.source.TreeLoader;
 import org.openide.cookies.EditorCookie;
 import org.openide.filesystems.FileObject;
 import org.openide.filesystems.FileUtil;
@@ -57,7 +57,8 @@ public class EvaluationSpanTaskTest extends NbTestCase {
     protected void setUp() throws Exception {
         super.setUp();
         SourceUtilsTestUtil.prepareTest(new String[] {"org/netbeans/modules/java/editor/resources/layer.xml"}, new Object[0]);
-        TreeLoader.DISABLE_CONFINEMENT_TEST = true;
+        //XXX:
+//        TreeLoader.DISABLE_CONFINEMENT_TEST = true;
     }
 
     public void testHintConditions() throws Exception {

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.hints.test/src/org/netbeans/modules/java/hints/test/api/HintTest.java
----------------------------------------------------------------------
diff --git a/java.hints.test/src/org/netbeans/modules/java/hints/test/api/HintTest.java b/java.hints.test/src/org/netbeans/modules/java/hints/test/api/HintTest.java
index 6e285e0..b792027 100644
--- a/java.hints.test/src/org/netbeans/modules/java/hints/test/api/HintTest.java
+++ b/java.hints.test/src/org/netbeans/modules/java/hints/test/api/HintTest.java
@@ -99,7 +99,6 @@ import org.netbeans.modules.java.hints.spiimpl.hints.HintsInvoker;
 import org.netbeans.modules.java.hints.spiimpl.options.HintsSettings;
 import org.netbeans.modules.java.hints.test.Utilities.TestLookup;
 import org.netbeans.modules.java.source.JavaSourceAccessor;
-import org.netbeans.modules.java.source.TreeLoader;
 import org.netbeans.modules.parsing.api.indexing.IndexingManager;
 import org.netbeans.modules.parsing.impl.indexing.CacheFolder;
 import org.netbeans.modules.parsing.impl.indexing.MimeTypes;
@@ -224,7 +223,6 @@ public class HintTest {
         MimeTypes.setAllMimeTypes(amt);
         org.netbeans.api.project.ui.OpenProjects.getDefault().getOpenProjects();
 
-        TreeLoader.DISABLE_CONFINEMENT_TEST = true;
         testPreferences = new TempPreferences();
         hintSettings = new HintsSettings() {
             @Override public boolean isEnabled(HintMetadata hint) {

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.hints.ui/nbproject/project.properties
----------------------------------------------------------------------
diff --git a/java.hints.ui/nbproject/project.properties b/java.hints.ui/nbproject/project.properties
index 59289f0..84013ec 100644
--- a/java.hints.ui/nbproject/project.properties
+++ b/java.hints.ui/nbproject/project.properties
@@ -17,3 +17,4 @@
 javac.source=1.7
 javac.compilerargs=-Xlint -Xlint:-serial
 spec.version.base=1.19.0
+requires.nb.javac=true

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.hints/src/org/netbeans/modules/java/hints/ArithmeticUtilities.java
----------------------------------------------------------------------
diff --git a/java.hints/src/org/netbeans/modules/java/hints/ArithmeticUtilities.java b/java.hints/src/org/netbeans/modules/java/hints/ArithmeticUtilities.java
index ef797e9..a2b0eee 100644
--- a/java.hints/src/org/netbeans/modules/java/hints/ArithmeticUtilities.java
+++ b/java.hints/src/org/netbeans/modules/java/hints/ArithmeticUtilities.java
@@ -34,7 +34,7 @@ import com.sun.source.tree.TypeCastTree;
 import com.sun.source.tree.UnaryTree;
 import com.sun.source.tree.VariableTree;
 import com.sun.source.util.TreePath;
-import com.sun.source.util.TreePathScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreePathScanner;
 import java.util.EnumSet;
 import java.util.HashMap;
 import java.util.Map;
@@ -194,7 +194,7 @@ public class ArithmeticUtilities {
         
     }
 
-    private static final class VisitorImpl extends TreePathScanner<Object, Void> {
+    private static final class VisitorImpl extends ErrorAwareTreePathScanner<Object, Void> {
         // PENDING: instanceof String could be handled
 	private static final Set<Kind> ACCEPTED_KINDS = EnumSet.of(
 		MULTIPLY, DIVIDE, REMAINDER, PLUS, MINUS,

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.hints/src/org/netbeans/modules/java/hints/AssignmentIssues.java
----------------------------------------------------------------------
diff --git a/java.hints/src/org/netbeans/modules/java/hints/AssignmentIssues.java b/java.hints/src/org/netbeans/modules/java/hints/AssignmentIssues.java
index f0ff80a..c666e92 100644
--- a/java.hints/src/org/netbeans/modules/java/hints/AssignmentIssues.java
+++ b/java.hints/src/org/netbeans/modules/java/hints/AssignmentIssues.java
@@ -26,7 +26,7 @@ import com.sun.source.tree.CompoundAssignmentTree;
 import com.sun.source.tree.Tree.Kind;
 import com.sun.source.tree.UnaryTree;
 import com.sun.source.util.TreePath;
-import com.sun.source.util.TreePathScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreePathScanner;
 import com.sun.source.util.Trees;
 import java.util.ArrayList;
 import java.util.LinkedList;
@@ -169,7 +169,7 @@ public class AssignmentIssues {
                 new ReplaceAssignmentFix(NbBundle.getMessage(AssignmentIssues.class, "FIX_ReplaceAssignmentWithOperatorAssignment", path.getLeaf()), TreePathHandle.create(path, context.getInfo())).toEditorFix()); //NOI18N
     }
 
-    private static final class AssignmentFinder extends TreePathScanner<Void, List<TreePath>> {
+    private static final class AssignmentFinder extends ErrorAwareTreePathScanner<Void, List<TreePath>> {
 
         private final Trees trees;
         private final Element param;

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.hints/src/org/netbeans/modules/java/hints/ConvertAnonymousToInner.java
----------------------------------------------------------------------
diff --git a/java.hints/src/org/netbeans/modules/java/hints/ConvertAnonymousToInner.java b/java.hints/src/org/netbeans/modules/java/hints/ConvertAnonymousToInner.java
index 6a49054..b3a60ba 100644
--- a/java.hints/src/org/netbeans/modules/java/hints/ConvertAnonymousToInner.java
+++ b/java.hints/src/org/netbeans/modules/java/hints/ConvertAnonymousToInner.java
@@ -33,7 +33,7 @@ import com.sun.source.tree.TypeParameterTree;
 import com.sun.source.tree.VariableTree;
 import com.sun.source.util.SourcePositions;
 import com.sun.source.util.TreePath;
-import com.sun.source.util.TreePathScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreePathScanner;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -233,7 +233,7 @@ public class ConvertAnonymousToInner extends AbstractHint {
         }
     }
 
-    private static final class DetectUsedVars extends TreePathScanner<Void, Set<VariableElement>> {
+    private static final class DetectUsedVars extends ErrorAwareTreePathScanner<Void, Set<VariableElement>> {
         private CompilationInfo info;
         private TreePath newClassToConvert;
         
@@ -258,7 +258,7 @@ public class ConvertAnonymousToInner extends AbstractHint {
 
     }
     
-    private static final class DetectUseOfNonStaticMembers extends TreePathScanner<Boolean, Void> {
+    private static final class DetectUseOfNonStaticMembers extends ErrorAwareTreePathScanner<Boolean, Void> {
         private CompilationInfo info;
         private TreePath newClassToConvert;
         
@@ -546,7 +546,7 @@ public class ConvertAnonymousToInner extends AbstractHint {
     }
 
     private static TreePath findSuperConstructorCall(final CompilationInfo info, TreePath nct) {
-        class FindSuperConstructorCall extends TreePathScanner<TreePath, Void> {
+        class FindSuperConstructorCall extends ErrorAwareTreePathScanner<TreePath, Void> {
 
             private boolean stop;
 

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.hints/src/org/netbeans/modules/java/hints/DoubleCheck.java
----------------------------------------------------------------------
diff --git a/java.hints/src/org/netbeans/modules/java/hints/DoubleCheck.java b/java.hints/src/org/netbeans/modules/java/hints/DoubleCheck.java
index b1027ac..27a60b0 100644
--- a/java.hints/src/org/netbeans/modules/java/hints/DoubleCheck.java
+++ b/java.hints/src/org/netbeans/modules/java/hints/DoubleCheck.java
@@ -34,7 +34,7 @@ import com.sun.source.tree.Tree;
 import com.sun.source.tree.Tree.Kind;
 import com.sun.source.tree.VariableTree;
 import com.sun.source.util.TreePath;
-import com.sun.source.util.TreePathScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreePathScanner;
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.concurrent.atomic.AtomicBoolean;
@@ -393,7 +393,7 @@ public class DoubleCheck {
         }
     }
     
-    private static final class VariableAccessWalker extends TreePathScanner {
+    private static final class VariableAccessWalker extends ErrorAwareTreePathScanner {
         private final VariableElement originalVariable;
         private final ExpressionTree  fieldAccessTree;
         /**

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.hints/src/org/netbeans/modules/java/hints/EqualsMethodHint.java
----------------------------------------------------------------------
diff --git a/java.hints/src/org/netbeans/modules/java/hints/EqualsMethodHint.java b/java.hints/src/org/netbeans/modules/java/hints/EqualsMethodHint.java
index cea42d6..b5a3e45 100644
--- a/java.hints/src/org/netbeans/modules/java/hints/EqualsMethodHint.java
+++ b/java.hints/src/org/netbeans/modules/java/hints/EqualsMethodHint.java
@@ -25,7 +25,7 @@ import com.sun.source.tree.MemberSelectTree;
 import com.sun.source.tree.MethodInvocationTree;
 import com.sun.source.tree.Tree.Kind;
 import com.sun.source.util.TreePath;
-import com.sun.source.util.TreePathScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreePathScanner;
 import javax.lang.model.element.Element;
 import javax.lang.model.element.ElementKind;
 import org.netbeans.api.java.source.CompilationInfo;
@@ -69,7 +69,7 @@ public class EqualsMethodHint {
                 NbBundle.getMessage(EqualsMethodHint.class, "ERR_EQUALS_NOT_CHECKING_TYPE"));
     }
 
-    private static final class VisitorImpl extends TreePathScanner<Void, Void> {
+    private static final class VisitorImpl extends ErrorAwareTreePathScanner<Void, Void> {
         
         private CompilationInfo info;
         private Element parameter;

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.hints/src/org/netbeans/modules/java/hints/OrganizeImports.java
----------------------------------------------------------------------
diff --git a/java.hints/src/org/netbeans/modules/java/hints/OrganizeImports.java b/java.hints/src/org/netbeans/modules/java/hints/OrganizeImports.java
index 4ce6ad9..a577005 100644
--- a/java.hints/src/org/netbeans/modules/java/hints/OrganizeImports.java
+++ b/java.hints/src/org/netbeans/modules/java/hints/OrganizeImports.java
@@ -46,7 +46,7 @@ import com.sun.source.tree.Tree.Kind;
 import com.sun.source.tree.VariableTree;
 import com.sun.source.util.SourcePositions;
 import com.sun.source.util.TreePath;
-import com.sun.source.util.TreePathScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreePathScanner;
 import com.sun.source.util.Trees;
 import com.sun.tools.javac.code.Scope;
 import com.sun.tools.javac.code.Symbol;
@@ -232,7 +232,7 @@ public class OrganizeImports {
         final Set<Element> ret = new HashSet<Element>();
         final Trees trees = info.getTrees();
         final Types types = info.getTypes();
-        new TreePathScanner<Void, Void>() {
+        new ErrorAwareTreePathScanner<Void, Void>() {
 
             @Override
             public Void visitIdentifier(IdentifierTree node, Void p) {

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.hints/src/org/netbeans/modules/java/hints/WrongPackageSuggestion.java
----------------------------------------------------------------------
diff --git a/java.hints/src/org/netbeans/modules/java/hints/WrongPackageSuggestion.java b/java.hints/src/org/netbeans/modules/java/hints/WrongPackageSuggestion.java
index d241aba..40f5139 100644
--- a/java.hints/src/org/netbeans/modules/java/hints/WrongPackageSuggestion.java
+++ b/java.hints/src/org/netbeans/modules/java/hints/WrongPackageSuggestion.java
@@ -25,7 +25,7 @@ import com.sun.source.tree.MemberSelectTree;
 import com.sun.source.tree.Tree;
 import com.sun.source.tree.Tree.Kind;
 import com.sun.source.util.TreePath;
-import com.sun.source.util.TreeScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreeScanner;
 import java.io.File;
 import java.io.IOException;
 import java.util.Arrays;
@@ -93,7 +93,7 @@ public class WrongPackageSuggestion extends AbstractHint {
         boolean hasPackageClause = tree.getPackageName() != null;
         
         if (hasPackageClause) {
-            new TreeScanner<Void, StringBuffer>() {
+            new ErrorAwareTreeScanner<Void, StringBuffer>() {
                 @Override
                 public Void visitIdentifier(IdentifierTree node, StringBuffer p) {
                     p.append(node.getName().toString());

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.hints/src/org/netbeans/modules/java/hints/bugs/AssertWithSideEffects.java
----------------------------------------------------------------------
diff --git a/java.hints/src/org/netbeans/modules/java/hints/bugs/AssertWithSideEffects.java b/java.hints/src/org/netbeans/modules/java/hints/bugs/AssertWithSideEffects.java
index 56dfd1f..99e6d44 100644
--- a/java.hints/src/org/netbeans/modules/java/hints/bugs/AssertWithSideEffects.java
+++ b/java.hints/src/org/netbeans/modules/java/hints/bugs/AssertWithSideEffects.java
@@ -29,7 +29,7 @@ import com.sun.source.tree.NewClassTree;
 import com.sun.source.tree.Tree;
 import com.sun.source.tree.UnaryTree;
 import com.sun.source.util.TreePath;
-import com.sun.source.util.TreePathScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreePathScanner;
 import java.util.Deque;
 import java.util.LinkedList;
 import javax.lang.model.element.Element;

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.hints/src/org/netbeans/modules/java/hints/bugs/CloneAndCloneable.java
----------------------------------------------------------------------
diff --git a/java.hints/src/org/netbeans/modules/java/hints/bugs/CloneAndCloneable.java b/java.hints/src/org/netbeans/modules/java/hints/bugs/CloneAndCloneable.java
index 5e8d3bd..3475195 100644
--- a/java.hints/src/org/netbeans/modules/java/hints/bugs/CloneAndCloneable.java
+++ b/java.hints/src/org/netbeans/modules/java/hints/bugs/CloneAndCloneable.java
@@ -26,7 +26,7 @@ import com.sun.source.tree.Tree;
 import com.sun.source.tree.TypeParameterTree;
 import com.sun.source.tree.VariableTree;
 import com.sun.source.util.TreePath;
-import com.sun.source.util.TreePathScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreePathScanner;
 import java.util.Collections;
 import javax.lang.model.element.Element;
 import javax.lang.model.element.ExecutableElement;
@@ -93,7 +93,7 @@ public class CloneAndCloneable {
      * Finder provides true, if it finds a call to 'superClone' method element passed
      * in the constructor.
      */
-    private static final class SuperCloneFinder extends TreePathScanner<Boolean, Void> {
+    private static final class SuperCloneFinder extends ErrorAwareTreePathScanner<Boolean, Void> {
         private final CompilationInfo info;
         private final ExecutableElement superClone;
 

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.hints/src/org/netbeans/modules/java/hints/bugs/ComparatorParameterNotUsed.java
----------------------------------------------------------------------
diff --git a/java.hints/src/org/netbeans/modules/java/hints/bugs/ComparatorParameterNotUsed.java b/java.hints/src/org/netbeans/modules/java/hints/bugs/ComparatorParameterNotUsed.java
index 1352b21..082b73c 100644
--- a/java.hints/src/org/netbeans/modules/java/hints/bugs/ComparatorParameterNotUsed.java
+++ b/java.hints/src/org/netbeans/modules/java/hints/bugs/ComparatorParameterNotUsed.java
@@ -23,7 +23,7 @@ import com.sun.source.tree.MethodTree;
 import com.sun.source.tree.Tree;
 import com.sun.source.tree.VariableTree;
 import com.sun.source.util.TreePath;
-import com.sun.source.util.TreePathScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreePathScanner;
 import java.text.Collator;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -58,7 +58,7 @@ import static org.netbeans.modules.java.hints.bugs.Bundle.*;
     "# {0} - parameter name",
     "TEXT_ComparatorParameterNotUsed=Comparator.comparable does not use parameter ''{0}''"
 })
-public class ComparatorParameterNotUsed extends TreePathScanner {
+public class ComparatorParameterNotUsed extends ErrorAwareTreePathScanner {
     private final CompilationInfo   ci;
     private final Set<VariableElement>    unusedVars;
 

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.hints/src/org/netbeans/modules/java/hints/bugs/InfiniteRecursion.java
----------------------------------------------------------------------
diff --git a/java.hints/src/org/netbeans/modules/java/hints/bugs/InfiniteRecursion.java b/java.hints/src/org/netbeans/modules/java/hints/bugs/InfiniteRecursion.java
index 399d3d0..0365e93 100644
--- a/java.hints/src/org/netbeans/modules/java/hints/bugs/InfiniteRecursion.java
+++ b/java.hints/src/org/netbeans/modules/java/hints/bugs/InfiniteRecursion.java
@@ -41,7 +41,7 @@ import com.sun.source.tree.SwitchTree;
 import com.sun.source.tree.Tree;
 import com.sun.source.tree.WhileLoopTree;
 import com.sun.source.util.TreePath;
-import com.sun.source.util.TreePathScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreePathScanner;
 import java.util.Collections;
 import java.util.Deque;
 import java.util.EnumSet;
@@ -224,7 +224,7 @@ public class InfiniteRecursion {
      * only in the speculative for loop evaluation, otherwise for/while bodies incl any continue statements do not count.
      * 
      */
-    private static class RecursionVisitor extends TreePathScanner<State, Void> {
+    private static class RecursionVisitor extends ErrorAwareTreePathScanner<State, Void> {
         private final CompilationInfo ci;
         private final ExecutableElement checkMethod;
 

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.hints/src/org/netbeans/modules/java/hints/bugs/Regexp.java
----------------------------------------------------------------------
diff --git a/java.hints/src/org/netbeans/modules/java/hints/bugs/Regexp.java b/java.hints/src/org/netbeans/modules/java/hints/bugs/Regexp.java
index 5be0b91..87d35bb 100644
--- a/java.hints/src/org/netbeans/modules/java/hints/bugs/Regexp.java
+++ b/java.hints/src/org/netbeans/modules/java/hints/bugs/Regexp.java
@@ -26,7 +26,7 @@ import com.sun.source.tree.MemberSelectTree;
 import com.sun.source.tree.MethodInvocationTree;
 import com.sun.source.tree.Tree.Kind;
 import com.sun.source.util.TreePath;
-import com.sun.source.util.TreePathScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreePathScanner;
 import java.util.regex.Pattern;
 import java.util.regex.PatternSyntaxException;
 import javax.lang.model.element.Element;
@@ -97,7 +97,7 @@ public class Regexp {
         final StringBuilder regexp = new StringBuilder();
         final boolean[] accept = {true};
         TreePath pattern = ctx.getVariables().get("$pattern");
-        new TreePathScanner<Void, Void>() {
+        new ErrorAwareTreePathScanner<Void, Void>() {
             @Override
             public Void visitLiteral(LiteralTree node, Void p) {
                 if (node.getValue() instanceof String) {

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.hints/src/org/netbeans/modules/java/hints/bugs/Tiny.java
----------------------------------------------------------------------
diff --git a/java.hints/src/org/netbeans/modules/java/hints/bugs/Tiny.java b/java.hints/src/org/netbeans/modules/java/hints/bugs/Tiny.java
index 6cc965a..ca9d9f1 100644
--- a/java.hints/src/org/netbeans/modules/java/hints/bugs/Tiny.java
+++ b/java.hints/src/org/netbeans/modules/java/hints/bugs/Tiny.java
@@ -37,8 +37,8 @@ import com.sun.source.tree.Tree.Kind;
 import com.sun.source.tree.WhileLoopTree;
 import com.sun.source.util.SourcePositions;
 import com.sun.source.util.TreePath;
-import com.sun.source.util.TreePathScanner;
-import com.sun.source.util.TreeScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreePathScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreeScanner;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -342,7 +342,7 @@ public class Tiny {
         final LabeledStatementTree lt = (LabeledStatementTree)lPath.getLeaf();
         final Name l = lt.getLabel();
         final CompilationInfo info = ctx.getInfo();
-        Boolean b = new TreePathScanner<Boolean, Void>() {
+        Boolean b = new ErrorAwareTreePathScanner<Boolean, Void>() {
 
             @Override
             public Boolean reduce(Boolean r1, Boolean r2) {

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.hints/src/org/netbeans/modules/java/hints/bugs/TryCatchFinally.java
----------------------------------------------------------------------
diff --git a/java.hints/src/org/netbeans/modules/java/hints/bugs/TryCatchFinally.java b/java.hints/src/org/netbeans/modules/java/hints/bugs/TryCatchFinally.java
index 5aac965..010b799 100644
--- a/java.hints/src/org/netbeans/modules/java/hints/bugs/TryCatchFinally.java
+++ b/java.hints/src/org/netbeans/modules/java/hints/bugs/TryCatchFinally.java
@@ -28,7 +28,7 @@ import com.sun.source.tree.ThrowTree;
 import com.sun.source.tree.Tree;
 import com.sun.source.tree.TryTree;
 import com.sun.source.util.TreePath;
-import com.sun.source.util.TreePathScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreePathScanner;
 import java.util.ArrayDeque;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -226,7 +226,7 @@ public class TryCatchFinally {
         return errs;
     }
     
-    private static final class ExitsFromBranches extends TreePathScanner<Void, Collection<TreePath>> {
+    private static final class ExitsFromBranches extends ErrorAwareTreePathScanner<Void, Collection<TreePath>> {
         private final  boolean analyzeThrows;
         private final CompilationInfo info;
         private final Set<Tree> seenTrees = new HashSet<Tree>();

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.hints/src/org/netbeans/modules/java/hints/control/RemoveUnnecessary.java
----------------------------------------------------------------------
diff --git a/java.hints/src/org/netbeans/modules/java/hints/control/RemoveUnnecessary.java b/java.hints/src/org/netbeans/modules/java/hints/control/RemoveUnnecessary.java
index e7658ed..b5626a4 100644
--- a/java.hints/src/org/netbeans/modules/java/hints/control/RemoveUnnecessary.java
+++ b/java.hints/src/org/netbeans/modules/java/hints/control/RemoveUnnecessary.java
@@ -44,7 +44,7 @@ import com.sun.source.tree.TryTree;
 import com.sun.source.tree.TypeCastTree;
 import com.sun.source.tree.UnaryTree;
 import com.sun.source.util.TreePath;
-import com.sun.source.util.TreePathScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreePathScanner;
 import java.util.ArrayList;
 import java.util.EnumSet;
 import java.util.List;
@@ -260,7 +260,7 @@ public class RemoveUnnecessary {
      * Transforms expression tree into series of statements.
      * 
      */
-    static class ExpressionToStatement extends TreePathScanner {
+    static class ExpressionToStatement extends ErrorAwareTreePathScanner {
         private boolean remove = true;
         private List<StatementTree>    statements = new ArrayList<>(); 
         private final TreeMaker mk;

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.hints/src/org/netbeans/modules/java/hints/errors/AddParameterOrLocalFix.java
----------------------------------------------------------------------
diff --git a/java.hints/src/org/netbeans/modules/java/hints/errors/AddParameterOrLocalFix.java b/java.hints/src/org/netbeans/modules/java/hints/errors/AddParameterOrLocalFix.java
index 995e61c..c92b3b0 100644
--- a/java.hints/src/org/netbeans/modules/java/hints/errors/AddParameterOrLocalFix.java
+++ b/java.hints/src/org/netbeans/modules/java/hints/errors/AddParameterOrLocalFix.java
@@ -30,7 +30,7 @@ import com.sun.source.tree.Tree;
 import com.sun.source.tree.Tree.Kind;
 import com.sun.source.tree.VariableTree;
 import com.sun.source.util.TreePath;
-import com.sun.source.util.TreePathScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreePathScanner;
 import java.io.IOException;
 import java.util.Arrays;
 import java.util.EnumSet;
@@ -264,7 +264,7 @@ public class AddParameterOrLocalFix implements EnhancedFix {
             return;
         }
         
-        class FirstUsage extends TreePathScanner<TreePath, Void> {
+        class FirstUsage extends ErrorAwareTreePathScanner<TreePath, Void> {
             public @Override TreePath visitIdentifier(IdentifierTree tree, Void v) {
                 if (tree.getName().contentEquals(el.getSimpleName()) && isError(wc, wc.getTrees().getElement(getCurrentPath()))) {
                     return findStatement(getCurrentPath());

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.hints/src/org/netbeans/modules/java/hints/errors/ImplementAllAbstractMethods.java
----------------------------------------------------------------------
diff --git a/java.hints/src/org/netbeans/modules/java/hints/errors/ImplementAllAbstractMethods.java b/java.hints/src/org/netbeans/modules/java/hints/errors/ImplementAllAbstractMethods.java
index ba538f9..778331d 100644
--- a/java.hints/src/org/netbeans/modules/java/hints/errors/ImplementAllAbstractMethods.java
+++ b/java.hints/src/org/netbeans/modules/java/hints/errors/ImplementAllAbstractMethods.java
@@ -29,7 +29,7 @@ import com.sun.source.tree.Tree;
 import com.sun.source.tree.Tree.Kind;
 import com.sun.source.tree.VariableTree;
 import com.sun.source.util.TreePath;
-import com.sun.source.util.TreePathScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreePathScanner;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -198,7 +198,7 @@ public final class ImplementAllAbstractMethods implements ErrorRule<Object>, Ove
             //(missing '()' for constructor)
             //do not propose the hint in this case:
             final boolean[] parentError = new boolean[] {false};
-            new TreePathScanner() {
+            new ErrorAwareTreePathScanner() {
                 @Override
                 public Object visitNewClass(NewClassTree nct, Object o) {
                     if (leaf == nct) {

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.hints/src/org/netbeans/modules/java/hints/errors/MagicSurroundWithTryCatchFix.java
----------------------------------------------------------------------
diff --git a/java.hints/src/org/netbeans/modules/java/hints/errors/MagicSurroundWithTryCatchFix.java b/java.hints/src/org/netbeans/modules/java/hints/errors/MagicSurroundWithTryCatchFix.java
index c21f6f6..69b0ff7 100644
--- a/java.hints/src/org/netbeans/modules/java/hints/errors/MagicSurroundWithTryCatchFix.java
+++ b/java.hints/src/org/netbeans/modules/java/hints/errors/MagicSurroundWithTryCatchFix.java
@@ -34,7 +34,7 @@ import com.sun.source.tree.Tree.Kind;
 import com.sun.source.tree.TryTree;
 import com.sun.source.tree.VariableTree;
 import com.sun.source.util.TreePath;
-import com.sun.source.util.TreePathScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreePathScanner;
 import com.sun.source.util.Trees;
 import java.io.IOException;
 import java.util.ArrayList;
@@ -187,7 +187,7 @@ final class MagicSurroundWithTryCatchFix implements Fix {
         return null;
     }
     
-    private final class TransformerImpl extends TreePathScanner<Void, Void> {
+    private final class TransformerImpl extends ErrorAwareTreePathScanner<Void, Void> {
         
         private WorkingCopy info;
         private List<TypeMirrorHandle> thandles;

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.hints/src/org/netbeans/modules/java/hints/errors/MissingReturnStatement.java
----------------------------------------------------------------------
diff --git a/java.hints/src/org/netbeans/modules/java/hints/errors/MissingReturnStatement.java b/java.hints/src/org/netbeans/modules/java/hints/errors/MissingReturnStatement.java
index a1a6a41..27e8bda 100644
--- a/java.hints/src/org/netbeans/modules/java/hints/errors/MissingReturnStatement.java
+++ b/java.hints/src/org/netbeans/modules/java/hints/errors/MissingReturnStatement.java
@@ -27,7 +27,7 @@ import com.sun.source.tree.ReturnTree;
 import com.sun.source.tree.StatementTree;
 import com.sun.source.tree.Tree.Kind;
 import com.sun.source.util.TreePath;
-import com.sun.source.util.TreeScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreeScanner;
 import com.sun.tools.javac.tree.JCTree;
 import java.util.ArrayList;
 import java.util.Arrays;

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.hints/src/org/netbeans/modules/java/hints/errors/OrigSurroundWithTryCatchFix.java
----------------------------------------------------------------------
diff --git a/java.hints/src/org/netbeans/modules/java/hints/errors/OrigSurroundWithTryCatchFix.java b/java.hints/src/org/netbeans/modules/java/hints/errors/OrigSurroundWithTryCatchFix.java
index 337d5f0..ccf8998 100644
--- a/java.hints/src/org/netbeans/modules/java/hints/errors/OrigSurroundWithTryCatchFix.java
+++ b/java.hints/src/org/netbeans/modules/java/hints/errors/OrigSurroundWithTryCatchFix.java
@@ -29,7 +29,7 @@ import com.sun.source.tree.Tree.Kind;
 import com.sun.source.tree.TryTree;
 import com.sun.source.tree.VariableTree;
 import com.sun.source.util.TreePath;
-import com.sun.source.util.TreePathScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreePathScanner;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.LinkedList;
@@ -171,7 +171,7 @@ class OrigSurroundWithTryCatchFix implements Fix {
         return path;
     }
     
-    private static final class FindUsages extends TreePathScanner<Boolean, VariableElement> {
+    private static final class FindUsages extends ErrorAwareTreePathScanner<Boolean, VariableElement> {
 
         private Tree ignore;
         private CompilationInfo info;

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.hints/src/org/netbeans/modules/java/hints/errors/Utilities.java
----------------------------------------------------------------------
diff --git a/java.hints/src/org/netbeans/modules/java/hints/errors/Utilities.java b/java.hints/src/org/netbeans/modules/java/hints/errors/Utilities.java
index df1babc..a634619 100644
--- a/java.hints/src/org/netbeans/modules/java/hints/errors/Utilities.java
+++ b/java.hints/src/org/netbeans/modules/java/hints/errors/Utilities.java
@@ -55,7 +55,7 @@ import com.sun.source.tree.ContinueTree;
 import com.sun.source.tree.IfTree;
 import com.sun.source.tree.ReturnTree;
 import com.sun.source.tree.TryTree;
-import com.sun.source.util.TreePathScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreePathScanner;
 import org.netbeans.api.java.source.TreeUtilities;
 import org.openide.filesystems.FileUtil;
 import org.openide.util.NbBundle;
@@ -97,7 +97,7 @@ import com.sun.source.tree.VariableTree;
 import com.sun.source.tree.WhileLoopTree;
 import com.sun.source.util.SourcePositions;
 import com.sun.source.util.TreePath;
-import com.sun.source.util.TreeScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreeScanner;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -865,7 +865,7 @@ public class Utilities {
     @NbBundle.Messages({
         "DisplayName_Unknown=<missing>"
     })
-    private static class HintDisplayNameVisitor extends TreeScanner<String, Void> {
+    private static class HintDisplayNameVisitor extends ErrorAwareTreeScanner<String, Void> {
 
         private CompilationInfo info;
 
@@ -1258,7 +1258,7 @@ public class Utilities {
      * {@link #seenTrees} before processing, so if a break/continue targets such a node, such jump is not considered an exit.
      * Jumps can register the target Tree in {@link #targetTrees} which causes false to be returned from that tree's inspection.
      */
-    private static final class ExitsFromAllBranches extends TreePathScanner<Boolean, Void> {
+    private static final class ExitsFromAllBranches extends ErrorAwareTreePathScanner<Boolean, Void> {
 
         private CompilationInfo info;
         private final Set<Tree> seenTrees = new HashSet<Tree>();
@@ -1876,10 +1876,10 @@ public class Utilities {
                 }
             }            
         };
-        ArgumentAttr argumentAttr = ArgumentAttr.instance(jti.getContext());
-        ArgumentAttr.LocalCacheContext cacheContext = argumentAttr.withLocalCacheContext();
+//        ArgumentAttr argumentAttr = ArgumentAttr.instance(jti.getContext());
+//        ArgumentAttr.LocalCacheContext cacheContext = argumentAttr.withLocalCacheContext();
         try {
-            enter.shadowTypeEnvs(true);
+//            enter.shadowTypeEnvs(true);
             Attr attr = Attr.instance(jti.getContext());
             Env<AttrContext> env = ((JavacScope) scope).getEnv();
             if (tree instanceof JCTree.JCExpression) {
@@ -1887,10 +1887,10 @@ public class Utilities {
             }
             return attr.attribStat((JCTree) tree,env);
         } finally {
-            cacheContext.leave();
+//            cacheContext.leave();
             log.useSource(prev);
             log.popDiagnosticHandler(discardHandler);
-            enter.shadowTypeEnvs(false);
+//            enter.shadowTypeEnvs(false);
         }
     }
     // -------------------------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.hints/src/org/netbeans/modules/java/hints/finalize/FinalizeDoesNotCallSuper.java
----------------------------------------------------------------------
diff --git a/java.hints/src/org/netbeans/modules/java/hints/finalize/FinalizeDoesNotCallSuper.java b/java.hints/src/org/netbeans/modules/java/hints/finalize/FinalizeDoesNotCallSuper.java
index 6dd6d26..0bdad2d 100644
--- a/java.hints/src/org/netbeans/modules/java/hints/finalize/FinalizeDoesNotCallSuper.java
+++ b/java.hints/src/org/netbeans/modules/java/hints/finalize/FinalizeDoesNotCallSuper.java
@@ -32,7 +32,7 @@ import com.sun.source.tree.Tree;
 import com.sun.source.tree.Tree.Kind;
 import com.sun.source.tree.TryTree;
 import com.sun.source.util.TreePath;
-import com.sun.source.util.TreeScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreeScanner;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
@@ -77,7 +77,7 @@ public class FinalizeDoesNotCallSuper {
                 new FixImpl(TreePathHandle.create(ctx.getPath(), ctx.getInfo())).toEditorFix());
     }
 
-    static final class FindSuper extends TreeScanner<Void, Void> {
+    static final class FindSuper extends ErrorAwareTreeScanner<Void, Void> {
 
         boolean found;
 

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.hints/src/org/netbeans/modules/java/hints/introduce/Flow.java
----------------------------------------------------------------------
diff --git a/java.hints/src/org/netbeans/modules/java/hints/introduce/Flow.java b/java.hints/src/org/netbeans/modules/java/hints/introduce/Flow.java
index 348508c..99681c6 100644
--- a/java.hints/src/org/netbeans/modules/java/hints/introduce/Flow.java
+++ b/java.hints/src/org/netbeans/modules/java/hints/introduce/Flow.java
@@ -73,7 +73,7 @@ import com.sun.source.tree.VariableTree;
 import com.sun.source.tree.WhileLoopTree;
 import com.sun.source.tree.WildcardTree;
 import com.sun.source.util.TreePath;
-import com.sun.source.util.TreePathScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreePathScanner;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -243,7 +243,7 @@ public class Flow {
 
     }
     
-    private static class PathFinder extends TreePathScanner {
+    private static class PathFinder extends ErrorAwareTreePathScanner {
         final Map<Tree, TreePath> node2Path;
         final Set<Tree> interestingNodes;
 

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.hints/src/org/netbeans/modules/java/hints/introduce/InstanceRefFinder.java
----------------------------------------------------------------------
diff --git a/java.hints/src/org/netbeans/modules/java/hints/introduce/InstanceRefFinder.java b/java.hints/src/org/netbeans/modules/java/hints/introduce/InstanceRefFinder.java
index 3232480..36cece3 100644
--- a/java.hints/src/org/netbeans/modules/java/hints/introduce/InstanceRefFinder.java
+++ b/java.hints/src/org/netbeans/modules/java/hints/introduce/InstanceRefFinder.java
@@ -25,7 +25,7 @@ import com.sun.source.tree.MemberSelectTree;
 import com.sun.source.tree.NewClassTree;
 import com.sun.source.tree.Tree;
 import com.sun.source.util.TreePath;
-import com.sun.source.util.TreePathScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreePathScanner;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
@@ -47,7 +47,7 @@ import org.netbeans.api.java.source.CompilationInfo;
  *
  * @author sdedic
  */
-public class InstanceRefFinder extends TreePathScanner {
+public class InstanceRefFinder extends ErrorAwareTreePathScanner {
     /**
      * The initial path for analysis
      */

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.hints/src/org/netbeans/modules/java/hints/introduce/IntroduceHint.java
----------------------------------------------------------------------
diff --git a/java.hints/src/org/netbeans/modules/java/hints/introduce/IntroduceHint.java b/java.hints/src/org/netbeans/modules/java/hints/introduce/IntroduceHint.java
index ce66a79..6beaef7 100644
--- a/java.hints/src/org/netbeans/modules/java/hints/introduce/IntroduceHint.java
+++ b/java.hints/src/org/netbeans/modules/java/hints/introduce/IntroduceHint.java
@@ -35,8 +35,8 @@ import com.sun.source.tree.Tree.Kind;
 import com.sun.source.tree.TypeParameterTree;
 import com.sun.source.tree.VariableTree;
 import com.sun.source.util.TreePath;
-import com.sun.source.util.TreePathScanner;
-import com.sun.source.util.TreeScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreePathScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreeScanner;
 import java.awt.Color;
 import java.awt.Rectangle;
 import java.util.ArrayList;
@@ -441,7 +441,7 @@ public class IntroduceHint implements CancellableTask<CompilationInfo> {
             }
 
         }
-        class ReferencesLocalVariable extends TreePathScanner<Void, Void> {
+        class ReferencesLocalVariable extends ErrorAwareTreePathScanner<Void, Void> {
             @Override
             public Void visitIdentifier(IdentifierTree node, Void p) {
                 Element e = info.getTrees().getElement(getCurrentPath());
@@ -550,7 +550,7 @@ public class IntroduceHint implements CancellableTask<CompilationInfo> {
         return formalArguments;
     }
     
-    static class VariableRenamer extends TreePathScanner {
+    static class VariableRenamer extends ErrorAwareTreePathScanner {
         private final Map<VariableElement, CharSequence> renamedVars;
         private final Set<Name> changedNames;
         private final WorkingCopy info;
@@ -750,7 +750,7 @@ public class IntroduceHint implements CancellableTask<CompilationInfo> {
     static ClassTree insertField(final WorkingCopy parameter, ClassTree clazz, VariableTree fieldToAdd, Set<Tree> allNewUses, int offset) {
         ClassTree nueClass = INSERT_CLASS_MEMBER.insertClassMember(parameter, clazz, fieldToAdd, offset);
 
-        class Contains extends TreeScanner<Boolean, Set<Tree>> {
+        class Contains extends ErrorAwareTreeScanner<Boolean, Set<Tree>> {
             @Override public Boolean reduce(Boolean r1, Boolean r2) {
                 return r1 == Boolean.TRUE || r2 == Boolean.TRUE;
             }
@@ -809,7 +809,7 @@ public class IntroduceHint implements CancellableTask<CompilationInfo> {
         final Set<Element> used = Collections.newSetFromMap(new IdentityHashMap<Element, Boolean>());
         final boolean statik = fieldToAdd.getModifiers().getFlags().contains(Modifier.STATIC);
         
-        new TreePathScanner<Void, Void>() {
+        new ErrorAwareTreePathScanner<Void, Void>() {
             @Override public Void visitIdentifier(IdentifierTree node, Void p) {
                 handleCurrentPath();
                 return super.visitIdentifier(node, p); //To change body of generated methods, choose Tools | Templates.

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.hints/src/org/netbeans/modules/java/hints/introduce/ReferenceTransformer.java
----------------------------------------------------------------------
diff --git a/java.hints/src/org/netbeans/modules/java/hints/introduce/ReferenceTransformer.java b/java.hints/src/org/netbeans/modules/java/hints/introduce/ReferenceTransformer.java
index 95d4e48..afd6cca 100644
--- a/java.hints/src/org/netbeans/modules/java/hints/introduce/ReferenceTransformer.java
+++ b/java.hints/src/org/netbeans/modules/java/hints/introduce/ReferenceTransformer.java
@@ -22,7 +22,7 @@ import com.sun.source.tree.IdentifierTree;
 import com.sun.source.tree.MemberSelectTree;
 import com.sun.source.tree.Tree;
 import com.sun.source.util.TreePath;
-import com.sun.source.util.TreePathScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreePathScanner;
 import javax.lang.model.element.Element;
 import javax.lang.model.element.ElementKind;
 import javax.lang.model.element.Modifier;
@@ -35,7 +35,7 @@ import org.netbeans.api.java.source.WorkingCopy;
  *
  * @author sdedic
  */
-final class ReferenceTransformer extends TreePathScanner {
+final class ReferenceTransformer extends ErrorAwareTreePathScanner {
     private final ElementKind kind;
     private final String name;
     private final WorkingCopy copy;

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.hints/src/org/netbeans/modules/java/hints/introduce/ScanStatement.java
----------------------------------------------------------------------
diff --git a/java.hints/src/org/netbeans/modules/java/hints/introduce/ScanStatement.java b/java.hints/src/org/netbeans/modules/java/hints/introduce/ScanStatement.java
index 74929cf..b2bbfbe 100644
--- a/java.hints/src/org/netbeans/modules/java/hints/introduce/ScanStatement.java
+++ b/java.hints/src/org/netbeans/modules/java/hints/introduce/ScanStatement.java
@@ -32,7 +32,7 @@ import com.sun.source.tree.Tree;
 import com.sun.source.tree.VariableTree;
 import com.sun.source.tree.WhileLoopTree;
 import com.sun.source.util.TreePath;
-import com.sun.source.util.TreePathScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreePathScanner;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashSet;
@@ -53,7 +53,7 @@ import org.netbeans.api.java.source.TreePathHandle;
  *
  * @author sdedic
  */
-final class ScanStatement extends TreePathScanner<Void, Void> {
+final class ScanStatement extends ErrorAwareTreePathScanner<Void, Void> {
     private static final int PHASE_BEFORE_SELECTION = 1;
     private static final int PHASE_INSIDE_SELECTION = 2;
     private static final int PHASE_AFTER_SELECTION = 3;

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.hints/src/org/netbeans/modules/java/hints/jdk/ConvertToARM.java
----------------------------------------------------------------------
diff --git a/java.hints/src/org/netbeans/modules/java/hints/jdk/ConvertToARM.java b/java.hints/src/org/netbeans/modules/java/hints/jdk/ConvertToARM.java
index 4832b96..b0ddf35 100644
--- a/java.hints/src/org/netbeans/modules/java/hints/jdk/ConvertToARM.java
+++ b/java.hints/src/org/netbeans/modules/java/hints/jdk/ConvertToARM.java
@@ -32,8 +32,8 @@ import com.sun.source.tree.Tree.Kind;
 import com.sun.source.tree.TryTree;
 import com.sun.source.tree.VariableTree;
 import com.sun.source.util.TreePath;
-import com.sun.source.util.TreePathScanner;
-import com.sun.source.util.TreeScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreePathScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreeScanner;
 import com.sun.source.util.Trees;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -841,7 +841,7 @@ public class ConvertToARM {
             }
         }
         final Set<VariableTree> result = new HashSet<VariableTree>();
-        final TreeScanner<Void,Void> scanner = new TreeScanner<Void,Void>(){
+        final ErrorAwareTreeScanner<Void,Void> scanner = new ErrorAwareTreeScanner<Void,Void>(){
             @Override
             public Void visitIdentifier(IdentifierTree node, Void p) {
                 final Element elm = trees.getElement(trees.getPath(cu, node));
@@ -863,7 +863,7 @@ public class ConvertToARM {
             final Trees trees) {
         final List<TreePath> usages = new LinkedList<>();
         if (statements != null) {
-            final TreePathScanner<List<TreePath>,List<TreePath>> scanner = new TreePathScanner<List<TreePath>, List<TreePath>>() {
+            final ErrorAwareTreePathScanner<List<TreePath>,List<TreePath>> scanner = new ErrorAwareTreePathScanner<List<TreePath>, List<TreePath>>() {
                 @Override
                 public List<TreePath> visitIdentifier(IdentifierTree node, List<TreePath> p) {
                     final TreePath path = getCurrentPath();
@@ -910,7 +910,7 @@ public class ConvertToARM {
             final Element what,
             final Iterable<? extends TreePath> where,
             final Trees trees) {
-        TreePathScanner<Boolean, Void> scanner = new TreePathScanner<Boolean, Void>() {
+        ErrorAwareTreePathScanner<Boolean, Void> scanner = new ErrorAwareTreePathScanner<Boolean, Void>() {
             @Override public Boolean visitAssignment(AssignmentTree node, Void p) {
                 if (trees.getElement(new TreePath(getCurrentPath(), node.getVariable())) == what) {
                     return true;
@@ -955,7 +955,7 @@ public class ConvertToARM {
             usedAfterCloseVarNames.add(vt.getName().toString());
         }
         
-        TreeScanner<Boolean, Void> scanner = new TreeScanner<Boolean, Void>() {
+        ErrorAwareTreeScanner<Boolean, Void> scanner = new ErrorAwareTreeScanner<Boolean, Void>() {
             @Override public Boolean visitVariable(VariableTree node, Void p) {
                 if (usedAfterCloseVarNames.contains(node.getName().toString()) && !usedAfterCloseVarDecls.contains(node)) {
                     return true;

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.hints/src/org/netbeans/modules/java/hints/jdk/ConvertToLambdaConverter.java
----------------------------------------------------------------------
diff --git a/java.hints/src/org/netbeans/modules/java/hints/jdk/ConvertToLambdaConverter.java b/java.hints/src/org/netbeans/modules/java/hints/jdk/ConvertToLambdaConverter.java
index 9e15fe5..e5d6661 100644
--- a/java.hints/src/org/netbeans/modules/java/hints/jdk/ConvertToLambdaConverter.java
+++ b/java.hints/src/org/netbeans/modules/java/hints/jdk/ConvertToLambdaConverter.java
@@ -32,7 +32,7 @@ import com.sun.source.tree.Scope;
 import com.sun.source.tree.Tree;
 import com.sun.source.tree.VariableTree;
 import com.sun.source.util.TreePath;
-import com.sun.source.util.TreePathScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreePathScanner;
 import com.sun.source.util.Trees;
 import java.util.Collection;
 import java.util.Collections;
@@ -223,7 +223,7 @@ public class ConvertToLambdaConverter {
         return make.TypeCast(expectedType, tree);
     }
 
-    private class ShadowedVariableRenameScanner extends TreePathScanner<Tree, Trees> {
+    private class ShadowedVariableRenameScanner extends ErrorAwareTreePathScanner<Tree, Trees> {
 
         private final Map<Element, CharSequence> originalToNewName = new HashMap<Element, CharSequence>();
 

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.hints/src/org/netbeans/modules/java/hints/jdk/ConvertToLambdaPreconditionChecker.java
----------------------------------------------------------------------
diff --git a/java.hints/src/org/netbeans/modules/java/hints/jdk/ConvertToLambdaPreconditionChecker.java b/java.hints/src/org/netbeans/modules/java/hints/jdk/ConvertToLambdaPreconditionChecker.java
index 56930ea..1731bd8 100644
--- a/java.hints/src/org/netbeans/modules/java/hints/jdk/ConvertToLambdaPreconditionChecker.java
+++ b/java.hints/src/org/netbeans/modules/java/hints/jdk/ConvertToLambdaPreconditionChecker.java
@@ -34,7 +34,7 @@ import com.sun.source.tree.Scope;
 import com.sun.source.tree.Tree;
 import com.sun.source.tree.VariableTree;
 import com.sun.source.util.TreePath;
-import com.sun.source.util.TreePathScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreePathScanner;
 import com.sun.source.util.Trees;
 import java.util.ArrayList;
 import java.util.EnumSet;
@@ -235,7 +235,7 @@ public class ConvertToLambdaPreconditionChecker {
         foundOverloadWhichMakesLambdaAmbiguous = doesOverloadMakeLambdaAmbiguous();
     }
 
-    private class PreconditionScanner extends TreePathScanner<Tree, Trees> {
+    private class PreconditionScanner extends ErrorAwareTreePathScanner<Tree, Trees> {
 
         @Override
         public Tree visitClass(ClassTree node, Trees p) {

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.hints/src/org/netbeans/modules/java/hints/jdk/IteratorToFor.java
----------------------------------------------------------------------
diff --git a/java.hints/src/org/netbeans/modules/java/hints/jdk/IteratorToFor.java b/java.hints/src/org/netbeans/modules/java/hints/jdk/IteratorToFor.java
index 2b9c99f..6b57474 100644
--- a/java.hints/src/org/netbeans/modules/java/hints/jdk/IteratorToFor.java
+++ b/java.hints/src/org/netbeans/modules/java/hints/jdk/IteratorToFor.java
@@ -35,7 +35,7 @@ import com.sun.source.tree.Tree;
 import com.sun.source.tree.Tree.Kind;
 import com.sun.source.tree.VariableTree;
 import com.sun.source.util.TreePath;
-import com.sun.source.util.TreePathScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreePathScanner;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.EnumSet;
@@ -269,7 +269,7 @@ public class IteratorToFor {
             return false;
         }
         for (TreePath tp : statements) {
-            boolean occurs = Boolean.TRUE.equals(new TreePathScanner<Boolean, Void>() {
+            boolean occurs = Boolean.TRUE.equals(new ErrorAwareTreePathScanner<Boolean, Void>() {
                 @Override public Boolean scan(Tree tree, Void p) {
                     if (tree == null) {
                         return false;

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.hints/src/org/netbeans/modules/java/hints/jdk/UseSpecificCatch.java
----------------------------------------------------------------------
diff --git a/java.hints/src/org/netbeans/modules/java/hints/jdk/UseSpecificCatch.java b/java.hints/src/org/netbeans/modules/java/hints/jdk/UseSpecificCatch.java
index 0fd6c0f..b36959e 100644
--- a/java.hints/src/org/netbeans/modules/java/hints/jdk/UseSpecificCatch.java
+++ b/java.hints/src/org/netbeans/modules/java/hints/jdk/UseSpecificCatch.java
@@ -25,7 +25,7 @@ import com.sun.source.tree.Tree;
 import com.sun.source.tree.TryTree;
 import com.sun.source.tree.VariableTree;
 import com.sun.source.util.TreePath;
-import com.sun.source.util.TreePathScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreePathScanner;
 import java.util.ArrayDeque;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -262,7 +262,7 @@ public class UseSpecificCatch implements CustomizerProvider {
         final boolean[] result = new boolean[1];
 
         for (TreePath tp : statements) {
-            new TreePathScanner<Void, Void>() {
+            new ErrorAwareTreePathScanner<Void, Void>() {
                 @Override
                 public Void visitAssignment(AssignmentTree node, Void p) {
                     if (tEl.equals(ctx.getInfo().getTrees().getElement(new TreePath(getCurrentPath(), node.getVariable())))) {

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.hints/src/org/netbeans/modules/java/hints/jdk/mapreduce/PreconditionsChecker.java
----------------------------------------------------------------------
diff --git a/java.hints/src/org/netbeans/modules/java/hints/jdk/mapreduce/PreconditionsChecker.java b/java.hints/src/org/netbeans/modules/java/hints/jdk/mapreduce/PreconditionsChecker.java
index a4c29e1..579fcf2 100644
--- a/java.hints/src/org/netbeans/modules/java/hints/jdk/mapreduce/PreconditionsChecker.java
+++ b/java.hints/src/org/netbeans/modules/java/hints/jdk/mapreduce/PreconditionsChecker.java
@@ -34,8 +34,8 @@ import com.sun.source.tree.StatementTree;
 import com.sun.source.tree.Tree;
 import com.sun.source.tree.VariableTree;
 import com.sun.source.util.TreePath;
-import com.sun.source.util.TreePathScanner;
-import com.sun.source.util.TreeScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreePathScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreeScanner;
 import com.sun.source.util.Trees;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -189,7 +189,7 @@ public class PreconditionsChecker {
         return false;
     }
 
-    public static class VariablesVisitor extends TreeScanner<Tree, Trees> {
+    public static class VariablesVisitor extends ErrorAwareTreeScanner<Tree, Trees> {
 
         private Set<Name> innerVariables = new HashSet<Name>();
         private Set<Name> allLocalVariables = new HashSet<Name>();
@@ -234,7 +234,7 @@ public class PreconditionsChecker {
     /*
      * This class visits the loop to check if there are any failed preconditions.
      */
-    private static class ForLoopTreeVisitor extends TreePathScanner<Tree, Trees> {
+    private static class ForLoopTreeVisitor extends ErrorAwareTreePathScanner<Tree, Trees> {
 
         private Set<Name> inners;
         private CompilationInfo workingCopy;

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.hints/src/org/netbeans/modules/java/hints/perf/ManualArrayCopy.java
----------------------------------------------------------------------
diff --git a/java.hints/src/org/netbeans/modules/java/hints/perf/ManualArrayCopy.java b/java.hints/src/org/netbeans/modules/java/hints/perf/ManualArrayCopy.java
index 0bf749e..2b3a4b3 100644
--- a/java.hints/src/org/netbeans/modules/java/hints/perf/ManualArrayCopy.java
+++ b/java.hints/src/org/netbeans/modules/java/hints/perf/ManualArrayCopy.java
@@ -21,7 +21,7 @@ package org.netbeans.modules.java.hints.perf;
 
 import com.sun.source.tree.IdentifierTree;
 import com.sun.source.util.TreePath;
-import com.sun.source.util.TreePathScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreePathScanner;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
@@ -79,7 +79,7 @@ public class ManualArrayCopy {
         
         if (i != null) {
             final boolean[] used = new boolean[1];
-            new TreePathScanner<Void, Void>() {
+            new ErrorAwareTreePathScanner<Void, Void>() {
                 @Override public Void visitIdentifier(IdentifierTree node, Void p) {
                     Element use = ctx.getInfo().getTrees().getElement(getCurrentPath());
                     

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.hints/src/org/netbeans/modules/java/hints/perf/ReplaceBufferByString.java
----------------------------------------------------------------------
diff --git a/java.hints/src/org/netbeans/modules/java/hints/perf/ReplaceBufferByString.java b/java.hints/src/org/netbeans/modules/java/hints/perf/ReplaceBufferByString.java
index 564ff4c..bb00c2d 100644
--- a/java.hints/src/org/netbeans/modules/java/hints/perf/ReplaceBufferByString.java
+++ b/java.hints/src/org/netbeans/modules/java/hints/perf/ReplaceBufferByString.java
@@ -33,7 +33,7 @@ import com.sun.source.tree.Tree;
 import com.sun.source.tree.UnaryTree;
 import com.sun.source.tree.VariableTree;
 import com.sun.source.util.TreePath;
-import com.sun.source.util.TreePathScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreePathScanner;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashSet;
@@ -119,7 +119,7 @@ public class ReplaceBufferByString {
     /**
      * The scanner determines, if the expression is just a series of new SB().append().append()...
      */
-    private static class NewAppendScanner extends TreePathScanner<Boolean, Void> {
+    private static class NewAppendScanner extends ErrorAwareTreePathScanner<Boolean, Void> {
         private final CompilationInfo ci;
         private boolean hasContents;
         
@@ -386,7 +386,7 @@ public class ReplaceBufferByString {
      * Translates rest of references in the method so that .toString() is stripped, as the variable is going
      * to change type to String.
      */
-    private static class ToStringTranslator extends TreePathScanner {
+    private static class ToStringTranslator extends ErrorAwareTreePathScanner {
         private final WorkingCopy wc;
         private final Element varElement;
         private final GeneratorUtilities gu;
@@ -442,7 +442,7 @@ public class ReplaceBufferByString {
      * its value must NOT be assigned to another variable, field, passed to another method call or returned from the method.
      * Only String-compatible methods may be called on the variable.
      */
-    private static class StringBufferUsageScanner extends TreePathScanner<Boolean, Void> {
+    private static class StringBufferUsageScanner extends ErrorAwareTreePathScanner<Boolean, Void> {
         private final CompilationInfo ci;
         private final VariableElement var;
         

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.hints/src/org/netbeans/modules/java/hints/perf/StringBuffer2Builder.java
----------------------------------------------------------------------
diff --git a/java.hints/src/org/netbeans/modules/java/hints/perf/StringBuffer2Builder.java b/java.hints/src/org/netbeans/modules/java/hints/perf/StringBuffer2Builder.java
index e588545..bc7b8a2 100644
--- a/java.hints/src/org/netbeans/modules/java/hints/perf/StringBuffer2Builder.java
+++ b/java.hints/src/org/netbeans/modules/java/hints/perf/StringBuffer2Builder.java
@@ -23,7 +23,7 @@ import com.sun.source.tree.IdentifierTree;
 import com.sun.source.tree.MethodInvocationTree;
 import com.sun.source.tree.VariableTree;
 import com.sun.source.util.TreePath;
-import com.sun.source.util.TreePathScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreePathScanner;
 import javax.lang.model.SourceVersion;
 import javax.lang.model.element.Element;
 import javax.lang.model.element.ElementKind;
@@ -53,7 +53,7 @@ public class StringBuffer2Builder {
             return null;
         }
 
-        class EscapeFinder extends TreePathScanner<Boolean, Boolean> {
+        class EscapeFinder extends ErrorAwareTreePathScanner<Boolean, Boolean> {
             @Override
             public Boolean reduce(Boolean r1, Boolean r2) {
                 return r1 == Boolean.TRUE || r2 == Boolean.TRUE;

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.hints/src/org/netbeans/modules/java/hints/suggestions/ExpectedTypeResolver.java
----------------------------------------------------------------------
diff --git a/java.hints/src/org/netbeans/modules/java/hints/suggestions/ExpectedTypeResolver.java b/java.hints/src/org/netbeans/modules/java/hints/suggestions/ExpectedTypeResolver.java
index 9642652..92faa9c 100644
--- a/java.hints/src/org/netbeans/modules/java/hints/suggestions/ExpectedTypeResolver.java
+++ b/java.hints/src/org/netbeans/modules/java/hints/suggestions/ExpectedTypeResolver.java
@@ -122,7 +122,7 @@ import org.netbeans.modules.java.hints.errors.Utilities;
  * it is not possible to determine a type which the expression must be <i>assignable to</i>. But it is known that the
  * expression must be <i>castable</i> to the typecast's target type so that compiler error does not occur.
  * <p/>
- * As the class iterates "upwards", it was derived from TreeVisitor rather than from TreeScanner to prevent accidental 
+ * As the class iterates "upwards", it was derived from TreeVisitor rather than from ErrorAwareTreeScanner to prevent accidental 
  * StackOverflows if execution accidentally fall to the default implementation with top-down traversal.
  * 
  * @author sdedic

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.hints/src/org/netbeans/modules/java/hints/suggestions/IfToSwitchSupport.java
----------------------------------------------------------------------
diff --git a/java.hints/src/org/netbeans/modules/java/hints/suggestions/IfToSwitchSupport.java b/java.hints/src/org/netbeans/modules/java/hints/suggestions/IfToSwitchSupport.java
index b928ecb..1e9ae94 100644
--- a/java.hints/src/org/netbeans/modules/java/hints/suggestions/IfToSwitchSupport.java
+++ b/java.hints/src/org/netbeans/modules/java/hints/suggestions/IfToSwitchSupport.java
@@ -32,8 +32,8 @@ import com.sun.source.tree.SwitchTree;
 import com.sun.source.tree.Tree;
 import com.sun.source.tree.VariableTree;
 import com.sun.source.util.TreePath;
-import com.sun.source.util.TreePathScanner;
-import com.sun.source.util.TreeScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreePathScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreeScanner;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashSet;
@@ -585,7 +585,7 @@ public class IfToSwitchSupport {
             TreePath topLevelMethod = Utilities.findTopLevelBlock(it);
             final Set<String> seenLabels = new HashSet<String>();
 
-            new TreeScanner<Void, Void>() {
+            new ErrorAwareTreeScanner<Void, Void>() {
                 @Override public Void visitLabeledStatement(LabeledStatementTree node, Void p) {
                     seenLabels.add(node.getLabel().toString());
                     return super.visitLabeledStatement(node, p);
@@ -764,7 +764,7 @@ public class IfToSwitchSupport {
                 above.add(t);
             }
 
-            new TreePathScanner<Void, Void>() {
+            new ErrorAwareTreePathScanner<Void, Void>() {
                 @Override public Void visitIdentifier(IdentifierTree node, Void p) {
                     if (declared.contains(info.getTrees().getElement(getCurrentPath())))
                         return null;

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.hints/src/org/netbeans/modules/java/hints/suggestions/Lambda.java
----------------------------------------------------------------------
diff --git a/java.hints/src/org/netbeans/modules/java/hints/suggestions/Lambda.java b/java.hints/src/org/netbeans/modules/java/hints/suggestions/Lambda.java
index d24c7d7..70f84c0 100644
--- a/java.hints/src/org/netbeans/modules/java/hints/suggestions/Lambda.java
+++ b/java.hints/src/org/netbeans/modules/java/hints/suggestions/Lambda.java
@@ -42,8 +42,8 @@ import com.sun.source.tree.Tree.Kind;
 import com.sun.source.tree.TypeParameterTree;
 import com.sun.source.tree.VariableTree;
 import com.sun.source.util.TreePath;
-import com.sun.source.util.TreePathScanner;
-import com.sun.source.util.TreeScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreePathScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreeScanner;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.EnumSet;
@@ -438,7 +438,7 @@ public class Lambda {
             }
             types.put(samTypeElement.getSimpleName(), samTypeElement);
             
-            new TreePathScanner<Void, Boolean>() {
+            new ErrorAwareTreePathScanner<Void, Boolean>() {
                 @Override public Void visitIdentifier(final IdentifierTree node, Boolean p) {
                     boolean rewrite = false;
                     boolean statRef = false;

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.hints/src/org/netbeans/modules/java/hints/suggestions/Tiny.java
----------------------------------------------------------------------
diff --git a/java.hints/src/org/netbeans/modules/java/hints/suggestions/Tiny.java b/java.hints/src/org/netbeans/modules/java/hints/suggestions/Tiny.java
index eb3d87b..8757ab5 100644
--- a/java.hints/src/org/netbeans/modules/java/hints/suggestions/Tiny.java
+++ b/java.hints/src/org/netbeans/modules/java/hints/suggestions/Tiny.java
@@ -35,7 +35,7 @@ import com.sun.source.tree.Tree;
 import com.sun.source.tree.VariableTree;
 import com.sun.source.util.SourcePositions;
 import com.sun.source.util.TreePath;
-import com.sun.source.util.TreePathScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreePathScanner;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.LinkedList;
@@ -374,7 +374,7 @@ public class Tiny {
                 Scope s = ctx.getWorkingCopy().getTrees().getScope(tp);
                 ctx.getWorkingCopy().getTreeUtilities().attributeTree(stmt, s);
                 st = GeneratorUtilities.get(ctx.getWorkingCopy()).importFQNs(make.addSwitchCase(st, make.Case(null, Collections.singletonList(stmt))));
-                new TreePathScanner<Void, Void>() {
+                new ErrorAwareTreePathScanner<Void, Void>() {
                     @Override public Void visitIdentifier(IdentifierTree node, Void p) {
                         if (node.getName().contentEquals("$expression")) {
                             ExpressionTree expression = ((SwitchTree) tp.getLeaf()).getExpression();

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.hints/src/org/netbeans/modules/java/hints/threading/Tiny.java
----------------------------------------------------------------------
diff --git a/java.hints/src/org/netbeans/modules/java/hints/threading/Tiny.java b/java.hints/src/org/netbeans/modules/java/hints/threading/Tiny.java
index 9d494e5..1aef771 100644
--- a/java.hints/src/org/netbeans/modules/java/hints/threading/Tiny.java
+++ b/java.hints/src/org/netbeans/modules/java/hints/threading/Tiny.java
@@ -32,7 +32,7 @@ import com.sun.source.tree.Tree;
 import com.sun.source.tree.Tree.Kind;
 import com.sun.source.tree.VariableTree;
 import com.sun.source.util.TreePath;
-import com.sun.source.util.TreeScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreeScanner;
 import java.util.EnumSet;
 import java.util.List;
 import java.util.Set;
@@ -195,7 +195,7 @@ public class Tiny {
 
         if (!report) {
             try {
-                new TreeScanner<Void, Void>() {
+                new ErrorAwareTreeScanner<Void, Void>() {
                     @Override
                     public Void visitClass(ClassTree node, Void p) {
                         return null;

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.hints/test/unit/src/org/netbeans/modules/java/hints/ConvertAnonymousToInnerTest.java
----------------------------------------------------------------------
diff --git a/java.hints/test/unit/src/org/netbeans/modules/java/hints/ConvertAnonymousToInnerTest.java b/java.hints/test/unit/src/org/netbeans/modules/java/hints/ConvertAnonymousToInnerTest.java
index d921317..5e57a88 100644
--- a/java.hints/test/unit/src/org/netbeans/modules/java/hints/ConvertAnonymousToInnerTest.java
+++ b/java.hints/test/unit/src/org/netbeans/modules/java/hints/ConvertAnonymousToInnerTest.java
@@ -20,7 +20,7 @@ package org.netbeans.modules.java.hints;
 
 import com.sun.source.tree.NewClassTree;
 import com.sun.source.util.TreePath;
-import com.sun.source.util.TreePathScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreePathScanner;
 import java.io.IOException;
 import java.util.regex.Pattern;
 import org.netbeans.api.java.source.JavaSource;
@@ -50,7 +50,7 @@ public class ConvertAnonymousToInnerTest extends NbTestCase {
         SourceUtilsTestUtil.prepareTest(new String[0], new Object[0]);
     }
 
-    private static final class FindNewClassTree extends TreePathScanner<TreePath, Void> {
+    private static final class FindNewClassTree extends ErrorAwareTreePathScanner<TreePath, Void> {
         @Override
         public TreePath visitNewClass(NewClassTree node, Void p) {
             return getCurrentPath();

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.hints/test/unit/src/org/netbeans/modules/java/hints/SuspiciousNamesCombinationTest.java
----------------------------------------------------------------------
diff --git a/java.hints/test/unit/src/org/netbeans/modules/java/hints/SuspiciousNamesCombinationTest.java b/java.hints/test/unit/src/org/netbeans/modules/java/hints/SuspiciousNamesCombinationTest.java
index 02dccfd..657bea0 100644
--- a/java.hints/test/unit/src/org/netbeans/modules/java/hints/SuspiciousNamesCombinationTest.java
+++ b/java.hints/test/unit/src/org/netbeans/modules/java/hints/SuspiciousNamesCombinationTest.java
@@ -20,7 +20,7 @@ package org.netbeans.modules.java.hints;
 
 import com.sun.source.tree.Tree;
 import com.sun.source.util.TreePath;
-import com.sun.source.util.TreePathScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreePathScanner;
 import java.beans.PropertyVetoException;
 import java.io.File;
 import java.io.IOException;
@@ -146,7 +146,7 @@ public class SuspiciousNamesCombinationTest extends NbTestCase {
         final SuspiciousNamesCombination snc = new SuspiciousNamesCombination();
         final List<ErrorDescription> errors = new ArrayList<ErrorDescription>();
         
-        class ScannerImpl extends TreePathScanner {
+        class ScannerImpl extends ErrorAwareTreePathScanner {
             @Override
             public Object scan(Tree tree, Object p) {
                 if (tree != null && snc.getTreeKinds().contains(tree.getKind())) {

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.hints/test/unit/src/org/netbeans/modules/java/hints/infrastructure/TreeRuleTestBase.java
----------------------------------------------------------------------
diff --git a/java.hints/test/unit/src/org/netbeans/modules/java/hints/infrastructure/TreeRuleTestBase.java b/java.hints/test/unit/src/org/netbeans/modules/java/hints/infrastructure/TreeRuleTestBase.java
index 04a3782..f50b987 100644
--- a/java.hints/test/unit/src/org/netbeans/modules/java/hints/infrastructure/TreeRuleTestBase.java
+++ b/java.hints/test/unit/src/org/netbeans/modules/java/hints/infrastructure/TreeRuleTestBase.java
@@ -45,7 +45,7 @@ import org.netbeans.junit.NbTestCase;
 import org.netbeans.junit.RandomlyFails;
 import org.netbeans.modules.java.hints.legacy.spi.RulesManager;
 import org.netbeans.modules.java.hints.legacy.spi.RulesManager.LegacyHintConfiguration;
-import org.netbeans.modules.java.source.TreeLoader;
+//import org.netbeans.modules.java.source.TreeLoader;
 import org.netbeans.spi.editor.hints.ErrorDescription;
 import org.netbeans.spi.editor.hints.Fix;
 import org.openide.LifecycleManager;
@@ -74,7 +74,8 @@ public abstract class TreeRuleTestBase extends NbTestCase {
     protected void setUp() throws Exception {
         super.setUp();
         SourceUtilsTestUtil.prepareTest(new String[] {"org/netbeans/modules/java/editor/resources/layer.xml"}, new Object[0]);
-        TreeLoader.DISABLE_CONFINEMENT_TEST = true;
+        //XXX:
+//        TreeLoader.DISABLE_CONFINEMENT_TEST = true;
     }
 
     private void prepareTest(String fileName, String code) throws Exception {

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.hints/test/unit/src/org/netbeans/modules/java/hints/introduce/RefFinderTest.java
----------------------------------------------------------------------
diff --git a/java.hints/test/unit/src/org/netbeans/modules/java/hints/introduce/RefFinderTest.java b/java.hints/test/unit/src/org/netbeans/modules/java/hints/introduce/RefFinderTest.java
index d1ff90e..b923bcf 100644
--- a/java.hints/test/unit/src/org/netbeans/modules/java/hints/introduce/RefFinderTest.java
+++ b/java.hints/test/unit/src/org/netbeans/modules/java/hints/introduce/RefFinderTest.java
@@ -24,7 +24,7 @@ import com.sun.source.tree.ReturnTree;
 import com.sun.source.tree.StatementTree;
 import com.sun.source.tree.Tree;
 import com.sun.source.util.TreePath;
-import com.sun.source.util.TreePathScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreePathScanner;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.j2semodule/nbproject/project.properties
----------------------------------------------------------------------
diff --git a/java.j2semodule/nbproject/project.properties b/java.j2semodule/nbproject/project.properties
index 4aa6121..be95b98 100644
--- a/java.j2semodule/nbproject/project.properties
+++ b/java.j2semodule/nbproject/project.properties
@@ -18,3 +18,4 @@
 javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 javadoc.arch=${basedir}/arch.xml
+requires.nb.javac=true

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.j2seprofiles/nbproject/project.properties
----------------------------------------------------------------------
diff --git a/java.j2seprofiles/nbproject/project.properties b/java.j2seprofiles/nbproject/project.properties
index ab06b41..7b21974 100644
--- a/java.j2seprofiles/nbproject/project.properties
+++ b/java.j2seprofiles/nbproject/project.properties
@@ -16,3 +16,5 @@
 # under the License.
 javac.source=1.7
 javac.compilerargs=-Xlint -Xlint:-serial
+cp.extra=${tools.jar}
+requires.nb.javac=true