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); + } }
