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 <jlah...@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-unsubscr...@netbeans.apache.org For additional commands, e-mail: commits-h...@netbeans.apache.org For further information about the NetBeans mailing lists, visit: https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists