Repository: incubator-netbeans
Updated Branches:
  refs/heads/jdk-javac 3761d7383 -> b09c3b05d


Fixing NBScope handling - it is no longer a subclass of JavacScope.

Project: http://git-wip-us.apache.org/repos/asf/incubator-netbeans/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-netbeans/commit/b09c3b05
Tree: http://git-wip-us.apache.org/repos/asf/incubator-netbeans/tree/b09c3b05
Diff: http://git-wip-us.apache.org/repos/asf/incubator-netbeans/diff/b09c3b05

Branch: refs/heads/jdk-javac
Commit: b09c3b05d213f09e5cc941cfc8c655a2bfe94d5e
Parents: 3761d73
Author: Jan Lahoda <[email protected]>
Authored: Tue Oct 10 21:42:00 2017 +0200
Committer: Jan Lahoda <[email protected]>
Committed: Tue Oct 10 21:42:00 2017 +0200

----------------------------------------------------------------------
 .../netbeans/api/java/source/TreeUtilities.java | 18 ++++++++++----
 .../api/java/source/TreeUtilitiesTest.java      | 25 ++++++++++++++++++++
 2 files changed, 38 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/b09c3b05/java.source.base/src/org/netbeans/api/java/source/TreeUtilities.java
----------------------------------------------------------------------
diff --git 
a/java.source.base/src/org/netbeans/api/java/source/TreeUtilities.java 
b/java.source.base/src/org/netbeans/api/java/source/TreeUtilities.java
index b35b14c..aac8cee 100644
--- a/java.source.base/src/org/netbeans/api/java/source/TreeUtilities.java
+++ b/java.source.base/src/org/netbeans/api/java/source/TreeUtilities.java
@@ -754,6 +754,14 @@ public final class TreeUtilities {
     public Scope toScopeWithDisabledAccessibilityChecks(Scope scope) {
         return new NBScope((JavacScope)scope);
     }
+
+    private static Env<AttrContext> getEnv(Scope scope) {
+        if (scope instanceof NBScope) {
+            scope = ((NBScope) scope).delegate;
+        }
+        
+        return ((JavacScope) scope).getEnv();
+    }
     
     /**Attribute the given tree in the given context.
      */
@@ -783,7 +791,7 @@ public final class TreeUtilities {
     }
     
     public TypeMirror reattributeTree(Tree tree, Scope scope) {
-        Env<AttrContext> env = ((JavacScope)scope).getEnv();
+        Env<AttrContext> env = getEnv(scope);
         copyInnerClassIndexes(env.tree, tree);
         if (scope instanceof NBScope && 
((NBScope)scope).areAccessibilityChecksDisabled()) {
             
NBResolve.instance(info.impl.getJavacTask().getContext()).disableAccessibilityChecks();
@@ -796,7 +804,7 @@ public final class TreeUtilities {
     }
     
     public Scope reattributeTreeTo(Tree tree, Scope scope, Tree to) {
-        Env<AttrContext> env = ((JavacScope)scope).getEnv();
+        Env<AttrContext> env = getEnv(scope);
         copyInnerClassIndexes(env.tree, tree);
         if (scope instanceof NBScope && 
((NBScope)scope).areAccessibilityChecksDisabled()) {
             
NBResolve.instance(info.impl.getJavacTask().getContext()).disableAccessibilityChecks();
@@ -826,7 +834,7 @@ public final class TreeUtilities {
 //        ArgumentAttr.LocalCacheContext cacheContext = 
argumentAttr.withLocalCacheContext();
         try {
             Attr attr = Attr.instance(jti.getContext());
-            Env<AttrContext> env = ((JavacScope) scope).getEnv();
+            Env<AttrContext> env = getEnv(scope);
             if (tree instanceof JCExpression)
                 return attr.attribExpr((JCTree) tree,env, Type.noType);
             return attr.attribStat((JCTree) tree,env);
@@ -856,7 +864,7 @@ public final class TreeUtilities {
 //        ArgumentAttr.LocalCacheContext cacheContext = 
argumentAttr.withLocalCacheContext();
         try {
             Attr attr = Attr.instance(jti.getContext());
-            Env<AttrContext> env = ((JavacScope) scope).getEnv();
+            Env<AttrContext> env = getEnv(scope);
             Env<AttrContext> result = tree instanceof JCExpression ?
                 attr.attribExprToTree((JCExpression) tree, env, (JCTree) to) :
                 attr.attribStatToTree((JCTree) tree, env, (JCTree) to);
@@ -907,7 +915,7 @@ public final class TreeUtilities {
     /**Checks whether the given scope is in "static" context.
      */
     public boolean isStaticContext(Scope scope) {
-        return NBResolve.isStatic(((JavacScope)scope).getEnv());
+        return NBResolve.isStatic(getEnv(scope));
     }
     
     /**Returns uncaught exceptions inside the given tree path.

http://git-wip-us.apache.org/repos/asf/incubator-netbeans/blob/b09c3b05/java.source.base/test/unit/src/org/netbeans/api/java/source/TreeUtilitiesTest.java
----------------------------------------------------------------------
diff --git 
a/java.source.base/test/unit/src/org/netbeans/api/java/source/TreeUtilitiesTest.java
 
b/java.source.base/test/unit/src/org/netbeans/api/java/source/TreeUtilitiesTest.java
index 144e672..9d159da 100644
--- 
a/java.source.base/test/unit/src/org/netbeans/api/java/source/TreeUtilitiesTest.java
+++ 
b/java.source.base/test/unit/src/org/netbeans/api/java/source/TreeUtilitiesTest.java
@@ -21,6 +21,7 @@ package org.netbeans.api.java.source;
 import com.sun.source.tree.AssignmentTree;
 import com.sun.source.tree.BlockTree;
 import com.sun.source.tree.ClassTree;
+import com.sun.source.tree.ExpressionTree;
 import com.sun.source.tree.MemberSelectTree;
 import com.sun.source.tree.MethodTree;
 import com.sun.source.tree.Scope;
@@ -31,6 +32,8 @@ import com.sun.source.util.SourcePositions;
 import com.sun.source.util.TreePath;
 import org.netbeans.api.java.source.support.ErrorAwareTreePathScanner;
 import java.io.File;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -41,6 +44,7 @@ import java.util.regex.Pattern;
 import javax.lang.model.type.TypeMirror;
 import org.netbeans.api.java.classpath.ClassPath;
 import org.netbeans.api.java.source.Comment.Style;
+import org.netbeans.api.java.source.JavaSource.Phase;
 import org.netbeans.junit.NbTestCase;
 import org.netbeans.spi.java.classpath.support.ClassPathSupport;
 import org.openide.filesystems.FileObject;
@@ -559,4 +563,25 @@ public class TreeUtilitiesTest extends NbTestCase {
             }
         }, true);
     }
+
+    public void testDisableAccessRightsCrash() throws Exception {
+        ClassPath boot = 
ClassPathSupport.createClassPath(SourceUtilsTestUtil.getBootClassPath().toArray(new
 URL[0]));
+        FileObject testFile = 
FileUtil.createData(FileUtil.createMemoryFileSystem().getRoot(), "Test.java");
+        try (Writer w = new OutputStreamWriter(testFile.getOutputStream())) {
+            w.append("public class Test {}");
+        }
+        JavaSource js = JavaSource.create(ClasspathInfo.create(boot, 
ClassPath.EMPTY, ClassPath.EMPTY), testFile);
+        js.runUserActionTask(new Task<CompilationController>() {
+            @Override
+            public void run(CompilationController parameter) throws Exception {
+                parameter.toPhase(Phase.RESOLVED);
+                TreePath clazzPath = new TreePath(new 
TreePath(parameter.getCompilationUnit()),
+                                                  
parameter.getCompilationUnit().getTypeDecls().get(0));
+                Scope scope = parameter.getTrees().getScope(clazzPath);
+                Scope disableScope = 
parameter.getTreeUtilities().toScopeWithDisabledAccessibilityChecks(scope);
+                ExpressionTree et = 
parameter.getTreeUtilities().parseExpression("1 + 1", new SourcePositions[1]);
+                parameter.getTreeUtilities().attributeTree(et, disableScope);
+            }
+        }, true);
+    }
 }

Reply via email to