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/10 19:43:29 UTC
incubator-netbeans git commit: Fixing NBScope handling - it is no
longer a subclass of JavacScope.
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 <jl...@netbeans.org>
Authored: Tue Oct 10 21:42:00 2017 +0200
Committer: Jan Lahoda <jl...@netbeans.org>
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);
+ }
}