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