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 2018/11/27 21:42:34 UTC
[incubator-netbeans] branch master updated: Avoiding crash on
orphaned catch block, and ensuring its content is reasonably attributed.
This is an automated email from the ASF dual-hosted git repository.
jlahoda pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-netbeans.git
The following commit(s) were added to refs/heads/master by this push:
new 45d77b8 Avoiding crash on orphaned catch block, and ensuring its content is reasonably attributed.
45d77b8 is described below
commit 45d77b853ec6a487fe15f29daded836cda319cd5
Author: Jan Lahoda <jl...@netbeans.org>
AuthorDate: Fri Nov 2 07:34:57 2018 +0100
Avoiding crash on orphaned catch block, and ensuring its content is reasonably attributed.
---
.../org/netbeans/lib/nbjavac/services/NBAttr.java | 10 ++++++
.../netbeans/lib/nbjavac/services/NBAttrTest.java | 37 +++++++++++++++++++++-
2 files changed, 46 insertions(+), 1 deletion(-)
diff --git a/java/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/NBAttr.java b/java/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/NBAttr.java
index 07d94a4..edd5f6c 100644
--- a/java/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/NBAttr.java
+++ b/java/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/NBAttr.java
@@ -23,11 +23,14 @@ import com.sun.tools.javac.comp.AttrContext;
import com.sun.tools.javac.comp.Env;
import com.sun.tools.javac.tree.JCTree;
import com.sun.tools.javac.tree.JCTree.JCBlock;
+import com.sun.tools.javac.tree.JCTree.JCCatch;
import com.sun.tools.javac.tree.JCTree.JCClassDecl;
import com.sun.tools.javac.tree.JCTree.JCExpression;
import com.sun.tools.javac.tree.JCTree.JCMethodDecl;
import com.sun.tools.javac.tree.JCTree.JCNewClass;
+import com.sun.tools.javac.tree.TreeMaker;
import com.sun.tools.javac.util.Context;
+import com.sun.tools.javac.util.List;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodType;
import java.lang.reflect.Field;
@@ -49,10 +52,12 @@ public class NBAttr extends Attr {
}
private final CancelService cancelService;
+ private final TreeMaker tm;
public NBAttr(Context context) {
super(context);
cancelService = CancelService.instance(context);
+ tm = TreeMaker.instance(context);
}
@Override
@@ -73,6 +78,11 @@ public class NBAttr extends Attr {
super.visitBlock(tree);
}
+ @Override
+ public void visitCatch(JCCatch that) {
+ super.visitBlock(tm.Block(0, List.of(that.param, that.body)));
+ }
+
private boolean fullyAttribute;
private Env<AttrContext> fullyAttributeResult;
diff --git a/java/lib.nbjavac/test/unit/src/org/netbeans/lib/nbjavac/services/NBAttrTest.java b/java/lib.nbjavac/test/unit/src/org/netbeans/lib/nbjavac/services/NBAttrTest.java
index 5ab2062..683613a 100644
--- a/java/lib.nbjavac/test/unit/src/org/netbeans/lib/nbjavac/services/NBAttrTest.java
+++ b/java/lib.nbjavac/test/unit/src/org/netbeans/lib/nbjavac/services/NBAttrTest.java
@@ -19,6 +19,9 @@
package org.netbeans.lib.nbjavac.services;
import com.sun.source.tree.CompilationUnitTree;
+import com.sun.source.tree.ErroneousTree;
+import com.sun.source.tree.IdentifierTree;
+import com.sun.source.tree.MemberSelectTree;
import com.sun.source.tree.MethodInvocationTree;
import com.sun.source.util.JavacTask;
import com.sun.source.util.TreePathScanner;
@@ -64,6 +67,38 @@ public class NBAttrTest extends NbTestCase {
}.scan(parsed.second(), null);
}
+ public void testCrashOrphanedCatch() throws Exception {
+ String code = "public class Test { void t() { catch (Exception ex) { System.err.println(0); } } }";
+ Pair<JavacTask, CompilationUnitTree> parsed = compile(code);
+
+ new TreePathScanner<Void, Void>() {
+ @Override
+ public Void visitErroneous(ErroneousTree node, Void p) {
+ return scan(node.getErrorTrees(), null);
+ }
+ @Override
+ public Void visitMethodInvocation(MethodInvocationTree tree, Void p) {
+ checkIsAttributed();
+ return super.visitMethodInvocation(tree, p);
+ }
+ @Override
+ public Void visitIdentifier(IdentifierTree node, Void p) {
+ checkIsAttributed();
+ return super.visitIdentifier(node, p);
+ }
+ @Override
+ public Void visitMemberSelect(MemberSelectTree node, Void p) {
+ checkIsAttributed();
+ return super.visitMemberSelect(node, p);
+ }
+
+ private void checkIsAttributed() {
+ Trees trees = Trees.instance(parsed.first());
+ assertNotNull(getCurrentPath().getLeaf().toString(), trees.getElement(getCurrentPath()));
+ }
+ }.scan(parsed.second(), null);
+ }
+
//<editor-fold defaultstate="collapsed" desc=" Test Infrastructure ">
private static class MyFileObject extends SimpleJavaFileObject {
private String text;
@@ -97,7 +132,7 @@ public class NBAttrTest extends NbTestCase {
Context context = new Context();
NBMessager.preRegister(context, null, DEV_NULL, DEV_NULL, DEV_NULL);
NBAttr.preRegister(context);
- final JavacTaskImpl ct = (JavacTaskImpl) ((JavacTool)tool).getTask(null, std, null, Arrays.asList("-source", "1.6", "-target", "1.6"), null, Arrays.asList(new MyFileObject(code)), context);
+ final JavacTaskImpl ct = (JavacTaskImpl) ((JavacTool)tool).getTask(null, std, null, Arrays.asList("-source", "1.8", "-target", "1.8"), null, Arrays.asList(new MyFileObject(code)), context);
CompilationUnitTree cut = ct.parse().iterator().next();
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@netbeans.apache.org
For additional commands, e-mail: commits-help@netbeans.apache.org
For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists