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:15 UTC

[03/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.source.nbjavac/test/unit/src/org/netbeans/modules/java/source/nbjavac/indexing/TreeLoaderTest.java
----------------------------------------------------------------------
diff --git a/java.source.nbjavac/test/unit/src/org/netbeans/modules/java/source/nbjavac/indexing/TreeLoaderTest.java b/java.source.nbjavac/test/unit/src/org/netbeans/modules/java/source/nbjavac/indexing/TreeLoaderTest.java
new file mode 100644
index 0000000..8c114e5
--- /dev/null
+++ b/java.source.nbjavac/test/unit/src/org/netbeans/modules/java/source/nbjavac/indexing/TreeLoaderTest.java
@@ -0,0 +1,94 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.netbeans.modules.java.source.nbjavac.indexing;
+
+import java.io.File;
+import java.io.IOException;
+import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.element.TypeElement;
+import org.netbeans.api.java.source.CompilationController;
+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.Task;
+import org.netbeans.api.java.source.TestUtilities;
+import org.netbeans.junit.NbTestCase;
+import org.openide.filesystems.FileObject;
+import org.openide.filesystems.FileUtil;
+
+/**
+ *
+ * @author lahvac
+ */
+public class TreeLoaderTest extends NbTestCase {
+
+    public TreeLoaderTest(String name) {
+        super(name);
+    }
+
+    @Override
+    protected void setUp() throws Exception {
+        clearWorkDir();
+        SourceUtilsTestUtil.prepareTest(new String[0], new Object[0]);
+    }
+
+    public void test171340() throws Exception {
+        prepareTest();
+
+        FileObject src1 = FileUtil.createData(sourceRoot, "test/Test1.java");
+        FileObject src2 = FileUtil.createData(sourceRoot, "test/Test2.java");
+
+        TestUtilities.copyStringToFile(src1,
+                "package test;\n" +
+                "public class Test1 {}");
+        TestUtilities.copyStringToFile(src2,
+                "package test;\n" +
+                "public class Test2 {" +
+                "    public void test() {}" +
+                "}");
+        SourceUtilsTestUtil.compileRecursively(sourceRoot);
+        JavaSource javaSource = JavaSource.forFileObject(src1);
+        javaSource.runUserActionTask(new Task<CompilationController>() {
+            public void run(CompilationController controller) throws IOException {
+                controller.toPhase(Phase.RESOLVED);
+                TypeElement typeElement = controller.getElements().getTypeElement("test.Test2");
+                assertNotNull(typeElement);
+                ExecutableElement method = (ExecutableElement) typeElement.getEnclosedElements().get(1);
+                assertNotNull(controller.getTrees().getPath(method));
+            }
+        }, true);
+    }
+
+    private FileObject sourceRoot;
+
+    private void prepareTest() throws Exception {
+        File work = getWorkDir();
+        FileObject workFO = FileUtil.toFileObject(work);
+
+        assertNotNull(workFO);
+
+        sourceRoot = workFO.createFolder("src");
+        FileObject buildRoot  = workFO.createFolder("build");
+        FileObject cache = workFO.createFolder("cache");
+
+        SourceUtilsTestUtil.prepareTest(sourceRoot, buildRoot, cache);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.source.queriesimpl/src/org/netbeans/modules/java/source/queriesimpl/JavaOperationsImpl.java
----------------------------------------------------------------------
diff --git a/java.source.queriesimpl/src/org/netbeans/modules/java/source/queriesimpl/JavaOperationsImpl.java b/java.source.queriesimpl/src/org/netbeans/modules/java/source/queriesimpl/JavaOperationsImpl.java
index cd93972..272da11 100644
--- a/java.source.queriesimpl/src/org/netbeans/modules/java/source/queriesimpl/JavaOperationsImpl.java
+++ b/java.source.queriesimpl/src/org/netbeans/modules/java/source/queriesimpl/JavaOperationsImpl.java
@@ -20,7 +20,7 @@ package org.netbeans.modules.java.source.queriesimpl;
 
 import com.sun.source.tree.*;
 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;
@@ -340,7 +340,7 @@ class JavaOperationsImpl<T> implements ModelOperations {
                 oldVarTree.getInitializer());
         wcopy.rewrite(oldVarTree, newVarTree);
         final VariableElement fieldF = field;
-        final TreePathScanner<Void,Void> scanner = new TreePathScanner<Void, Void>(){
+        final ErrorAwareTreePathScanner<Void,Void> scanner = new ErrorAwareTreePathScanner<Void, Void>(){
             @Override
             public Void visitIdentifier(IdentifierTree node, Void p) {
                 super.visitIdentifier(node, p);
@@ -397,7 +397,7 @@ class JavaOperationsImpl<T> implements ModelOperations {
         final Trees trees = wcopy.getTrees();
         final GeneratorUtilities utils = GeneratorUtilities.get(wcopy);
         final List<Tree> toImport = new ArrayList<Tree>();
-        final TreePathScanner<Void,Void> scanner = new TreePathScanner<Void, Void>(){
+        final ErrorAwareTreePathScanner<Void,Void> scanner = new ErrorAwareTreePathScanner<Void, Void>(){
             @Override
             public Void scan(Tree node, Void p) {
                 final int start = (int) trees.getSourcePositions().getStartPosition(cu, node);
@@ -518,7 +518,7 @@ nextM:  for (ExecutableElement me : ElementFilter.methodsIn(te.getEnclosedElemen
             throw new QueryException(ioe);
         }
         final Trees trees = control.getTrees();
-        final TreePathScanner<TreePath,Void> visitor = new TreePathScanner<TreePath, Void>() {
+        final ErrorAwareTreePathScanner<TreePath,Void> visitor = new ErrorAwareTreePathScanner<TreePath, Void>() {
             @Override
             public TreePath visitClass(ClassTree node, Void p) {
                 final Element el = trees.getElement(getCurrentPath());

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.source/src/org/netbeans/api/java/source/UiUtils.java
----------------------------------------------------------------------
diff --git a/java.source/src/org/netbeans/api/java/source/UiUtils.java b/java.source/src/org/netbeans/api/java/source/UiUtils.java
index 3f8db8d..7751f10 100644
--- a/java.source/src/org/netbeans/api/java/source/UiUtils.java
+++ b/java.source/src/org/netbeans/api/java/source/UiUtils.java
@@ -24,7 +24,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 com.sun.tools.javac.util.Context;
 import java.io.IOException;
 import java.util.Collection;
@@ -435,7 +435,7 @@ public final class  UiUtils {
     
     // Private innerclasses ----------------------------------------------------
     
-    private static class FindDeclarationVisitor extends TreePathScanner<Void, Void> {
+    private static class FindDeclarationVisitor extends ErrorAwareTreePathScanner<Void, Void> {
         
         private Element element;
         private Tree declTree;

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.source/src/org/netbeans/modules/java/JavaNode.java
----------------------------------------------------------------------
diff --git a/java.source/src/org/netbeans/modules/java/JavaNode.java b/java.source/src/org/netbeans/modules/java/JavaNode.java
index 34a991a..dbd170c 100644
--- a/java.source/src/org/netbeans/modules/java/JavaNode.java
+++ b/java.source/src/org/netbeans/modules/java/JavaNode.java
@@ -21,7 +21,7 @@ package org.netbeans.modules.java;
 
 import com.sun.source.tree.ClassTree;
 import com.sun.source.tree.CompilationUnitTree;
-import com.sun.source.util.TreeScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreeScanner;
 import java.awt.Image;
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
@@ -475,7 +475,7 @@ public final class JavaNode extends DataNode implements ChangeListener {
                 return res[0];
             }
 
-            private static final class ClasssFinder extends TreeScanner<Collection<ClassTree>, Collection<ClassTree>> {
+            private static final class ClasssFinder extends ErrorAwareTreeScanner<Collection<ClassTree>, Collection<ClassTree>> {
 
                 @Override
                 public Collection<ClassTree> visitCompilationUnit(CompilationUnitTree node, Collection<ClassTree> p) {

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.source/src/org/netbeans/modules/java/classfile/CodeGenerator.java
----------------------------------------------------------------------
diff --git a/java.source/src/org/netbeans/modules/java/classfile/CodeGenerator.java b/java.source/src/org/netbeans/modules/java/classfile/CodeGenerator.java
index 6b1ecc1..d886f9a 100644
--- a/java.source/src/org/netbeans/modules/java/classfile/CodeGenerator.java
+++ b/java.source/src/org/netbeans/modules/java/classfile/CodeGenerator.java
@@ -45,6 +45,7 @@ import com.sun.tools.javap.CodeWriter;
 import com.sun.tools.javap.ConstantWriter;
 import com.sun.tools.javap.Context;
 import com.sun.tools.javap.Messages;
+
 import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.io.IOException;
@@ -67,6 +68,7 @@ import java.util.Map.Entry;
 import java.util.Set;
 import java.util.logging.Level;
 import java.util.logging.Logger;
+
 import javax.lang.model.element.AnnotationMirror;
 import javax.lang.model.element.AnnotationValue;
 import javax.lang.model.element.AnnotationValueVisitor;
@@ -85,6 +87,8 @@ import javax.lang.model.type.TypeMirror;
 import javax.lang.model.util.AbstractElementVisitor9;
 import javax.tools.JavaFileObject;
 import javax.tools.JavaFileObject.Kind;
+
+import com.sun.tools.classfile.ConstantPool.CPInfo;
 import org.netbeans.api.java.classpath.ClassPath;
 import org.netbeans.api.java.source.ClasspathInfo;
 import org.netbeans.api.java.source.ClasspathInfo.PathKind;
@@ -739,19 +743,7 @@ public class CodeGenerator {
         
         @Override
         public void writeInstr(Instruction instr) {
-            if (INSTRUCTION_WITH_REFERENCE.contains(instr.getOpcode())) {
-                print(String.format("%4d: %-13s ", instr.getPC(), instr.getMnemonic()));
-                int constantPoolEntry;
-                if (instr.getOpcode() == Opcode.LDC) {
-                    constantPoolEntry = instr.getUnsignedByte(1);
-                } else {
-                    constantPoolEntry = instr.getUnsignedShort(1);
-                }
-                print(constantWriter.stringValue(constantPoolEntry));
-                println();
-            } else {
-                super.writeInstr(instr);
-            }
+            super.writeInstr(instr);
         }
     }
     

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.source/src/org/netbeans/modules/java/source/parsing/SourceFileObject.java
----------------------------------------------------------------------
diff --git a/java.source/src/org/netbeans/modules/java/source/parsing/SourceFileObject.java b/java.source/src/org/netbeans/modules/java/source/parsing/SourceFileObject.java
index 7a4fab2..28cb84f 100644
--- a/java.source/src/org/netbeans/modules/java/source/parsing/SourceFileObject.java
+++ b/java.source/src/org/netbeans/modules/java/source/parsing/SourceFileObject.java
@@ -76,7 +76,7 @@ public class SourceFileObject extends AbstractSourceFileObject implements Docume
         @NullAllowed final JavaFileFilterImplementation filter,
         @NullAllowed final CharSequence content,
         final boolean renderNow) throws IOException {
-        super(handle, filter);
+        super(handle, filter, content != null);
         this.hasFilter = filter != null;
         if (content != null || renderNow) {
             update(content);

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.source/test/unit/src/org/netbeans/api/java/source/gen/LambdaTest.java
----------------------------------------------------------------------
diff --git a/java.source/test/unit/src/org/netbeans/api/java/source/gen/LambdaTest.java b/java.source/test/unit/src/org/netbeans/api/java/source/gen/LambdaTest.java
index d3b756a..47c3480 100644
--- a/java.source/test/unit/src/org/netbeans/api/java/source/gen/LambdaTest.java
+++ b/java.source/test/unit/src/org/netbeans/api/java/source/gen/LambdaTest.java
@@ -34,8 +34,8 @@ 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 com.sun.source.util.TreeScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreePathScanner;
+import org.netbeans.api.java.source.support.ErrorAwareTreeScanner;
 import java.io.File;
 import java.io.IOException;
 import java.util.Collections;
@@ -93,7 +93,7 @@ public class LambdaTest extends GeneratorTestMDRCompat {
                 workingCopy.toPhase(Phase.RESOLVED);
                 CompilationUnitTree cut = workingCopy.getCompilationUnit();
                 final TreeMaker make = workingCopy.getTreeMaker();
-                new TreeScanner<Void, Void>() {
+                new ErrorAwareTreeScanner<Void, Void>() {
                     @Override public Void visitLiteral(LiteralTree node, Void p) {
                         workingCopy.rewrite(node, make.MemberReference(ReferenceMode.INVOKE, make.Identifier("Test"), "taragui", Collections.<ExpressionTree>emptyList()));
                         return super.visitLiteral(node, p);
@@ -133,7 +133,7 @@ public class LambdaTest extends GeneratorTestMDRCompat {
                 workingCopy.toPhase(Phase.RESOLVED);
                 CompilationUnitTree cut = workingCopy.getCompilationUnit();
                 final TreeMaker make = workingCopy.getTreeMaker();
-                new TreeScanner<Void, Void>() {
+                new ErrorAwareTreeScanner<Void, Void>() {
                     @Override public Void visitVariable(VariableTree node, Void p) {
                         if (node.getName().contentEquals("e")) {
                             workingCopy.rewrite(node, make.setLabel(node, "f"));
@@ -174,7 +174,7 @@ public class LambdaTest extends GeneratorTestMDRCompat {
             public void run(final WorkingCopy workingCopy) throws IOException {
                 workingCopy.toPhase(Phase.RESOLVED);
                 final TreeMaker make = workingCopy.getTreeMaker();
-                new TreeScanner<Void, Void>() {
+                new ErrorAwareTreeScanner<Void, Void>() {
                     @Override public Void visitLambdaExpression(LambdaExpressionTree node, Void p) {
                         workingCopy.rewrite(node, make.addLambdaParameter(node, make.Variable(make.Modifiers(EnumSet.noneOf(Modifier.class)), "e", null, null)));
                         return super.visitLambdaExpression(node, p);
@@ -213,7 +213,7 @@ public class LambdaTest extends GeneratorTestMDRCompat {
             public void run(final WorkingCopy workingCopy) throws IOException {
                 workingCopy.toPhase(Phase.RESOLVED);
                 final TreeMaker make = workingCopy.getTreeMaker();
-                new TreeScanner<Void, Void>() {
+                new ErrorAwareTreeScanner<Void, Void>() {
                     @Override public Void visitLambdaExpression(LambdaExpressionTree node, Void p) {
                         workingCopy.rewrite(node, make.addLambdaParameter(node, make.Variable(make.Modifiers(EnumSet.noneOf(Modifier.class)), "f", null, null)));
                         return super.visitLambdaExpression(node, p);
@@ -252,7 +252,7 @@ public class LambdaTest extends GeneratorTestMDRCompat {
             public void run(final WorkingCopy workingCopy) throws IOException {
                 workingCopy.toPhase(Phase.RESOLVED);
                 final TreeMaker make = workingCopy.getTreeMaker();
-                new TreeScanner<Void, Void>() {
+                new ErrorAwareTreeScanner<Void, Void>() {
                     @Override public Void visitLambdaExpression(LambdaExpressionTree node, Void p) {
                         workingCopy.rewrite(node, make.addLambdaParameter(node, make.Variable(make.Modifiers(EnumSet.noneOf(Modifier.class)), "f", null, null)));
                         return super.visitLambdaExpression(node, p);
@@ -291,7 +291,7 @@ public class LambdaTest extends GeneratorTestMDRCompat {
             public void run(final WorkingCopy workingCopy) throws IOException {
                 workingCopy.toPhase(Phase.RESOLVED);
                 final TreeMaker make = workingCopy.getTreeMaker();
-                new TreeScanner<Void, Void>() {
+                new ErrorAwareTreeScanner<Void, Void>() {
                     @Override public Void visitLambdaExpression(LambdaExpressionTree node, Void p) {
                         workingCopy.rewrite(node, make.insertLambdaParameter(node, 0, make.Variable(make.Modifiers(EnumSet.noneOf(Modifier.class)), "f", null, null)));
                         return super.visitLambdaExpression(node, p);
@@ -330,7 +330,7 @@ public class LambdaTest extends GeneratorTestMDRCompat {
             public void run(final WorkingCopy workingCopy) throws IOException {
                 workingCopy.toPhase(Phase.RESOLVED);
                 final TreeMaker make = workingCopy.getTreeMaker();
-                new TreeScanner<Void, Void>() {
+                new ErrorAwareTreeScanner<Void, Void>() {
                     @Override public Void visitLambdaExpression(LambdaExpressionTree node, Void p) {
                         workingCopy.rewrite(node, make.removeLambdaParameter(node, 0));
                         return super.visitLambdaExpression(node, p);
@@ -369,7 +369,7 @@ public class LambdaTest extends GeneratorTestMDRCompat {
             public void run(final WorkingCopy workingCopy) throws IOException {
                 workingCopy.toPhase(Phase.RESOLVED);
                 final TreeMaker make = workingCopy.getTreeMaker();
-                new TreeScanner<Void, Void>() {
+                new ErrorAwareTreeScanner<Void, Void>() {
                     @Override public Void visitLambdaExpression(LambdaExpressionTree node, Void p) {
                         workingCopy.rewrite(node, make.removeLambdaParameter(node, 1));
                         return super.visitLambdaExpression(node, p);
@@ -408,7 +408,7 @@ public class LambdaTest extends GeneratorTestMDRCompat {
             public void run(final WorkingCopy workingCopy) throws IOException {
                 workingCopy.toPhase(Phase.RESOLVED);
                 final TreeMaker make = workingCopy.getTreeMaker();
-                new TreeScanner<Void, Void>() {
+                new ErrorAwareTreeScanner<Void, Void>() {
                     @Override public Void visitLambdaExpression(LambdaExpressionTree node, Void p) {
                         workingCopy.rewrite(node, make.removeLambdaParameter(node, 0));
                         return super.visitLambdaExpression(node, p);
@@ -447,7 +447,7 @@ public class LambdaTest extends GeneratorTestMDRCompat {
             public void run(final WorkingCopy workingCopy) throws IOException {
                 workingCopy.toPhase(Phase.RESOLVED);
                 final TreeMaker make = workingCopy.getTreeMaker();
-                new TreeScanner<Void, Void>() {
+                new ErrorAwareTreeScanner<Void, Void>() {
                     @Override public Void visitLambdaExpression(LambdaExpressionTree node, Void p) {
                         ReturnTree t = (ReturnTree) ((BlockTree) node.getBody()).getStatements().get(0);
                         workingCopy.rewrite(node, make.setLambdaBody(node, t.getExpression()));
@@ -489,7 +489,7 @@ public class LambdaTest extends GeneratorTestMDRCompat {
             public void run(final WorkingCopy workingCopy) throws IOException {
                 workingCopy.toPhase(Phase.RESOLVED);
                 final TreeMaker make = workingCopy.getTreeMaker();
-                new TreeScanner<Void, Void>() {
+                new ErrorAwareTreeScanner<Void, Void>() {
                     @Override public Void visitLambdaExpression(LambdaExpressionTree node, Void p) {
                         workingCopy.rewrite(node, make.setLambdaBody(node, make.Block(Collections.singletonList(make.Return((ExpressionTree) node.getBody())), false)));
                         return super.visitLambdaExpression(node, p);
@@ -532,7 +532,7 @@ public class LambdaTest extends GeneratorTestMDRCompat {
             public void run(final WorkingCopy workingCopy) throws IOException {
                 workingCopy.toPhase(Phase.RESOLVED);
                 final TreeMaker make = workingCopy.getTreeMaker();
-                new TreeScanner<Void, Void>() {
+                new ErrorAwareTreeScanner<Void, Void>() {
                     @Override public Void visitLambdaExpression(LambdaExpressionTree node, Void p) {
                         workingCopy.rewrite(node, make.setLambdaBody(node, make.Block(Collections.singletonList(make.Return((ExpressionTree) node.getBody())), false)));
                         return super.visitLambdaExpression(node, p);
@@ -571,7 +571,7 @@ public class LambdaTest extends GeneratorTestMDRCompat {
             public void run(final WorkingCopy workingCopy) throws IOException {
                 workingCopy.toPhase(Phase.RESOLVED);
                 final TreeMaker make = workingCopy.getTreeMaker();
-                new TreeScanner<Void, Void>() {
+                new ErrorAwareTreeScanner<Void, Void>() {
                     @Override public Void visitMemberReference(MemberReferenceTree node, Void p) {
                         workingCopy.rewrite(node, make.MemberReference(node.getMode(), make.Identifier("Test"), node.getName(), node.getTypeArguments()));
                         return super.visitMemberReference(node, p);
@@ -610,7 +610,7 @@ public class LambdaTest extends GeneratorTestMDRCompat {
             public void run(final WorkingCopy workingCopy) throws IOException {
                 workingCopy.toPhase(Phase.RESOLVED);
                 final TreeMaker make = workingCopy.getTreeMaker();
-                new TreeScanner<Void, Void>() {
+                new ErrorAwareTreeScanner<Void, Void>() {
                     @Override public Void visitMemberReference(MemberReferenceTree node, Void p) {
                         workingCopy.rewrite(node, make.setLabel(node, "taragui2"));
                         return super.visitMemberReference(node, p);
@@ -649,7 +649,7 @@ public class LambdaTest extends GeneratorTestMDRCompat {
             public void run(final WorkingCopy workingCopy) throws IOException {
                 workingCopy.toPhase(Phase.RESOLVED);
                 final TreeMaker make = workingCopy.getTreeMaker();
-                new TreeScanner<Void, Void>() {
+                new ErrorAwareTreeScanner<Void, Void>() {
                     @Override public Void visitMemberReference(MemberReferenceTree node, Void p) {
                         workingCopy.rewrite(node, make.MemberReference(node.getMode(), node.getQualifierExpression(), node.getName(), Collections.singletonList(make.Identifier("String"))));
                         return super.visitMemberReference(node, p);
@@ -688,7 +688,7 @@ public class LambdaTest extends GeneratorTestMDRCompat {
             public void run(final WorkingCopy workingCopy) throws IOException {
                 workingCopy.toPhase(Phase.RESOLVED);
                 final TreeMaker make = workingCopy.getTreeMaker();
-                new TreeScanner<Void, Void>() {
+                new ErrorAwareTreeScanner<Void, Void>() {
                     @Override public Void visitMemberReference(MemberReferenceTree node, Void p) {
                         workingCopy.rewrite(node, make.MemberReference(node.getMode(), node.getQualifierExpression(), node.getName(), null));
                         return super.visitMemberReference(node, p);
@@ -729,7 +729,7 @@ public class LambdaTest extends GeneratorTestMDRCompat {
             public void run(final WorkingCopy workingCopy) throws IOException {
                 workingCopy.toPhase(Phase.RESOLVED);
                 final TreeMaker make = workingCopy.getTreeMaker();
-                new TreeScanner<Void, Void>() {
+                new ErrorAwareTreeScanner<Void, Void>() {
                     @Override public Void visitLambdaExpression(LambdaExpressionTree node, Void p) {
                         for (VariableTree par : node.getParameters()) {
                             workingCopy.rewrite(par.getType(), make.Identifier("String"));
@@ -772,7 +772,7 @@ public class LambdaTest extends GeneratorTestMDRCompat {
             public void run(final WorkingCopy workingCopy) throws IOException {
                 workingCopy.toPhase(Phase.RESOLVED);
                 final TreeMaker make = workingCopy.getTreeMaker();
-                new TreeScanner<Void, Void>() {
+                new ErrorAwareTreeScanner<Void, Void>() {
                     @Override public Void visitLambdaExpression(LambdaExpressionTree node, Void p) {
                         for (VariableTree par : node.getParameters()) {
                             workingCopy.rewrite(par, make.Variable(par.getModifiers(), par.getName(), null, par.getInitializer()));
@@ -895,7 +895,7 @@ public class LambdaTest extends GeneratorTestMDRCompat {
             public void run(final WorkingCopy workingCopy) throws IOException {
                 workingCopy.toPhase(Phase.RESOLVED);
                 final TreeMaker make = workingCopy.getTreeMaker();
-                new TreeScanner<Void, Void>() {
+                new ErrorAwareTreeScanner<Void, Void>() {
                     @Override public Void visitLambdaExpression(LambdaExpressionTree node, Void p) {
                         VariableTree vt = node.getParameters().get(0);
                         workingCopy.rewrite(node, make.addLambdaParameter(node, make.Variable(vt.getModifiers(), "f", vt.getType(), vt.getInitializer())));
@@ -935,7 +935,7 @@ public class LambdaTest extends GeneratorTestMDRCompat {
             public void run(final WorkingCopy workingCopy) throws IOException {
                 workingCopy.toPhase(Phase.RESOLVED);
                 final TreeMaker make = workingCopy.getTreeMaker();
-                new TreeScanner<Void, Void>() {
+                new ErrorAwareTreeScanner<Void, Void>() {
                     @Override
                     public Void scan(Tree node, Void p) {
                         return super.scan(node, p);
@@ -986,7 +986,7 @@ public class LambdaTest extends GeneratorTestMDRCompat {
             public void run(final WorkingCopy workingCopy) throws IOException {
                 workingCopy.toPhase(Phase.RESOLVED);
                 final TreeMaker make = workingCopy.getTreeMaker();
-                new TreeScanner<Void, Void>() {
+                new ErrorAwareTreeScanner<Void, Void>() {
 
                     @Override
                     public Void scan(Tree node, Void p) {

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.sourceui/src/org/netbeans/api/java/source/ui/ElementOpen.java
----------------------------------------------------------------------
diff --git a/java.sourceui/src/org/netbeans/api/java/source/ui/ElementOpen.java b/java.sourceui/src/org/netbeans/api/java/source/ui/ElementOpen.java
index 425da5f..2850cb5 100644
--- a/java.sourceui/src/org/netbeans/api/java/source/ui/ElementOpen.java
+++ b/java.sourceui/src/org/netbeans/api/java/source/ui/ElementOpen.java
@@ -21,7 +21,7 @@ package org.netbeans.api.java.source.ui;
 import com.sun.source.tree.*;
 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.concurrent.atomic.AtomicBoolean;
 import java.util.logging.Level;
@@ -400,7 +400,7 @@ public final class ElementOpen {
     
     // Private innerclasses ----------------------------------------------------
     
-    private static class FindDeclarationVisitor extends TreePathScanner<Void, Void> {
+    private static class FindDeclarationVisitor extends ErrorAwareTreePathScanner<Void, Void> {
         
         private Element element;
         private Tree declTree;

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.sourceui/src/org/netbeans/modules/java/source/ui/AsyncJavaSymbolDescriptor.java
----------------------------------------------------------------------
diff --git a/java.sourceui/src/org/netbeans/modules/java/source/ui/AsyncJavaSymbolDescriptor.java b/java.sourceui/src/org/netbeans/modules/java/source/ui/AsyncJavaSymbolDescriptor.java
index 427a5a4..a7cfc0d 100644
--- a/java.sourceui/src/org/netbeans/modules/java/source/ui/AsyncJavaSymbolDescriptor.java
+++ b/java.sourceui/src/org/netbeans/modules/java/source/ui/AsyncJavaSymbolDescriptor.java
@@ -25,6 +25,7 @@ import com.sun.tools.javac.api.JavacTool;
 import com.sun.tools.javac.code.Symtab;
 import com.sun.tools.javac.jvm.ClassReader;
 import com.sun.tools.javac.model.JavacElements;
+
 import java.io.File;
 import java.io.IOException;
 import java.lang.ref.Reference;
@@ -42,6 +43,7 @@ import java.util.Set;
 import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.logging.Logger;
+
 import javax.lang.model.element.Element;
 import javax.lang.model.element.ElementKind;
 import javax.lang.model.element.Modifier;
@@ -58,6 +60,7 @@ import org.netbeans.api.java.queries.SourceLevelQuery;
 import org.netbeans.api.java.source.ElementHandle;
 import org.netbeans.api.project.ProjectInformation;
 import org.netbeans.modules.java.source.ElementHandleAccessor;
+import org.netbeans.modules.java.source.ElementUtils;
 import org.netbeans.modules.java.source.indexing.JavaIndex;
 import org.netbeans.modules.java.source.parsing.CachingArchiveProvider;
 import org.netbeans.modules.java.source.parsing.CachingFileManager;
@@ -211,8 +214,7 @@ final class AsyncJavaSymbolDescriptor extends JavaSymbolDescriptorBase implement
             final Symtab syms = Symtab.instance(jt.getContext());
             final Set<?> pkgs = new HashSet<>(getPackages(syms).keySet());
             final Set<?> clzs = new HashSet<>(getClasses(syms).keySet());
-            final JavacElements elements = (JavacElements)jt.getElements();
-            final TypeElement te = (TypeElement) elements.getTypeElementByBinaryName(
+            final TypeElement te = (TypeElement) ElementUtils.getTypeElementByBinaryName(jt,
                     ElementHandleAccessor.getInstance().getJVMSignature(getOwner())[0]);
             if (te != null) {
                 if (ident.equals(getSimpleName(te, null, caseSensitive))) {

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.sourceui/test/unit/src/org/netbeans/api/java/source/ui/ElementHeadersTest.java
----------------------------------------------------------------------
diff --git a/java.sourceui/test/unit/src/org/netbeans/api/java/source/ui/ElementHeadersTest.java b/java.sourceui/test/unit/src/org/netbeans/api/java/source/ui/ElementHeadersTest.java
index 0392a98..ac5c08c 100644
--- a/java.sourceui/test/unit/src/org/netbeans/api/java/source/ui/ElementHeadersTest.java
+++ b/java.sourceui/test/unit/src/org/netbeans/api/java/source/ui/ElementHeadersTest.java
@@ -33,7 +33,7 @@ import org.netbeans.api.java.source.TestUtilities;
 import org.netbeans.api.lexer.Language;
 import org.netbeans.junit.NbTestCase;
 import org.netbeans.modules.java.JavaDataLoader;
-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;
@@ -121,7 +121,7 @@ public class ElementHeadersTest extends NbTestCase {
     }
     
     public void test134664() throws Exception {
-        TreeLoader.DISABLE_CONFINEMENT_TEST = true;
+//        TreeLoader.DISABLE_CONFINEMENT_TEST = true;
         performTest("test/Test.java", "package test; public class Test { public Tfst {} }", 43, ElementHeaders.NAME, "Tfst");
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.testrunner.ui/nbproject/project.properties
----------------------------------------------------------------------
diff --git a/java.testrunner.ui/nbproject/project.properties b/java.testrunner.ui/nbproject/project.properties
index 7f641b7..5fdc82a 100644
--- a/java.testrunner.ui/nbproject/project.properties
+++ b/java.testrunner.ui/nbproject/project.properties
@@ -17,3 +17,5 @@
 is.eager=true
 javac.source=1.6
 javac.compilerargs=-Xlint -Xlint:-serial
+cp.extra=${tools.jar}
+requires.nb.javac=true

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/java.testrunner/nbproject/project.properties
----------------------------------------------------------------------
diff --git a/java.testrunner/nbproject/project.properties b/java.testrunner/nbproject/project.properties
index 7f641b7..375b088 100644
--- a/java.testrunner/nbproject/project.properties
+++ b/java.testrunner/nbproject/project.properties
@@ -17,3 +17,4 @@
 is.eager=true
 javac.source=1.6
 javac.compilerargs=-Xlint -Xlint:-serial
+requires.nb.javac=true

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/javaee.injection/nbproject/project.properties
----------------------------------------------------------------------
diff --git a/javaee.injection/nbproject/project.properties b/javaee.injection/nbproject/project.properties
index ab06b41..bd782ba 100644
--- a/javaee.injection/nbproject/project.properties
+++ b/javaee.injection/nbproject/project.properties
@@ -16,3 +16,4 @@
 # under the License.
 javac.source=1.7
 javac.compilerargs=-Xlint -Xlint:-serial
+requires.nb.javac=true

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/javafx2.editor/test/unit/src/org/netbeans/modules/javafx2/editor/FXMLCompletionTestBase.java
----------------------------------------------------------------------
diff --git a/javafx2.editor/test/unit/src/org/netbeans/modules/javafx2/editor/FXMLCompletionTestBase.java b/javafx2.editor/test/unit/src/org/netbeans/modules/javafx2/editor/FXMLCompletionTestBase.java
index a72bcca..7ca3fc9 100644
--- a/javafx2.editor/test/unit/src/org/netbeans/modules/javafx2/editor/FXMLCompletionTestBase.java
+++ b/javafx2.editor/test/unit/src/org/netbeans/modules/javafx2/editor/FXMLCompletionTestBase.java
@@ -35,6 +35,7 @@ import org.netbeans.api.java.classpath.ClassPath;
 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;
@@ -45,7 +46,7 @@ import org.netbeans.junit.NbTestCase;
 import org.netbeans.modules.editor.completion.CompletionItemComparator;
 import org.netbeans.modules.editor.java.Utilities;
 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;
@@ -85,7 +86,7 @@ public class FXMLCompletionTestBase 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/javafx2.project/nbproject/project.properties
----------------------------------------------------------------------
diff --git a/javafx2.project/nbproject/project.properties b/javafx2.project/nbproject/project.properties
index 4b04a20..b6bb147 100644
--- a/javafx2.project/nbproject/project.properties
+++ b/javafx2.project/nbproject/project.properties
@@ -18,3 +18,4 @@ javac.source=1.8
 javac.compilerargs=-Xlint -Xlint:-serial
 
 test.config.stable.includes=**/NewJavaFX2ProjectTest.class
+requires.nb.javac=true

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/javawebstart/nbproject/project.properties
----------------------------------------------------------------------
diff --git a/javawebstart/nbproject/project.properties b/javawebstart/nbproject/project.properties
index 24b5a55..5c67e0d 100644
--- a/javawebstart/nbproject/project.properties
+++ b/javawebstart/nbproject/project.properties
@@ -19,3 +19,4 @@ javac.compilerargs=-Xlint:unchecked
 javac.source=1.7
 extra.module.files=ant/extra/org-netbeans-modules-javawebstart-anttasks.jar
 jnlp.indirect.jars=ant/extra/org-netbeans-modules-javawebstart-anttasks.jar
+requires.nb.javac=true

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/jshell.support/nbproject/project.properties
----------------------------------------------------------------------
diff --git a/jshell.support/nbproject/project.properties b/jshell.support/nbproject/project.properties
index 952f643..89fa9ac 100644
--- a/jshell.support/nbproject/project.properties
+++ b/jshell.support/nbproject/project.properties
@@ -21,3 +21,4 @@ spec.version.base=1.0
 cp.extra=${tools.jar}
 bootclasspath.prepend=${nb_all}/libs.javacapi/external/nb-javac-api.jar${path.separator}${nb_all}/libs.javacimpl/external/nb-javac-impl.jar
 is.eager=true
+requires.nb.javac=true

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/jshell.support/nbproject/project.xml
----------------------------------------------------------------------
diff --git a/jshell.support/nbproject/project.xml b/jshell.support/nbproject/project.xml
index e87a5b8..313c930 100644
--- a/jshell.support/nbproject/project.xml
+++ b/jshell.support/nbproject/project.xml
@@ -120,7 +120,7 @@
                         <specification-version>8.19</specification-version>
                     </run-dependency>
                 </dependency>
-                <dependency>
+<!--                <dependency>
                     <code-name-base>org.netbeans.libs.javacimpl</code-name-base>
                     <build-prerequisite/>
                     <compile-dependency/>
@@ -128,7 +128,7 @@
                         <release-version>1</release-version>
                         <specification-version>0.47</specification-version>
                     </run-dependency>
-                </dependency>
+                </dependency>-->
                 <dependency>
                     <code-name-base>org.netbeans.libs.jshell.compile</code-name-base>
                     <build-prerequisite/>

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/junit.ant.ui/nbproject/project.properties
----------------------------------------------------------------------
diff --git a/junit.ant.ui/nbproject/project.properties b/junit.ant.ui/nbproject/project.properties
index 7f641b7..5d0fa29 100644
--- a/junit.ant.ui/nbproject/project.properties
+++ b/junit.ant.ui/nbproject/project.properties
@@ -17,3 +17,4 @@
 is.eager=true
 javac.source=1.6
 javac.compilerargs=-Xlint -Xlint:-serial
+requires.nb.javac=true
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/junit.ui/nbproject/project.properties
----------------------------------------------------------------------
diff --git a/junit.ui/nbproject/project.properties b/junit.ui/nbproject/project.properties
index 7f641b7..5fdc82a 100644
--- a/junit.ui/nbproject/project.properties
+++ b/junit.ui/nbproject/project.properties
@@ -17,3 +17,5 @@
 is.eager=true
 javac.source=1.6
 javac.compilerargs=-Xlint -Xlint:-serial
+cp.extra=${tools.jar}
+requires.nb.javac=true

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/junit.ui/src/org/netbeans/modules/junit/ui/OpenTestAction.java
----------------------------------------------------------------------
diff --git a/junit.ui/src/org/netbeans/modules/junit/ui/OpenTestAction.java b/junit.ui/src/org/netbeans/modules/junit/ui/OpenTestAction.java
index 542cd4b..69e49ee 100644
--- a/junit.ui/src/org/netbeans/modules/junit/ui/OpenTestAction.java
+++ b/junit.ui/src/org/netbeans/modules/junit/ui/OpenTestAction.java
@@ -24,7 +24,7 @@ import com.sun.source.tree.CompilationUnitTree;
 import com.sun.source.tree.MethodTree;
 import com.sun.source.tree.Tree;
 import com.sun.source.util.SourcePositions;
-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.net.URL;
@@ -354,7 +354,7 @@ public class OpenTestAction extends TestAction {
     /**
      *
      */
-    private static class DeclarationTreeFinder extends TreePathScanner<Void, Void> {
+    private static class DeclarationTreeFinder extends ErrorAwareTreePathScanner<Void, Void> {
 
         private final Element element;
         private final Trees trees;

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/NBClassReader.java
----------------------------------------------------------------------
diff --git a/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/NBClassReader.java b/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/NBClassReader.java
index 35b23ec..d139a5e 100644
--- a/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/NBClassReader.java
+++ b/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/NBClassReader.java
@@ -60,46 +60,6 @@ public class NBClassReader extends ClassReader {
                     bp = newbp;
                 }
             },
-            new NBAttributeReader(nbNames._org_netbeans_TypeSignature, Version.V49, CLASS_OR_MEMBER_ATTRIBUTE) {
-                protected void read(Symbol sym, int attrLen) {
-                    sym.type = readType(nextChar());
-                }
-            },
-            new NBAttributeReader(nbNames._org_netbeans_ParameterNames, Version.V49, CLASS_OR_MEMBER_ATTRIBUTE) {
-                protected void read(Symbol sym, int attrLen) {
-                    int newbp = bp + attrLen;
-                    List<Name> parameterNames = List.nil();
-                    int numParams = 0;
-                    if (sym.type != null) {
-                        List<Type> parameterTypes = sym.type.getParameterTypes();
-                        if (parameterTypes != null)
-                            numParams = parameterTypes.length();
-                    }
-                    for (int i = 0; i < numParams; i++) {
-                        if (bp < newbp - 1)
-                            parameterNames = parameterNames.prepend(readName(nextChar()));
-                    }
-                    parameterNames = parameterNames.reverse();
-                    while(parameterNames.length() < numParams)
-                        parameterNames = parameterNames.prepend(names.empty);
-                    ((MethodSymbol)sym).savedParameterNames = parameterNames;
-                }
-            },
-            new NBAttributeReader(nbNames._org_netbeans_SourceLevelAnnotations, Version.V49, CLASS_OR_MEMBER_ATTRIBUTE) {
-                protected void read(Symbol sym, int attrLen) {
-                    attachAnnotations(sym);
-                }
-            },
-            new NBAttributeReader(nbNames._org_netbeans_SourceLevelParameterAnnotations, Version.V49, CLASS_OR_MEMBER_ATTRIBUTE) {
-                protected void read(Symbol sym, int attrLen) {
-                    attachParameterAnnotations(sym);
-                }
-            },
-            new NBAttributeReader(nbNames._org_netbeans_SourceLevelTypeAnnotations, Version.V52, CLASS_OR_MEMBER_ATTRIBUTE) {
-                protected void read(Symbol sym, int attrLen) {
-                    attachTypeAnnotations(sym);
-                }
-            },
         };
 
         for (NBAttributeReader r: readers)

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/NBClassWriter.java
----------------------------------------------------------------------
diff --git a/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/NBClassWriter.java b/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/NBClassWriter.java
index 76c5593..22cb6ee 100644
--- a/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/NBClassWriter.java
+++ b/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/NBClassWriter.java
@@ -58,128 +58,4 @@ public class NBClassWriter extends ClassWriter {
         types = Types.instance(context);
     }
     
-    @Override
-    protected int writeExtraClassAttributes(ClassSymbol c) {
-        if (c.sourcefile != null) {
-            final Collection<? extends ClassSymbol> nip = nbMessager.removeNotInProfile(c.sourcefile.toUri());
-            if (nip != null) {
-                for (ClassSymbol s : nip) {
-                    pool.put(s.type);
-                }
-            }
-        }
-        return 0;
-    }
-
-    @Override
-    protected int writeExtraMemberAttributes(Symbol sym) {
-        int attrCount = 0;
-        if (sym.externalType(types).isErroneous()) {
-            int rsIdx = writeAttr(nbNames._org_netbeans_TypeSignature);
-            try {
-                preserveErrors = true;
-                databuf.appendChar(pool.put(typeSig(sym.type)));
-            } finally {
-                preserveErrors = false;
-            }
-            endAttr(rsIdx);
-            attrCount++;
-        }
-        return attrCount;
-    }
-
-    @Override
-    protected int writeExtraParameterAttributes(MethodSymbol m) {
-        boolean hasSourceLevel = false;
-        if (m.params != null) for (VarSymbol s : m.params) {
-            for (Attribute.Compound a : s.getRawAttributes()) {
-                if (types.getRetention(a) == RetentionPolicy.SOURCE) {
-                    hasSourceLevel = true;
-                    break;
-                }
-            }
-        }
-        int attrCount = 0;
-        if (hasSourceLevel) {
-            int attrIndex = writeAttr(nbNames._org_netbeans_SourceLevelParameterAnnotations);
-            databuf.appendByte(m.params.length());
-            for (VarSymbol s : m.params) {
-                ListBuffer<Attribute.Compound> buf = new ListBuffer<Attribute.Compound>();
-                for (Attribute.Compound a : s.getRawAttributes())
-                    if (types.getRetention(a) == RetentionPolicy.SOURCE)
-                        buf.append(a);
-                databuf.appendChar(buf.length());
-                for (Attribute.Compound a : buf)
-                    writeCompoundAttribute(a);
-            }
-            endAttr(attrIndex);
-            attrCount++;
-        }
-        if (m.code == null && m.params != null && m.params.nonEmpty()) {
-            int attrIndex = writeAttr(nbNames._org_netbeans_ParameterNames);
-            for (VarSymbol s : m.params)
-                databuf.appendChar(pool.put(s.name));
-            endAttr(attrIndex);
-            attrCount++;
-        }
-        return attrCount;
-    }
-
-    @Override
-    protected int writeExtraJavaAnnotations(List<Attribute.Compound> attrs) {
-        ListBuffer<Attribute.Compound> sourceLevel = new ListBuffer<Attribute.Compound>();
-        for (Attribute.Compound a : attrs) {
-            if (types.getRetention(a) == RetentionPolicy.SOURCE) {
-                sourceLevel.append(a);
-            }
-        }
-        int attrCount = 0;
-        if (sourceLevel.nonEmpty()) {
-            int attrIndex = writeAttr(nbNames._org_netbeans_SourceLevelAnnotations);
-            databuf.appendChar(sourceLevel.length());
-            for (Attribute.Compound a : sourceLevel)
-                writeCompoundAttribute(a);
-            endAttr(attrIndex);
-            attrCount++;
-        }
-        return attrCount;
-    }
-
-    @Override
-    protected int writeExtraTypeAnnotations(List<TypeCompound> attrs) {
-        ListBuffer<Attribute.TypeCompound> sourceLevel = new ListBuffer<Attribute.TypeCompound>();
-        for (Attribute.TypeCompound tc : attrs) {
-            if (tc.hasUnknownPosition()) {
-                boolean fixed = tc.tryFixPosition();
-
-                // Could we fix it?
-                if (!fixed) {
-                    // This happens for nested types like @A Outer. @B Inner.
-                    // For method parameters we get the annotation twice! Once with
-                    // a valid position, once unknown.
-                    // TODO: find a cleaner solution.
-                    continue;
-                }
-            }
-
-            if (tc.position.type.isLocal())
-                continue;
-            if (!tc.position.emitToClassfile()) {
-                continue;
-            }
-            if (types.getRetention(tc) == RetentionPolicy.SOURCE) {
-                sourceLevel.append(tc);
-            }
-        }
-        int attrCount = 0;
-        if (sourceLevel.nonEmpty()) {
-            int attrIndex = writeAttr(nbNames._org_netbeans_SourceLevelTypeAnnotations);
-            databuf.appendChar(sourceLevel.length());
-            for (Attribute.TypeCompound p : sourceLevel)
-                writeTypeAnnotation(p);
-            endAttr(attrIndex);
-            attrCount++;
-        }
-        return attrCount;
-    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/NBEnter.java
----------------------------------------------------------------------
diff --git a/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/NBEnter.java b/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/NBEnter.java
index 231cd91..06709d8 100644
--- a/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/NBEnter.java
+++ b/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/NBEnter.java
@@ -50,7 +50,7 @@ public class NBEnter extends Enter {
         super.visitClassDef(tree);
     }
 
-    @Override
+    //no @Override to ensure compatibility with ordinary javac:
     protected int getIndex(JCClassDecl clazz) {
         return clazz instanceof IndexedClassDecl ? ((IndexedClassDecl) clazz).index : -1;
     }

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/NBJavadocEnter.java
----------------------------------------------------------------------
diff --git a/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/NBJavadocEnter.java b/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/NBJavadocEnter.java
index d8e288a..7da8d65 100644
--- a/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/NBJavadocEnter.java
+++ b/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/NBJavadocEnter.java
@@ -72,7 +72,7 @@ public class NBJavadocEnter extends JavadocEnter {
         super.visitClassDef(tree);
     }
 
-    @Override
+    //no @Override to ensure compatibility with ordinary javac:
     protected int getIndex(JCClassDecl clazz) {
         return clazz instanceof IndexedClassDecl ? ((IndexedClassDecl) clazz).index : -1;
     }

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/NBJavadocMemberEnter.java
----------------------------------------------------------------------
diff --git a/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/NBJavadocMemberEnter.java b/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/NBJavadocMemberEnter.java
index 8f22759..462859c 100644
--- a/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/NBJavadocMemberEnter.java
+++ b/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/NBJavadocMemberEnter.java
@@ -21,7 +21,9 @@ package org.netbeans.lib.nbjavac.services;
 import com.sun.source.util.TreePath;
 import com.sun.tools.javac.api.JavacTrees;
 import com.sun.tools.javac.comp.MemberEnter;
+import com.sun.tools.javac.tree.JCTree.JCBlock;
 import com.sun.tools.javac.tree.JCTree.JCCompilationUnit;
+import com.sun.tools.javac.tree.JCTree.JCExpression;
 import com.sun.tools.javac.tree.JCTree.JCImport;
 import com.sun.tools.javac.tree.JCTree.JCMethodDecl;
 import com.sun.tools.javac.tree.JCTree.JCVariableDecl;
@@ -66,7 +68,13 @@ public class NBJavadocMemberEnter extends JavadocMemberEnter {
     @Override
     public void visitMethodDef(JCMethodDecl tree) {
         cancelService.abortIfCanceled();
-        super.visitMethodDef(tree);
+        JCBlock body = tree.body;
+        try {
+            super.visitMethodDef(tree);
+        } finally {
+            //reinstall body:
+            tree.body = body;
+        }
         if (trees instanceof NBJavacTrees && !env.enclClass.defs.contains(tree)) {
             ((NBJavacTrees)trees).addPathForElement(tree.sym, new TreePath(trees.getPath(env.toplevel, env.enclClass), tree));
         }
@@ -75,7 +83,13 @@ public class NBJavadocMemberEnter extends JavadocMemberEnter {
     @Override
     public void visitVarDef(JCVariableDecl tree) {
         cancelService.abortIfCanceled();
-        super.visitVarDef(tree);
+        JCExpression init = tree.init;
+        try {
+            super.visitVarDef(tree);
+        } finally {
+            //reinstall init:
+            tree.init = init;
+        }
     }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/NBParserFactory.java
----------------------------------------------------------------------
diff --git a/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/NBParserFactory.java b/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/NBParserFactory.java
index 0c14f42..ee294de 100644
--- a/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/NBParserFactory.java
+++ b/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/NBParserFactory.java
@@ -76,51 +76,6 @@ public class NBParserFactory extends ParserFactory {
         return new NBJavacParser(this, lexer, keepDocComments, keepLineMap, keepEndPos, parseModuleInfo, cancelService);
     }
 
-    public JavacParser newParser(CharSequence input, int startPos, final EndPosTable endPos) {
-        Scanner lexer = scannerFactory.newScanner(input, true);
-        lexer.seek(startPos);
-        ((NBJavacParser.EndPosTableImpl)endPos).resetErrorEndPos();
-        return new NBJavacParser(this, lexer, true, false, true, false, cancelService) {
-            @Override protected AbstractEndPosTable newEndPosTable(boolean keepEndPositions) {
-                return new AbstractEndPosTable(this) {
-
-                    @Override
-                    public void storeEnd(JCTree tree, int endpos) {
-                        ((EndPosTableImpl)endPos).storeEnd(tree, endpos);
-                    }
-
-                    @Override
-                    protected <T extends JCTree> T to(T t) {
-                        storeEnd(t, token.endPos);
-                        return t;
-                    }
-
-                    @Override
-                    protected <T extends JCTree> T toP(T t) {
-                        storeEnd(t, S.prevToken().endPos);
-                        return t;
-                    }
-
-                    @Override
-                    public int getEndPos(JCTree tree) {
-                        return endPos.getEndPos(tree);
-                    }
-
-                    @Override
-                    public int replaceTree(JCTree oldtree, JCTree newtree) {
-                        return endPos.replaceTree(oldtree, newtree);
-                    }
-
-                    @Override
-                    public void setErrorEndPos(int errPos) {
-                        super.setErrorEndPos(errPos);
-                        ((EndPosTableImpl)endPos).setErrorEndPos(errPos);
-                    }
-                };
-            }
-        };
-    }
-
     public static class NBJavacParser extends JavacParser {
 
         private final Names names;
@@ -134,7 +89,13 @@ public class NBParserFactory extends ParserFactory {
 
         @Override
         protected AbstractEndPosTable newEndPosTable(boolean keepEndPositions) {
-            return keepEndPositions ? new EndPosTableImpl(this) : super.newEndPosTable(keepEndPositions);
+            AbstractEndPosTable res = super.newEndPosTable(keepEndPositions);
+            
+            if (keepEndPositions) {
+                return new EndPosTableImpl(S, this, (SimpleEndPosTable) res);
+            }
+            
+            return res;
         }
 
         @Override
@@ -176,24 +137,53 @@ public class NBParserFactory extends ParserFactory {
             return toplevel;
         }
         
-        public final class EndPosTableImpl extends SimpleEndPosTable {
+        public final class EndPosTableImpl extends AbstractEndPosTable {
             
-            private EndPosTableImpl(JavacParser parser) {
+            private final Lexer lexer;
+            private final SimpleEndPosTable delegate;
+
+            private EndPosTableImpl(Lexer lexer, JavacParser parser, SimpleEndPosTable delegate) {
                 super(parser);
+                this.lexer = lexer;
+                this.delegate = delegate;
             }
             
-            private void resetErrorEndPos() {
-                errorEndPos = Position.NOPOS;
+            public void resetErrorEndPos() {
+                delegate.errorEndPos = Position.NOPOS;
+                errorEndPos = delegate.errorEndPos;
             }
             
             @Override public void storeEnd(JCTree tree, int endpos) {
                 if (endpos >= 0)
-                    super.storeEnd(tree, endpos);
+                    delegate.storeEnd(tree, endpos);
             }
 
             @Override
             public void setErrorEndPos(int errPos) {
-                super.setErrorEndPos(errPos);
+                delegate.setErrorEndPos(errPos);
+                errorEndPos = delegate.errorEndPos;
+            }
+
+            @Override
+            protected <T extends JCTree> T to(T t) {
+                storeEnd(t, parser.token().endPos);
+                return t;
+            }
+
+            @Override
+            protected <T extends JCTree> T toP(T t) {
+                storeEnd(t, lexer.prevToken().endPos);
+                return t;
+            }
+
+            @Override
+            public int getEndPos(JCTree jctree) {
+                return delegate.getEndPos(jctree);
+            }
+
+            @Override
+            public int replaceTree(JCTree jctree, JCTree jctree1) {
+                return delegate.replaceTree(jctree, jctree1);
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/NBResolve.java
----------------------------------------------------------------------
diff --git a/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/NBResolve.java b/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/NBResolve.java
index f8a0c68..e1cd8d9 100644
--- a/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/NBResolve.java
+++ b/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/NBResolve.java
@@ -71,5 +71,8 @@ public class NBResolve extends Resolve {
         if (accessibleOverride) return true;
         return super.isAccessible(env, c, checkInner);
     }
-    
+
+    public static boolean isStatic(Env<AttrContext> env) {
+        return Resolve.isStatic(env);
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/PartialReparser.java
----------------------------------------------------------------------
diff --git a/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/PartialReparser.java b/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/PartialReparser.java
deleted file mode 100644
index 5e171cb..0000000
--- a/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/PartialReparser.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.netbeans.lib.nbjavac.services;
-
-import com.sun.source.tree.BlockTree;
-import com.sun.source.tree.ClassTree;
-import com.sun.source.tree.CompilationUnitTree;
-import com.sun.source.tree.MethodTree;
-import com.sun.source.tree.Tree;
-import com.sun.tools.javac.code.Flags;
-import com.sun.tools.javac.code.Symbol.ClassSymbol;
-import com.sun.tools.javac.code.Symtab;
-import com.sun.tools.javac.code.Type;
-import com.sun.tools.javac.comp.Attr;
-import com.sun.tools.javac.comp.AttrContext;
-import com.sun.tools.javac.comp.Env;
-import com.sun.tools.javac.comp.Flow;
-import com.sun.tools.javac.comp.TypeEnter;
-import com.sun.tools.javac.parser.JavacParser;
-import com.sun.tools.javac.parser.LazyDocCommentTable;
-import com.sun.tools.javac.tree.JCTree;
-import com.sun.tools.javac.tree.JCTree.JCBlock;
-import com.sun.tools.javac.tree.JCTree.JCClassDecl;
-import com.sun.tools.javac.tree.JCTree.JCCompilationUnit;
-import com.sun.tools.javac.tree.JCTree.JCMethodDecl;
-import com.sun.tools.javac.tree.JCTree.JCStatement;
-import com.sun.tools.javac.tree.JCTree.JCVariableDecl;
-import com.sun.tools.javac.tree.TreeInfo;
-import com.sun.tools.javac.tree.TreeMaker;
-import com.sun.tools.javac.util.Context;
-import com.sun.tools.javac.util.List;
-import com.sun.tools.javac.util.Log;
-import com.sun.tools.javac.util.Names;
-import java.nio.CharBuffer;
-import java.util.Map;
-
-/**
- *
- * @author Tomas Zezula
- */
-public class PartialReparser {
-    
-    protected static final Context.Key<PartialReparser> partialReparserKey = new Context.Key<PartialReparser>();
-    
-    public static PartialReparser instance(Context ctx) {
-        PartialReparser res = ctx.get(partialReparserKey);
-        
-        if (res == null) {
-            ctx.put(partialReparserKey, res = new PartialReparser(ctx));
-        }
-        
-        return res;
-    }
-
-    private final Context context;
-
-    public PartialReparser(Context context) {
-        this.context = context;
-    }
-
-    public JCBlock reparseMethodBody(CompilationUnitTree topLevel, MethodTree methodToReparse, String newBodyText, int annonIndex,
-            final Map<? super JCTree,? super LazyDocCommentTable.Entry> docComments) {
-        NBParserFactory parserFactory = (NBParserFactory) NBParserFactory.instance(context);
-        CharBuffer buf = CharBuffer.wrap((newBodyText+"\u0000").toCharArray(), 0, newBodyText.length());
-        JavacParser parser = parserFactory.newParser(buf, ((JCBlock)methodToReparse.getBody()).pos, ((JCCompilationUnit)topLevel).endPositions);
-        final JCStatement statement = parser.parseStatement();
-        NBParserFactory.assignAnonymousClassIndices(Names.instance(context), statement, Names.instance(context).empty, annonIndex);
-        if (statement.getKind() == Tree.Kind.BLOCK) {
-            if (docComments != null) {
-                docComments.putAll(((LazyDocCommentTable) parser.getDocComments()).table);
-            }
-            return (JCBlock) statement;
-        }
-        return null;
-    }
-
-    public BlockTree reattrMethodBody(MethodTree methodToReparse, BlockTree block) {
-        Attr attr = Attr.instance(context);
-        assert ((JCMethodDecl)methodToReparse).localEnv != null;
-        JCMethodDecl tree = (JCMethodDecl) methodToReparse;
-        final Names names = Names.instance(context);
-        final Symtab syms = Symtab.instance(context);
-        final TypeEnter typeEnter = TypeEnter.instance(context);
-        final Log log = Log.instance(context);
-        final TreeMaker make = TreeMaker.instance(context);
-        final Env<AttrContext> env = attr.dupLocalEnv(((JCMethodDecl) methodToReparse).localEnv);
-        final ClassSymbol owner = env.enclClass.sym;
-        if (tree.name == names.init && !owner.type.isErroneous() && owner.type != syms.objectType) {
-            JCBlock body = tree.body;
-            if (body.stats.isEmpty() || !TreeInfo.isSelfCall(body.stats.head)) {
-                body.stats = body.stats.
-                prepend(typeEnter.SuperCall(make.at(body.pos),
-                    List.<Type>nil(),
-                    List.<JCVariableDecl>nil(),
-                    false));
-            } else if ((env.enclClass.sym.flags() & Flags.ENUM) != 0 &&
-                (tree.mods.flags & Flags.GENERATEDCONSTR) == 0 &&
-                TreeInfo.isSuperCall(body.stats.head)) {
-                // enum constructors are not allowed to call super
-                // directly, so make sure there aren't any super calls
-                // in enum constructors, except in the compiler
-                // generated one.
-                log.error(tree.body.stats.head.pos(),
-                          "call.to.super.not.allowed.in.enum.ctor",
-                          env.enclClass.sym);
-                    }
-                }
-        attr.attribStat((JCBlock)block, env);
-        return block;
-    }
-
-    public BlockTree reflowMethodBody(CompilationUnitTree topLevel, ClassTree ownerClass, MethodTree methodToReparse) {
-        Flow flow = Flow.instance(context);
-        TreeMaker make = TreeMaker.instance(context);
-        flow.reanalyzeMethod(make.forToplevel((JCCompilationUnit)topLevel),
-                (JCClassDecl)ownerClass);
-        return methodToReparse.getBody();
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/lib.nbjavac/test/unit/src/org/netbeans/lib/nbjavac/services/AnonymousNumberingTest.java
----------------------------------------------------------------------
diff --git a/lib.nbjavac/test/unit/src/org/netbeans/lib/nbjavac/services/AnonymousNumberingTest.java b/lib.nbjavac/test/unit/src/org/netbeans/lib/nbjavac/services/AnonymousNumberingTest.java
index 1866c5e..e0e11c0 100644
--- a/lib.nbjavac/test/unit/src/org/netbeans/lib/nbjavac/services/AnonymousNumberingTest.java
+++ b/lib.nbjavac/test/unit/src/org/netbeans/lib/nbjavac/services/AnonymousNumberingTest.java
@@ -19,11 +19,16 @@
 
 package org.netbeans.lib.nbjavac.services;
 
+import com.sun.source.tree.CompilationUnitTree;
 import com.sun.tools.javac.api.JavacTaskImpl;
+import com.sun.tools.javac.code.Symbol;
 import com.sun.tools.javac.code.Symtab;
 import com.sun.tools.javac.comp.Modules;
+import com.sun.tools.javac.tree.JCTree;
+import com.sun.tools.javac.util.List;
 import com.sun.tools.javac.util.Name;
 import java.io.IOException;
+import javax.lang.model.element.Element;
 import javax.lang.model.element.TypeElement;
 import javax.lang.model.type.DeclaredType;
 import junit.framework.TestCase;
@@ -38,7 +43,7 @@ public class AnonymousNumberingTest extends TestCase {
         super(name);
     }
 
-    public void testCorrectAnonymousIndicesForMethodInvocations() throws IOException {
+    public void testCorrectAnonymousIndicesForMethodInvocations() throws Exception {
         String code = "package test;\n" +
                       "public class Test {\n" +
                       "    public Test main(Object o) {\n" +
@@ -56,9 +61,17 @@ public class AnonymousNumberingTest extends TestCase {
 
         JavacTaskImpl ct = Utilities.createJavac(null, Utilities.fileObjectFor(code));
         
-        ct.analyze();
+        Iterable<? extends CompilationUnitTree> cuts = ct.parse();
+        Iterable<? extends Element> analyze = ct.analyze();
         
+        System.err.println("repair: " + Class.forName("com.sun.tools.javac.comp.Repair"));
         Symtab symTab = Symtab.instance(ct.getContext());
+        
+        for (Symbol.ClassSymbol cs : symTab.getAllClasses()) {
+            if (cs.flatname.toString().contains("test.Test")) {
+                System.err.println("XXX");
+            }
+        }
         Modules modules = Modules.instance(ct.getContext());
         TypeElement first = symTab.getClass(modules.getDefaultModule(), (Name)ct.getElements().getName("test.Test$1"));
         TypeElement second = symTab.getClass(modules.getDefaultModule(), (Name)ct.getElements().getName("test.Test$2"));

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/lib.nbjavac/test/unit/src/org/netbeans/lib/nbjavac/services/CouplingTest.java
----------------------------------------------------------------------
diff --git a/lib.nbjavac/test/unit/src/org/netbeans/lib/nbjavac/services/CouplingTest.java b/lib.nbjavac/test/unit/src/org/netbeans/lib/nbjavac/services/CouplingTest.java
deleted file mode 100644
index 5e76c3c..0000000
--- a/lib.nbjavac/test/unit/src/org/netbeans/lib/nbjavac/services/CouplingTest.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.netbeans.lib.nbjavac.services;
-
-import com.sun.source.tree.ClassTree;
-import com.sun.source.tree.CompilationUnitTree;
-import com.sun.source.util.TreePathScanner;
-import com.sun.source.util.Trees;
-import com.sun.tools.javac.api.JavacTaskImpl;
-import com.sun.tools.javac.code.Flags;
-import com.sun.tools.javac.code.Symbol.ClassSymbol;
-import com.sun.tools.javac.model.JavacElements;
-import java.io.File;
-import java.io.IOException;
-import java.net.URI;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import javax.lang.model.element.Element;
-import javax.lang.model.element.TypeElement;
-import javax.tools.JavaCompiler;
-import javax.tools.JavaFileObject;
-import javax.tools.SimpleJavaFileObject;
-import javax.tools.StandardJavaFileManager;
-import javax.tools.StandardLocation;
-import javax.tools.ToolProvider;
-import junit.framework.TestCase;
-
-/**
- *
- * @author lahvac
- */
-public class CouplingTest extends TestCase {
-
-    public void test200122() throws Exception {
-        String code = "package test; public class Test { void t() { new Runnable() { public void run() {} }; } }";
-        List<String> fqns = compile(code);
-
-        assertEquals(testCoupling(code, false, fqns), testCoupling(code, true, fqns));
-    }
-    
-    //<editor-fold defaultstate="collapsed" desc=" Test Infrastructure ">
-    private static class MyFileObject extends SimpleJavaFileObject {
-        private String text;
-
-        public MyFileObject(String text) {
-            super(URI.create("myfo:/Test.java"), JavaFileObject.Kind.SOURCE);
-            this.text = text;
-        }
-
-        @Override
-        public CharSequence getCharContent(boolean ignoreEncodingErrors) {
-            return text;
-        }
-    }
-
-    private File workingDir;
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-
-        workingDir = File.createTempFile("CouplingTest", "");
-
-        workingDir.delete();
-        workingDir.mkdirs();
-    }
-
-    @Override
-    protected void tearDown() throws Exception {
-        deleteRecursively(workingDir);
-        super.tearDown();
-    }
-
-    private List<String> compile(String code) throws Exception {
-        final String bootPath = System.getProperty("sun.boot.class.path"); //NOI18N
-        final String version = System.getProperty("java.vm.specification.version"); //NOI18N
-        final JavaCompiler tool = ToolProvider.getSystemJavaCompiler();
-        assert tool != null;
-
-        StandardJavaFileManager std = tool.getStandardFileManager(null, null, null);
-
-        std.setLocation(StandardLocation.CLASS_OUTPUT, Collections.singleton(workingDir));
-
-        final JavacTaskImpl ct = (JavacTaskImpl)tool.getTask(null, std, null, Arrays.asList("-bootclasspath",  bootPath, "-source", version, "-Xjcov", "-XDshouldStopPolicy=GENERATE"), null, Arrays.asList(new MyFileObject(code)));
-        Iterable<? extends CompilationUnitTree> cuts = ct.parse();
-
-        ct.analyze();
-
-        final List<String> result = new ArrayList<String>();
-
-        new TreePathScanner<Void, Void>() {
-            @Override public Void visitClass(ClassTree node, Void p) {
-                Element el = Trees.instance(ct).getElement(getCurrentPath());
-
-                if (el != null && (el.getKind().isClass() || el.getKind().isInterface())) {
-                    result.add(ct.getElements().getBinaryName((TypeElement) el).toString());
-                }
-
-                return super.visitClass(node, p);
-            }
-        }.scan(cuts, null);
-
-        ct.generate();
-
-        return result;
-    }
-
-    private Set<String> testCoupling(String code, boolean loadFromClasses, List<String> fqns) throws IOException {
-        final JavaCompiler tool = ToolProvider.getSystemJavaCompiler();
-        assert tool != null;
-
-        StandardJavaFileManager std = tool.getStandardFileManager(null, null, null);
-
-        if (loadFromClasses) {
-            std.setLocation(StandardLocation.CLASS_OUTPUT, Collections.singleton(workingDir));
-            std.setLocation(StandardLocation.CLASS_PATH, Collections.singleton(workingDir));
-        }
-
-        JavacTaskImpl ct = Utilities.createJavac(std);
-        ct.enter();
-        
-        if (loadFromClasses) {
-            for (String fqn : fqns) {
-                assertNotNull(fqn, ((JavacElements)ct.getElements()).getTypeElementByBinaryName(fqn));
-            }
-        }
-
-        ct.parse(Utilities.fileObjectFor(code));
-        ct.analyze();
-
-        Set<String> classInfo = new HashSet<String>();
-
-        for (String fqn : fqns) {
-            ClassSymbol clazz = ((JavacElements)ct.getElements()).getTypeElementByBinaryName(fqn);
-            StringBuilder info = new StringBuilder();
-
-            info.append(clazz.flatname.toString()).append(",");
-            info.append(Long.toHexString(clazz.flags() & ~(Flags.FROMCLASS | Flags.APT_CLEANED))).append(",");
-            info.append(clazz.hasOuterInstance());
-
-            classInfo.add(info.toString());
-        }
-
-        return classInfo;
-    }
-
-    private void deleteRecursively(File f) {
-        if (f.isDirectory()) {
-            for (File c : f.listFiles()) {
-                deleteRecursively(c);
-            }
-        }
-
-        f.delete();
-    }
-    //</editor-fold>
-}

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/lib.nbjavac/test/unit/src/org/netbeans/lib/nbjavac/services/NBClassWriterTest.java
----------------------------------------------------------------------
diff --git a/lib.nbjavac/test/unit/src/org/netbeans/lib/nbjavac/services/NBClassWriterTest.java b/lib.nbjavac/test/unit/src/org/netbeans/lib/nbjavac/services/NBClassWriterTest.java
index 51ea6f7..2620b79 100644
--- a/lib.nbjavac/test/unit/src/org/netbeans/lib/nbjavac/services/NBClassWriterTest.java
+++ b/lib.nbjavac/test/unit/src/org/netbeans/lib/nbjavac/services/NBClassWriterTest.java
@@ -94,7 +94,7 @@ public class NBClassWriterTest extends NbTestCase {
         final JavacTaskImpl ct = (JavacTaskImpl) ((JavacTool)tool).getTask(null, std, null, Arrays.asList("-bootclasspath",  bootPath, "-source", "1.6", "-target", "1.6"), null, Arrays.asList(new MyFileObject(code)), context);
 
         NBClassReader.preRegister(ct.getContext());
-        JavadocClassFinder.preRegister(ct.getContext(), false);
+//        JavadocClassFinder.preRegister(ct.getContext());
         NBClassWriter.preRegister(ct.getContext());
 
         ct.call();
@@ -112,10 +112,10 @@ public class NBClassWriterTest extends NbTestCase {
 
         Context context = new Context();
         NBMessager.preRegister(context, null, DEV_NULL, DEV_NULL, DEV_NULL);
-        JavacTaskImpl ct = (JavacTaskImpl)((JavacTool)tool).getTask(null, std, null, Arrays.asList("-bootclasspath",  bootPath), null, Arrays.<JavaFileObject>asList(), context);
+        JavacTaskImpl ct = (JavacTaskImpl)((JavacTool)tool).getTask(null, std, null, Arrays.asList("-bootclasspath",  bootPath, "-source", "1.8", "-target", "1.8"), null, Arrays.<JavaFileObject>asList(), context);
 
         NBClassReader.preRegister(ct.getContext());
-        JavadocClassFinder.preRegister(ct.getContext(), false);
+//        JavadocClassFinder.preRegister(ct.getContext());
         NBClassWriter.preRegister(ct.getContext());
         
         PackageElement pack = ct.getElements().getPackageElement(packageName);

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/lib.nbjavac/test/unit/src/org/netbeans/lib/nbjavac/services/Utilities.java
----------------------------------------------------------------------
diff --git a/lib.nbjavac/test/unit/src/org/netbeans/lib/nbjavac/services/Utilities.java b/lib.nbjavac/test/unit/src/org/netbeans/lib/nbjavac/services/Utilities.java
index c0e8a2a..ad8c203 100644
--- a/lib.nbjavac/test/unit/src/org/netbeans/lib/nbjavac/services/Utilities.java
+++ b/lib.nbjavac/test/unit/src/org/netbeans/lib/nbjavac/services/Utilities.java
@@ -29,6 +29,8 @@ import java.io.Writer;
 import java.net.URI;
 import java.util.Arrays;
 import java.util.Collections;
+import javax.tools.Diagnostic;
+import javax.tools.DiagnosticListener;
 import javax.tools.JavaCompiler;
 import javax.tools.JavaFileManager;
 import javax.tools.JavaFileObject;
@@ -50,14 +52,17 @@ public class Utilities {
         //need to preregister the Messages here, because the getTask below requires Log instance:
         Messager.preRegister(context, null, DEV_NULL, DEV_NULL, DEV_NULL);
         JavacTaskImpl task = (JavacTaskImpl)JavacTool.create().getTask(null, 
-                fm,
-                null, Arrays.asList("-bootclasspath",  bootPath, "-source", version, "-Xjcov", "-XDshouldStopPolicy=GENERATE"), null, Arrays.asList(sources),
+                fm, new DiagnosticListener<JavaFileObject>() {
+            @Override
+            public void report(Diagnostic<? extends JavaFileObject> diagnostic) {
+                System.err.println("diagnostic= " + diagnostic);
+            }
+                }
+                , Arrays.asList("-bootclasspath",  bootPath, "-source", version, "-target", version, "-Xjcov", "-XDshouldStopPolicy=GENERATE"), null, Arrays.asList(sources),
                 context);
         NBParserFactory.preRegister(context);
         NBTreeMaker.preRegister(context);
-        NBJavadocEnter.preRegister(context);
-        PrintWriter w = new PrintWriter(System.out);
-        JavadocClassFinder.preRegister(context, true);
+        NBEnter.preRegister(context);
         return task;
     }
     

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/lib.nbjshell/nbproject/project.properties
----------------------------------------------------------------------
diff --git a/lib.nbjshell/nbproject/project.properties b/lib.nbjshell/nbproject/project.properties
index 484c87b..d457ff7 100644
--- a/lib.nbjshell/nbproject/project.properties
+++ b/lib.nbjshell/nbproject/project.properties
@@ -21,3 +21,4 @@ cp.extra=${tools.jar}
 sigtest.skip.check=true
 sigtest.gen.fail.on.error=false
 is.autoload=true
+requires.nb.javac=true

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/libs.javacapi/build.xml
----------------------------------------------------------------------
diff --git a/libs.javacapi/build.xml b/libs.javacapi/build.xml
index fb52289..216907d 100644
--- a/libs.javacapi/build.xml
+++ b/libs.javacapi/build.xml
@@ -21,4 +21,17 @@
 -->
 <project name="libs.javacapi" default="netbeans" basedir=".">
     <import file="../nbbuild/templates/projectized.xml"/>
+    <target name="-check-nb-javac-exists">
+        <available property="nb-javac.exists" file="../nb-javac/make/netbeans/nb-javac/build.xml"/>
+    </target>
+    <target name="-release.files-build-javac" if="nb-javac.exists">
+        <ant dir="../nb-javac/make/netbeans/nb-javac" target="jar" inheritAll="false"/>
+        <copy file="../nb-javac/make/netbeans/nb-javac/dist/javac-api.jar" tofile="external/nb-javac-api.jar" overwrite="true"/>
+<!--        <property name="release.files.extra" value="modules/ext/nb-javac-api.jar"/>-->
+    </target>
+    <target name="-release.files-delegate" unless="nb-javac.exists">
+        <antcall target="projectized.-release.files" />
+<!--        <property name="release.files.extra" value="modules/ext/nb-javac-api.jar"/>-->
+    </target>
+    <target name="-release.files" depends="-check-nb-javac-exists,-release.files-build-javac,-release.files-delegate" />
 </project>

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/libs.javacapi/manifest.mf
----------------------------------------------------------------------
diff --git a/libs.javacapi/manifest.mf b/libs.javacapi/manifest.mf
index 1017f66..7a11322 100644
--- a/libs.javacapi/manifest.mf
+++ b/libs.javacapi/manifest.mf
@@ -4,4 +4,4 @@ OpenIDE-Module-Implementation-Version: 3
 OpenIDE-Module-Localizing-Bundle: org/netbeans/libs/javacapi/Bundle.properties
 OpenIDE-Module-Layer: org/netbeans/libs/javacapi/layer.xml
 OpenIDE-Module-Requires: org.openide.modules.ModuleFormat2
-OpenIDE-Module-Hide-Classpath-Packages: com.sun.javadoc.**, com.sun.source.**, javax.annotation.processing.**, javax.lang.model.**, javax.tools.**, com.sun.tools.javac.**
+XOpenIDE-Module-Hide-Classpath-Packages: com.sun.javadoc.**, com.sun.source.**, javax.annotation.processing.**, javax.lang.model.**, javax.tools.**, com.sun.tools.javac.** com.sun.tools.javac.**, com.sun.tools.javadoc.**, com.sun.tools.javap.**, com.sun.tools.classfile.**, com.sun.tools.doclint.**

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/libs.javacapi/nbproject/project.properties
----------------------------------------------------------------------
diff --git a/libs.javacapi/nbproject/project.properties b/libs.javacapi/nbproject/project.properties
index 66800e7..e9b9f60 100644
--- a/libs.javacapi/nbproject/project.properties
+++ b/libs.javacapi/nbproject/project.properties
@@ -22,6 +22,8 @@ javadoc.title=Javac API
 nbm.homepage=http://jackpot.netbeans.org/
 nbm.module.author=Petr Hrebejk
 spec.version.base=8.21.0
-release.external/nb-javac-api.jar=modules/ext/nb-javac-api.jar
+#release.external/nb-javac-api.jar=modules/ext/nb-javac-api.jar
 javadoc.arch=${basedir}/arch.xml
 module.javadoc.packages=com.sun.source.tree,com.sun.source.util
+requires.nb.javac=true
+requires.nb.javac=true

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/libs.javacapi/nbproject/project.xml
----------------------------------------------------------------------
diff --git a/libs.javacapi/nbproject/project.xml b/libs.javacapi/nbproject/project.xml
index 21efad0..e068833 100644
--- a/libs.javacapi/nbproject/project.xml
+++ b/libs.javacapi/nbproject/project.xml
@@ -26,6 +26,8 @@
             <code-name-base>org.netbeans.libs.javacapi</code-name-base>
             <module-dependencies/>
             <public-packages>
+                <!-- TODO: need to specify exports here, because fragments cannot add exports - should be fixed? -->
+                <package>org.netbeans.libs.javacapi</package>
                 <package>com.sun.javadoc</package>
                 <package>com.sun.source.doctree</package>
                 <package>com.sun.source.tree</package>
@@ -37,10 +39,10 @@
                 <package>javax.lang.model.util</package>
                 <package>javax.tools</package>
             </public-packages>
-            <class-path-extension>
+<!--            <class-path-extension>
                 <runtime-relative-path>ext/nb-javac-api.jar</runtime-relative-path>
                 <binary-origin>external/nb-javac-api.jar</binary-origin>
-            </class-path-extension>
+            </class-path-extension>-->
         </data>
     </configuration>
 </project>

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/libs.javacimpl/build.xml
----------------------------------------------------------------------
diff --git a/libs.javacimpl/build.xml b/libs.javacimpl/build.xml
index 30feadd..9cef228 100644
--- a/libs.javacimpl/build.xml
+++ b/libs.javacimpl/build.xml
@@ -27,11 +27,11 @@
     <target name="-release.files-build-javac" if="nb-javac.exists">
         <ant dir="../nb-javac/make/netbeans/nb-javac" target="jar" inheritAll="false"/>
         <copy file="../nb-javac/make/netbeans/nb-javac/dist/javac-impl.jar" tofile="external/nb-javac-impl.jar" overwrite="true"/>
-        <property name="release.files.extra" value="modules/ext/nb-javac-impl.jar"/>
+<!--        <property name="release.files.extra" value="modules/ext/nb-javac-impl.jar"/>-->
     </target>
     <target name="-release.files-delegate" unless="nb-javac.exists">
         <antcall target="projectized.-release.files" />
-        <property name="release.files.extra" value="modules/ext/nb-javac-impl.jar"/>
+<!--        <property name="release.files.extra" value="modules/ext/nb-javac-impl.jar"/>-->
     </target>
     <target name="-release.files" depends="-check-nb-javac-exists,-release.files-build-javac,-release.files-delegate" />
 </project>

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/ffc0de5a/libs.javacimpl/manifest.mf
----------------------------------------------------------------------
diff --git a/libs.javacimpl/manifest.mf b/libs.javacimpl/manifest.mf
index 276717c..e0ab3ac 100644
--- a/libs.javacimpl/manifest.mf
+++ b/libs.javacimpl/manifest.mf
@@ -3,5 +3,5 @@ OpenIDE-Module: org.netbeans.libs.javacimpl/1
 OpenIDE-Module-Implementation-Version: 25
 OpenIDE-Module-Localizing-Bundle: org/netbeans/libs/javacimpl/Bundle.properties
 OpenIDE-Module-Requires: org.openide.modules.ModuleFormat2
-OpenIDE-Module-Hide-Classpath-Packages: com.sun.tools.javac.**, com.sun.tools.javadoc.**, com.sun.tools.javap.**, com.sun.tools.classfile.**, com.sun.tools.doclint.**
-
+xOpenIDE-Module-Hide-Classpath-Packages: com.sun.tools.javac.**, com.sun.tools.javadoc.**, com.sun.tools.javap.**, com.sun.tools.classfile.**, com.sun.tools.doclint.**
+xOpenIDE-Module-Fragment-Host: org.netbeans.libs.javacapi