| /******************************************************************************* |
| * Copyright (c) 2003, 2007 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.wst.jsdt.core.tests.compiler.regression; |
| |
| import java.util.Map; |
| |
| import junit.framework.Test; |
| |
| import org.eclipse.wst.jsdt.internal.compiler.classfmt.ClassFileConstants; |
| import org.eclipse.wst.jsdt.internal.compiler.impl.CompilerOptions; |
| |
| public class TryStatementTest extends AbstractRegressionTest { |
| |
| static { |
| // TESTS_NAMES = new String[] { "test000" }; |
| // TESTS_NUMBERS = new int[] { 54 }; |
| // TESTS_RANGE = new int[] { 11, -1 }; |
| } |
| |
| public TryStatementTest(String name) { |
| super(name); |
| } |
| |
| public static Test suite() { |
| return buildAllCompliancesTestSuite(testClass()); |
| } |
| |
| public void test001() { |
| this.runConformTest(new String[] { |
| "p/X.java", |
| "package p;\n" + "public class X {\n" + " public class X1 {\n" |
| + " public X1() throws Exception {\n" + " }\n" |
| + " }\n" + " public void method1(){\n" |
| + " try {\n" + " new X1() {\n" + " };\n" |
| + " } catch(Exception e){\n" + " }\n" + " }\n" |
| + "}\n", }); |
| } |
| |
| public void test002() { |
| this.runConformTest(new String[] { |
| "p/X.java", |
| "package p;\n" + "import java.io.*;\n" |
| + "import java.util.zip.*;\n" + "class X {\n" |
| + " void bar() throws ZipException, IOException {}\n" |
| + " void foo() {\n" + " try {\n" + " bar();\n" |
| + " } catch (ZipException e) {\n" |
| + " } catch (IOException e) {\n" + " }\n" |
| + " }\n" + "}\n", }); |
| } |
| |
| public void test003() { |
| this.runConformTest(new String[] { |
| "p/X.java", |
| "package p;\n" + "public class X {\n" + " public class A1 {\n" |
| + " public A1() throws Exception {\n" + " }\n" |
| + " }\n" + " public void method1(){\n" |
| + " try {\n" + " new A1() {\n" + " };\n" |
| + " } catch(Exception e){\n" + " }\n" + " }\n" |
| + "}\n", }); |
| } |
| |
| public void test004() { |
| this.runConformTest(new String[] { |
| "p/ATC.java", |
| "package p;\n" + "public class ATC {\n" + " \n" |
| + " public class B extends Exception {\n" |
| + " public B(String msg) { super(msg); }\n" |
| + " }\n" + " \n" |
| + " void foo() throws ATC.B {\n" |
| + " Object hello$1 = null;\n" + " try {\n" |
| + " throw new B(\"Inside foo()\");\n" |
| + " } catch(B e) {\n" |
| + " System.out.println(\"Caught B\");\n" |
| + " } \n" + " } \n" + "}\n", }); |
| } |
| |
| public void test005() { |
| this |
| .runConformTest(new String[] { |
| "p/A.java", |
| "package p;\n" |
| + "import java.io.IOException;\n" |
| + "import java.util.Vector;\n" |
| + "/**\n" |
| + " * This test0 should run without producing a java.lang.ClassFormatError\n" |
| + " */\n" |
| + "public class A {\n" |
| + " public Vector getComponents () {\n" |
| + " try{\n" |
| + " throw new IOException();\n" |
| + " }\n" |
| + " catch (IOException ioe) {\n" |
| + " }\n" |
| + " return null;\n" |
| + " }\n" |
| + " public static void main(String[] args) {\n" |
| + " new A().getComponents();\n" + " }\n" |
| + "}\n", }); |
| } |
| |
| public void test006() { |
| this |
| .runConformTest(new String[] { |
| "p/T.java", |
| "package p;\n" |
| + "import java.lang.reflect.*;\n" |
| + "public class T extends InvocationTargetException {\n" |
| + " public static void main(String[] args) {\n" |
| + " T ct = new T();\n" |
| + " ct.getTargetException();\n" |
| + " }\n" |
| + " public Throwable getTargetException() {\n" |
| + " Runnable runnable = new Runnable() {\n" |
| + " public void run() {\n" |
| + " System.out.println(\"we got here\");\n" |
| + " T.super.getTargetException();\n" |
| + " }\n" + " };\n" |
| + " runnable.run();\n" |
| + " return new Throwable();\n" + " }\n" |
| + "}\n", }); |
| } |
| |
| public void test007() { |
| this |
| .runConformTest(new String[] { |
| "TryFinally.java", |
| "class TryFinally { \n" |
| + " public int readFile(String filename) throws Exception { \n" |
| + " int interfaceID = -1; \n" |
| + " int iNdx = 0; \n" |
| + " try { \n" |
| + " try { \n" |
| + " return interfaceID; \n" |
| + " } // end try \n" |
| + " finally { \n" |
| + " iNdx = 1; \n" |
| + " } // end finally \n" |
| + " } // end try \n" |
| + " catch (Exception ex) { \n" |
| + " throw new Exception(\"general exception \" + ex.getMessage() + \" on processing file \" + filename); \n" |
| + " } // end catch \n" + " finally { \n" |
| + " } // end finally \n" |
| + " } // end readFile method \n" + "} \n" }); |
| } |
| |
| /* |
| * 1FZR1TO: IVJCOM:WIN - Class does not compile in VAJava 3.02-Java2 |
| */ |
| public void test008() { |
| this |
| .runConformTest( |
| new String[] { |
| "RedundantException.java", |
| "import java.io.*;\n" |
| + "public class RedundantException {\n" |
| + " /**\n" |
| + " * Runs the class as an application.\n" |
| + " */\n" |
| + " public static void main(String[] args) {\n" |
| + " RedundantException re = new RedundantException();\n" |
| + " re.catchIt();\n" |
| + " System.out.println(\"SUCCESS\");\n" |
| + " }\n" |
| + " /**\n" |
| + " * Defines a method that lists an exception twice.\n" |
| + " * This can be buried in a much longer list.\n" |
| + " */\n" |
| + " void throwIt() throws IOException, IOException {\n" |
| + " throw new IOException();\n" |
| + " }\n" |
| + " /**\n" |
| + " * Catches the redundantly defined exception.\n" |
| + " */\n" |
| + " void catchIt() {\n" |
| + " try {\n" |
| + " throwIt(); // compile error here\n" |
| + " } catch (IOException e) {\n" |
| + " System.out.println(\"Caught.\");\n" |
| + " }\n" + " }\n" + "}" }, "Caught.\n" |
| + "SUCCESS"); |
| } |
| |
| public void test009() { |
| this.runConformTest(new String[] { |
| "Test.java", |
| "public class Test {\n" + "public void save() {\n" |
| + " int a = 3;\n" + " try {\n" |
| + " Object warnings = null;\n" + " try {\n" |
| + " Object contexts = null;\n" |
| + " try {\n" |
| + " System.out.println(warnings);\n" |
| + " return;\n" |
| + " } catch (NullPointerException npe) {\n" |
| + " System.out.println(contexts);\n" |
| + " return;\n" + " }\n" |
| + " } catch (Exception e) {\n" + " return;\n" |
| + " }\n" + " } finally {\n" + " int b = 4;\n" |
| + " System.out.println(\"#save -> \" + b + a);\n" |
| + " }\n" + "}\n" |
| + "public static void main(String[] args) {\n" |
| + " new Test().save();\n" + "}\n" + "}" }, "null\n" |
| + "#save -> 43"); |
| } |
| |
| public void test010() { |
| this.runConformTest(new String[] { |
| "Test.java", |
| "public class Test {\n" + "public void save() {\n" |
| + " int a = 3;\n" + " try {\n" |
| + " Object warnings = null;\n" + " try {\n" |
| + " Object contexts = null;\n" |
| + " try {\n" |
| + " System.out.println(warnings);\n" |
| + " return;\n" |
| + " } catch (NullPointerException npe) {\n" |
| + " System.out.println(contexts);\n" |
| + " return;\n" + " }\n" |
| + " } catch (Exception e) {\n" + " return;\n" |
| + " }\n" + " } catch(Exception e){\n" |
| + " Object dummy1 = null;\n" |
| + " System.out.println(dummy1);\n" |
| + " Object dummy2 = null;\n" |
| + " System.out.println(dummy2);\n" + " return;\n" |
| + " } finally {\n" + " int b = 4;\n" |
| + " System.out.println(\"#save -> \" + b + a);\n" |
| + " }\n" + "}\n" |
| + "public static void main(String[] args) {\n" |
| + " new Test().save();\n" + "}\n" + "}" }, "null\n" |
| + "#save -> 43"); |
| } |
| |
| public void test011() { |
| this.runConformTest(new String[] { |
| "Test.java", |
| "public class Test {\n" + "public void save() {\n" |
| + " int a = 3;\n" + " try {\n" |
| + " Object warnings = null;\n" + " try {\n" |
| + " Object contexts = null;\n" |
| + " try {\n" |
| + " System.out.println(warnings);\n" |
| + " return;\n" |
| + " } catch (NullPointerException npe) {\n" |
| + " System.out.println(contexts);\n" |
| + " return;\n" + " }\n" |
| + " } catch (Exception e) {\n" + " return;\n" |
| + " }\n" + " } catch(Exception e){\n" |
| + " int dummy1 = 11;\n" |
| + " System.out.println(dummy1);\n" |
| + " int dummy2 = 12;\n" |
| + " System.out.println(dummy2);\n" + " return;\n" |
| + " } finally {\n" + " int b = 4;\n" |
| + " System.out.println(\"#save -> \" + b + a);\n" |
| + " }\n" + "}\n" |
| + "public static void main(String[] args) {\n" |
| + " new Test().save();\n" + "}\n" + "}" }, "null\n" |
| + "#save -> 43"); |
| } |
| |
| /* |
| * 4943 Verification error |
| */ |
| public void test012() { |
| this |
| .runConformTest( |
| new String[] { |
| "X.java", |
| "import java.io.*;\n" |
| + "public class X {\n" |
| + " public static void main(String[] args) {\n" |
| + " try {\n" |
| + " new X().delete(args);\n" |
| + " System.out.println(\"success\");\n" |
| + " } catch (Exception e) {\n" |
| + " }\n" |
| + " }\n" |
| + " void bar(int i) {\n" |
| + " }\n" |
| + " public Object delete(String[] resources) throws IOException {\n" |
| + " try {\n" |
| + " int totalWork = 3;\n" |
| + " Object result = \"aaa\";\n" |
| + " try {\n" + " return result;\n" |
| + " } catch (Exception e) {\n" |
| + " throw new IOException();\n" |
| + " } finally {\n" |
| + " bar(totalWork);\n" + " }\n" |
| + " } finally {\n" + " bar(0);\n" |
| + " }\n" + " }\n" + "}\n" }, "success"); |
| } |
| |
| /* |
| * 4943 Verification error |
| */ |
| public void test013() { |
| this |
| .runConformTest( |
| new String[] { |
| "X.java", |
| "import java.io.*;\n" |
| + "public class X {\n" |
| + " public static void main(String[] args) {\n" |
| + " try {\n" |
| + " new X().delete(args);\n" |
| + " System.out.println(\"success\");\n" |
| + " } catch (Exception e) {\n" |
| + " }\n" |
| + " }\n" |
| + " void bar(int i) {\n" |
| + " }\n" |
| + " public Object delete(String[] resources) throws IOException {\n" |
| + " try {\n" |
| + " int totalWork = 3;\n" |
| + " Object result = \"aaa\";\n" |
| + " try {\n" + " return result;\n" |
| + " } catch (Exception e) {\n" |
| + " throw new IOException();\n" |
| + " } finally {\n" |
| + " bar(totalWork);\n" + " }\n" |
| + " } finally {\n" |
| + " int totalWork = 4;\n" |
| + " bar(totalWork);\n" + " }\n" |
| + " }\n" + "}\n" }, "success"); |
| } |
| |
| public void test014() { |
| this |
| .runConformTest( |
| new String[] { |
| "Test.java", |
| "public class Test {\n" |
| + "public void save() {\n" |
| + " int a = 3;\n" |
| + " try {\n" |
| + " Object warnings = null;\n" |
| + " try {\n" |
| + " int contexts = 17;\n" |
| + " try {\n" |
| + " Object dummy = null;\n" |
| + " System.out.println(warnings);\n" |
| + " System.out.println(dummy);\n" |
| + " return;\n" |
| + " } catch (NullPointerException npe) {\n" |
| + " System.out.println(contexts);\n" |
| + " return;\n" |
| + " }\n" |
| + " } catch (Exception e) {\n" |
| + " return;\n" |
| + " } finally { \n" |
| + " int c = 34; \n" |
| + " System.out.println(\"#inner-finally ->\" + a + c);\n" |
| + " }\n" |
| + " } finally {\n" |
| + " int b = 4;\n" |
| + " System.out.println(\"#save -> \" + b + a);\n" |
| + " }\n" |
| + "}\n" |
| + "public static void main(String[] args) {\n" |
| + " new Test().save();\n" + "}\n" + "}" }, |
| "null\n" + "null\n" + "#inner-finally ->334\n" |
| + "#save -> 43"); |
| } |
| |
| public void test015() { |
| this.runConformTest(new String[] { |
| "p1/X.java", |
| "package p1; \n" + "import java.io.IOException; \n" |
| + "public class X { \n" |
| + " public static void main(String args[]) { \n" |
| + " try { \n" + " new Object(){ \n" + " { \n" |
| + " if (true) throw new IOException(); \n" |
| + " if (true) throw new Exception(); \n" |
| + " } \n" + " }; \n" |
| + " System.out.println(\"FAILED\"); \n" |
| + " } catch(Exception e){ \n" |
| + " System.out.println(\"SUCCESS\"); \n" + " } \n" |
| + " } \n" + "} \n", }, "SUCCESS"); |
| } |
| |
| public void test016() { |
| this.runConformTest(new String[] { |
| "p1/X.java", |
| "package p1; \n" + "import java.io.IOException; \n" |
| + "public class X { \n" |
| + " public static void main(String args[]) { \n" |
| + " class SomeClass { \n" |
| + " SomeClass () throws IOException { \n" + " } \n" |
| + " } \n" + " try { \n" + " new Object(){ \n" |
| + " { \n" |
| + " if (true) throw new IOException(); \n" |
| + " if (true) throw new Exception(); \n" |
| + " } \n" + " }; \n" |
| + " System.out.println(\"FAILED\"); \n" |
| + " } catch(Exception e){ \n" |
| + " System.out.println(\"SUCCESS\"); \n" + " } \n" |
| + " } \n" + "} \n", }, "SUCCESS"); |
| } |
| |
| public void test017() { |
| this.runConformTest(new String[] { |
| "p1/X.java", |
| "package p1; \n" + "public class X { \n" |
| + " public static void main(String args[]) { \n" |
| + " try { \n" + " new Object(){ \n" + " { \n" |
| + " foo(); \n" + " } \n" + " }; \n" |
| + " System.out.println(\"FAILED\"); \n" |
| + " } catch(Exception e){ \n" |
| + " System.out.println(\"SUCCESS\"); \n" + " } \n" |
| + " } \n" + " static class AEx extends Exception {} \n" |
| + " static class BEx extends Exception {} \n" |
| + " static void foo() throws AEx, BEx { \n" |
| + " throw new AEx(); \n" + " } \n" + "} \n", }, |
| "SUCCESS"); |
| } |
| |
| // 8773 verification error |
| public void test018() { |
| this.runConformTest(new String[] { |
| "VerifyEr.java", |
| "public class VerifyEr { \n" |
| + " protected boolean err(boolean b) { \n" |
| + " try { \n" |
| + " System.out.print(\"SUCC\"); \n" |
| + " } catch (Throwable t) { \n" |
| + " return b; \n" + " } finally { \n" |
| + " try { \n" + " if (b) { \n" |
| + " return b; \n" |
| + " } \n" + " } finally { \n" |
| + " System.out.println(\"ESS\"); \n" |
| + " } \n" + " } \n" |
| + " return false; \n" + " } \n" |
| + " public static void main(String[] args) { \n" |
| + " new VerifyEr().err(false); \n" + " } \n" |
| + "} \n", }, "SUCCESS"); |
| } |
| |
| /* |
| * http://bugs.eclipse.org/bugs/show_bug.cgi?id=16279 |
| */ |
| public void test019() { |
| this.runConformTest(new String[] { |
| "X.java", |
| "public class X { \n" + " String logger; \n" |
| + " public static void main(String[] args) { \n" |
| + " new X().foo(); \n" + " } \n" |
| + " public void foo() { \n" + " try { \n" |
| + " System.out.println(\"SUCCESS\"); \n" |
| + " } catch (Exception ce) { \n" |
| + " String s = null; \n" + " try { \n" |
| + " return; \n" + " } catch (Exception ex) { \n" |
| + " } \n" + " s.hashCode(); \n" |
| + " } finally { \n" |
| + " if (this.logger == null) { \n" |
| + " String loggerManager = null; \n" |
| + " System.out.println(loggerManager); \n" |
| + " } \n" + " } \n" + " } \n" + "} \n" }, |
| "SUCCESS\n" + "null"); |
| } |
| |
| /* |
| * http://bugs.eclipse.org/bugs/show_bug.cgi?id=16279 shifting of finaly |
| * scopes against try/catch ones makes the custom ret address shifting |
| * unnecessary. |
| */ |
| public void test020() { |
| this.runConformTest(new String[] { |
| "X.java", |
| "public class X { \n" + " String logger; \n" |
| + " public static void main(String[] args) { \n" |
| + " new X().foo(); \n" + " } \n" |
| + " public void foo() { \n" + " try { \n" |
| + " System.out.println(\"try1\"); \n" + " try { \n" |
| + " System.out.println(\"try2\"); \n" |
| + " } finally { \n" |
| + " System.out.println(\"finally2\"); \n" |
| + " } \n" + " } catch (Exception ce) { \n" |
| + " String s = null; \n" + " try { \n" |
| + " return; \n" + " } catch (Exception ex) { \n" |
| + " } \n" + " s.hashCode(); \n" |
| + " } finally { \n" |
| + " System.out.println(\"finally1\"); \n" |
| + " try { \n" |
| + " System.out.println(\"try3\"); \n" |
| + " if (this.logger == null) { \n" |
| + " String loggerManager = null; \n" + " } \n" |
| + " } finally { \n" |
| + " System.out.println(\"finally3\"); \n" |
| + " } \n" + " } \n" + " int i1 = 0; \n" |
| + " int i2 = 0; \n" + " int i3 = 0; \n" |
| + " int i4 = 0; \n" + " int i5 = 0; \n" |
| + " int i6 = 0; \n" + " int i7 = 0; \n" |
| + " int i8 = 0; \n" + " int i9 = 0; \n" + " } \n" |
| + "} \n" }, "try1\n" + "try2\n" + "finally2\n" |
| + "finally1\n" + "try3\n" + "finally3"); |
| } |
| |
| /* |
| * http://dev.eclipse.org/bugs/show_bug.cgi?id=21116 protected type |
| * visibility check |
| */ |
| public void test021() { |
| this.runConformTest(new String[] { |
| "pa/A.java", |
| "package pa; \n" + "public abstract class A { \n" |
| + " public static void main(String[] args) { \n" |
| + " System.out.println(\"SUCCESS\"); \n" + " } \n" |
| + " protected AIC memberA; \n" |
| + " protected class AIC { \n" |
| + " public void methodAIC(String parameter) { \n" |
| + " // ....do something \n" + " } \n" + " } \n" |
| + "} \n", |
| "pb/B.java", |
| "package pb; \n" + "public class B extends pa.A { \n" |
| + " private class BIC { \n" |
| + " public void methodBIC(String param) { \n" |
| + " memberA.methodAIC(param); \n" + " } \n" |
| + " } \n" + "} \n" }, "SUCCESS"); |
| } |
| |
| /* |
| * http://dev.eclipse.org/bugs/show_bug.cgi?id=19916 nested try/synchronized |
| * statements (local var index alloc) |
| */ |
| public void test022() { |
| this.runConformTest(new String[] { |
| "pa/A.java", |
| "package pa; \n" + "public class A { \n" |
| + " public static void main(String[] args) { \n" |
| + " new A().f(); \n" |
| + " System.out.println(\"SUCCESS\"); \n" + " } \n" |
| + " boolean b = false; \n" |
| + " private Integer f() { \n" + " while (true) { \n" |
| + " try { \n" + " int x = 3; \n" |
| + " synchronized (this) { \n" |
| + " return null; \n" + " } \n" |
| + " } finally { \n" + " if (b) \n" |
| + " synchronized (this) { \n" |
| + " int y = 3; \n" + " } \n" + " } \n" |
| + " } \n" + " } \n" + "} \n" }, "SUCCESS"); |
| } |
| |
| public void test023() { |
| Map customOptions = getCompilerOptions(); |
| customOptions.put(CompilerOptions.OPTION_ReportHiddenCatchBlock, |
| CompilerOptions.ERROR); |
| this |
| .runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" |
| + " public static void main(String[] args) {\n" |
| + " try {\n" + " throw new BX();\n" |
| + " } catch(BX e) {\n" |
| + " } catch(AX e) {\n" + " }\n" |
| + " }\n" + "} \n" |
| + "class AX extends Exception {}\n" |
| + "class BX extends AX {}\n" }, |
| "----------\n" |
| + "1. ERROR in X.java (at line 6)\n" |
| + " } catch(AX e) {\n" |
| + " ^^\n" |
| + "Unreachable catch block for AX. Only more specific exceptions are thrown and handled by previous catch block(s).\n" |
| + "----------\n" |
| + "2. WARNING in X.java (at line 10)\n" |
| + " class AX extends Exception {}\n" |
| + " ^^\n" |
| + "The serializable class AX does not declare a static final serialVersionUID field of type long\n" |
| + "----------\n" |
| + "3. WARNING in X.java (at line 11)\n" |
| + " class BX extends AX {}\n" |
| + " ^^\n" |
| + "The serializable class BX does not declare a static final serialVersionUID field of type long\n" |
| + "----------\n", null, true, customOptions); |
| } |
| |
| /* |
| * http://bugs.eclipse.org/bugs/show_bug.cgi?id=21203 NPE in |
| * ExceptionFlowContext |
| */ |
| public void test024() { |
| |
| this |
| .runNegativeTest( |
| new String[] { |
| "p/X.java", |
| "package p; \n" |
| + "public class X { \n" |
| + " public void myMethod() { \n" |
| + " System.out.println(\"starting\"); \n" |
| + " try { \n" |
| + " if (true) throw new LookupException(); \n" |
| + " } catch(DataException de) { \n" |
| + " System.out.println(\"DataException occurred\"); \n" |
| + " } catch(LookupException le) { \n" |
| + " System.out.println(\"LookupException occurred\"); \n" |
| + " } catch(Throwable t) { \n" |
| + " System.out.println(\"Throwable occurred\"); \n" |
| + " } \n" |
| + " System.out.println(\"SUCCESS\"); \n" |
| + " } \n" |
| + "} \n" |
| + "class DataException extends Throwable { \n" |
| + "} \n" |
| + "class LookupException extends DataException { \n" |
| + "} \n" }, |
| "----------\n" |
| + "1. ERROR in p\\X.java (at line 9)\n" |
| + " } catch(LookupException le) { \n" |
| + " ^^^^^^^^^^^^^^^\n" |
| + "Unreachable catch block for LookupException. It is already handled by the catch block for DataException\n" |
| + "----------\n" |
| + "2. WARNING in p\\X.java (at line 17)\n" |
| + " class DataException extends Throwable { \n" |
| + " ^^^^^^^^^^^^^\n" |
| + "The serializable class DataException does not declare a static final serialVersionUID field of type long\n" |
| + "----------\n" |
| + "3. WARNING in p\\X.java (at line 19)\n" |
| + " class LookupException extends DataException { \n" |
| + " ^^^^^^^^^^^^^^^\n" |
| + "The serializable class LookupException does not declare a static final serialVersionUID field of type long\n" |
| + "----------\n"); |
| } |
| |
| // 60081 |
| public void test025() { |
| |
| this |
| .runConformTest( |
| new String[] { |
| "X.java", |
| "import java.io.*;\n" |
| + "public class X\n" |
| + "{\n" |
| + " {\n" |
| + " String licenseFileName = \"C:/Program Files/Jatt/bin/license.key\";\n" |
| + " File licenseFile = new File(licenseFileName);\n" |
| + " try {\n" |
| + " BufferedReader licenseReader = new BufferedReader(\n" |
| + " new FileReader(licenseFile));\n" |
| + " StringBuffer buf = new StringBuffer();\n" |
| + " String line = null;\n" |
| + " while ((line = licenseReader.readLine()) != null) {\n" |
| + " char[] chars = line.toCharArray();\n" |
| + " for (int i = 0; i < line.length(); i++) {\n" |
| + " if (!Character.isSpace(line.charAt(i))) {\n" |
| + " buf.append(line.charAt(i));\n" |
| + " }\n" |
| + " }\n" |
| + " }\n" |
| + " \n" |
| + " } catch (FileNotFoundException e) {\n" |
| + " throw new Error(\"License file not found\", e);\n" |
| + " } catch (IOException e) {\n" |
| + " throw new Error(\"License file cannot be read\", e);\n" |
| + " }\n" |
| + " }\n" |
| + " public X()\n" |
| + " {\n" |
| + " }\n" |
| + " \n" |
| + " public X(X r) \n" |
| + " {\n" |
| + " } \n" |
| + " public static void main(String[] args) {\n" |
| + " System.out.println(\"SUCCESS\");\n" |
| + " }\n" + "}\n" }, "SUCCESS"); |
| } |
| |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=89710 |
| // public void test026() { |
| // |
| // Map customOptions = this.getCompilerOptions(); |
| // customOptions.put(CompilerOptions.OPTION_PreserveUnusedLocal, |
| // CompilerOptions.PRESERVE); |
| // |
| // this.runConformTest( |
| // new String[] { |
| // "X.java", |
| // "import java.util.*;\n" + |
| // "\n" + |
| // "public class X {\n" + |
| // " \n" + |
| // " static private ResourceBundle bundle = null;\n" + |
| // " static {\n" + |
| // " int i = 0;\n" + |
| // " try {\n" + |
| // " bundle = foo();\n" + |
| // " } catch(Throwable e) {\n" + |
| // " e.printStackTrace();\n" + |
| // " }\n" + |
| // " }\n" + |
| // "\n" + |
| // " static ResourceBundle foo() {\n" + |
| // " return null;\n" + |
| // " }\n" + |
| // "}\n", |
| // }, |
| // "", |
| // null, |
| // true, |
| // null, |
| // customOptions, |
| // null); // custom requestor |
| // |
| // String expectedOutput = |
| // " Local variable table:\n" + |
| // " [pc: 6, pc: 21] local: i index: 0 type: int\n" + |
| // " [pc: 16, pc: 20] local: e index: 1 type: java.lang.Throwable\n"; |
| // |
| // try { |
| // File f = new File(OUTPUT_DIR + File.separator + "X.class"); |
| // byte[] classFileBytes = |
| // org.eclipse.wst.jsdt.internal.compiler.util.Util.getFileByteContent(f); |
| // ClassFileBytesDisassembler disassembler = |
| // ToolFactory.createDefaultClassFileBytesDisassembler(); |
| // String result = disassembler.disassemble(classFileBytes, "\n", |
| // ClassFileBytesDisassembler.DETAILED); |
| // int index = result.indexOf(expectedOutput); |
| // if (index == -1 || expectedOutput.length() == 0) { |
| // System.out.println(Util.displayString(result, 3)); |
| // } |
| // if (index == -1) { |
| // assertEquals("Wrong contents", expectedOutput, result); |
| // } |
| // } catch (org.eclipse.wst.jsdt.core.util.ClassFormatException e) { |
| // assertTrue(false); |
| // } catch (IOException e) { |
| // assertTrue(false); |
| // } |
| // } |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=89710 - variation |
| // public void test027() { |
| // |
| // Map customOptions = this.getCompilerOptions(); |
| // customOptions.put(CompilerOptions.OPTION_PreserveUnusedLocal, |
| // CompilerOptions.PRESERVE); |
| // |
| // this.runConformTest( |
| // new String[] { |
| // "X.java", |
| // "import java.util.*;\n" + |
| // "\n" + |
| // "public class X {\n" + |
| // " \n" + |
| // " void bar(boolean b) {\n" + |
| // " if (b) {\n" + |
| // " try {\n" + |
| // " int i = 0;\n" + |
| // " } catch(Exception e) {\n" + |
| // " e.printStackTrace();\n" + |
| // " }\n" + |
| // " } else {\n" + |
| // " int j = 0;\n" + |
| // " }\n" + |
| // " }\n" + |
| // "}\n", |
| // }, |
| // "", |
| // null, |
| // true, |
| // null, |
| // customOptions, |
| // null); // custom requestor |
| // |
| // String expectedOutput = |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 20] local: this index: 0 type: X\n" + |
| // " [pc: 0, pc: 20] local: b index: 1 type: boolean\n" + |
| // " [pc: 6, pc: 9] local: i index: 2 type: int\n" + |
| // " [pc: 10, pc: 14] local: e index: 2 type: java.lang.Exception\n"; |
| // |
| // try { |
| // File f = new File(OUTPUT_DIR + File.separator + "X.class"); |
| // byte[] classFileBytes = |
| // org.eclipse.wst.jsdt.internal.compiler.util.Util.getFileByteContent(f); |
| // ClassFileBytesDisassembler disassembler = |
| // ToolFactory.createDefaultClassFileBytesDisassembler(); |
| // String result = disassembler.disassemble(classFileBytes, "\n", |
| // ClassFileBytesDisassembler.DETAILED); |
| // int index = result.indexOf(expectedOutput); |
| // if (index == -1 || expectedOutput.length() == 0) { |
| // System.out.println(Util.displayString(result, 3)); |
| // } |
| // if (index == -1) { |
| // assertEquals("Wrong contents", expectedOutput, result); |
| // } |
| // } catch (org.eclipse.wst.jsdt.core.util.ClassFormatException e) { |
| // assertTrue(false); |
| // } catch (IOException e) { |
| // assertTrue(false); |
| // } |
| // } |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=98892 |
| public void test028() { |
| |
| this |
| .runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" |
| + "\n" |
| + " public static void main(String[] args) {\n" |
| + " try {\n" |
| + " new X().start();\n" |
| + " } catch(Exception e) {\n" |
| + " System.out.println(\"SUCCESS\");\n" |
| + " }\n" |
| + " }\n" |
| + " public Object start() {\n" |
| + " try {\n" |
| + " return null;\n" |
| + " } finally {\n" |
| + " System.out.print(\"ONCE:\");\n" |
| + " foo();\n" |
| + " }\n" |
| + " }\n" |
| + "\n" |
| + " private void foo() {\n" |
| + " throw new IllegalStateException(\"Gah!\");\n" |
| + " } \n" + "}\n", }, |
| "ONCE:SUCCESS"); |
| } |
| |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=98892 - variation |
| public void test029() { |
| |
| this |
| .runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" |
| + "\n" |
| + " public static void main(String[] args) {\n" |
| + " try {\n" |
| + " new X().start();\n" |
| + " } catch(Exception e) {\n" |
| + " System.out.println(\"SUCCESS\");\n" |
| + " }\n" |
| + " }\n" |
| + " public Object start() {\n" |
| + " try {\n" |
| + " return null;\n" |
| + " } finally {\n" |
| + " System.out.print(\"ONCE:\");\n" |
| + " foo();\n" |
| + " return this;\n" |
| + " }\n" |
| + " }\n" |
| + "\n" |
| + " private void foo() {\n" |
| + " throw new IllegalStateException(\"Gah!\");\n" |
| + " } \n" + "}\n", }, |
| "ONCE:SUCCESS"); |
| } |
| |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=98892 - variation |
| public void test030() { |
| |
| this |
| .runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" |
| + "\n" |
| + " public static void main(String[] args) {\n" |
| + " try {\n" |
| + " new X().start();\n" |
| + " } catch(Exception e) {\n" |
| + " System.out.println(\"SUCCESS\");\n" |
| + " }\n" |
| + " }\n" |
| + " public Object start() {\n" |
| + " try {\n" |
| + " Object o = null;\n" |
| + " o.toString();\n" |
| + " return null;\n" |
| + " } catch(Exception e) {\n" |
| + " System.out.print(\"EXCEPTION:\");\n" |
| + " return e; \n" |
| + " } finally {\n" |
| + " System.out.print(\"ONCE:\");\n" |
| + " foo();\n" |
| + " }\n" |
| + " }\n" |
| + "\n" |
| + " private void foo() {\n" |
| + " throw new IllegalStateException(\"Gah!\");\n" |
| + " } \n" + "}\n", }, |
| "EXCEPTION:ONCE:SUCCESS"); |
| } |
| |
| /* |
| * Try block is never reached |
| */ |
| public void test031() { |
| Map customOptions = getCompilerOptions(); |
| customOptions.put(CompilerOptions.OPTION_ReportUnusedPrivateMember, |
| CompilerOptions.IGNORE); |
| |
| this |
| .runNegativeTest( |
| new String[] { |
| "X.java", |
| "import java.io.IOException;\n" |
| + "\n" |
| + "public class X {\n" |
| + " static void foo(Object o) {}\n" |
| + " \n" |
| + " public static void main(String[] args) {\n" |
| + " try {\n" |
| + " foo(new Object() {\n" |
| + " public void bar() throws IOException {\n" |
| + " bar1();\n" |
| + " }\n" |
| + " });\n" |
| + " } catch(IOException e) {\n" |
| + " e.printStackTrace();\n" |
| + " }\n" |
| + " }\n" |
| + " \n" |
| + " static void bar1() throws IOException {}\n" |
| + "}" }, |
| "----------\n" |
| + "1. ERROR in X.java (at line 13)\n" |
| + " } catch(IOException e) {\n" |
| + " ^^^^^^^^^^^\n" |
| + "Unreachable catch block for IOException. This exception is never thrown from the try statement body\n" |
| + "----------\n", null, true, customOptions); |
| } |
| |
| /* |
| * https://bugs.eclipse.org/bugs/show_bug.cgi?id=114855 |
| */ |
| public void test032() { |
| this |
| .runConformTest( |
| new String[] { |
| "X.java", |
| "public class X\n" |
| + "{\n" |
| + " static int except_count;\n" |
| + "\n" |
| + " static boolean test_result = true;\n" |
| + " \n" |
| + " static Throwable all_except[] =\n" |
| + " {\n" |
| + " new AbstractMethodError(), // 0\n" |
| + " new ArithmeticException(), // 1\n" |
| + " new ArrayIndexOutOfBoundsException(), // 2\n" |
| + " new ArrayStoreException(), // 3\n" |
| + " new ClassCastException(), // 4\n" |
| + " new ClassCircularityError(), // 5\n" |
| + " new ClassFormatError(), // 6\n" |
| + " new ClassNotFoundException(), // 7\n" |
| + " new CloneNotSupportedException(), // 8\n" |
| + " new Error(), // 9\n" |
| + " new Exception(), // 10\n" |
| + " new IllegalAccessError(), // 11\n" |
| + " new IllegalAccessException(), // 12\n" |
| + " new IllegalArgumentException(), // 13\n" |
| + " new IllegalMonitorStateException(), // 14\n" |
| + " new IllegalThreadStateException(), // 15\n" |
| + " new IncompatibleClassChangeError(), // 16\n" |
| + " new IndexOutOfBoundsException(), // 17\n" |
| + " new InstantiationError(), // 18\n" |
| + " new InstantiationException(), // 19\n" |
| + " new InternalError(), // 20\n" |
| + " new InterruptedException(), // 21\n" |
| + " new LinkageError(), // 22\n" |
| + " new NegativeArraySizeException(), // 23\n" |
| + " new NoClassDefFoundError(), // 24\n" |
| + " new NoSuchFieldError(), // 25\n" |
| + " new NoSuchMethodError(), // 26\n" |
| + " new NoSuchMethodException(), // 27\n" |
| + " new NullPointerException(), // 28\n" |
| + " new NumberFormatException(), // 29\n" |
| + " new OutOfMemoryError(), // 30\n" |
| + " new StackOverflowError(), // 31\n" |
| + " new RuntimeException(), // 32\n" |
| + " new SecurityException(), // 33\n" |
| + " new StringIndexOutOfBoundsException(), // 34\n" |
| + " new ThreadDeath(), // 35\n" |
| + " new UnknownError(), // 36\n" |
| + " new UnsatisfiedLinkError(), // 37\n" |
| + " new VerifyError(), // 38\n" |
| + " };\n" |
| + "\n" |
| + " private static void check_except(int i)\n" |
| + " throws Throwable\n" |
| + " {\n" |
| + " if (except_count != i)\n" |
| + " {\n" |
| + " System.out.println(\"Error \"+except_count+\" != \"+i+\";\");\n" |
| + " test_result=false;\n" |
| + " }\n" |
| + " throw all_except[++except_count];\n" |
| + " }\n" |
| + "\n" |
| + " public static void main(String[] args) throws Throwable\n" |
| + " {\n" |
| + " try {\n" |
| + " except_count = 0;\n" |
| + " throw all_except[except_count];\n" |
| + " } catch (AbstractMethodError e0) {\n" |
| + " try {\n" |
| + " check_except(0);\n" |
| + " } catch (ArithmeticException e1) {\n" |
| + " try {\n" |
| + " check_except(1);\n" |
| + " } catch (ArrayIndexOutOfBoundsException e2) {\n" |
| + " try {\n" |
| + " check_except(2);\n" |
| + " } catch (ArrayStoreException e3) {\n" |
| + " try {\n" |
| + " check_except(3);\n" |
| + " } catch (ClassCastException e4) {\n" |
| + " try {\n" |
| + " check_except(4);\n" |
| + " } catch (ClassCircularityError e5) {\n" |
| + " try {\n" |
| + " check_except(5);\n" |
| + " } catch (ClassFormatError e6) {\n" |
| + " try {\n" |
| + " check_except(6);\n" |
| + " } catch (ClassNotFoundException e7) {\n" |
| + " try {\n" |
| + " check_except(7);\n" |
| + " } catch (CloneNotSupportedException e8) {\n" |
| + " try {\n" |
| + " check_except(8);\n" |
| + " } catch (Error e9) {\n" |
| + " try {\n" |
| + " check_except(9);\n" |
| + " } catch (Exception e10) {\n" |
| + " try {\n" |
| + " check_except(10);\n" |
| + " } catch (IllegalAccessError e11) {\n" |
| + " try {\n" |
| + " check_except(11);\n" |
| + " } catch (IllegalAccessException e12) {\n" |
| + " try {\n" |
| + " check_except(12);\n" |
| + " } catch (IllegalArgumentException e13) {\n" |
| + " try {\n" |
| + " check_except(13);\n" |
| + " } catch (IllegalMonitorStateException e14) {\n" |
| + " try {\n" |
| + " check_except(14);\n" |
| + " } catch (IllegalThreadStateException e15) {\n" |
| + " try {\n" |
| + " check_except(15);\n" |
| + " } catch (IncompatibleClassChangeError e16) {\n" |
| + " try {\n" |
| + " check_except(16);\n" |
| + " } catch (IndexOutOfBoundsException e17) {\n" |
| + " try {\n" |
| + " check_except(17);\n" |
| + " } catch (InstantiationError e18) {\n" |
| + " try {\n" |
| + " check_except(18);\n" |
| + " } catch (InstantiationException e19) {\n" |
| + " try {\n" |
| + " check_except(19);\n" |
| + " } catch (InternalError e20) {\n" |
| + " try {\n" |
| + " check_except(20);\n" |
| + " } catch (InterruptedException \n" |
| + "e21) {\n" |
| + " try {\n" |
| + " check_except(21);\n" |
| + " } catch (LinkageError e22) {\n" |
| + " try {\n" |
| + " check_except(22);\n" |
| + " } catch \n" |
| + "(NegativeArraySizeException e23) {\n" |
| + " try {\n" |
| + " check_except(23);\n" |
| + " } catch \n" |
| + "(NoClassDefFoundError e24) {\n" |
| + " try {\n" |
| + " check_except(24);\n" |
| + " } catch (NoSuchFieldError \n" |
| + "e25) {\n" |
| + " try {\n" |
| + " check_except(25);\n" |
| + " } catch \n" |
| + "(NoSuchMethodError e26) {\n" |
| + " try {\n" |
| + " check_except(26);\n" |
| + " } catch \n" |
| + "(NoSuchMethodException e27) {\n" |
| + " try {\n" |
| + " check_except(27);\n" |
| + " } catch \n" |
| + "(NullPointerException e28) {\n" |
| + " try {\n" |
| + " check_except\n" |
| + "(28);\n" |
| + " } catch \n" |
| + "(NumberFormatException e29) {\n" |
| + " try {\n" |
| + " check_except\n" |
| + "(29);\n" |
| + " } catch \n" |
| + "(OutOfMemoryError e30) {\n" |
| + " try {\n" |
| + " check_except\n" |
| + "(30);\n" |
| + " } catch \n" |
| + "(StackOverflowError e31) {\n" |
| + " try {\n" |
| + " \n" |
| + "check_except(31);\n" |
| + " } catch \n" |
| + "(RuntimeException e32) {\n" |
| + " try {\n" |
| + " \n" |
| + "check_except(32);\n" |
| + " } catch \n" |
| + "(SecurityException e33) {\n" |
| + " try {\n" |
| + " \n" |
| + "check_except(33);\n" |
| + " } catch \n" |
| + "(StringIndexOutOfBoundsException e34) {\n" |
| + " try {\n" |
| + " \n" |
| + "check_except(34);\n" |
| + " } \n" |
| + "catch (ThreadDeath e35) {\n" |
| + " try \n" |
| + "{\n" |
| + " \n" |
| + "check_except(35);\n" |
| + " } \n" |
| + "catch (UnknownError e36) {\n" |
| + " \n" |
| + "try {\n" |
| + " \n" |
| + "check_except(36);\n" |
| + " } \n" |
| + "catch (UnsatisfiedLinkError e37) {\n" |
| + " \n" |
| + "try {\n" |
| + " \n" |
| + " check_except(37);\n" |
| + " \n" |
| + "} catch (VerifyError e38) {\n" |
| + " \n" |
| + " ++except_count;\n" |
| + " \n" |
| + "}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}\n" |
| + " System.out.print(test_result & (except_count == all_except.length));\n" |
| + " }\n" + "}", }, "true"); |
| } |
| |
| // public void test033() { |
| // this.runConformTest( |
| // new String[] { |
| // "X.java", |
| // "public class X {\n" + |
| // " interface IActionSetContributionItem {\n" + |
| // " String getActionSetId();\n" + |
| // " }\n" + |
| // " public interface IAction {\n" + |
| // " }\n" + |
| // " interface IContributionItem {\n" + |
| // " String getId();\n" + |
| // " boolean isSeparator();\n" + |
| // " boolean isGroupMarker();\n" + |
| // " }\n" + |
| // " public static void findInsertionPoint(String startId,\n" + |
| // " String sortId, IContributionItem[] items) {\n" + |
| // " // Find the reference item.\n" + |
| // " try {\n" + |
| // " int insertIndex = 0;\n" + |
| // " while (insertIndex < items.length) {\n" + |
| // " if (startId.equals(items[insertIndex].getId()))\n" + |
| // " break;\n" + |
| // " ++insertIndex;\n" + |
| // " }\n" + |
| // " if (insertIndex >= items.length)\n" + |
| // " return;\n" + |
| // " \n" + |
| // " int compareMetric = 0;\n" + |
| // " \n" + |
| // " // Find the insertion point for the new item.\n" + |
| // " // We do this by iterating through all of the previous\n" + |
| // " // action set contributions define within the current group.\n" |
| // + |
| // " for (int nX = insertIndex + 1; nX < items.length; nX++) {\n" + |
| // " IContributionItem item = items[nX];\n" + |
| // " if (item.isSeparator() || item.isGroupMarker()) {\n" + |
| // " // Fix for bug report 18357\n" + |
| // " break;\n" + |
| // " }\n" + |
| // " if (item instanceof IActionSetContributionItem) {\n" + |
| // " if (sortId != null) {\n" + |
| // " String testId = ((IActionSetContributionItem) item)\n" |
| // + |
| // " .getActionSetId();\n" + |
| // " if (sortId.compareTo(testId) < compareMetric)\n" + |
| // " break;\n" + |
| // " }\n" + |
| // " insertIndex = nX;\n" + |
| // " } else {\n" + |
| // " break;\n" + |
| // " }\n" + |
| // " }\n" + |
| // " } catch(Exception e) {}\n" + |
| // " }\n" + |
| // " \n" + |
| // " public static void main(String[] args) {\n" + |
| // " findInsertionPoint(\"\", \"\", null);\n" + |
| // " }\n" + |
| // "}", |
| // }, |
| // ""); |
| // String expectedOutput = |
| // " // Method descriptor #15 (Ljava/lang/String;Ljava/lang/String;[LX$IContributionItem;)V\n" |
| // + |
| // " // Stack: 3, Locals: 8\n" + |
| // " public static void findInsertionPoint(java.lang.String startId, java.lang.String sortId, X.IContributionItem[] items);\n" |
| // + |
| // " 0 iconst_0\n" + |
| // " 1 istore_3 [insertIndex]\n" + |
| // " 2 goto 26\n" + |
| // " 5 aload_0 [startId]\n" + |
| // " 6 aload_2 [items]\n" + |
| // " 7 iload_3 [insertIndex]\n" + |
| // " 8 aaload\n" + |
| // " 9 invokeinterface X$IContributionItem.getId() : java.lang.String [16] [nargs: 1]\n" |
| // + |
| // " 14 invokevirtual java.lang.String.equals(java.lang.Object) : boolean [22]\n" |
| // + |
| // " 17 ifeq 23\n" + |
| // " 20 goto 32\n" + |
| // " 23 iinc 3 1 [insertIndex]\n" + |
| // " 26 iload_3 [insertIndex]\n" + |
| // " 27 aload_2 [items]\n" + |
| // " 28 arraylength\n" + |
| // " 29 if_icmplt 5\n" + |
| // " 32 iload_3 [insertIndex]\n" + |
| // " 33 aload_2 [items]\n" + |
| // " 34 arraylength\n" + |
| // " 35 if_icmplt 39\n" + |
| // " 38 return\n" + |
| // " 39 iconst_0\n" + |
| // " 40 istore 4 [compareMetric]\n" + |
| // " 42 iload_3 [insertIndex]\n" + |
| // " 43 iconst_1\n" + |
| // " 44 iadd\n" + |
| // " 45 istore 5 [nX]\n" + |
| // " 47 goto 123\n" + |
| // " 50 aload_2 [items]\n" + |
| // " 51 iload 5 [nX]\n" + |
| // " 53 aaload\n" + |
| // " 54 astore 6 [item]\n" + |
| // " 56 aload 6 [item]\n" + |
| // " 58 invokeinterface X$IContributionItem.isSeparator() : boolean [28] [nargs: 1]\n" |
| // + |
| // " 63 ifne 134\n" + |
| // " 66 aload 6 [item]\n" + |
| // " 68 invokeinterface X$IContributionItem.isGroupMarker() : boolean [32] [nargs: 1]\n" |
| // + |
| // " 73 ifeq 79\n" + |
| // " 76 goto 134\n" + |
| // " 79 aload 6 [item]\n" + |
| // " 81 instanceof X$IActionSetContributionItem [35]\n" + |
| // " 84 ifeq 134\n" + |
| // " 87 aload_1 [sortId]\n" + |
| // " 88 ifnull 117\n" + |
| // " 91 aload 6 [item]\n" + |
| // " 93 checkcast X$IActionSetContributionItem [35]\n" + |
| // " 96 invokeinterface X$IActionSetContributionItem.getActionSetId() : java.lang.String [37] [nargs: 1]\n" |
| // + |
| // " 101 astore 7 [testId]\n" + |
| // " 103 aload_1 [sortId]\n" + |
| // " 104 aload 7 [testId]\n" + |
| // " 106 invokevirtual java.lang.String.compareTo(java.lang.String) : int [40]\n" |
| // + |
| // " 109 iload 4 [compareMetric]\n" + |
| // " 111 if_icmpge 117\n" + |
| // " 114 goto 134\n" + |
| // " 117 iload 5 [nX]\n" + |
| // " 119 istore_3 [insertIndex]\n" + |
| // " 120 iinc 5 1 [nX]\n" + |
| // " 123 iload 5 [nX]\n" + |
| // " 125 aload_2 [items]\n" + |
| // " 126 arraylength\n" + |
| // " 127 if_icmplt 50\n" + |
| // " 130 goto 134\n" + |
| // " 133 astore_3\n" + |
| // " 134 return\n"; |
| // |
| // try { |
| // File f = new File(OUTPUT_DIR + File.separator + "X.class"); |
| // byte[] classFileBytes = |
| // org.eclipse.wst.jsdt.internal.compiler.util.Util.getFileByteContent(f); |
| // ClassFileBytesDisassembler disassembler = |
| // ToolFactory.createDefaultClassFileBytesDisassembler(); |
| // String result = disassembler.disassemble(classFileBytes, "\n", |
| // ClassFileBytesDisassembler.DETAILED); |
| // int index = result.indexOf(expectedOutput); |
| // if (index == -1 || expectedOutput.length() == 0) { |
| // System.out.println(Util.displayString(result, 3)); |
| // } |
| // if (index == -1) { |
| // assertEquals("Wrong contents", expectedOutput, result); |
| // } |
| // } catch (org.eclipse.wst.jsdt.core.util.ClassFormatException e) { |
| // assertTrue(false); |
| // } catch (IOException e) { |
| // assertTrue(false); |
| // } |
| // } |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=124853 |
| // public void test034() { |
| // this.runConformTest( |
| // new String[] { |
| // "X.java", |
| // "public class X {\n" + |
| // " private static int scenario(){\n" + |
| // " try {\n" + |
| // " int i = 1;\n" + |
| // " System.out.print(\"[i: \" + i+\"]\");\n" + |
| // " if (i > 5) {\n" + |
| // " return i;\n" + |
| // " }\n" + |
| // " return -i;\n" + |
| // " } catch (Exception e) {\n" + |
| // " System.out.print(\"[WRONG CATCH]\");\n" + |
| // " return 2;\n" + |
| // " } finally {\n" + |
| // " System.out.print(\"[finally]\");\n" + |
| // " try {\n" + |
| // " throwRuntime();\n" + |
| // " } finally {\n" + |
| // " clean();\n" + |
| // " }\n" + |
| // " }\n" + |
| // " }\n" + |
| // "\n" + |
| // " private static void throwRuntime() {\n" + |
| // " throw new RuntimeException(\"error\");\n" + |
| // " }\n" + |
| // "\n" + |
| // " private static void clean() {\n" + |
| // " System.out.print(\"[clean]\");\n" + |
| // " }\n" + |
| // "\n" + |
| // " public static void main(String[] args) {\n" + |
| // " try {\n" + |
| // " scenario();\n" + |
| // " } catch(Exception e){\n" + |
| // " System.out.println(\"[end]\");\n" + |
| // " }\n" + |
| // " }\n" + |
| // "\n" + |
| // "}\n", |
| // }, |
| // "[i: 1][finally][clean][end]"); |
| // |
| // // if (this.complianceLevel.compareTo(COMPLIANCE_1_6) >= 0) return; |
| // String expectedOutput = new |
| // CompilerOptions(this.getCompilerOptions()).inlineJsrBytecode |
| // ? " // Method descriptor #15 ()I\n" + |
| // " // Stack: 4, Locals: 4\n" + |
| // " private static int scenario();\n" + |
| // " 0 iconst_1\n" + |
| // " 1 istore_0 [i]\n" + |
| // " 2 getstatic java.lang.System.out : java.io.PrintStream [16]\n" + |
| // " 5 new java.lang.StringBuilder [22]\n" + |
| // " 8 dup\n" + |
| // " 9 ldc <String \"[i: \"> [24]\n" + |
| // " 11 invokespecial java.lang.StringBuilder(java.lang.String) [26]\n" |
| // + |
| // " 14 iload_0 [i]\n" + |
| // " 15 invokevirtual java.lang.StringBuilder.append(int) : java.lang.StringBuilder [29]\n" |
| // + |
| // " 18 ldc <String \"]\"> [33]\n" + |
| // " 20 invokevirtual java.lang.StringBuilder.append(java.lang.String) : java.lang.StringBuilder [35]\n" |
| // + |
| // " 23 invokevirtual java.lang.StringBuilder.toString() : java.lang.String [38]\n" |
| // + |
| // " 26 invokevirtual java.io.PrintStream.print(java.lang.String) : void [42]\n" |
| // + |
| // " 29 iload_0 [i]\n" + |
| // " 30 iconst_5\n" + |
| // " 31 if_icmple 61\n" + |
| // " 34 iload_0 [i]\n" + |
| // " 35 istore_2\n" + |
| // " 36 getstatic java.lang.System.out : java.io.PrintStream [16]\n" + |
| // " 39 ldc <String \"[finally]\"> [47]\n" + |
| // " 41 invokevirtual java.io.PrintStream.print(java.lang.String) : void [42]\n" |
| // + |
| // " 44 invokestatic X.throwRuntime() : void [49]\n" + |
| // " 47 goto 56\n" + |
| // " 50 astore_3\n" + |
| // " 51 invokestatic X.clean() : void [52]\n" + |
| // " 54 aload_3\n" + |
| // " 55 athrow\n" + |
| // " 56 invokestatic X.clean() : void [52]\n" + |
| // " 59 iload_2\n" + |
| // " 60 ireturn\n" + |
| // " 61 iload_0 [i]\n" + |
| // " 62 ineg\n" + |
| // " 63 istore_2\n" + |
| // " 64 getstatic java.lang.System.out : java.io.PrintStream [16]\n" + |
| // " 67 ldc <String \"[finally]\"> [47]\n" + |
| // " 69 invokevirtual java.io.PrintStream.print(java.lang.String) : void [42]\n" |
| // + |
| // " 72 invokestatic X.throwRuntime() : void [49]\n" + |
| // " 75 goto 84\n" + |
| // " 78 astore_3\n" + |
| // " 79 invokestatic X.clean() : void [52]\n" + |
| // " 82 aload_3\n" + |
| // " 83 athrow\n" + |
| // " 84 invokestatic X.clean() : void [52]\n" + |
| // " 87 iload_2\n" + |
| // " 88 ireturn\n" + |
| // " 89 astore_0 [e]\n" + |
| // " 90 getstatic java.lang.System.out : java.io.PrintStream [16]\n" + |
| // " 93 ldc <String \"[WRONG CATCH]\"> [55]\n" + |
| // " 95 invokevirtual java.io.PrintStream.print(java.lang.String) : void [42]\n" |
| // + |
| // " 98 getstatic java.lang.System.out : java.io.PrintStream [16]\n" + |
| // " 101 ldc <String \"[finally]\"> [47]\n" + |
| // " 103 invokevirtual java.io.PrintStream.print(java.lang.String) : void [42]\n" |
| // + |
| // " 106 invokestatic X.throwRuntime() : void [49]\n" + |
| // " 109 goto 118\n" + |
| // " 112 astore_3\n" + |
| // " 113 invokestatic X.clean() : void [52]\n" + |
| // " 116 aload_3\n" + |
| // " 117 athrow\n" + |
| // " 118 invokestatic X.clean() : void [52]\n" + |
| // " 121 iconst_2\n" + |
| // " 122 ireturn\n" + |
| // " 123 astore_1\n" + |
| // " 124 getstatic java.lang.System.out : java.io.PrintStream [16]\n" + |
| // " 127 ldc <String \"[finally]\"> [47]\n" + |
| // " 129 invokevirtual java.io.PrintStream.print(java.lang.String) : void [42]\n" |
| // + |
| // " 132 invokestatic X.throwRuntime() : void [49]\n" + |
| // " 135 goto 144\n" + |
| // " 138 astore_3\n" + |
| // " 139 invokestatic X.clean() : void [52]\n" + |
| // " 142 aload_3\n" + |
| // " 143 athrow\n" + |
| // " 144 invokestatic X.clean() : void [52]\n" + |
| // " 147 aload_1\n" + |
| // " 148 athrow\n" + |
| // " Exception Table:\n" + |
| // " [pc: 44, pc: 50] -> 50 when : any\n" + |
| // " [pc: 72, pc: 78] -> 78 when : any\n" + |
| // " [pc: 0, pc: 36] -> 89 when : java.lang.Exception\n" + |
| // " [pc: 61, pc: 64] -> 89 when : java.lang.Exception\n" + |
| // " [pc: 106, pc: 112] -> 112 when : any\n" + |
| // " [pc: 0, pc: 36] -> 123 when : any\n" + |
| // " [pc: 61, pc: 64] -> 123 when : any\n" + |
| // " [pc: 89, pc: 98] -> 123 when : any\n" + |
| // " [pc: 132, pc: 138] -> 138 when : any\n" |
| // : " // Method descriptor #15 ()I\n" + |
| // " // Stack: 4, Locals: 6\n" + |
| // " private static int scenario();\n" + |
| // " 0 iconst_1\n" + |
| // " 1 istore_0 [i]\n" + |
| // " 2 getstatic java.lang.System.out : java.io.PrintStream [16]\n" + |
| // " 5 new java.lang.StringBuffer [22]\n" + |
| // " 8 dup\n" + |
| // " 9 ldc <String \"[i: \"> [24]\n" + |
| // " 11 invokespecial java.lang.StringBuffer(java.lang.String) [26]\n" |
| // + |
| // " 14 iload_0 [i]\n" + |
| // " 15 invokevirtual java.lang.StringBuffer.append(int) : java.lang.StringBuffer [29]\n" |
| // + |
| // " 18 ldc <String \"]\"> [33]\n" + |
| // " 20 invokevirtual java.lang.StringBuffer.append(java.lang.String) : java.lang.StringBuffer [35]\n" |
| // + |
| // " 23 invokevirtual java.lang.StringBuffer.toString() : java.lang.String [38]\n" |
| // + |
| // " 26 invokevirtual java.io.PrintStream.print(java.lang.String) : void [42]\n" |
| // + |
| // " 29 iload_0 [i]\n" + |
| // " 30 iconst_5\n" + |
| // " 31 if_icmple 41\n" + |
| // " 34 iload_0 [i]\n" + |
| // " 35 istore_3\n" + |
| // " 36 jsr 69\n" + |
| // " 39 iload_3\n" + |
| // " 40 ireturn\n" + |
| // " 41 iload_0 [i]\n" + |
| // " 42 ineg\n" + |
| // " 43 istore_3\n" + |
| // " 44 jsr 69\n" + |
| // " 47 iload_3\n" + |
| // " 48 ireturn\n" + |
| // " 49 astore_0 [e]\n" + |
| // " 50 getstatic java.lang.System.out : java.io.PrintStream [16]\n" + |
| // " 53 ldc <String \"[WRONG CATCH]\"> [47]\n" + |
| // " 55 invokevirtual java.io.PrintStream.print(java.lang.String) : void [42]\n" |
| // + |
| // " 58 jsr 69\n" + |
| // " 61 iconst_2\n" + |
| // " 62 ireturn\n" + |
| // " 63 astore_2\n" + |
| // " 64 jsr 69\n" + |
| // " 67 aload_2\n" + |
| // " 68 athrow\n" + |
| // " 69 astore_1\n" + |
| // " 70 getstatic java.lang.System.out : java.io.PrintStream [16]\n" + |
| // " 73 ldc <String \"[finally]\"> [49]\n" + |
| // " 75 invokevirtual java.io.PrintStream.print(java.lang.String) : void [42]\n" |
| // + |
| // " 78 invokestatic X.throwRuntime() : void [51]\n" + |
| // " 81 goto 99\n" + |
| // " 84 astore 5\n" + |
| // " 86 jsr 92\n" + |
| // " 89 aload 5\n" + |
| // " 91 athrow\n" + |
| // " 92 astore 4\n" + |
| // " 94 invokestatic X.clean() : void [54]\n" + |
| // " 97 ret 4\n" + |
| // " 99 jsr 92\n" + |
| // " 102 ret 1\n" + |
| // " Exception Table:\n" + |
| // " [pc: 0, pc: 39] -> 49 when : java.lang.Exception\n" + |
| // " [pc: 41, pc: 47] -> 49 when : java.lang.Exception\n" + |
| // " [pc: 0, pc: 39] -> 63 when : any\n" + |
| // " [pc: 41, pc: 47] -> 63 when : any\n" + |
| // " [pc: 49, pc: 61] -> 63 when : any\n" + |
| // " [pc: 78, pc: 84] -> 84 when : any\n" + |
| // " [pc: 99, pc: 102] -> 84 when : any\n"; |
| // |
| // try { |
| // File f = new File(OUTPUT_DIR + File.separator + "X.class"); |
| // byte[] classFileBytes = |
| // org.eclipse.wst.jsdt.internal.compiler.util.Util.getFileByteContent(f); |
| // ClassFileBytesDisassembler disassembler = |
| // ToolFactory.createDefaultClassFileBytesDisassembler(); |
| // String result = disassembler.disassemble(classFileBytes, "\n", |
| // ClassFileBytesDisassembler.DETAILED); |
| // int index = result.indexOf(expectedOutput); |
| // if (index == -1 || expectedOutput.length() == 0) { |
| // System.out.println(Util.displayString(result, 3)); |
| // } |
| // if (index == -1) { |
| // assertEquals("Wrong contents", expectedOutput, result); |
| // } |
| // } catch (org.eclipse.wst.jsdt.core.util.ClassFormatException e) { |
| // assertTrue(false); |
| // } catch (IOException e) { |
| // assertTrue(false); |
| // } |
| // } |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=124853 - variation |
| public void test035() { |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" |
| + " public static void main(String[] args) {\n" |
| + " try {\n" + " new X().bar();\n" |
| + " } catch(Exception e){\n" |
| + " System.out.println(\"[end]\");\n" |
| + " }\n" + " }\n" + " Object bar() {\n" |
| + " try {\n" |
| + " System.out.print(\"[try]\");\n" |
| + " return this;\n" |
| + " } catch(Exception e){\n" |
| + " System.out.print(\"[WRONG CATCH]\");\n" |
| + " } finally {\n" |
| + " System.out.print(\"[finally]\");\n" |
| + " foo();\n" + " }\n" + " return this;\n" |
| + " }\n" + " Object foo() {\n" |
| + " throw new RuntimeException();\n" + " }\n" |
| + "}\n", }, "[try][finally][end]"); |
| } |
| |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=124853 - variation |
| public void test036() { |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" |
| + " public static void main(String[] args) {\n" |
| + " try {\n" + " new X().bar();\n" |
| + " } catch(Exception e){\n" |
| + " System.out.println(\"[end]\");\n" |
| + " }\n" + " }\n" + " Object bar() {\n" |
| + " try {\n" |
| + " System.out.print(\"[try]\");\n" |
| + " throw new RuntimeException();\n" |
| + " } catch(Exception e){\n" |
| + " System.out.print(\"[catch]\");\n" |
| + " return this;\n" + " } finally {\n" |
| + " System.out.print(\"[finally]\");\n" |
| + " foo();\n" + " }\n" + " }\n" |
| + " Object foo() {\n" |
| + " throw new RuntimeException();\n" + " }\n" |
| + "}\n", }, "[try][catch][finally][end]"); |
| } |
| |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=124853 - variation |
| public void test037() { |
| this |
| .runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" |
| + "\n" |
| + " public static void main(String[] args) {\n" |
| + " try {\n" |
| + " scenario();\n" |
| + " } catch(Exception e){\n" |
| + " System.out.println(\"[end]\");\n" |
| + " }\n" |
| + " }\n" |
| + "\n" |
| + " private static void scenario() throws Exception {\n" |
| + " try {\n" |
| + " System.out.print(\"[try1]\");\n" |
| + " try {\n" |
| + " System.out.print(\"[try2]\");\n" |
| + " return;\n" |
| + " } catch(Exception e) {\n" |
| + " System.out.print(\"[catch2]\");\n" |
| + " } finally {\n" |
| + " System.out.print(\"[finally2]\");\n" |
| + " throwRuntime();\n" |
| + " }\n" |
| + " } catch(Exception e) {\n" |
| + " System.out.print(\"[catch1]\");\n" |
| + " throw e;\n" |
| + " } finally {\n" |
| + " System.out.print(\"[finally1]\");\n" |
| + " }\n" |
| + " }\n" |
| + "\n" |
| + " private static void throwRuntime() {\n" |
| + " throw new RuntimeException(\"error\");\n" |
| + " }\n" + "}\n", }, |
| "[try1][try2][finally2][catch1][finally1][end]"); |
| } |
| |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=87423 |
| public void test038() { |
| this.runConformTest(new String[] { |
| "X.java", |
| "public class X {\n" + "\n" + " int hasLoop() {\n" |
| + " int l, m, n;\n" + " for (m = 0; m < 10; m++) {\n" |
| + " n = 2;\n" + " try {\n" + " n = 3;\n" |
| + " try {\n" + " n = 4;\n" |
| + " } catch (ArithmeticException e1) {\n" |
| + " n = 11;\n" + " } finally {\n" |
| + " for (l = 0; l < 10; l++) {\n" + " n++;\n" |
| + " }\n" + " if (n == 12) {\n" |
| + " n = 13;\n" + " break;\n" + " }\n" |
| + " n = 15;\n" + " }\n" |
| + " } catch (OutOfMemoryError e2) {\n" |
| + " n = 18;\n" + " }\n" + " }\n" |
| + " return 0;\n" + " }\n" + "\n" |
| + " public static void main(String args[]) {\n" |
| + " System.out.println(\"Loaded fine\");\n" |
| + " }\n" + "}\n", }, "Loaded fine"); |
| } |
| |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=127603 |
| public void test039() { |
| this |
| .runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" |
| + " public static void someMethod() {\n" |
| + " int count = 0;\n" |
| + " int code = -1;\n" |
| + " while (count < 2 && (code == -1 || code == 2)) {\n" |
| + " count++;\n" |
| + " try {\n" |
| + " {\n" |
| + " System.out.print(\"[Try:\" + count + \";\" + code+\"]\");\n" |
| + " }\n" |
| + " code = 0;\n" |
| + "\n" |
| + " } finally {\n" |
| + " System.out.print(\"[Finally\" + count + \";\" + code+\"]\");\n" |
| + " }\n" |
| + " }\n" |
| + " System.out.print(\"[Outering\");\n" |
| + "\n" |
| + " if (code == 0) {\n" |
| + " System.out.print(\"[Return:\" + count + \";\" + code+\"]\");\n" |
| + " return;\n" |
| + " }\n" |
| + " throw new RuntimeException(null + \"a\");\n" |
| + " }\n" |
| + "\n" |
| + " public static void main(String[] args) throws Exception {\n" |
| + " for (int i = 0; i < 1; i++) {\n" |
| + " someMethod();\n" |
| + " System.out.println();\n" |
| + " }\n" + " }\n" + "}\n", }, |
| "[Try:1;-1][Finally1;0][Outering[Return:1;0]"); |
| } |
| |
| // //https://bugs.eclipse.org/bugs/show_bug.cgi?id=128705 |
| // public void test040() { |
| // this.runConformTest( |
| // new String[] { |
| // "X.java", |
| // "public class X {\n" + |
| // " public void foo(boolean b) {\n" + |
| // " try { \n" + |
| // " if (b){ \n" + |
| // " int i = 0;\n" + |
| // " return;\n" + |
| // " } else {\n" + |
| // " Object o = null;\n" + |
| // " return;\n" + |
| // " }\n" + |
| // " } finally {\n" + |
| // " System.out.println(\"done\");\n" + |
| // " }\n" + |
| // " }\n" + |
| // " public static void main(String[] args) {\n" + |
| // " new X().foo(true);\n" + |
| // " }\n" + |
| // "}\n", |
| // }, |
| // "done"); |
| // |
| // CompilerOptions compilerOptions = new |
| // CompilerOptions(this.getCompilerOptions()); |
| // String expectedOutput = !compilerOptions.inlineJsrBytecode |
| // ? " // Method descriptor #15 (Z)V\n" + |
| // " // Stack: 2, Locals: 5\n" + |
| // " public void foo(boolean b);\n" + |
| // " 0 iload_1 [b]\n" + |
| // " 1 ifeq 10\n" + |
| // " 4 iconst_0\n" + |
| // " 5 istore_2 [i]\n" + |
| // " 6 jsr 23\n" + |
| // " 9 return\n" + |
| // " 10 aconst_null\n" + |
| // " 11 astore_2 [o]\n" + |
| // " 12 goto 6\n" + |
| // " 15 astore 4\n" + |
| // " 17 jsr 23\n" + |
| // " 20 aload 4\n" + |
| // " 22 athrow\n" + |
| // " 23 astore_3\n" + |
| // " 24 getstatic java.lang.System.out : java.io.PrintStream [16]\n" + |
| // " 27 ldc <String \"done\"> [22]\n" + |
| // " 29 invokevirtual java.io.PrintStream.println(java.lang.String) : void [24]\n" |
| // + |
| // " 32 ret 3\n" + |
| // " Exception Table:\n" + |
| // " [pc: 0, pc: 9] -> 15 when : any\n" + |
| // " [pc: 10, pc: 15] -> 15 when : any\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 4]\n" + |
| // " [pc: 4, line: 5]\n" + |
| // " [pc: 6, line: 6]\n" + |
| // " [pc: 10, line: 8]\n" + |
| // " [pc: 12, line: 9]\n" + |
| // " [pc: 15, line: 11]\n" + |
| // " [pc: 20, line: 13]\n" + |
| // " [pc: 23, line: 11]\n" + |
| // " [pc: 24, line: 12]\n" + |
| // " [pc: 32, line: 13]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 34] local: this index: 0 type: X\n" + |
| // " [pc: 0, pc: 34] local: b index: 1 type: boolean\n" + |
| // " [pc: 6, pc: 10] local: i index: 2 type: int\n" + |
| // " [pc: 12, pc: 15] local: o index: 2 type: java.lang.Object\n" |
| // : null; |
| // if (expectedOutput == null) { |
| // if (compilerOptions.targetJDK == ClassFileConstants.JDK1_5) { |
| // expectedOutput = " // Method descriptor #15 (Z)V\n" + |
| // " // Stack: 2, Locals: 4\n" + |
| // " public void foo(boolean b);\n" + |
| // " 0 iload_1 [b]\n" + |
| // " 1 ifeq 15\n" + |
| // " 4 iconst_0\n" + |
| // " 5 istore_2 [i]\n" + |
| // " 6 getstatic java.lang.System.out : java.io.PrintStream [16]\n" + |
| // " 9 ldc <String \"done\"> [22]\n" + |
| // " 11 invokevirtual java.io.PrintStream.println(java.lang.String) : void [24]\n" |
| // + |
| // " 14 return\n" + |
| // " 15 aconst_null\n" + |
| // " 16 astore_2 [o]\n" + |
| // " 17 goto 6\n" + |
| // " 20 astore_3\n" + |
| // " 21 getstatic java.lang.System.out : java.io.PrintStream [16]\n" + |
| // " 24 ldc <String \"done\"> [22]\n" + |
| // " 26 invokevirtual java.io.PrintStream.println(java.lang.String) : void [24]\n" |
| // + |
| // " 29 aload_3\n" + |
| // " 30 athrow\n" + |
| // " Exception Table:\n" + |
| // " [pc: 0, pc: 6] -> 20 when : any\n" + |
| // " [pc: 15, pc: 20] -> 20 when : any\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 4]\n" + |
| // " [pc: 4, line: 5]\n" + |
| // " [pc: 6, line: 12]\n" + |
| // " [pc: 14, line: 6]\n" + |
| // " [pc: 15, line: 8]\n" + |
| // " [pc: 17, line: 9]\n" + |
| // " [pc: 20, line: 11]\n" + |
| // " [pc: 21, line: 12]\n" + |
| // " [pc: 29, line: 13]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 31] local: this index: 0 type: X\n" + |
| // " [pc: 0, pc: 31] local: b index: 1 type: boolean\n" + |
| // " [pc: 6, pc: 15] local: i index: 2 type: int\n" + |
| // " [pc: 17, pc: 20] local: o index: 2 type: java.lang.Object\n"; |
| // } else { |
| // expectedOutput = " // Method descriptor #15 (Z)V\n" + |
| // " // Stack: 2, Locals: 4\n" + |
| // " public void foo(boolean b);\n" + |
| // " 0 iload_1 [b]\n" + |
| // " 1 ifeq 15\n" + |
| // " 4 iconst_0\n" + |
| // " 5 istore_2 [i]\n" + |
| // " 6 getstatic java.lang.System.out : java.io.PrintStream [16]\n" + |
| // " 9 ldc <String \"done\"> [22]\n" + |
| // " 11 invokevirtual java.io.PrintStream.println(java.lang.String) : void [24]\n" |
| // + |
| // " 14 return\n" + |
| // " 15 aconst_null\n" + |
| // " 16 astore_2 [o]\n" + |
| // " 17 getstatic java.lang.System.out : java.io.PrintStream [16]\n" + |
| // " 20 ldc <String \"done\"> [22]\n" + |
| // " 22 invokevirtual java.io.PrintStream.println(java.lang.String) : void [24]\n" |
| // + |
| // " 25 return\n" + |
| // " 26 astore_3\n" + |
| // " 27 getstatic java.lang.System.out : java.io.PrintStream [16]\n" + |
| // " 30 ldc <String \"done\"> [22]\n" + |
| // " 32 invokevirtual java.io.PrintStream.println(java.lang.String) : void [24]\n" |
| // + |
| // " 35 aload_3\n" + |
| // " 36 athrow\n" + |
| // " Exception Table:\n" + |
| // " [pc: 0, pc: 6] -> 26 when : any\n" + |
| // " [pc: 15, pc: 17] -> 26 when : any\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 4]\n" + |
| // " [pc: 4, line: 5]\n" + |
| // " [pc: 6, line: 12]\n" + |
| // " [pc: 14, line: 6]\n" + |
| // " [pc: 15, line: 8]\n" + |
| // " [pc: 17, line: 12]\n" + |
| // " [pc: 25, line: 9]\n" + |
| // " [pc: 26, line: 11]\n" + |
| // " [pc: 27, line: 12]\n" + |
| // " [pc: 35, line: 13]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 37] local: this index: 0 type: X\n" + |
| // " [pc: 0, pc: 37] local: b index: 1 type: boolean\n" + |
| // " [pc: 6, pc: 15] local: i index: 2 type: int\n" + |
| // " [pc: 17, pc: 26] local: o index: 2 type: java.lang.Object\n" + |
| // " Stack map table: number of frames 2\n" + |
| // " [pc: 15, same]\n" + |
| // " [pc: 26, same_locals_1_stack_item, stack: {java.lang.Throwable}]\n"; |
| // } |
| // } |
| // |
| // try { |
| // File f = new File(OUTPUT_DIR + File.separator + "X.class"); |
| // byte[] classFileBytes = |
| // org.eclipse.wst.jsdt.internal.compiler.util.Util.getFileByteContent(f); |
| // ClassFileBytesDisassembler disassembler = |
| // ToolFactory.createDefaultClassFileBytesDisassembler(); |
| // String result = disassembler.disassemble(classFileBytes, "\n", |
| // ClassFileBytesDisassembler.DETAILED); |
| // int index = result.indexOf(expectedOutput); |
| // if (index == -1 || expectedOutput.length() == 0) { |
| // System.out.println(Util.displayString(result, 3)); |
| // } |
| // if (index == -1) { |
| // assertEquals("Wrong contents", expectedOutput, result); |
| // } |
| // } catch (org.eclipse.wst.jsdt.core.util.ClassFormatException e) { |
| // assertTrue(false); |
| // } catch (IOException e) { |
| // assertTrue(false); |
| // } |
| // } |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=128705 - variation |
| // public void test041() { |
| // this.runConformTest( |
| // new String[] { |
| // "X.java", |
| // "public class X {\n" + |
| // " public void foo(boolean b) {\n" + |
| // " try { \n" + |
| // " int i = 0;\n" + |
| // " return;\n" + |
| // " } catch(Exception e) {\n" + |
| // " return;\n" + |
| // " } finally {\n" + |
| // " System.out.println(\"done\");\n" + |
| // " }\n" + |
| // " }\n" + |
| // " public static void main(String[] args) {\n" + |
| // " new X().foo(true);\n" + |
| // " }\n" + |
| // "}\n", |
| // }, |
| // "done"); |
| // |
| // CompilerOptions compilerOptions = new |
| // CompilerOptions(this.getCompilerOptions()); |
| // String expectedOutput = !compilerOptions.inlineJsrBytecode |
| // ? " // Method descriptor #15 (Z)V\n" + |
| // " // Stack: 2, Locals: 5\n" + |
| // " public void foo(boolean b);\n" + |
| // " 0 iconst_0\n" + |
| // " 1 istore_2 [i]\n" + |
| // " 2 jsr 18\n" + |
| // " 5 return\n" + |
| // " 6 astore_2 [e]\n" + |
| // " 7 goto 2\n" + |
| // " 10 astore 4\n" + |
| // " 12 jsr 18\n" + |
| // " 15 aload 4\n" + |
| // " 17 athrow\n" + |
| // " 18 astore_3\n" + |
| // " 19 getstatic java.lang.System.out : java.io.PrintStream [16]\n" + |
| // " 22 ldc <String \"done\"> [22]\n" + |
| // " 24 invokevirtual java.io.PrintStream.println(java.lang.String) : void [24]\n" |
| // + |
| // " 27 ret 3\n" + |
| // " Exception Table:\n" + |
| // " [pc: 0, pc: 5] -> 6 when : java.lang.Exception\n" + |
| // " [pc: 0, pc: 5] -> 10 when : any\n" + |
| // " [pc: 6, pc: 10] -> 10 when : any\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 4]\n" + |
| // " [pc: 2, line: 5]\n" + |
| // " [pc: 6, line: 6]\n" + |
| // " [pc: 7, line: 7]\n" + |
| // " [pc: 10, line: 8]\n" + |
| // " [pc: 15, line: 10]\n" + |
| // " [pc: 18, line: 8]\n" + |
| // " [pc: 19, line: 9]\n" + |
| // " [pc: 27, line: 10]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 29] local: this index: 0 type: X\n" + |
| // " [pc: 0, pc: 29] local: b index: 1 type: boolean\n" + |
| // " [pc: 2, pc: 6] local: i index: 2 type: int\n" + |
| // " [pc: 7, pc: 10] local: e index: 2 type: java.lang.Exception\n" |
| // : null; |
| // if (expectedOutput == null) { |
| // if (compilerOptions.targetJDK == ClassFileConstants.JDK1_5) { |
| // expectedOutput = " // Method descriptor #15 (Z)V\n" + |
| // " // Stack: 2, Locals: 4\n" + |
| // " public void foo(boolean b);\n" + |
| // " 0 iconst_0\n" + |
| // " 1 istore_2 [i]\n" + |
| // " 2 getstatic java.lang.System.out : java.io.PrintStream [16]\n" + |
| // " 5 ldc <String \"done\"> [22]\n" + |
| // " 7 invokevirtual java.io.PrintStream.println(java.lang.String) : void [24]\n" |
| // + |
| // " 10 return\n" + |
| // " 11 astore_2 [e]\n" + |
| // " 12 goto 2\n" + |
| // " 15 astore_3\n" + |
| // " 16 getstatic java.lang.System.out : java.io.PrintStream [16]\n" + |
| // " 19 ldc <String \"done\"> [22]\n" + |
| // " 21 invokevirtual java.io.PrintStream.println(java.lang.String) : void [24]\n" |
| // + |
| // " 24 aload_3\n" + |
| // " 25 athrow\n" + |
| // " Exception Table:\n" + |
| // " [pc: 0, pc: 2] -> 11 when : java.lang.Exception\n" + |
| // " [pc: 0, pc: 2] -> 15 when : any\n" + |
| // " [pc: 11, pc: 15] -> 15 when : any\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 4]\n" + |
| // " [pc: 2, line: 9]\n" + |
| // " [pc: 10, line: 5]\n" + |
| // " [pc: 11, line: 6]\n" + |
| // " [pc: 12, line: 7]\n" + |
| // " [pc: 15, line: 8]\n" + |
| // " [pc: 16, line: 9]\n" + |
| // " [pc: 24, line: 10]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 26] local: this index: 0 type: X\n" + |
| // " [pc: 0, pc: 26] local: b index: 1 type: boolean\n" + |
| // " [pc: 2, pc: 11] local: i index: 2 type: int\n" + |
| // " [pc: 12, pc: 15] local: e index: 2 type: java.lang.Exception\n"; |
| // } else { |
| // expectedOutput = " // Method descriptor #15 (Z)V\n" + |
| // " // Stack: 2, Locals: 4\n" + |
| // " public void foo(boolean b);\n" + |
| // " 0 iconst_0\n" + |
| // " 1 istore_2 [i]\n" + |
| // " 2 getstatic java.lang.System.out : java.io.PrintStream [16]\n" + |
| // " 5 ldc <String \"done\"> [22]\n" + |
| // " 7 invokevirtual java.io.PrintStream.println(java.lang.String) : void [24]\n" |
| // + |
| // " 10 return\n" + |
| // " 11 astore_2 [e]\n" + |
| // " 12 getstatic java.lang.System.out : java.io.PrintStream [16]\n" + |
| // " 15 ldc <String \"done\"> [22]\n" + |
| // " 17 invokevirtual java.io.PrintStream.println(java.lang.String) : void [24]\n" |
| // + |
| // " 20 return\n" + |
| // " 21 astore_3\n" + |
| // " 22 getstatic java.lang.System.out : java.io.PrintStream [16]\n" + |
| // " 25 ldc <String \"done\"> [22]\n" + |
| // " 27 invokevirtual java.io.PrintStream.println(java.lang.String) : void [24]\n" |
| // + |
| // " 30 aload_3\n" + |
| // " 31 athrow\n" + |
| // " Exception Table:\n" + |
| // " [pc: 0, pc: 2] -> 11 when : java.lang.Exception\n" + |
| // " [pc: 0, pc: 2] -> 21 when : any\n" + |
| // " [pc: 11, pc: 12] -> 21 when : any\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 4]\n" + |
| // " [pc: 2, line: 9]\n" + |
| // " [pc: 10, line: 5]\n" + |
| // " [pc: 11, line: 6]\n" + |
| // " [pc: 12, line: 9]\n" + |
| // " [pc: 20, line: 7]\n" + |
| // " [pc: 21, line: 8]\n" + |
| // " [pc: 22, line: 9]\n" + |
| // " [pc: 30, line: 10]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 32] local: this index: 0 type: X\n" + |
| // " [pc: 0, pc: 32] local: b index: 1 type: boolean\n" + |
| // " [pc: 2, pc: 11] local: i index: 2 type: int\n" + |
| // " [pc: 12, pc: 21] local: e index: 2 type: java.lang.Exception\n" |
| // + |
| // " Stack map table: number of frames 2\n" + |
| // " [pc: 11, same_locals_1_stack_item, stack: {java.lang.Exception}]\n" |
| // + |
| // " [pc: 21, same_locals_1_stack_item, stack: {java.lang.Throwable}]\n"; |
| // } |
| // } |
| // |
| // try { |
| // File f = new File(OUTPUT_DIR + File.separator + "X.class"); |
| // byte[] classFileBytes = |
| // org.eclipse.wst.jsdt.internal.compiler.util.Util.getFileByteContent(f); |
| // ClassFileBytesDisassembler disassembler = |
| // ToolFactory.createDefaultClassFileBytesDisassembler(); |
| // String result = disassembler.disassemble(classFileBytes, "\n", |
| // ClassFileBytesDisassembler.DETAILED); |
| // int index = result.indexOf(expectedOutput); |
| // if (index == -1 || expectedOutput.length() == 0) { |
| // System.out.println(Util.displayString(result, 3)); |
| // } |
| // if (index == -1) { |
| // assertEquals("Wrong contents", expectedOutput, result); |
| // } |
| // } catch (org.eclipse.wst.jsdt.core.util.ClassFormatException e) { |
| // assertTrue(false); |
| // } catch (IOException e) { |
| // assertTrue(false); |
| // } |
| // } |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=128705 - variation |
| // public void test042() { |
| // this.runConformTest( |
| // new String[] { |
| // "X.java", |
| // " public class X {\n" + |
| // " public static void main(String[] args) {\n" + |
| // " System.out.println(new X().foo(args));\n" + |
| // " }\n" + |
| // " String foo(String[] args) {\n" + |
| // " try {\n" + |
| // " if (args == null) return \"KO\";\n" + |
| // " switch(args.length) {\n" + |
| // " case 0:\n" + |
| // " return \"OK\";\n" + |
| // " case 1:\n" + |
| // " return \"KO\";\n" + |
| // " case 3:\n" + |
| // " return \"OK\";\n" + |
| // " default:\n" + |
| // " return \"KO\";\n" + |
| // " }\n" + |
| // " } finally {\n" + |
| // " System.out.print(\"FINALLY:\");\n" + |
| // " }\n" + |
| // " }\n" + |
| // "}\n", |
| // }, |
| // "FINALLY:OK"); |
| // |
| // String expectedOutput = new |
| // CompilerOptions(this.getCompilerOptions()).inlineJsrBytecode |
| // ? " // Method descriptor #26 ([Ljava/lang/String;)Ljava/lang/String;\n" |
| // + |
| // " // Stack: 2, Locals: 3\n" + |
| // " java.lang.String foo(java.lang.String[] args);\n" + |
| // " 0 aload_1 [args]\n" + |
| // " 1 ifnonnull 15\n" + |
| // " 4 getstatic java.lang.System.out : java.io.PrintStream [16]\n" + |
| // " 7 ldc <String \"FINALLY:\"> [35]\n" + |
| // " 9 invokevirtual java.io.PrintStream.print(java.lang.String) : void [37]\n" |
| // + |
| // " 12 ldc <String \"KO\"> [40]\n" + |
| // " 14 areturn\n" + |
| // " 15 aload_1 [args]\n" + |
| // " 16 arraylength\n" + |
| // " 17 tableswitch default: 65\n" + |
| // " case 0: 48\n" + |
| // " case 1: 59\n" + |
| // " case 2: 65\n" + |
| // " case 3: 62\n" + |
| // " 48 getstatic java.lang.System.out : java.io.PrintStream [16]\n" + |
| // " 51 ldc <String \"FINALLY:\"> [35]\n" + |
| // " 53 invokevirtual java.io.PrintStream.print(java.lang.String) : void [37]\n" |
| // + |
| // " 56 ldc <String \"OK\"> [42]\n" + |
| // " 58 areturn\n" + |
| // " 59 goto 4\n" + |
| // " 62 goto 48\n" + |
| // " 65 goto 4\n" + |
| // " 68 astore_2\n" + |
| // " 69 getstatic java.lang.System.out : java.io.PrintStream [16]\n" + |
| // " 72 ldc <String \"FINALLY:\"> [35]\n" + |
| // " 74 invokevirtual java.io.PrintStream.print(java.lang.String) : void [37]\n" |
| // + |
| // " 77 aload_2\n" + |
| // " 78 athrow\n" + |
| // " Exception Table:\n" + |
| // " [pc: 0, pc: 4] -> 68 when : any\n" + |
| // " [pc: 15, pc: 48] -> 68 when : any\n" + |
| // " [pc: 59, pc: 68] -> 68 when : any\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 7]\n" + |
| // " [pc: 4, line: 19]\n" + |
| // " [pc: 12, line: 7]\n" + |
| // " [pc: 15, line: 8]\n" + |
| // " [pc: 48, line: 19]\n" + |
| // " [pc: 56, line: 10]\n" + |
| // " [pc: 59, line: 12]\n" + |
| // " [pc: 62, line: 14]\n" + |
| // " [pc: 65, line: 16]\n" + |
| // " [pc: 68, line: 18]\n" + |
| // " [pc: 69, line: 19]\n" + |
| // " [pc: 77, line: 20]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 79] local: this index: 0 type: X\n" + |
| // " [pc: 0, pc: 79] local: args index: 1 type: java.lang.String[]\n" |
| // : " // Method descriptor #26 ([Ljava/lang/String;)Ljava/lang/String;\n" |
| // + |
| // " // Stack: 2, Locals: 4\n" + |
| // " java.lang.String foo(java.lang.String[] args);\n" + |
| // " 0 aload_1 [args]\n" + |
| // " 1 ifnonnull 10\n" + |
| // " 4 jsr 65\n" + |
| // " 7 ldc <String \"KO\"> [35]\n" + |
| // " 9 areturn\n" + |
| // " 10 aload_1 [args]\n" + |
| // " 11 arraylength\n" + |
| // " 12 tableswitch default: 56\n" + |
| // " case 0: 44\n" + |
| // " case 1: 50\n" + |
| // " case 2: 56\n" + |
| // " case 3: 53\n" + |
| // " 44 jsr 65\n" + |
| // " 47 ldc <String \"OK\"> [37]\n" + |
| // " 49 areturn\n" + |
| // " 50 goto 4\n" + |
| // " 53 goto 44\n" + |
| // " 56 goto 4\n" + |
| // " 59 astore_3\n" + |
| // " 60 jsr 65\n" + |
| // " 63 aload_3\n" + |
| // " 64 athrow\n" + |
| // " 65 astore_2\n" + |
| // " 66 getstatic java.lang.System.out : java.io.PrintStream [16]\n" + |
| // " 69 ldc <String \"FINALLY:\"> [39]\n" + |
| // " 71 invokevirtual java.io.PrintStream.print(java.lang.String) : void [41]\n" |
| // + |
| // " 74 ret 2\n" + |
| // " Exception Table:\n" + |
| // " [pc: 0, pc: 7] -> 59 when : any\n" + |
| // " [pc: 10, pc: 47] -> 59 when : any\n" + |
| // " [pc: 50, pc: 59] -> 59 when : any\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 7]\n" + |
| // " [pc: 10, line: 8]\n" + |
| // " [pc: 44, line: 10]\n" + |
| // " [pc: 50, line: 12]\n" + |
| // " [pc: 53, line: 14]\n" + |
| // " [pc: 56, line: 16]\n" + |
| // " [pc: 59, line: 18]\n" + |
| // " [pc: 63, line: 20]\n" + |
| // " [pc: 65, line: 18]\n" + |
| // " [pc: 66, line: 19]\n" + |
| // " [pc: 74, line: 20]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 76] local: this index: 0 type: X\n" + |
| // " [pc: 0, pc: 76] local: args index: 1 type: java.lang.String[]\n"; |
| // |
| // try { |
| // File f = new File(OUTPUT_DIR + File.separator + "X.class"); |
| // byte[] classFileBytes = |
| // org.eclipse.wst.jsdt.internal.compiler.util.Util.getFileByteContent(f); |
| // ClassFileBytesDisassembler disassembler = |
| // ToolFactory.createDefaultClassFileBytesDisassembler(); |
| // String result = disassembler.disassemble(classFileBytes, "\n", |
| // ClassFileBytesDisassembler.DETAILED); |
| // int index = result.indexOf(expectedOutput); |
| // if (index == -1 || expectedOutput.length() == 0) { |
| // System.out.println(Util.displayString(result, 3)); |
| // } |
| // if (index == -1) { |
| // assertEquals("Wrong contents", expectedOutput, result); |
| // } |
| // } catch (org.eclipse.wst.jsdt.core.util.ClassFormatException e) { |
| // assertTrue(false); |
| // } catch (IOException e) { |
| // assertTrue(false); |
| // } |
| // } |
| // //https://bugs.eclipse.org/bugs/show_bug.cgi?id=128705 - variation |
| // public void test043() { |
| // this.runConformTest( |
| // new String[] { |
| // "X.java", |
| // "public class X {\n" + |
| // " public void save() {\n" + |
| // " int a = 3;\n" + |
| // " try {\n" + |
| // " Object warnings = null;\n" + |
| // " Object contexts = null;\n" + |
| // " try {\n" + |
| // " System.out.print(warnings);\n" + |
| // " return;\n" + |
| // " } catch (NullPointerException npe) {\n" + |
| // " System.out.print(contexts);\n" + |
| // " return;\n" + |
| // " } finally {\n" + |
| // " System.out.print(\"#inner -> \" + a);\n" + |
| // " }\n" + |
| // " } catch (Exception e) {\n" + |
| // " return;\n" + |
| // " } finally {\n" + |
| // " int var = 0;\n" + |
| // " System.out.println(\"#save -> \" + a);\n" + |
| // " }\n" + |
| // " }\n" + |
| // " public static void main(String[] args) {\n" + |
| // " new X().save();\n" + |
| // " }\n" + |
| // "}\n", |
| // }, |
| // "null#inner -> 3#save -> 3"); |
| // |
| // CompilerOptions compilerOptions = new |
| // CompilerOptions(this.getCompilerOptions()); |
| // String expectedOutput = !compilerOptions.inlineJsrBytecode |
| // ? " // Method descriptor #6 ()V\n" + |
| // " // Stack: 4, Locals: 10\n" + |
| // " public void save();\n" + |
| // " 0 iconst_3\n" + |
| // " 1 istore_1 [a]\n" + |
| // " 2 aconst_null\n" + |
| // " 3 astore_2 [warnings]\n" + |
| // " 4 aconst_null\n" + |
| // " 5 astore_3 [contexts]\n" + |
| // " 6 getstatic java.lang.System.out : java.io.PrintStream [15]\n" + |
| // " 9 aload_2 [warnings]\n" + |
| // " 10 invokevirtual java.io.PrintStream.print(java.lang.Object) : void [21]\n" |
| // + |
| // " 13 jsr 40\n" + |
| // " 16 jsr 78\n" + |
| // " 19 return\n" + |
| // " 20 astore 4 [npe]\n" + |
| // " 22 getstatic java.lang.System.out : java.io.PrintStream [15]\n" + |
| // " 25 aload_3 [contexts]\n" + |
| // " 26 invokevirtual java.io.PrintStream.print(java.lang.Object) : void [21]\n" |
| // + |
| // " 29 goto 13\n" + |
| // " 32 astore 6\n" + |
| // " 34 jsr 40\n" + |
| // " 37 aload 6\n" + |
| // " 39 athrow\n" + |
| // " 40 astore 5\n" + |
| // " 42 getstatic java.lang.System.out : java.io.PrintStream [15]\n" + |
| // " 45 new java.lang.StringBuffer [27]\n" + |
| // " 48 dup\n" + |
| // " 49 ldc <String \"#inner -> \"> [29]\n" + |
| // " 51 invokespecial java.lang.StringBuffer(java.lang.String) [31]\n" |
| // + |
| // " 54 iload_1 [a]\n" + |
| // " 55 invokevirtual java.lang.StringBuffer.append(int) : java.lang.StringBuffer [34]\n" |
| // + |
| // " 58 invokevirtual java.lang.StringBuffer.toString() : java.lang.String [38]\n" |
| // + |
| // " 61 invokevirtual java.io.PrintStream.print(java.lang.String) : void [42]\n" |
| // + |
| // " 64 ret 5\n" + |
| // " 66 astore_2 [e]\n" + |
| // " 67 goto 16\n" + |
| // " 70 astore 8\n" + |
| // " 72 jsr 78\n" + |
| // " 75 aload 8\n" + |
| // " 77 athrow\n" + |
| // " 78 astore 7\n" + |
| // " 80 iconst_0\n" + |
| // " 81 istore 9 [var]\n" + |
| // " 83 getstatic java.lang.System.out : java.io.PrintStream [15]\n" + |
| // " 86 new java.lang.StringBuffer [27]\n" + |
| // " 89 dup\n" + |
| // " 90 ldc <String \"#save -> \"> [44]\n" + |
| // " 92 invokespecial java.lang.StringBuffer(java.lang.String) [31]\n" |
| // + |
| // " 95 iload_1 [a]\n" + |
| // " 96 invokevirtual java.lang.StringBuffer.append(int) : java.lang.StringBuffer [34]\n" |
| // + |
| // " 99 invokevirtual java.lang.StringBuffer.toString() : java.lang.String [38]\n" |
| // + |
| // " 102 invokevirtual java.io.PrintStream.println(java.lang.String) : void [46]\n" |
| // + |
| // " 105 ret 7\n" + |
| // " Exception Table:\n" + |
| // " [pc: 6, pc: 16] -> 20 when : java.lang.NullPointerException\n" + |
| // " [pc: 6, pc: 16] -> 32 when : any\n" + |
| // " [pc: 20, pc: 32] -> 32 when : any\n" + |
| // " [pc: 2, pc: 19] -> 66 when : java.lang.Exception\n" + |
| // " [pc: 20, pc: 66] -> 66 when : java.lang.Exception\n" + |
| // " [pc: 2, pc: 19] -> 70 when : any\n" + |
| // " [pc: 20, pc: 70] -> 70 when : any\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 3]\n" + |
| // " [pc: 2, line: 5]\n" + |
| // " [pc: 4, line: 6]\n" + |
| // " [pc: 6, line: 8]\n" + |
| // " [pc: 13, line: 9]\n" + |
| // " [pc: 20, line: 10]\n" + |
| // " [pc: 22, line: 11]\n" + |
| // " [pc: 29, line: 12]\n" + |
| // " [pc: 32, line: 13]\n" + |
| // " [pc: 37, line: 15]\n" + |
| // " [pc: 40, line: 13]\n" + |
| // " [pc: 42, line: 14]\n" + |
| // " [pc: 64, line: 15]\n" + |
| // " [pc: 66, line: 16]\n" + |
| // " [pc: 67, line: 17]\n" + |
| // " [pc: 70, line: 18]\n" + |
| // " [pc: 75, line: 21]\n" + |
| // " [pc: 78, line: 18]\n" + |
| // " [pc: 80, line: 19]\n" + |
| // " [pc: 83, line: 20]\n" + |
| // " [pc: 105, line: 21]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 107] local: this index: 0 type: X\n" + |
| // " [pc: 2, pc: 107] local: a index: 1 type: int\n" + |
| // " [pc: 4, pc: 66] local: warnings index: 2 type: java.lang.Object\n" |
| // + |
| // " [pc: 6, pc: 66] local: contexts index: 3 type: java.lang.Object\n" |
| // + |
| // " [pc: 22, pc: 32] local: npe index: 4 type: java.lang.NullPointerException\n" |
| // + |
| // " [pc: 67, pc: 70] local: e index: 2 type: java.lang.Exception\n" |
| // + |
| // " [pc: 83, pc: 105] local: var index: 9 type: int\n" |
| // : null; |
| // |
| // if (expectedOutput == null) { |
| // if (compilerOptions.targetJDK == ClassFileConstants.JDK1_5) { |
| // expectedOutput = " // Method descriptor #6 ()V\n" + |
| // " // Stack: 4, Locals: 8\n" + |
| // " public void save();\n" + |
| // " 0 iconst_3\n" + |
| // " 1 istore_1 [a]\n" + |
| // " 2 aconst_null\n" + |
| // " 3 astore_2 [warnings]\n" + |
| // " 4 aconst_null\n" + |
| // " 5 astore_3 [contexts]\n" + |
| // " 6 getstatic java.lang.System.out : java.io.PrintStream [15]\n" + |
| // " 9 aload_2 [warnings]\n" + |
| // " 10 invokevirtual java.io.PrintStream.print(java.lang.Object) : void [21]\n" |
| // + |
| // " 13 getstatic java.lang.System.out : java.io.PrintStream [15]\n" + |
| // " 16 new java.lang.StringBuilder [27]\n" + |
| // " 19 dup\n" + |
| // " 20 ldc <String \"#inner -> \"> [29]\n" + |
| // " 22 invokespecial java.lang.StringBuilder(java.lang.String) [31]\n" |
| // + |
| // " 25 iload_1 [a]\n" + |
| // " 26 invokevirtual java.lang.StringBuilder.append(int) : java.lang.StringBuilder [34]\n" |
| // + |
| // " 29 invokevirtual java.lang.StringBuilder.toString() : java.lang.String [38]\n" |
| // + |
| // " 32 invokevirtual java.io.PrintStream.print(java.lang.String) : void [42]\n" |
| // + |
| // " 35 iconst_0\n" + |
| // " 36 istore 7 [var]\n" + |
| // " 38 getstatic java.lang.System.out : java.io.PrintStream [15]\n" + |
| // " 41 new java.lang.StringBuilder [27]\n" + |
| // " 44 dup\n" + |
| // " 45 ldc <String \"#save -> \"> [44]\n" + |
| // " 47 invokespecial java.lang.StringBuilder(java.lang.String) [31]\n" |
| // + |
| // " 50 iload_1 [a]\n" + |
| // " 51 invokevirtual java.lang.StringBuilder.append(int) : java.lang.StringBuilder [34]\n" |
| // + |
| // " 54 invokevirtual java.lang.StringBuilder.toString() : java.lang.String [38]\n" |
| // + |
| // " 57 invokevirtual java.io.PrintStream.println(java.lang.String) : void [46]\n" |
| // + |
| // " 60 return\n" + |
| // " 61 astore 4 [npe]\n" + |
| // " 63 getstatic java.lang.System.out : java.io.PrintStream [15]\n" + |
| // " 66 aload_3 [contexts]\n" + |
| // " 67 invokevirtual java.io.PrintStream.print(java.lang.Object) : void [21]\n" |
| // + |
| // " 70 goto 13\n" + |
| // " 73 astore 5\n" + |
| // " 75 getstatic java.lang.System.out : java.io.PrintStream [15]\n" + |
| // " 78 new java.lang.StringBuilder [27]\n" + |
| // " 81 dup\n" + |
| // " 82 ldc <String \"#inner -> \"> [29]\n" + |
| // " 84 invokespecial java.lang.StringBuilder(java.lang.String) [31]\n" |
| // + |
| // " 87 iload_1 [a]\n" + |
| // " 88 invokevirtual java.lang.StringBuilder.append(int) : java.lang.StringBuilder [34]\n" |
| // + |
| // " 91 invokevirtual java.lang.StringBuilder.toString() : java.lang.String [38]\n" |
| // + |
| // " 94 invokevirtual java.io.PrintStream.print(java.lang.String) : void [42]\n" |
| // + |
| // " 97 aload 5\n" + |
| // " 99 athrow\n" + |
| // " 100 astore_2 [e]\n" + |
| // " 101 goto 35\n" + |
| // " 104 astore 6\n" + |
| // " 106 iconst_0\n" + |
| // " 107 istore 7 [var]\n" + |
| // " 109 getstatic java.lang.System.out : java.io.PrintStream [15]\n" + |
| // " 112 new java.lang.StringBuilder [27]\n" + |
| // " 115 dup\n" + |
| // " 116 ldc <String \"#save -> \"> [44]\n" + |
| // " 118 invokespecial java.lang.StringBuilder(java.lang.String) [31]\n" |
| // + |
| // " 121 iload_1 [a]\n" + |
| // " 122 invokevirtual java.lang.StringBuilder.append(int) : java.lang.StringBuilder [34]\n" |
| // + |
| // " 125 invokevirtual java.lang.StringBuilder.toString() : java.lang.String [38]\n" |
| // + |
| // " 128 invokevirtual java.io.PrintStream.println(java.lang.String) : void [46]\n" |
| // + |
| // " 131 aload 6\n" + |
| // " 133 athrow\n" + |
| // " Exception Table:\n" + |
| // " [pc: 6, pc: 13] -> 61 when : java.lang.NullPointerException\n" + |
| // " [pc: 6, pc: 13] -> 73 when : any\n" + |
| // " [pc: 61, pc: 73] -> 73 when : any\n" + |
| // " [pc: 2, pc: 35] -> 100 when : java.lang.Exception\n" + |
| // " [pc: 61, pc: 100] -> 100 when : java.lang.Exception\n" + |
| // " [pc: 2, pc: 35] -> 104 when : any\n" + |
| // " [pc: 61, pc: 104] -> 104 when : any\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 3]\n" + |
| // " [pc: 2, line: 5]\n" + |
| // " [pc: 4, line: 6]\n" + |
| // " [pc: 6, line: 8]\n" + |
| // " [pc: 13, line: 14]\n" + |
| // " [pc: 35, line: 19]\n" + |
| // " [pc: 38, line: 20]\n" + |
| // " [pc: 60, line: 9]\n" + |
| // " [pc: 61, line: 10]\n" + |
| // " [pc: 63, line: 11]\n" + |
| // " [pc: 70, line: 12]\n" + |
| // " [pc: 73, line: 13]\n" + |
| // " [pc: 75, line: 14]\n" + |
| // " [pc: 97, line: 15]\n" + |
| // " [pc: 100, line: 16]\n" + |
| // " [pc: 101, line: 17]\n" + |
| // " [pc: 104, line: 18]\n" + |
| // " [pc: 106, line: 19]\n" + |
| // " [pc: 109, line: 20]\n" + |
| // " [pc: 131, line: 21]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 134] local: this index: 0 type: X\n" + |
| // " [pc: 2, pc: 134] local: a index: 1 type: int\n" + |
| // " [pc: 4, pc: 100] local: warnings index: 2 type: java.lang.Object\n" |
| // + |
| // " [pc: 6, pc: 100] local: contexts index: 3 type: java.lang.Object\n" |
| // + |
| // " [pc: 63, pc: 73] local: npe index: 4 type: java.lang.NullPointerException\n" |
| // + |
| // " [pc: 101, pc: 104] local: e index: 2 type: java.lang.Exception\n" |
| // + |
| // " [pc: 38, pc: 60] local: var index: 7 type: int\n" + |
| // " [pc: 109, pc: 131] local: var index: 7 type: int\n"; |
| // } else { |
| // expectedOutput = " // Method descriptor #6 ()V\n" + |
| // " // Stack: 4, Locals: 8\n" + |
| // " public void save();\n" + |
| // " 0 iconst_3\n" + |
| // " 1 istore_1 [a]\n" + |
| // " 2 aconst_null\n" + |
| // " 3 astore_2 [warnings]\n" + |
| // " 4 aconst_null\n" + |
| // " 5 astore_3 [contexts]\n" + |
| // " 6 getstatic java.lang.System.out : java.io.PrintStream [15]\n" + |
| // " 9 aload_2 [warnings]\n" + |
| // " 10 invokevirtual java.io.PrintStream.print(java.lang.Object) : void [21]\n" |
| // + |
| // " 13 getstatic java.lang.System.out : java.io.PrintStream [15]\n" + |
| // " 16 new java.lang.StringBuilder [27]\n" + |
| // " 19 dup\n" + |
| // " 20 ldc <String \"#inner -> \"> [29]\n" + |
| // " 22 invokespecial java.lang.StringBuilder(java.lang.String) [31]\n" |
| // + |
| // " 25 iload_1 [a]\n" + |
| // " 26 invokevirtual java.lang.StringBuilder.append(int) : java.lang.StringBuilder [34]\n" |
| // + |
| // " 29 invokevirtual java.lang.StringBuilder.toString() : java.lang.String [38]\n" |
| // + |
| // " 32 invokevirtual java.io.PrintStream.print(java.lang.String) : void [42]\n" |
| // + |
| // " 35 iconst_0\n" + |
| // " 36 istore 7 [var]\n" + |
| // " 38 getstatic java.lang.System.out : java.io.PrintStream [15]\n" + |
| // " 41 new java.lang.StringBuilder [27]\n" + |
| // " 44 dup\n" + |
| // " 45 ldc <String \"#save -> \"> [44]\n" + |
| // " 47 invokespecial java.lang.StringBuilder(java.lang.String) [31]\n" |
| // + |
| // " 50 iload_1 [a]\n" + |
| // " 51 invokevirtual java.lang.StringBuilder.append(int) : java.lang.StringBuilder [34]\n" |
| // + |
| // " 54 invokevirtual java.lang.StringBuilder.toString() : java.lang.String [38]\n" |
| // + |
| // " 57 invokevirtual java.io.PrintStream.println(java.lang.String) : void [46]\n" |
| // + |
| // " 60 return\n" + |
| // " 61 astore 4 [npe]\n" + |
| // " 63 getstatic java.lang.System.out : java.io.PrintStream [15]\n" + |
| // " 66 aload_3 [contexts]\n" + |
| // " 67 invokevirtual java.io.PrintStream.print(java.lang.Object) : void [21]\n" |
| // + |
| // " 70 getstatic java.lang.System.out : java.io.PrintStream [15]\n" + |
| // " 73 new java.lang.StringBuilder [27]\n" + |
| // " 76 dup\n" + |
| // " 77 ldc <String \"#inner -> \"> [29]\n" + |
| // " 79 invokespecial java.lang.StringBuilder(java.lang.String) [31]\n" |
| // + |
| // " 82 iload_1 [a]\n" + |
| // " 83 invokevirtual java.lang.StringBuilder.append(int) : java.lang.StringBuilder [34]\n" |
| // + |
| // " 86 invokevirtual java.lang.StringBuilder.toString() : java.lang.String [38]\n" |
| // + |
| // " 89 invokevirtual java.io.PrintStream.print(java.lang.String) : void [42]\n" |
| // + |
| // " 92 iconst_0\n" + |
| // " 93 istore 7 [var]\n" + |
| // " 95 getstatic java.lang.System.out : java.io.PrintStream [15]\n" + |
| // " 98 new java.lang.StringBuilder [27]\n" + |
| // " 101 dup\n" + |
| // " 102 ldc <String \"#save -> \"> [44]\n" + |
| // " 104 invokespecial java.lang.StringBuilder(java.lang.String) [31]\n" |
| // + |
| // " 107 iload_1 [a]\n" + |
| // " 108 invokevirtual java.lang.StringBuilder.append(int) : java.lang.StringBuilder [34]\n" |
| // + |
| // " 111 invokevirtual java.lang.StringBuilder.toString() : java.lang.String [38]\n" |
| // + |
| // " 114 invokevirtual java.io.PrintStream.println(java.lang.String) : void [46]\n" |
| // + |
| // " 117 return\n" + |
| // " 118 astore 5\n" + |
| // " 120 getstatic java.lang.System.out : java.io.PrintStream [15]\n" + |
| // " 123 new java.lang.StringBuilder [27]\n" + |
| // " 126 dup\n" + |
| // " 127 ldc <String \"#inner -> \"> [29]\n" + |
| // " 129 invokespecial java.lang.StringBuilder(java.lang.String) [31]\n" |
| // + |
| // " 132 iload_1 [a]\n" + |
| // " 133 invokevirtual java.lang.StringBuilder.append(int) : java.lang.StringBuilder [34]\n" |
| // + |
| // " 136 invokevirtual java.lang.StringBuilder.toString() : java.lang.String [38]\n" |
| // + |
| // " 139 invokevirtual java.io.PrintStream.print(java.lang.String) : void [42]\n" |
| // + |
| // " 142 aload 5\n" + |
| // " 144 athrow\n" + |
| // " 145 astore_2 [e]\n" + |
| // " 146 iconst_0\n" + |
| // " 147 istore 7 [var]\n" + |
| // " 149 getstatic java.lang.System.out : java.io.PrintStream [15]\n" + |
| // " 152 new java.lang.StringBuilder [27]\n" + |
| // " 155 dup\n" + |
| // " 156 ldc <String \"#save -> \"> [44]\n" + |
| // " 158 invokespecial java.lang.StringBuilder(java.lang.String) [31]\n" |
| // + |
| // " 161 iload_1 [a]\n" + |
| // " 162 invokevirtual java.lang.StringBuilder.append(int) : java.lang.StringBuilder [34]\n" |
| // + |
| // " 165 invokevirtual java.lang.StringBuilder.toString() : java.lang.String [38]\n" |
| // + |
| // " 168 invokevirtual java.io.PrintStream.println(java.lang.String) : void [46]\n" |
| // + |
| // " 171 return\n" + |
| // " 172 astore 6\n" + |
| // " 174 iconst_0\n" + |
| // " 175 istore 7 [var]\n" + |
| // " 177 getstatic java.lang.System.out : java.io.PrintStream [15]\n" + |
| // " 180 new java.lang.StringBuilder [27]\n" + |
| // " 183 dup\n" + |
| // " 184 ldc <String \"#save -> \"> [44]\n" + |
| // " 186 invokespecial java.lang.StringBuilder(java.lang.String) [31]\n" |
| // + |
| // " 189 iload_1 [a]\n" + |
| // " 190 invokevirtual java.lang.StringBuilder.append(int) : java.lang.StringBuilder [34]\n" |
| // + |
| // " 193 invokevirtual java.lang.StringBuilder.toString() : java.lang.String [38]\n" |
| // + |
| // " 196 invokevirtual java.io.PrintStream.println(java.lang.String) : void [46]\n" |
| // + |
| // " 199 aload 6\n" + |
| // " 201 athrow\n" + |
| // " Exception Table:\n" + |
| // " [pc: 6, pc: 13] -> 61 when : java.lang.NullPointerException\n" + |
| // " [pc: 6, pc: 13] -> 118 when : any\n" + |
| // " [pc: 61, pc: 70] -> 118 when : any\n" + |
| // " [pc: 2, pc: 35] -> 145 when : java.lang.Exception\n" + |
| // " [pc: 61, pc: 92] -> 145 when : java.lang.Exception\n" + |
| // " [pc: 118, pc: 145] -> 145 when : java.lang.Exception\n" + |
| // " [pc: 2, pc: 35] -> 172 when : any\n" + |
| // " [pc: 61, pc: 92] -> 172 when : any\n" + |
| // " [pc: 118, pc: 146] -> 172 when : any\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 3]\n" + |
| // " [pc: 2, line: 5]\n" + |
| // " [pc: 4, line: 6]\n" + |
| // " [pc: 6, line: 8]\n" + |
| // " [pc: 13, line: 14]\n" + |
| // " [pc: 35, line: 19]\n" + |
| // " [pc: 38, line: 20]\n" + |
| // " [pc: 60, line: 9]\n" + |
| // " [pc: 61, line: 10]\n" + |
| // " [pc: 63, line: 11]\n" + |
| // " [pc: 70, line: 14]\n" + |
| // " [pc: 92, line: 19]\n" + |
| // " [pc: 95, line: 20]\n" + |
| // " [pc: 117, line: 12]\n" + |
| // " [pc: 118, line: 13]\n" + |
| // " [pc: 120, line: 14]\n" + |
| // " [pc: 142, line: 15]\n" + |
| // " [pc: 145, line: 16]\n" + |
| // " [pc: 146, line: 19]\n" + |
| // " [pc: 149, line: 20]\n" + |
| // " [pc: 171, line: 17]\n" + |
| // " [pc: 172, line: 18]\n" + |
| // " [pc: 174, line: 19]\n" + |
| // " [pc: 177, line: 20]\n" + |
| // " [pc: 199, line: 21]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 202] local: this index: 0 type: X\n" + |
| // " [pc: 2, pc: 202] local: a index: 1 type: int\n" + |
| // " [pc: 4, pc: 145] local: warnings index: 2 type: java.lang.Object\n" |
| // + |
| // " [pc: 6, pc: 145] local: contexts index: 3 type: java.lang.Object\n" |
| // + |
| // " [pc: 63, pc: 118] local: npe index: 4 type: java.lang.NullPointerException\n" |
| // + |
| // " [pc: 146, pc: 172] local: e index: 2 type: java.lang.Exception\n" |
| // + |
| // " [pc: 38, pc: 60] local: var index: 7 type: int\n" + |
| // " [pc: 95, pc: 117] local: var index: 7 type: int\n" + |
| // " [pc: 149, pc: 171] local: var index: 7 type: int\n" + |
| // " [pc: 177, pc: 199] local: var index: 7 type: int\n" + |
| // " Stack map table: number of frames 4\n" + |
| // " [pc: 61, full, stack: {java.lang.NullPointerException}, locals: {X, int, java.lang.Object, java.lang.Object}]\n" |
| // + |
| // " [pc: 118, same_locals_1_stack_item, stack: {java.lang.Throwable}]\n" |
| // + |
| // " [pc: 145, full, stack: {java.lang.Exception}, locals: {X, int}]\n" |
| // + |
| // " [pc: 172, same_locals_1_stack_item, stack: {java.lang.Throwable}]\n"; |
| // } |
| // } |
| // |
| // try { |
| // File f = new File(OUTPUT_DIR + File.separator + "X.class"); |
| // byte[] classFileBytes = |
| // org.eclipse.wst.jsdt.internal.compiler.util.Util.getFileByteContent(f); |
| // ClassFileBytesDisassembler disassembler = |
| // ToolFactory.createDefaultClassFileBytesDisassembler(); |
| // String result = disassembler.disassemble(classFileBytes, "\n", |
| // ClassFileBytesDisassembler.DETAILED); |
| // int index = result.indexOf(expectedOutput); |
| // if (index == -1 || expectedOutput.length() == 0) { |
| // System.out.println(Util.displayString(result, 3)); |
| // } |
| // if (index == -1) { |
| // assertEquals("Wrong contents", expectedOutput, result); |
| // } |
| // } catch (org.eclipse.wst.jsdt.core.util.ClassFormatException e) { |
| // assertTrue(false); |
| // } catch (IOException e) { |
| // assertTrue(false); |
| // } |
| // } |
| // //https://bugs.eclipse.org/bugs/show_bug.cgi?id=129305 |
| // public void test044() { |
| // this.runConformTest( |
| // new String[] { |
| // "X.java", |
| // "public class X {\n" + |
| // " public static void main(String[] args) {\n" + |
| // " foo();\n" + |
| // " } \n" + |
| // " static Object foo() {\n" + |
| // " try {\n" + |
| // " return null;\n" + |
| // " } catch(Exception e) {\n" + |
| // " return null;\n" + |
| // " } finally {\n" + |
| // " System.out.println(\"SUCCESS\");\n" + |
| // " }\n" + |
| // " }\n" + |
| // "}\n", |
| // }, |
| // "SUCCESS"); |
| // |
| // CompilerOptions compilerOptions = new |
| // CompilerOptions(this.getCompilerOptions()); |
| // String expectedOutput = !compilerOptions.inlineJsrBytecode ? |
| // " // Method descriptor #19 ()Ljava/lang/Object;\n" + |
| // " // Stack: 2, Locals: 3\n" + |
| // " static java.lang.Object foo();\n" + |
| // " 0 jsr 15\n" + |
| // " 3 aconst_null\n" + |
| // " 4 areturn\n" + |
| // " 5 astore_0 [e]\n" + |
| // " 6 goto 0\n" + |
| // " 9 astore_2\n" + |
| // " 10 jsr 15\n" + |
| // " 13 aload_2\n" + |
| // " 14 athrow\n" + |
| // " 15 astore_1\n" + |
| // " 16 getstatic java.lang.System.out : java.io.PrintStream [22]\n" + |
| // " 19 ldc <String \"SUCCESS\"> [28]\n" + |
| // " 21 invokevirtual java.io.PrintStream.println(java.lang.String) : void [30]\n" |
| // + |
| // " 24 ret 1\n" + |
| // " Exception Table:\n" + |
| // " [pc: 0, pc: 3] -> 5 when : java.lang.Exception\n" + |
| // " [pc: 0, pc: 3] -> 9 when : any\n" + |
| // " [pc: 5, pc: 9] -> 9 when : any\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 7]\n" + |
| // " [pc: 5, line: 8]\n" + |
| // " [pc: 6, line: 9]\n" + |
| // " [pc: 9, line: 10]\n" + |
| // " [pc: 13, line: 12]\n" + |
| // " [pc: 15, line: 10]\n" + |
| // " [pc: 16, line: 11]\n" + |
| // " [pc: 24, line: 12]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 6, pc: 9] local: e index: 0 type: java.lang.Exception\n" |
| // : null; |
| // |
| // if (expectedOutput == null) { |
| // if (compilerOptions.targetJDK == ClassFileConstants.JDK1_5) { |
| // expectedOutput = " // Method descriptor #19 ()Ljava/lang/Object;\n" + |
| // " // Stack: 2, Locals: 2\n" + |
| // " static java.lang.Object foo();\n" + |
| // " 0 getstatic java.lang.System.out : java.io.PrintStream [22]\n" + |
| // " 3 ldc <String \"SUCCESS\"> [28]\n" + |
| // " 5 invokevirtual java.io.PrintStream.println(java.lang.String) : void [30]\n" |
| // + |
| // " 8 aconst_null\n" + |
| // " 9 areturn\n" + |
| // " 10 astore_0 [e]\n" + |
| // " 11 goto 0\n" + |
| // " 14 astore_1\n" + |
| // " 15 getstatic java.lang.System.out : java.io.PrintStream [22]\n" + |
| // " 18 ldc <String \"SUCCESS\"> [28]\n" + |
| // " 20 invokevirtual java.io.PrintStream.println(java.lang.String) : void [30]\n" |
| // + |
| // " 23 aload_1\n" + |
| // " 24 athrow\n" + |
| // " Exception Table:\n" + |
| // " [pc: 10, pc: 14] -> 14 when : any\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 11]\n" + |
| // " [pc: 8, line: 7]\n" + |
| // " [pc: 10, line: 8]\n" + |
| // " [pc: 11, line: 9]\n" + |
| // " [pc: 14, line: 10]\n" + |
| // " [pc: 15, line: 11]\n" + |
| // " [pc: 23, line: 12]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 11, pc: 14] local: e index: 0 type: java.lang.Exception\n"; |
| // } else { |
| // expectedOutput = " // Method descriptor #19 ()Ljava/lang/Object;\n" + |
| // " // Stack: 2, Locals: 2\n" + |
| // " static java.lang.Object foo();\n" + |
| // " 0 getstatic java.lang.System.out : java.io.PrintStream [22]\n" + |
| // " 3 ldc <String \"SUCCESS\"> [28]\n" + |
| // " 5 invokevirtual java.io.PrintStream.println(java.lang.String) : void [30]\n" |
| // + |
| // " 8 aconst_null\n" + |
| // " 9 areturn\n" + |
| // " 10 astore_0 [e]\n" + |
| // " 11 getstatic java.lang.System.out : java.io.PrintStream [22]\n" + |
| // " 14 ldc <String \"SUCCESS\"> [28]\n" + |
| // " 16 invokevirtual java.io.PrintStream.println(java.lang.String) : void [30]\n" |
| // + |
| // " 19 aconst_null\n" + |
| // " 20 areturn\n" + |
| // " 21 astore_1\n" + |
| // " 22 getstatic java.lang.System.out : java.io.PrintStream [22]\n" + |
| // " 25 ldc <String \"SUCCESS\"> [28]\n" + |
| // " 27 invokevirtual java.io.PrintStream.println(java.lang.String) : void [30]\n" |
| // + |
| // " 30 aload_1\n" + |
| // " 31 athrow\n" + |
| // " Exception Table:\n" + |
| // " [pc: 10, pc: 11] -> 21 when : any\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 11]\n" + |
| // " [pc: 8, line: 7]\n" + |
| // " [pc: 10, line: 8]\n" + |
| // " [pc: 11, line: 11]\n" + |
| // " [pc: 19, line: 9]\n" + |
| // " [pc: 21, line: 10]\n" + |
| // " [pc: 22, line: 11]\n" + |
| // " [pc: 30, line: 12]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 11, pc: 21] local: e index: 0 type: java.lang.Exception\n" |
| // + |
| // " Stack map table: number of frames 2\n" + |
| // " [pc: 10, same_locals_1_stack_item, stack: {java.lang.Exception}]\n" |
| // + |
| // " [pc: 21, same_locals_1_stack_item, stack: {java.lang.Throwable}]\n"; |
| // } |
| // } |
| // try { |
| // File f = new File(OUTPUT_DIR + File.separator + "X.class"); |
| // byte[] classFileBytes = |
| // org.eclipse.wst.jsdt.internal.compiler.util.Util.getFileByteContent(f); |
| // ClassFileBytesDisassembler disassembler = |
| // ToolFactory.createDefaultClassFileBytesDisassembler(); |
| // String result = disassembler.disassemble(classFileBytes, "\n", |
| // ClassFileBytesDisassembler.DETAILED); |
| // int index = result.indexOf(expectedOutput); |
| // if (index == -1 || expectedOutput.length() == 0) { |
| // System.out.println(Util.displayString(result, 3)); |
| // } |
| // if (index == -1) { |
| // assertEquals("Wrong contents", expectedOutput, result); |
| // } |
| // } catch (org.eclipse.wst.jsdt.core.util.ClassFormatException e) { |
| // assertTrue(false); |
| // } catch (IOException e) { |
| // assertTrue(false); |
| // } |
| // } |
| // //https://bugs.eclipse.org/bugs/show_bug.cgi?id=129306 |
| // public void test045() { |
| // this.runConformTest( |
| // new String[] { |
| // "X.java", |
| // "public class X {\n" + |
| // " public void save() {\n" + |
| // " try {\n" + |
| // " Object warnings = null;\n" + |
| // " Object contexts = null;\n" + |
| // " try {\n" + |
| // " System.out.print(\"[try]\");\n" + |
| // " System.out.print(warnings); \n" + |
| // " return;\n" + |
| // " } catch (NullPointerException npe) {\n" + |
| // " System.out.print(\"[npe]\");\n" + |
| // " System.out.print(contexts); \n" + |
| // " return;\n" + |
| // " }\n" + |
| // " } catch (Exception e) {\n" + |
| // " System.out.print(\"[e]\");\n" + |
| // " return;\n" + |
| // " } finally { \n" + |
| // " int var = 0;\n" + |
| // " System.out.print(\"[finally]\");\n" + |
| // " Object o = null;\n" + |
| // " o.toString();\n" + |
| // " }\n" + |
| // " }\n" + |
| // " public static void main(String[] args) {\n" + |
| // " try {\n" + |
| // " new X().save();\n" + |
| // " } catch(NullPointerException e) {\n" + |
| // " System.out.println(\"[caught npe]\");\n" + |
| // " }\n" + |
| // " }\n" + |
| // "}\n", |
| // }, |
| // "[try]null[finally][caught npe]"); |
| // |
| // CompilerOptions compilerOptions = new |
| // CompilerOptions(this.getCompilerOptions()); |
| // String expectedOutput = !compilerOptions.inlineJsrBytecode |
| // ? " // Method descriptor #6 ()V\n" + |
| // " // Stack: 2, Locals: 8\n" + |
| // " public void save();\n" + |
| // " 0 aconst_null\n" + |
| // " 1 astore_1 [warnings]\n" + |
| // " 2 aconst_null\n" + |
| // " 3 astore_2 [contexts]\n" + |
| // " 4 getstatic java.lang.System.out : java.io.PrintStream [15]\n" + |
| // " 7 ldc <String \"[try]\"> [21]\n" + |
| // " 9 invokevirtual java.io.PrintStream.print(java.lang.String) : void [23]\n" |
| // + |
| // " 12 getstatic java.lang.System.out : java.io.PrintStream [15]\n" + |
| // " 15 aload_1 [warnings]\n" + |
| // " 16 invokevirtual java.io.PrintStream.print(java.lang.Object) : void [29]\n" |
| // + |
| // " 19 jsr 62\n" + |
| // " 22 return\n" + |
| // " 23 astore_3 [npe]\n" + |
| // " 24 getstatic java.lang.System.out : java.io.PrintStream [15]\n" + |
| // " 27 ldc <String \"[npe]\"> [32]\n" + |
| // " 29 invokevirtual java.io.PrintStream.print(java.lang.String) : void [23]\n" |
| // + |
| // " 32 getstatic java.lang.System.out : java.io.PrintStream [15]\n" + |
| // " 35 aload_2 [contexts]\n" + |
| // " 36 invokevirtual java.io.PrintStream.print(java.lang.Object) : void [29]\n" |
| // + |
| // " 39 goto 19\n" + |
| // " 42 astore_1 [e]\n" + |
| // " 43 getstatic java.lang.System.out : java.io.PrintStream [15]\n" + |
| // " 46 ldc <String \"[e]\"> [34]\n" + |
| // " 48 invokevirtual java.io.PrintStream.print(java.lang.String) : void [23]\n" |
| // + |
| // " 51 goto 19\n" + |
| // " 54 astore 5\n" + |
| // " 56 jsr 62\n" + |
| // " 59 aload 5\n" + |
| // " 61 athrow\n" + |
| // " 62 astore 4\n" + |
| // " 64 iconst_0\n" + |
| // " 65 istore 6 [var]\n" + |
| // " 67 getstatic java.lang.System.out : java.io.PrintStream [15]\n" + |
| // " 70 ldc <String \"[finally]\"> [36]\n" + |
| // " 72 invokevirtual java.io.PrintStream.print(java.lang.String) : void [23]\n" |
| // + |
| // " 75 aconst_null\n" + |
| // " 76 astore 7 [o]\n" + |
| // " 78 aload 7 [o]\n" + |
| // " 80 invokevirtual java.lang.Object.toString() : java.lang.String [38]\n" |
| // + |
| // " 83 pop\n" + |
| // " 84 ret 4\n" + |
| // " Exception Table:\n" + |
| // " [pc: 4, pc: 19] -> 23 when : java.lang.NullPointerException\n" + |
| // " [pc: 0, pc: 22] -> 42 when : java.lang.Exception\n" + |
| // " [pc: 23, pc: 42] -> 42 when : java.lang.Exception\n" + |
| // " [pc: 0, pc: 22] -> 54 when : any\n" + |
| // " [pc: 23, pc: 54] -> 54 when : any\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 4]\n" + |
| // " [pc: 2, line: 5]\n" + |
| // " [pc: 4, line: 7]\n" + |
| // " [pc: 12, line: 8]\n" + |
| // " [pc: 19, line: 9]\n" + |
| // " [pc: 23, line: 10]\n" + |
| // " [pc: 24, line: 11]\n" + |
| // " [pc: 32, line: 12]\n" + |
| // " [pc: 39, line: 13]\n" + |
| // " [pc: 42, line: 15]\n" + |
| // " [pc: 43, line: 16]\n" + |
| // " [pc: 51, line: 17]\n" + |
| // " [pc: 54, line: 18]\n" + |
| // " [pc: 59, line: 23]\n" + |
| // " [pc: 62, line: 18]\n" + |
| // " [pc: 64, line: 19]\n" + |
| // " [pc: 67, line: 20]\n" + |
| // " [pc: 75, line: 21]\n" + |
| // " [pc: 78, line: 22]\n" + |
| // " [pc: 84, line: 23]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 86] local: this index: 0 type: X\n" + |
| // " [pc: 2, pc: 42] local: warnings index: 1 type: java.lang.Object\n" |
| // + |
| // " [pc: 4, pc: 42] local: contexts index: 2 type: java.lang.Object\n" |
| // + |
| // " [pc: 24, pc: 42] local: npe index: 3 type: java.lang.NullPointerException\n" |
| // + |
| // " [pc: 43, pc: 54] local: e index: 1 type: java.lang.Exception\n" |
| // + |
| // " [pc: 67, pc: 84] local: var index: 6 type: int\n" + |
| // " [pc: 78, pc: 84] local: o index: 7 type: java.lang.Object\n" |
| // : null; |
| // |
| // if (expectedOutput == null) { |
| // if (compilerOptions.targetJDK == ClassFileConstants.JDK1_5) { |
| // expectedOutput = " // Method descriptor #6 ()V\n" + |
| // " // Stack: 2, Locals: 7\n" + |
| // " public void save();\n" + |
| // " 0 aconst_null\n" + |
| // " 1 astore_1 [warnings]\n" + |
| // " 2 aconst_null\n" + |
| // " 3 astore_2 [contexts]\n" + |
| // " 4 getstatic java.lang.System.out : java.io.PrintStream [15]\n" + |
| // " 7 ldc <String \"[try]\"> [21]\n" + |
| // " 9 invokevirtual java.io.PrintStream.print(java.lang.String) : void [23]\n" |
| // + |
| // " 12 getstatic java.lang.System.out : java.io.PrintStream [15]\n" + |
| // " 15 aload_1 [warnings]\n" + |
| // " 16 invokevirtual java.io.PrintStream.print(java.lang.Object) : void [29]\n" |
| // + |
| // " 19 iconst_0\n" + |
| // " 20 istore 5 [var]\n" + |
| // " 22 getstatic java.lang.System.out : java.io.PrintStream [15]\n" + |
| // " 25 ldc <String \"[finally]\"> [32]\n" + |
| // " 27 invokevirtual java.io.PrintStream.print(java.lang.String) : void [23]\n" |
| // + |
| // " 30 aconst_null\n" + |
| // " 31 astore 6 [o]\n" + |
| // " 33 aload 6 [o]\n" + |
| // " 35 invokevirtual java.lang.Object.toString() : java.lang.String [34]\n" |
| // + |
| // " 38 pop\n" + |
| // " 39 return\n" + |
| // " 40 astore_3 [npe]\n" + |
| // " 41 getstatic java.lang.System.out : java.io.PrintStream [15]\n" + |
| // " 44 ldc <String \"[npe]\"> [38]\n" + |
| // " 46 invokevirtual java.io.PrintStream.print(java.lang.String) : void [23]\n" |
| // + |
| // " 49 getstatic java.lang.System.out : java.io.PrintStream [15]\n" + |
| // " 52 aload_2 [contexts]\n" + |
| // " 53 invokevirtual java.io.PrintStream.print(java.lang.Object) : void [29]\n" |
| // + |
| // " 56 goto 19\n" + |
| // " 59 astore_1 [e]\n" + |
| // " 60 getstatic java.lang.System.out : java.io.PrintStream [15]\n" + |
| // " 63 ldc <String \"[e]\"> [40]\n" + |
| // " 65 invokevirtual java.io.PrintStream.print(java.lang.String) : void [23]\n" |
| // + |
| // " 68 goto 19\n" + |
| // " 71 astore 4\n" + |
| // " 73 iconst_0\n" + |
| // " 74 istore 5 [var]\n" + |
| // " 76 getstatic java.lang.System.out : java.io.PrintStream [15]\n" + |
| // " 79 ldc <String \"[finally]\"> [32]\n" + |
| // " 81 invokevirtual java.io.PrintStream.print(java.lang.String) : void [23]\n" |
| // + |
| // " 84 aconst_null\n" + |
| // " 85 astore 6 [o]\n" + |
| // " 87 aload 6 [o]\n" + |
| // " 89 invokevirtual java.lang.Object.toString() : java.lang.String [34]\n" |
| // + |
| // " 92 pop\n" + |
| // " 93 aload 4\n" + |
| // " 95 athrow\n" + |
| // " Exception Table:\n" + |
| // " [pc: 4, pc: 19] -> 40 when : java.lang.NullPointerException\n" + |
| // " [pc: 0, pc: 19] -> 59 when : java.lang.Exception\n" + |
| // " [pc: 40, pc: 59] -> 59 when : java.lang.Exception\n" + |
| // " [pc: 0, pc: 19] -> 71 when : any\n" + |
| // " [pc: 40, pc: 71] -> 71 when : any\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 4]\n" + |
| // " [pc: 2, line: 5]\n" + |
| // " [pc: 4, line: 7]\n" + |
| // " [pc: 12, line: 8]\n" + |
| // " [pc: 19, line: 19]\n" + |
| // " [pc: 22, line: 20]\n" + |
| // " [pc: 30, line: 21]\n" + |
| // " [pc: 33, line: 22]\n" + |
| // " [pc: 39, line: 9]\n" + |
| // " [pc: 40, line: 10]\n" + |
| // " [pc: 41, line: 11]\n" + |
| // " [pc: 49, line: 12]\n" + |
| // " [pc: 56, line: 13]\n" + |
| // " [pc: 59, line: 15]\n" + |
| // " [pc: 60, line: 16]\n" + |
| // " [pc: 68, line: 17]\n" + |
| // " [pc: 71, line: 18]\n" + |
| // " [pc: 73, line: 19]\n" + |
| // " [pc: 76, line: 20]\n" + |
| // " [pc: 84, line: 21]\n" + |
| // " [pc: 87, line: 22]\n" + |
| // " [pc: 93, line: 23]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 96] local: this index: 0 type: X\n" + |
| // " [pc: 2, pc: 59] local: warnings index: 1 type: java.lang.Object\n" |
| // + |
| // " [pc: 4, pc: 59] local: contexts index: 2 type: java.lang.Object\n" |
| // + |
| // " [pc: 41, pc: 59] local: npe index: 3 type: java.lang.NullPointerException\n" |
| // + |
| // " [pc: 60, pc: 71] local: e index: 1 type: java.lang.Exception\n" |
| // + |
| // " [pc: 22, pc: 39] local: var index: 5 type: int\n" + |
| // " [pc: 76, pc: 93] local: var index: 5 type: int\n" + |
| // " [pc: 33, pc: 39] local: o index: 6 type: java.lang.Object\n" + |
| // " [pc: 87, pc: 93] local: o index: 6 type: java.lang.Object\n"; |
| // } else { |
| // expectedOutput = " // Method descriptor #6 ()V\n" + |
| // " // Stack: 2, Locals: 7\n" + |
| // " public void save();\n" + |
| // " 0 aconst_null\n" + |
| // " 1 astore_1 [warnings]\n" + |
| // " 2 aconst_null\n" + |
| // " 3 astore_2 [contexts]\n" + |
| // " 4 getstatic java.lang.System.out : java.io.PrintStream [15]\n" + |
| // " 7 ldc <String \"[try]\"> [21]\n" + |
| // " 9 invokevirtual java.io.PrintStream.print(java.lang.String) : void [23]\n" |
| // + |
| // " 12 getstatic java.lang.System.out : java.io.PrintStream [15]\n" + |
| // " 15 aload_1 [warnings]\n" + |
| // " 16 invokevirtual java.io.PrintStream.print(java.lang.Object) : void [29]\n" |
| // + |
| // " 19 iconst_0\n" + |
| // " 20 istore 5 [var]\n" + |
| // " 22 getstatic java.lang.System.out : java.io.PrintStream [15]\n" + |
| // " 25 ldc <String \"[finally]\"> [32]\n" + |
| // " 27 invokevirtual java.io.PrintStream.print(java.lang.String) : void [23]\n" |
| // + |
| // " 30 aconst_null\n" + |
| // " 31 astore 6 [o]\n" + |
| // " 33 aload 6 [o]\n" + |
| // " 35 invokevirtual java.lang.Object.toString() : java.lang.String [34]\n" |
| // + |
| // " 38 pop\n" + |
| // " 39 return\n" + |
| // " 40 astore_3 [npe]\n" + |
| // " 41 getstatic java.lang.System.out : java.io.PrintStream [15]\n" + |
| // " 44 ldc <String \"[npe]\"> [38]\n" + |
| // " 46 invokevirtual java.io.PrintStream.print(java.lang.String) : void [23]\n" |
| // + |
| // " 49 getstatic java.lang.System.out : java.io.PrintStream [15]\n" + |
| // " 52 aload_2 [contexts]\n" + |
| // " 53 invokevirtual java.io.PrintStream.print(java.lang.Object) : void [29]\n" |
| // + |
| // " 56 iconst_0\n" + |
| // " 57 istore 5 [var]\n" + |
| // " 59 getstatic java.lang.System.out : java.io.PrintStream [15]\n" + |
| // " 62 ldc <String \"[finally]\"> [32]\n" + |
| // " 64 invokevirtual java.io.PrintStream.print(java.lang.String) : void [23]\n" |
| // + |
| // " 67 aconst_null\n" + |
| // " 68 astore 6 [o]\n" + |
| // " 70 aload 6 [o]\n" + |
| // " 72 invokevirtual java.lang.Object.toString() : java.lang.String [34]\n" |
| // + |
| // " 75 pop\n" + |
| // " 76 return\n" + |
| // " 77 astore_1 [e]\n" + |
| // " 78 getstatic java.lang.System.out : java.io.PrintStream [15]\n" + |
| // " 81 ldc <String \"[e]\"> [40]\n" + |
| // " 83 invokevirtual java.io.PrintStream.print(java.lang.String) : void [23]\n" |
| // + |
| // " 86 iconst_0\n" + |
| // " 87 istore 5 [var]\n" + |
| // " 89 getstatic java.lang.System.out : java.io.PrintStream [15]\n" + |
| // " 92 ldc <String \"[finally]\"> [32]\n" + |
| // " 94 invokevirtual java.io.PrintStream.print(java.lang.String) : void [23]\n" |
| // + |
| // " 97 aconst_null\n" + |
| // " 98 astore 6 [o]\n" + |
| // " 100 aload 6 [o]\n" + |
| // " 102 invokevirtual java.lang.Object.toString() : java.lang.String [34]\n" |
| // + |
| // " 105 pop\n" + |
| // " 106 return\n" + |
| // " 107 astore 4\n" + |
| // " 109 iconst_0\n" + |
| // " 110 istore 5 [var]\n" + |
| // " 112 getstatic java.lang.System.out : java.io.PrintStream [15]\n" + |
| // " 115 ldc <String \"[finally]\"> [32]\n" + |
| // " 117 invokevirtual java.io.PrintStream.print(java.lang.String) : void [23]\n" |
| // + |
| // " 120 aconst_null\n" + |
| // " 121 astore 6 [o]\n" + |
| // " 123 aload 6 [o]\n" + |
| // " 125 invokevirtual java.lang.Object.toString() : java.lang.String [34]\n" |
| // + |
| // " 128 pop\n" + |
| // " 129 aload 4\n" + |
| // " 131 athrow\n" + |
| // " Exception Table:\n" + |
| // " [pc: 4, pc: 19] -> 40 when : java.lang.NullPointerException\n" + |
| // " [pc: 0, pc: 19] -> 77 when : java.lang.Exception\n" + |
| // " [pc: 40, pc: 56] -> 77 when : java.lang.Exception\n" + |
| // " [pc: 0, pc: 19] -> 107 when : any\n" + |
| // " [pc: 40, pc: 56] -> 107 when : any\n" + |
| // " [pc: 77, pc: 86] -> 107 when : any\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 4]\n" + |
| // " [pc: 2, line: 5]\n" + |
| // " [pc: 4, line: 7]\n" + |
| // " [pc: 12, line: 8]\n" + |
| // " [pc: 19, line: 19]\n" + |
| // " [pc: 22, line: 20]\n" + |
| // " [pc: 30, line: 21]\n" + |
| // " [pc: 33, line: 22]\n" + |
| // " [pc: 39, line: 9]\n" + |
| // " [pc: 40, line: 10]\n" + |
| // " [pc: 41, line: 11]\n" + |
| // " [pc: 49, line: 12]\n" + |
| // " [pc: 56, line: 19]\n" + |
| // " [pc: 59, line: 20]\n" + |
| // " [pc: 67, line: 21]\n" + |
| // " [pc: 70, line: 22]\n" + |
| // " [pc: 76, line: 13]\n" + |
| // " [pc: 77, line: 15]\n" + |
| // " [pc: 78, line: 16]\n" + |
| // " [pc: 86, line: 19]\n" + |
| // " [pc: 89, line: 20]\n" + |
| // " [pc: 97, line: 21]\n" + |
| // " [pc: 100, line: 22]\n" + |
| // " [pc: 106, line: 17]\n" + |
| // " [pc: 107, line: 18]\n" + |
| // " [pc: 109, line: 19]\n" + |
| // " [pc: 112, line: 20]\n" + |
| // " [pc: 120, line: 21]\n" + |
| // " [pc: 123, line: 22]\n" + |
| // " [pc: 129, line: 23]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 132] local: this index: 0 type: X\n" + |
| // " [pc: 2, pc: 77] local: warnings index: 1 type: java.lang.Object\n" |
| // + |
| // " [pc: 4, pc: 77] local: contexts index: 2 type: java.lang.Object\n" |
| // + |
| // " [pc: 41, pc: 77] local: npe index: 3 type: java.lang.NullPointerException\n" |
| // + |
| // " [pc: 78, pc: 107] local: e index: 1 type: java.lang.Exception\n" |
| // + |
| // " [pc: 22, pc: 39] local: var index: 5 type: int\n" + |
| // " [pc: 59, pc: 76] local: var index: 5 type: int\n" + |
| // " [pc: 89, pc: 106] local: var index: 5 type: int\n" + |
| // " [pc: 112, pc: 129] local: var index: 5 type: int\n" + |
| // " [pc: 33, pc: 39] local: o index: 6 type: java.lang.Object\n" + |
| // " [pc: 70, pc: 76] local: o index: 6 type: java.lang.Object\n" + |
| // " [pc: 100, pc: 106] local: o index: 6 type: java.lang.Object\n" + |
| // " [pc: 123, pc: 129] local: o index: 6 type: java.lang.Object\n" + |
| // " Stack map table: number of frames 3\n" + |
| // " [pc: 40, full, stack: {java.lang.NullPointerException}, locals: {X, java.lang.Object, java.lang.Object}]\n" |
| // + |
| // " [pc: 77, full, stack: {java.lang.Exception}, locals: {X}]\n" + |
| // " [pc: 107, same_locals_1_stack_item, stack: {java.lang.Throwable}]\n"; |
| // } |
| // } |
| // |
| // try { |
| // File f = new File(OUTPUT_DIR + File.separator + "X.class"); |
| // byte[] classFileBytes = |
| // org.eclipse.wst.jsdt.internal.compiler.util.Util.getFileByteContent(f); |
| // ClassFileBytesDisassembler disassembler = |
| // ToolFactory.createDefaultClassFileBytesDisassembler(); |
| // String result = disassembler.disassemble(classFileBytes, "\n", |
| // ClassFileBytesDisassembler.DETAILED); |
| // int index = result.indexOf(expectedOutput); |
| // if (index == -1 || expectedOutput.length() == 0) { |
| // System.out.println(Util.displayString(result, 3)); |
| // } |
| // if (index == -1) { |
| // assertEquals("Wrong contents", expectedOutput, result); |
| // } |
| // } catch (org.eclipse.wst.jsdt.core.util.ClassFormatException e) { |
| // assertTrue(false); |
| // } catch (IOException e) { |
| // assertTrue(false); |
| // } |
| // } |
| // //https://bugs.eclipse.org/bugs/show_bug.cgi?id=108180 |
| // public void test046() { |
| // this.runConformTest( |
| // new String[] { |
| // "X.java", |
| // "public class X {\n" + |
| // " public static Object sanityCheckBug() {\n" + |
| // " Object obj;\n" + |
| // " try {\n" + |
| // " obj = new Object();\n" + |
| // " return obj;\n" + |
| // " } finally {\n" + |
| // " obj = null;\n" + |
| // " }\n" + |
| // " }\n" + |
| // " public static void main(String[] arguments) {\n" + |
| // " X.sanityCheckBug();\n" + |
| // " }\n" + |
| // "}\n", |
| // }, |
| // ""); |
| // |
| // CompilerOptions compilerOptions = new |
| // CompilerOptions(this.getCompilerOptions()); |
| // String expectedOutput = !compilerOptions.inlineJsrBytecode |
| // ? " // Method descriptor #15 ()Ljava/lang/Object;\n" + |
| // " // Stack: 2, Locals: 4\n" + |
| // " public static java.lang.Object sanityCheckBug();\n" + |
| // " 0 new java.lang.Object [3]\n" + |
| // " 3 dup\n" + |
| // " 4 invokespecial java.lang.Object() [8]\n" + |
| // " 7 astore_0 [obj]\n" + |
| // " 8 aload_0 [obj]\n" + |
| // " 9 astore_3\n" + |
| // " 10 jsr 21\n" + |
| // " 13 aload_3\n" + |
| // " 14 areturn\n" + |
| // " 15 astore_2\n" + |
| // " 16 jsr 21\n" + |
| // " 19 aload_2\n" + |
| // " 20 athrow\n" + |
| // " 21 astore_1\n" + |
| // " 22 aconst_null\n" + |
| // " 23 astore_0 [obj]\n" + |
| // " 24 ret 1\n" + |
| // " Exception Table:\n" + |
| // " [pc: 0, pc: 13] -> 15 when : any\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 5]\n" + |
| // " [pc: 8, line: 6]\n" + |
| // " [pc: 15, line: 7]\n" + |
| // " [pc: 19, line: 9]\n" + |
| // " [pc: 21, line: 7]\n" + |
| // " [pc: 22, line: 8]\n" + |
| // " [pc: 24, line: 9]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 8, pc: 15] local: obj index: 0 type: java.lang.Object\n" + |
| // " [pc: 24, pc: 26] local: obj index: 0 type: java.lang.Object\n" |
| // : null; |
| // |
| // if (expectedOutput == null) { |
| // if (compilerOptions.targetJDK == ClassFileConstants.JDK1_5) { |
| // expectedOutput = " // Method descriptor #15 ()Ljava/lang/Object;\n" + |
| // " // Stack: 2, Locals: 3\n" + |
| // " public static java.lang.Object sanityCheckBug();\n" + |
| // " 0 new java.lang.Object [3]\n" + |
| // " 3 dup\n" + |
| // " 4 invokespecial java.lang.Object() [8]\n" + |
| // " 7 astore_0 [obj]\n" + |
| // " 8 aload_0 [obj]\n" + |
| // " 9 astore_2\n" + |
| // " 10 aconst_null\n" + |
| // " 11 astore_0 [obj]\n" + |
| // " 12 aload_2\n" + |
| // " 13 areturn\n" + |
| // " 14 astore_1\n" + |
| // " 15 aconst_null\n" + |
| // " 16 astore_0 [obj]\n" + |
| // " 17 aload_1\n" + |
| // " 18 athrow\n" + |
| // " Exception Table:\n" + |
| // " [pc: 0, pc: 10] -> 14 when : any\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 5]\n" + |
| // " [pc: 8, line: 6]\n" + |
| // " [pc: 10, line: 8]\n" + |
| // " [pc: 12, line: 6]\n" + |
| // " [pc: 14, line: 7]\n" + |
| // " [pc: 15, line: 8]\n" + |
| // " [pc: 17, line: 9]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 8, pc: 14] local: obj index: 0 type: java.lang.Object\n" + |
| // " [pc: 17, pc: 19] local: obj index: 0 type: java.lang.Object\n"; |
| // } else { |
| // expectedOutput = " // Method descriptor #15 ()Ljava/lang/Object;\n" + |
| // " // Stack: 2, Locals: 3\n" + |
| // " public static java.lang.Object sanityCheckBug();\n" + |
| // " 0 new java.lang.Object [3]\n" + |
| // " 3 dup\n" + |
| // " 4 invokespecial java.lang.Object() [8]\n" + |
| // " 7 astore_0 [obj]\n" + |
| // " 8 aload_0 [obj]\n" + |
| // " 9 astore_2\n" + |
| // " 10 aconst_null\n" + |
| // " 11 astore_0 [obj]\n" + |
| // " 12 aload_2\n" + |
| // " 13 areturn\n" + |
| // " 14 astore_1\n" + |
| // " 15 aconst_null\n" + |
| // " 16 astore_0 [obj]\n" + |
| // " 17 aload_1\n" + |
| // " 18 athrow\n" + |
| // " Exception Table:\n" + |
| // " [pc: 0, pc: 10] -> 14 when : any\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 5]\n" + |
| // " [pc: 8, line: 6]\n" + |
| // " [pc: 10, line: 8]\n" + |
| // " [pc: 12, line: 6]\n" + |
| // " [pc: 14, line: 7]\n" + |
| // " [pc: 15, line: 8]\n" + |
| // " [pc: 17, line: 9]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 8, pc: 14] local: obj index: 0 type: java.lang.Object\n" + |
| // " [pc: 17, pc: 19] local: obj index: 0 type: java.lang.Object\n"; |
| // } |
| // } |
| // |
| // try { |
| // File f = new File(OUTPUT_DIR + File.separator + "X.class"); |
| // byte[] classFileBytes = |
| // org.eclipse.wst.jsdt.internal.compiler.util.Util.getFileByteContent(f); |
| // ClassFileBytesDisassembler disassembler = |
| // ToolFactory.createDefaultClassFileBytesDisassembler(); |
| // String result = disassembler.disassemble(classFileBytes, "\n", |
| // ClassFileBytesDisassembler.DETAILED); |
| // int index = result.indexOf(expectedOutput); |
| // if (index == -1 || expectedOutput.length() == 0) { |
| // System.out.println(Util.displayString(result, 3)); |
| // } |
| // if (index == -1) { |
| // assertEquals("Wrong contents", expectedOutput, result); |
| // } |
| // } catch (org.eclipse.wst.jsdt.core.util.ClassFormatException e) { |
| // assertTrue(false); |
| // } catch (IOException e) { |
| // assertTrue(false); |
| // } |
| // } |
| public void test047() { |
| if (new CompilerOptions(getCompilerOptions()).complianceLevel <= ClassFileConstants.JDK1_3) { |
| this |
| .runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" |
| + " public static void main(String[] args) {\n" |
| + " try {\n" |
| + " if (false) throw null;\n" |
| + " throw new Object();\n" |
| + " } catch(Object o) {\n" |
| + " }\n" |
| + " }\n" + "}\n", }, |
| "----------\n" |
| + "1. ERROR in X.java (at line 4)\n" |
| + " if (false) throw null;\n" |
| + " ^^^^\n" |
| + "Cannot throw null as an exception\n" |
| + "----------\n" |
| + "2. ERROR in X.java (at line 5)\n" |
| + " throw new Object();\n" |
| + " ^^^^^^^^^^^^\n" |
| + "No exception of type Object can be thrown; an exception type must be a subclass of Throwable\n" |
| + "----------\n" |
| + "3. ERROR in X.java (at line 6)\n" |
| + " } catch(Object o) {\n" |
| + " ^^^^^^\n" |
| + "No exception of type Object can be thrown; an exception type must be a subclass of Throwable\n" |
| + "----------\n"); |
| return; |
| } |
| this |
| .runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" |
| + " public static void main(String[] args) {\n" |
| + " try {\n" |
| + " if (false) throw null;\n" |
| + " throw new Object();\n" |
| + " } catch(Object o) {\n" |
| + " }\n" + " }\n" |
| + "}\n", }, |
| "----------\n" |
| + "1. ERROR in X.java (at line 5)\n" |
| + " throw new Object();\n" |
| + " ^^^^^^^^^^^^\n" |
| + "No exception of type Object can be thrown; an exception type must be a subclass of Throwable\n" |
| + "----------\n" |
| + "2. ERROR in X.java (at line 6)\n" |
| + " } catch(Object o) {\n" |
| + " ^^^^^^\n" |
| + "No exception of type Object can be thrown; an exception type must be a subclass of Throwable\n" |
| + "----------\n"); |
| } |
| |
| // //https://bugs.eclipse.org/bugs/show_bug.cgi?id=114894 |
| // public void test048() { |
| // this.runConformTest( |
| // new String[] { |
| // "X.java", |
| // "public class X {\n" + |
| // " boolean bool() { return true; }\n" + |
| // " void foo() {\n" + |
| // " try {\n" + |
| // " if (bool()) {\n" + |
| // " return;\n" + |
| // " }\n" + |
| // " } catch (Exception e) {\n" + |
| // " }\n" + |
| // " }\n" + |
| // " int foo2() {\n" + |
| // " try {\n" + |
| // " while (bool()) {\n" + |
| // " return 0;\n" + |
| // " }\n" + |
| // " } catch (Exception e) {\n" + |
| // " }\n" + |
| // " return 1;\n" + |
| // " }\n" + |
| // " long foo3() {\n" + |
| // " try {\n" + |
| // " do {\n" + |
| // " if (true) return 0L;\n" + |
| // " } while (bool());\n" + |
| // " } catch (Exception e) {\n" + |
| // " }\n" + |
| // " return 1L;\n" + |
| // " } \n" + |
| // " float foo4() {\n" + |
| // " try {\n" + |
| // " for (int i = 0; bool(); i++) {\n" + |
| // " return 0.0F;\n" + |
| // " }\n" + |
| // " } catch (Exception e) {\n" + |
| // " }\n" + |
| // " return 1.0F;\n" + |
| // " } \n" + |
| // " double bar() {\n" + |
| // " if (bool()) {\n" + |
| // " if (bool())\n" + |
| // " return 0.0;\n" + |
| // " } else {\n" + |
| // " if (bool()) {\n" + |
| // " throw new NullPointerException();\n" + |
| // " }\n" + |
| // " }\n" + |
| // " return 1.0;\n" + |
| // " }\n" + |
| // " void baz(int i) {\n" + |
| // " if (bool()) {\n" + |
| // " switch(i) {\n" + |
| // " case 0 : return;\n" + |
| // " default : break;\n" + |
| // " }\n" + |
| // " } else {\n" + |
| // " bool();\n" + |
| // " }\n" + |
| // " }\n" + |
| // "}\n", |
| // }, |
| // ""); |
| // |
| // String expectedOutput = new |
| // CompilerOptions(this.getCompilerOptions()).complianceLevel < |
| // ClassFileConstants.JDK1_6 |
| // ? " // Method descriptor #6 ()V\n" + |
| // " // Stack: 1, Locals: 2\n" + |
| // " void foo();\n" + |
| // " 0 aload_0 [this]\n" + |
| // " 1 invokevirtual X.bool() : boolean [17]\n" + |
| // " 4 ifeq 9\n" + |
| // " 7 return\n" + |
| // " 8 astore_1\n" + |
| // " 9 return\n" + |
| // " Exception Table:\n" + |
| // " [pc: 0, pc: 7] -> 8 when : java.lang.Exception\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 5]\n" + |
| // " [pc: 7, line: 6]\n" + |
| // " [pc: 8, line: 8]\n" + |
| // " [pc: 9, line: 10]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 10] local: this index: 0 type: X\n" + |
| // " \n" + |
| // " // Method descriptor #22 ()I\n" + |
| // " // Stack: 1, Locals: 2\n" + |
| // " int foo2();\n" + |
| // " 0 aload_0 [this]\n" + |
| // " 1 invokevirtual X.bool() : boolean [17]\n" + |
| // " 4 ifeq 10\n" + |
| // " 7 iconst_0\n" + |
| // " 8 ireturn\n" + |
| // " 9 astore_1\n" + |
| // " 10 iconst_1\n" + |
| // " 11 ireturn\n" + |
| // " Exception Table:\n" + |
| // " [pc: 0, pc: 7] -> 9 when : java.lang.Exception\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 13]\n" + |
| // " [pc: 7, line: 14]\n" + |
| // " [pc: 9, line: 16]\n" + |
| // " [pc: 10, line: 18]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 12] local: this index: 0 type: X\n" + |
| // " \n" + |
| // " // Method descriptor #24 ()J\n" + |
| // " // Stack: 2, Locals: 2\n" + |
| // " long foo3();\n" + |
| // " 0 lconst_0\n" + |
| // " 1 lreturn\n" + |
| // " 2 astore_1\n" + |
| // " 3 lconst_1\n" + |
| // " 4 lreturn\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 23]\n" + |
| // " [pc: 2, line: 25]\n" + |
| // " [pc: 3, line: 27]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 5] local: this index: 0 type: X\n" + |
| // " \n" + |
| // " // Method descriptor #26 ()F\n" + |
| // " // Stack: 1, Locals: 2\n" + |
| // " float foo4();\n" + |
| // " 0 iconst_0\n" + |
| // " 1 istore_1 [i]\n" + |
| // " 2 goto 7\n" + |
| // " 5 fconst_0\n" + |
| // " 6 freturn\n" + |
| // " 7 aload_0 [this]\n" + |
| // " 8 invokevirtual X.bool() : boolean [17]\n" + |
| // " 11 ifne 5\n" + |
| // " 14 goto 18\n" + |
| // " 17 astore_1\n" + |
| // " 18 fconst_1\n" + |
| // " 19 freturn\n" + |
| // " Exception Table:\n" + |
| // " [pc: 0, pc: 5] -> 17 when : java.lang.Exception\n" + |
| // " [pc: 7, pc: 14] -> 17 when : java.lang.Exception\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 31]\n" + |
| // " [pc: 5, line: 32]\n" + |
| // " [pc: 7, line: 31]\n" + |
| // " [pc: 17, line: 34]\n" + |
| // " [pc: 18, line: 36]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 20] local: this index: 0 type: X\n" + |
| // " [pc: 2, pc: 14] local: i index: 1 type: int\n" + |
| // " \n" + |
| // " // Method descriptor #30 ()D\n" + |
| // " // Stack: 2, Locals: 1\n" + |
| // " double bar();\n" + |
| // " 0 aload_0 [this]\n" + |
| // " 1 invokevirtual X.bool() : boolean [17]\n" + |
| // " 4 ifeq 16\n" + |
| // " 7 aload_0 [this]\n" + |
| // " 8 invokevirtual X.bool() : boolean [17]\n" + |
| // " 11 ifeq 31\n" + |
| // " 14 dconst_0\n" + |
| // " 15 dreturn\n" + |
| // " 16 aload_0 [this]\n" + |
| // " 17 invokevirtual X.bool() : boolean [17]\n" + |
| // " 20 ifeq 31\n" + |
| // " 23 new java.lang.NullPointerException [31]\n" + |
| // " 26 dup\n" + |
| // " 27 invokespecial java.lang.NullPointerException() [33]\n" + |
| // " 30 athrow\n" + |
| // " 31 dconst_1\n" + |
| // " 32 dreturn\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 39]\n" + |
| // " [pc: 7, line: 40]\n" + |
| // " [pc: 14, line: 41]\n" + |
| // " [pc: 16, line: 43]\n" + |
| // " [pc: 23, line: 44]\n" + |
| // " [pc: 31, line: 47]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 33] local: this index: 0 type: X\n" + |
| // " \n" + |
| // " // Method descriptor #35 (I)V\n" + |
| // " // Stack: 1, Locals: 2\n" + |
| // " void baz(int i);\n" + |
| // " 0 aload_0 [this]\n" + |
| // " 1 invokevirtual X.bool() : boolean [17]\n" + |
| // " 4 ifeq 32\n" + |
| // " 7 iload_1 [i]\n" + |
| // " 8 tableswitch default: 29\n" + |
| // " case 0: 28\n" + |
| // " 28 return\n" + |
| // " 29 goto 37\n" + |
| // " 32 aload_0 [this]\n" + |
| // " 33 invokevirtual X.bool() : boolean [17]\n" + |
| // " 36 pop\n" + |
| // " 37 return\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 50]\n" + |
| // " [pc: 7, line: 51]\n" + |
| // " [pc: 28, line: 52]\n" + |
| // " [pc: 29, line: 53]\n" + |
| // " [pc: 32, line: 56]\n" + |
| // " [pc: 37, line: 58]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 38] local: this index: 0 type: X\n" + |
| // " [pc: 0, pc: 38] local: i index: 1 type: int\n" |
| // : |
| // " // Method descriptor #6 ()V\n" + |
| // " // Stack: 1, Locals: 2\n" + |
| // " void foo();\n" + |
| // " 0 aload_0 [this]\n" + |
| // " 1 invokevirtual X.bool() : boolean [17]\n" + |
| // " 4 ifeq 9\n" + |
| // " 7 return\n" + |
| // " 8 astore_1\n" + |
| // " 9 return\n" + |
| // " Exception Table:\n" + |
| // " [pc: 0, pc: 7] -> 8 when : java.lang.Exception\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 5]\n" + |
| // " [pc: 7, line: 6]\n" + |
| // " [pc: 8, line: 8]\n" + |
| // " [pc: 9, line: 10]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 10] local: this index: 0 type: X\n" + |
| // " Stack map table: number of frames 2\n" + |
| // " [pc: 8, same_locals_1_stack_item, stack: {java.lang.Exception}]\n" |
| // + |
| // " [pc: 9, same]\n" + |
| // " \n" + |
| // " // Method descriptor #23 ()I\n" + |
| // " // Stack: 1, Locals: 2\n" + |
| // " int foo2();\n" + |
| // " 0 aload_0 [this]\n" + |
| // " 1 invokevirtual X.bool() : boolean [17]\n" + |
| // " 4 ifeq 10\n" + |
| // " 7 iconst_0\n" + |
| // " 8 ireturn\n" + |
| // " 9 astore_1\n" + |
| // " 10 iconst_1\n" + |
| // " 11 ireturn\n" + |
| // " Exception Table:\n" + |
| // " [pc: 0, pc: 7] -> 9 when : java.lang.Exception\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 13]\n" + |
| // " [pc: 7, line: 14]\n" + |
| // " [pc: 9, line: 16]\n" + |
| // " [pc: 10, line: 18]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 12] local: this index: 0 type: X\n" + |
| // " Stack map table: number of frames 3\n" + |
| // " [pc: 7, same]\n" + |
| // " [pc: 9, same_locals_1_stack_item, stack: {java.lang.Exception}]\n" |
| // + |
| // " [pc: 10, same]\n" + |
| // " \n" + |
| // " // Method descriptor #25 ()J\n" + |
| // " // Stack: 2, Locals: 2\n" + |
| // " long foo3();\n" + |
| // " 0 lconst_0\n" + |
| // " 1 lreturn\n" + |
| // " 2 astore_1\n" + |
| // " 3 lconst_1\n" + |
| // " 4 lreturn\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 23]\n" + |
| // " [pc: 2, line: 25]\n" + |
| // " [pc: 3, line: 27]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 5] local: this index: 0 type: X\n" + |
| // " Stack map table: number of frames 3\n" + |
| // " [pc: 0, same]\n" + |
| // " [pc: 2, same_locals_1_stack_item, stack: {java.lang.Exception}]\n" |
| // + |
| // " [pc: 3, same]\n" + |
| // " \n" + |
| // " // Method descriptor #27 ()F\n" + |
| // " // Stack: 1, Locals: 2\n" + |
| // " float foo4();\n" + |
| // " 0 iconst_0\n" + |
| // " 1 istore_1 [i]\n" + |
| // " 2 goto 7\n" + |
| // " 5 fconst_0\n" + |
| // " 6 freturn\n" + |
| // " 7 aload_0 [this]\n" + |
| // " 8 invokevirtual X.bool() : boolean [17]\n" + |
| // " 11 ifne 5\n" + |
| // " 14 goto 18\n" + |
| // " 17 astore_1\n" + |
| // " 18 fconst_1\n" + |
| // " 19 freturn\n" + |
| // " Exception Table:\n" + |
| // " [pc: 0, pc: 5] -> 17 when : java.lang.Exception\n" + |
| // " [pc: 7, pc: 14] -> 17 when : java.lang.Exception\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 31]\n" + |
| // " [pc: 5, line: 32]\n" + |
| // " [pc: 7, line: 31]\n" + |
| // " [pc: 17, line: 34]\n" + |
| // " [pc: 18, line: 36]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 20] local: this index: 0 type: X\n" + |
| // " [pc: 2, pc: 14] local: i index: 1 type: int\n" + |
| // " Stack map table: number of frames 4\n" + |
| // " [pc: 5, append: {int}]\n" + |
| // " [pc: 7, same]\n" + |
| // " [pc: 17, full, stack: {java.lang.Exception}, locals: {X}]\n" + |
| // " [pc: 18, same]\n" + |
| // " \n" + |
| // " // Method descriptor #31 ()D\n" + |
| // " // Stack: 2, Locals: 1\n" + |
| // " double bar();\n" + |
| // " 0 aload_0 [this]\n" + |
| // " 1 invokevirtual X.bool() : boolean [17]\n" + |
| // " 4 ifeq 16\n" + |
| // " 7 aload_0 [this]\n" + |
| // " 8 invokevirtual X.bool() : boolean [17]\n" + |
| // " 11 ifeq 31\n" + |
| // " 14 dconst_0\n" + |
| // " 15 dreturn\n" + |
| // " 16 aload_0 [this]\n" + |
| // " 17 invokevirtual X.bool() : boolean [17]\n" + |
| // " 20 ifeq 31\n" + |
| // " 23 new java.lang.NullPointerException [32]\n" + |
| // " 26 dup\n" + |
| // " 27 invokespecial java.lang.NullPointerException() [34]\n" + |
| // " 30 athrow\n" + |
| // " 31 dconst_1\n" + |
| // " 32 dreturn\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 39]\n" + |
| // " [pc: 7, line: 40]\n" + |
| // " [pc: 14, line: 41]\n" + |
| // " [pc: 16, line: 43]\n" + |
| // " [pc: 23, line: 44]\n" + |
| // " [pc: 31, line: 47]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 33] local: this index: 0 type: X\n" + |
| // " Stack map table: number of frames 2\n" + |
| // " [pc: 16, same]\n" + |
| // " [pc: 31, same]\n" + |
| // " \n" + |
| // " // Method descriptor #36 (I)V\n" + |
| // " // Stack: 1, Locals: 2\n" + |
| // " void baz(int i);\n" + |
| // " 0 aload_0 [this]\n" + |
| // " 1 invokevirtual X.bool() : boolean [17]\n" + |
| // " 4 ifeq 32\n" + |
| // " 7 iload_1 [i]\n" + |
| // " 8 tableswitch default: 29\n" + |
| // " case 0: 28\n" + |
| // " 28 return\n" + |
| // " 29 goto 37\n" + |
| // " 32 aload_0 [this]\n" + |
| // " 33 invokevirtual X.bool() : boolean [17]\n" + |
| // " 36 pop\n" + |
| // " 37 return\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 50]\n" + |
| // " [pc: 7, line: 51]\n" + |
| // " [pc: 28, line: 52]\n" + |
| // " [pc: 29, line: 53]\n" + |
| // " [pc: 32, line: 56]\n" + |
| // " [pc: 37, line: 58]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 38] local: this index: 0 type: X\n" + |
| // " [pc: 0, pc: 38] local: i index: 1 type: int\n" + |
| // " Stack map table: number of frames 4\n" + |
| // " [pc: 28, same]\n" + |
| // " [pc: 29, same]\n" + |
| // " [pc: 32, same]\n" + |
| // " [pc: 37, same]\n"; |
| // try { |
| // File f = new File(OUTPUT_DIR + File.separator + "X.class"); |
| // byte[] classFileBytes = |
| // org.eclipse.wst.jsdt.internal.compiler.util.Util.getFileByteContent(f); |
| // ClassFileBytesDisassembler disassembler = |
| // ToolFactory.createDefaultClassFileBytesDisassembler(); |
| // String result = disassembler.disassemble(classFileBytes, "\n", |
| // ClassFileBytesDisassembler.DETAILED); |
| // int index = result.indexOf(expectedOutput); |
| // if (index == -1 || expectedOutput.length() == 0) { |
| // System.out.println(Util.displayString(result, 3)); |
| // } |
| // if (index == -1) { |
| // assertEquals("Wrong contents", expectedOutput, result); |
| // } |
| // } catch (org.eclipse.wst.jsdt.core.util.ClassFormatException e) { |
| // assertTrue(false); |
| // } catch (IOException e) { |
| // assertTrue(false); |
| // } |
| // } |
| // |
| // //https://bugs.eclipse.org/bugs/show_bug.cgi?id=114894 - variation |
| // public void test049() { |
| // this.runConformTest( |
| // new String[] { |
| // "X.java", |
| // "public class X {\n" + |
| // " boolean bool() { return true; }\n" + |
| // " void foo() {\n" + |
| // " try {\n" + |
| // " if (bool()) {\n" + |
| // " throw new NullPointerException();\n" + |
| // " }\n" + |
| // " } catch (Exception e) {\n" + |
| // " }\n" + |
| // " }\n" + |
| // " void foo2() {\n" + |
| // " try {\n" + |
| // " while (bool()) {\n" + |
| // " throw new NullPointerException();\n" + |
| // " }\n" + |
| // " } catch (Exception e) {\n" + |
| // " }\n" + |
| // " }\n" + |
| // " void foo3() {\n" + |
| // " try {\n" + |
| // " do {\n" + |
| // " if (true) throw new NullPointerException();\n" + |
| // " } while (bool());\n" + |
| // " } catch (Exception e) {\n" + |
| // " }\n" + |
| // " } \n" + |
| // " void foo4() {\n" + |
| // " try {\n" + |
| // " for (int i = 0; bool(); i++) {\n" + |
| // " throw new NullPointerException();\n" + |
| // " }\n" + |
| // " } catch (Exception e) {\n" + |
| // " }\n" + |
| // " } \n" + |
| // " void bar() {\n" + |
| // " if (bool()) {\n" + |
| // " if (bool())\n" + |
| // " throw new NullPointerException();\n" + |
| // " } else {\n" + |
| // " if (bool()) {\n" + |
| // " throw new NullPointerException();\n" + |
| // " }\n" + |
| // " }\n" + |
| // " }\n" + |
| // " void baz(int i) {\n" + |
| // " if (bool()) {\n" + |
| // " switch(i) {\n" + |
| // " case 0 : throw new NullPointerException();\n" + |
| // " default : break;\n" + |
| // " }\n" + |
| // " } else {\n" + |
| // " bool();\n" + |
| // " }\n" + |
| // " }\n" + |
| // "}\n", |
| // }, |
| // ""); |
| // |
| // String expectedOutput = new |
| // CompilerOptions(this.getCompilerOptions()).complianceLevel < |
| // ClassFileConstants.JDK1_6 |
| // ? " // Method descriptor #6 ()V\n" + |
| // " // Stack: 2, Locals: 2\n" + |
| // " void foo();\n" + |
| // " 0 aload_0 [this]\n" + |
| // " 1 invokevirtual X.bool() : boolean [17]\n" + |
| // " 4 ifeq 16\n" + |
| // " 7 new java.lang.NullPointerException [19]\n" + |
| // " 10 dup\n" + |
| // " 11 invokespecial java.lang.NullPointerException() [21]\n" + |
| // " 14 athrow\n" + |
| // " 15 astore_1\n" + |
| // " 16 return\n" + |
| // " Exception Table:\n" + |
| // " [pc: 0, pc: 15] -> 15 when : java.lang.Exception\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 5]\n" + |
| // " [pc: 7, line: 6]\n" + |
| // " [pc: 15, line: 8]\n" + |
| // " [pc: 16, line: 10]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 17] local: this index: 0 type: X\n" + |
| // " \n" + |
| // " // Method descriptor #6 ()V\n" + |
| // " // Stack: 2, Locals: 2\n" + |
| // " void foo2();\n" + |
| // " 0 aload_0 [this]\n" + |
| // " 1 invokevirtual X.bool() : boolean [17]\n" + |
| // " 4 ifeq 16\n" + |
| // " 7 new java.lang.NullPointerException [19]\n" + |
| // " 10 dup\n" + |
| // " 11 invokespecial java.lang.NullPointerException() [21]\n" + |
| // " 14 athrow\n" + |
| // " 15 astore_1\n" + |
| // " 16 return\n" + |
| // " Exception Table:\n" + |
| // " [pc: 0, pc: 15] -> 15 when : java.lang.Exception\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 13]\n" + |
| // " [pc: 7, line: 14]\n" + |
| // " [pc: 15, line: 16]\n" + |
| // " [pc: 16, line: 18]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 17] local: this index: 0 type: X\n" + |
| // " \n" + |
| // " // Method descriptor #6 ()V\n" + |
| // " // Stack: 2, Locals: 2\n" + |
| // " void foo3();\n" + |
| // " 0 new java.lang.NullPointerException [19]\n" + |
| // " 3 dup\n" + |
| // " 4 invokespecial java.lang.NullPointerException() [21]\n" + |
| // " 7 athrow\n" + |
| // " 8 astore_1\n" + |
| // " 9 return\n" + |
| // " Exception Table:\n" + |
| // " [pc: 0, pc: 8] -> 8 when : java.lang.Exception\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 22]\n" + |
| // " [pc: 8, line: 24]\n" + |
| // " [pc: 9, line: 26]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 10] local: this index: 0 type: X\n" + |
| // " \n" + |
| // " // Method descriptor #6 ()V\n" + |
| // " // Stack: 2, Locals: 2\n" + |
| // " void foo4();\n" + |
| // " 0 iconst_0\n" + |
| // " 1 istore_1 [i]\n" + |
| // " 2 goto 13\n" + |
| // " 5 new java.lang.NullPointerException [19]\n" + |
| // " 8 dup\n" + |
| // " 9 invokespecial java.lang.NullPointerException() [21]\n" + |
| // " 12 athrow\n" + |
| // " 13 aload_0 [this]\n" + |
| // " 14 invokevirtual X.bool() : boolean [17]\n" + |
| // " 17 ifne 5\n" + |
| // " 20 goto 24\n" + |
| // " 23 astore_1\n" + |
| // " 24 return\n" + |
| // " Exception Table:\n" + |
| // " [pc: 0, pc: 20] -> 23 when : java.lang.Exception\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 29]\n" + |
| // " [pc: 5, line: 30]\n" + |
| // " [pc: 13, line: 29]\n" + |
| // " [pc: 23, line: 32]\n" + |
| // " [pc: 24, line: 34]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 25] local: this index: 0 type: X\n" + |
| // " [pc: 2, pc: 20] local: i index: 1 type: int\n" + |
| // " \n" + |
| // " // Method descriptor #6 ()V\n" + |
| // " // Stack: 2, Locals: 1\n" + |
| // " void bar();\n" + |
| // " 0 aload_0 [this]\n" + |
| // " 1 invokevirtual X.bool() : boolean [17]\n" + |
| // " 4 ifeq 22\n" + |
| // " 7 aload_0 [this]\n" + |
| // " 8 invokevirtual X.bool() : boolean [17]\n" + |
| // " 11 ifeq 37\n" + |
| // " 14 new java.lang.NullPointerException [19]\n" + |
| // " 17 dup\n" + |
| // " 18 invokespecial java.lang.NullPointerException() [21]\n" + |
| // " 21 athrow\n" + |
| // " 22 aload_0 [this]\n" + |
| // " 23 invokevirtual X.bool() : boolean [17]\n" + |
| // " 26 ifeq 37\n" + |
| // " 29 new java.lang.NullPointerException [19]\n" + |
| // " 32 dup\n" + |
| // " 33 invokespecial java.lang.NullPointerException() [21]\n" + |
| // " 36 athrow\n" + |
| // " 37 return\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 36]\n" + |
| // " [pc: 7, line: 37]\n" + |
| // " [pc: 14, line: 38]\n" + |
| // " [pc: 22, line: 40]\n" + |
| // " [pc: 29, line: 41]\n" + |
| // " [pc: 37, line: 44]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 38] local: this index: 0 type: X\n" + |
| // " \n" + |
| // " // Method descriptor #31 (I)V\n" + |
| // " // Stack: 2, Locals: 2\n" + |
| // " void baz(int i);\n" + |
| // " 0 aload_0 [this]\n" + |
| // " 1 invokevirtual X.bool() : boolean [17]\n" + |
| // " 4 ifeq 39\n" + |
| // " 7 iload_1 [i]\n" + |
| // " 8 tableswitch default: 36\n" + |
| // " case 0: 28\n" + |
| // " 28 new java.lang.NullPointerException [19]\n" + |
| // " 31 dup\n" + |
| // " 32 invokespecial java.lang.NullPointerException() [21]\n" + |
| // " 35 athrow\n" + |
| // " 36 goto 44\n" + |
| // " 39 aload_0 [this]\n" + |
| // " 40 invokevirtual X.bool() : boolean [17]\n" + |
| // " 43 pop\n" + |
| // " 44 return\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 46]\n" + |
| // " [pc: 7, line: 47]\n" + |
| // " [pc: 28, line: 48]\n" + |
| // " [pc: 36, line: 49]\n" + |
| // " [pc: 39, line: 52]\n" + |
| // " [pc: 44, line: 54]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 45] local: this index: 0 type: X\n" + |
| // " [pc: 0, pc: 45] local: i index: 1 type: int\n" |
| // : |
| // " // Method descriptor #6 ()V\n" + |
| // " // Stack: 2, Locals: 2\n" + |
| // " void foo();\n" + |
| // " 0 aload_0 [this]\n" + |
| // " 1 invokevirtual X.bool() : boolean [17]\n" + |
| // " 4 ifeq 16\n" + |
| // " 7 new java.lang.NullPointerException [19]\n" + |
| // " 10 dup\n" + |
| // " 11 invokespecial java.lang.NullPointerException() [21]\n" + |
| // " 14 athrow\n" + |
| // " 15 astore_1\n" + |
| // " 16 return\n" + |
| // " Exception Table:\n" + |
| // " [pc: 0, pc: 15] -> 15 when : java.lang.Exception\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 5]\n" + |
| // " [pc: 7, line: 6]\n" + |
| // " [pc: 15, line: 8]\n" + |
| // " [pc: 16, line: 10]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 17] local: this index: 0 type: X\n" + |
| // " Stack map table: number of frames 2\n" + |
| // " [pc: 15, same_locals_1_stack_item, stack: {java.lang.Exception}]\n" |
| // + |
| // " [pc: 16, same]\n" + |
| // " \n" + |
| // " // Method descriptor #6 ()V\n" + |
| // " // Stack: 2, Locals: 2\n" + |
| // " void foo2();\n" + |
| // " 0 aload_0 [this]\n" + |
| // " 1 invokevirtual X.bool() : boolean [17]\n" + |
| // " 4 ifeq 16\n" + |
| // " 7 new java.lang.NullPointerException [19]\n" + |
| // " 10 dup\n" + |
| // " 11 invokespecial java.lang.NullPointerException() [21]\n" + |
| // " 14 athrow\n" + |
| // " 15 astore_1\n" + |
| // " 16 return\n" + |
| // " Exception Table:\n" + |
| // " [pc: 0, pc: 15] -> 15 when : java.lang.Exception\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 13]\n" + |
| // " [pc: 7, line: 14]\n" + |
| // " [pc: 15, line: 16]\n" + |
| // " [pc: 16, line: 18]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 17] local: this index: 0 type: X\n" + |
| // " Stack map table: number of frames 3\n" + |
| // " [pc: 7, same]\n" + |
| // " [pc: 15, same_locals_1_stack_item, stack: {java.lang.Exception}]\n" |
| // + |
| // " [pc: 16, same]\n" + |
| // " \n" + |
| // " // Method descriptor #6 ()V\n" + |
| // " // Stack: 2, Locals: 2\n" + |
| // " void foo3();\n" + |
| // " 0 new java.lang.NullPointerException [19]\n" + |
| // " 3 dup\n" + |
| // " 4 invokespecial java.lang.NullPointerException() [21]\n" + |
| // " 7 athrow\n" + |
| // " 8 astore_1\n" + |
| // " 9 return\n" + |
| // " Exception Table:\n" + |
| // " [pc: 0, pc: 8] -> 8 when : java.lang.Exception\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 22]\n" + |
| // " [pc: 8, line: 24]\n" + |
| // " [pc: 9, line: 26]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 10] local: this index: 0 type: X\n" + |
| // " Stack map table: number of frames 3\n" + |
| // " [pc: 0, same]\n" + |
| // " [pc: 8, same_locals_1_stack_item, stack: {java.lang.Exception}]\n" |
| // + |
| // " [pc: 9, same]\n" + |
| // " \n" + |
| // " // Method descriptor #6 ()V\n" + |
| // " // Stack: 2, Locals: 2\n" + |
| // " void foo4();\n" + |
| // " 0 iconst_0\n" + |
| // " 1 istore_1 [i]\n" + |
| // " 2 goto 13\n" + |
| // " 5 new java.lang.NullPointerException [19]\n" + |
| // " 8 dup\n" + |
| // " 9 invokespecial java.lang.NullPointerException() [21]\n" + |
| // " 12 athrow\n" + |
| // " 13 aload_0 [this]\n" + |
| // " 14 invokevirtual X.bool() : boolean [17]\n" + |
| // " 17 ifne 5\n" + |
| // " 20 goto 24\n" + |
| // " 23 astore_1\n" + |
| // " 24 return\n" + |
| // " Exception Table:\n" + |
| // " [pc: 0, pc: 20] -> 23 when : java.lang.Exception\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 29]\n" + |
| // " [pc: 5, line: 30]\n" + |
| // " [pc: 13, line: 29]\n" + |
| // " [pc: 23, line: 32]\n" + |
| // " [pc: 24, line: 34]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 25] local: this index: 0 type: X\n" + |
| // " [pc: 2, pc: 20] local: i index: 1 type: int\n" + |
| // " Stack map table: number of frames 4\n" + |
| // " [pc: 5, append: {int}]\n" + |
| // " [pc: 13, same]\n" + |
| // " [pc: 23, full, stack: {java.lang.Exception}, locals: {X}]\n" + |
| // " [pc: 24, same]\n" + |
| // " \n" + |
| // " // Method descriptor #6 ()V\n" + |
| // " // Stack: 2, Locals: 1\n" + |
| // " void bar();\n" + |
| // " 0 aload_0 [this]\n" + |
| // " 1 invokevirtual X.bool() : boolean [17]\n" + |
| // " 4 ifeq 22\n" + |
| // " 7 aload_0 [this]\n" + |
| // " 8 invokevirtual X.bool() : boolean [17]\n" + |
| // " 11 ifeq 37\n" + |
| // " 14 new java.lang.NullPointerException [19]\n" + |
| // " 17 dup\n" + |
| // " 18 invokespecial java.lang.NullPointerException() [21]\n" + |
| // " 21 athrow\n" + |
| // " 22 aload_0 [this]\n" + |
| // " 23 invokevirtual X.bool() : boolean [17]\n" + |
| // " 26 ifeq 37\n" + |
| // " 29 new java.lang.NullPointerException [19]\n" + |
| // " 32 dup\n" + |
| // " 33 invokespecial java.lang.NullPointerException() [21]\n" + |
| // " 36 athrow\n" + |
| // " 37 return\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 36]\n" + |
| // " [pc: 7, line: 37]\n" + |
| // " [pc: 14, line: 38]\n" + |
| // " [pc: 22, line: 40]\n" + |
| // " [pc: 29, line: 41]\n" + |
| // " [pc: 37, line: 44]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 38] local: this index: 0 type: X\n" + |
| // " Stack map table: number of frames 2\n" + |
| // " [pc: 22, same]\n" + |
| // " [pc: 37, same]\n" + |
| // " \n" + |
| // " // Method descriptor #32 (I)V\n" + |
| // " // Stack: 2, Locals: 2\n" + |
| // " void baz(int i);\n" + |
| // " 0 aload_0 [this]\n" + |
| // " 1 invokevirtual X.bool() : boolean [17]\n" + |
| // " 4 ifeq 39\n" + |
| // " 7 iload_1 [i]\n" + |
| // " 8 tableswitch default: 36\n" + |
| // " case 0: 28\n" + |
| // " 28 new java.lang.NullPointerException [19]\n" + |
| // " 31 dup\n" + |
| // " 32 invokespecial java.lang.NullPointerException() [21]\n" + |
| // " 35 athrow\n" + |
| // " 36 goto 44\n" + |
| // " 39 aload_0 [this]\n" + |
| // " 40 invokevirtual X.bool() : boolean [17]\n" + |
| // " 43 pop\n" + |
| // " 44 return\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 46]\n" + |
| // " [pc: 7, line: 47]\n" + |
| // " [pc: 28, line: 48]\n" + |
| // " [pc: 36, line: 49]\n" + |
| // " [pc: 39, line: 52]\n" + |
| // " [pc: 44, line: 54]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 45] local: this index: 0 type: X\n" + |
| // " [pc: 0, pc: 45] local: i index: 1 type: int\n" + |
| // " Stack map table: number of frames 4\n" + |
| // " [pc: 28, same]\n" + |
| // " [pc: 36, same]\n" + |
| // " [pc: 39, same]\n" + |
| // " [pc: 44, same]\n"; |
| // try { |
| // File f = new File(OUTPUT_DIR + File.separator + "X.class"); |
| // byte[] classFileBytes = |
| // org.eclipse.wst.jsdt.internal.compiler.util.Util.getFileByteContent(f); |
| // ClassFileBytesDisassembler disassembler = |
| // ToolFactory.createDefaultClassFileBytesDisassembler(); |
| // String result = disassembler.disassemble(classFileBytes, "\n", |
| // ClassFileBytesDisassembler.DETAILED); |
| // int index = result.indexOf(expectedOutput); |
| // if (index == -1 || expectedOutput.length() == 0) { |
| // System.out.println(Util.displayString(result, 3)); |
| // } |
| // if (index == -1) { |
| // assertEquals("Wrong contents", expectedOutput, result); |
| // } |
| // } catch (org.eclipse.wst.jsdt.core.util.ClassFormatException e) { |
| // assertTrue(false); |
| // } catch (IOException e) { |
| // assertTrue(false); |
| // } |
| // } |
| // //https://bugs.eclipse.org/bugs/show_bug.cgi?id=114894 - variation |
| // public void test050() { |
| // this.runConformTest( |
| // new String[] { |
| // "X.java", |
| // "public class X {\n" + |
| // " boolean bool() { return true; }\n" + |
| // " void foo() {\n" + |
| // " check: try {\n" + |
| // " if (bool()) {\n" + |
| // " break check;\n" + |
| // " }\n" + |
| // " } catch (Exception e) {\n" + |
| // " }\n" + |
| // " }\n" + |
| // " void foo2() {\n" + |
| // " check: try {\n" + |
| // " while (bool()) {\n" + |
| // " break check;\n" + |
| // " }\n" + |
| // " } catch (Exception e) {\n" + |
| // " }\n" + |
| // " }\n" + |
| // " void foo3() {\n" + |
| // " check: try {\n" + |
| // " do {\n" + |
| // " if (true) break check;\n" + |
| // " } while (bool());\n" + |
| // " } catch (Exception e) {\n" + |
| // " }\n" + |
| // " } \n" + |
| // " void foo4() {\n" + |
| // " check: try {\n" + |
| // " for (int i = 0; bool(); i++) {\n" + |
| // " break check;\n" + |
| // " }\n" + |
| // " } catch (Exception e) {\n" + |
| // " }\n" + |
| // " }\n" + |
| // " void bar() {\n" + |
| // " check: if (bool()) {\n" + |
| // " if (bool())\n" + |
| // " break check;\n" + |
| // " } else {\n" + |
| // " if (bool()) {\n" + |
| // " break check;\n" + |
| // " }\n" + |
| // " }\n" + |
| // " }\n" + |
| // " void baz(int i) {\n" + |
| // " check: if (bool()) {\n" + |
| // " switch(i) {\n" + |
| // " case 0 : break check;\n" + |
| // " default : break;\n" + |
| // " }\n" + |
| // " } else {\n" + |
| // " bool();\n" + |
| // " }\n" + |
| // " }\n" + |
| // "}\n", |
| // }, |
| // ""); |
| // |
| // String expectedOutput = new |
| // CompilerOptions(this.getCompilerOptions()).complianceLevel < |
| // ClassFileConstants.JDK1_6 |
| // ? " // Method descriptor #6 ()V\n" + |
| // " // Stack: 1, Locals: 2\n" + |
| // " void foo();\n" + |
| // " 0 aload_0 [this]\n" + |
| // " 1 invokevirtual X.bool() : boolean [17]\n" + |
| // " 4 ifeq 11\n" + |
| // " 7 goto 11\n" + |
| // " 10 astore_1\n" + |
| // " 11 return\n" + |
| // " Exception Table:\n" + |
| // " [pc: 0, pc: 7] -> 10 when : java.lang.Exception\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 5]\n" + |
| // " [pc: 7, line: 6]\n" + |
| // " [pc: 10, line: 8]\n" + |
| // " [pc: 11, line: 10]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 12] local: this index: 0 type: X\n" + |
| // " \n" + |
| // " // Method descriptor #6 ()V\n" + |
| // " // Stack: 1, Locals: 2\n" + |
| // " void foo2();\n" + |
| // " 0 aload_0 [this]\n" + |
| // " 1 invokevirtual X.bool() : boolean [17]\n" + |
| // " 4 ifeq 11\n" + |
| // " 7 goto 11\n" + |
| // " 10 astore_1\n" + |
| // " 11 return\n" + |
| // " Exception Table:\n" + |
| // " [pc: 0, pc: 7] -> 10 when : java.lang.Exception\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 13]\n" + |
| // " [pc: 7, line: 14]\n" + |
| // " [pc: 10, line: 16]\n" + |
| // " [pc: 11, line: 18]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 12] local: this index: 0 type: X\n" + |
| // " \n" + |
| // " // Method descriptor #6 ()V\n" + |
| // " // Stack: 1, Locals: 2\n" + |
| // " void foo3();\n" + |
| // " 0 goto 4\n" + |
| // " 3 astore_1\n" + |
| // " 4 return\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 22]\n" + |
| // " [pc: 3, line: 24]\n" + |
| // " [pc: 4, line: 26]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 5] local: this index: 0 type: X\n" + |
| // " \n" + |
| // " // Method descriptor #6 ()V\n" + |
| // " // Stack: 1, Locals: 2\n" + |
| // " void foo4();\n" + |
| // " 0 iconst_0\n" + |
| // " 1 istore_1 [i]\n" + |
| // " 2 aload_0 [this]\n" + |
| // " 3 invokevirtual X.bool() : boolean [17]\n" + |
| // " 6 ifne 13\n" + |
| // " 9 goto 13\n" + |
| // " 12 astore_1\n" + |
| // " 13 return\n" + |
| // " Exception Table:\n" + |
| // " [pc: 0, pc: 9] -> 12 when : java.lang.Exception\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 29]\n" + |
| // " [pc: 12, line: 32]\n" + |
| // " [pc: 13, line: 34]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 14] local: this index: 0 type: X\n" + |
| // " [pc: 2, pc: 9] local: i index: 1 type: int\n" + |
| // " \n" + |
| // " // Method descriptor #6 ()V\n" + |
| // " // Stack: 1, Locals: 1\n" + |
| // " void bar();\n" + |
| // " 0 aload_0 [this]\n" + |
| // " 1 invokevirtual X.bool() : boolean [17]\n" + |
| // " 4 ifeq 17\n" + |
| // " 7 aload_0 [this]\n" + |
| // " 8 invokevirtual X.bool() : boolean [17]\n" + |
| // " 11 ifeq 24\n" + |
| // " 14 goto 24\n" + |
| // " 17 aload_0 [this]\n" + |
| // " 18 invokevirtual X.bool() : boolean [17]\n" + |
| // " 21 ifeq 24\n" + |
| // " 24 return\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 36]\n" + |
| // " [pc: 7, line: 37]\n" + |
| // " [pc: 14, line: 38]\n" + |
| // " [pc: 17, line: 40]\n" + |
| // " [pc: 24, line: 44]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 25] local: this index: 0 type: X\n" + |
| // " \n" + |
| // " // Method descriptor #28 (I)V\n" + |
| // " // Stack: 1, Locals: 2\n" + |
| // " void baz(int i);\n" + |
| // " 0 aload_0 [this]\n" + |
| // " 1 invokevirtual X.bool() : boolean [17]\n" + |
| // " 4 ifeq 34\n" + |
| // " 7 iload_1 [i]\n" + |
| // " 8 tableswitch default: 31\n" + |
| // " case 0: 28\n" + |
| // " 28 goto 39\n" + |
| // " 31 goto 39\n" + |
| // " 34 aload_0 [this]\n" + |
| // " 35 invokevirtual X.bool() : boolean [17]\n" + |
| // " 38 pop\n" + |
| // " 39 return\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 46]\n" + |
| // " [pc: 7, line: 47]\n" + |
| // " [pc: 28, line: 48]\n" + |
| // " [pc: 31, line: 49]\n" + |
| // " [pc: 34, line: 52]\n" + |
| // " [pc: 39, line: 54]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 40] local: this index: 0 type: X\n" + |
| // " [pc: 0, pc: 40] local: i index: 1 type: int\n" |
| // : |
| // " // Method descriptor #6 ()V\n" + |
| // " // Stack: 1, Locals: 2\n" + |
| // " void foo();\n" + |
| // " 0 aload_0 [this]\n" + |
| // " 1 invokevirtual X.bool() : boolean [17]\n" + |
| // " 4 ifeq 11\n" + |
| // " 7 goto 11\n" + |
| // " 10 astore_1\n" + |
| // " 11 return\n" + |
| // " Exception Table:\n" + |
| // " [pc: 0, pc: 7] -> 10 when : java.lang.Exception\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 5]\n" + |
| // " [pc: 7, line: 6]\n" + |
| // " [pc: 10, line: 8]\n" + |
| // " [pc: 11, line: 10]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 12] local: this index: 0 type: X\n" + |
| // " Stack map table: number of frames 2\n" + |
| // " [pc: 10, same_locals_1_stack_item, stack: {java.lang.Exception}]\n" |
| // + |
| // " [pc: 11, same]\n" + |
| // " \n" + |
| // " // Method descriptor #6 ()V\n" + |
| // " // Stack: 1, Locals: 2\n" + |
| // " void foo2();\n" + |
| // " 0 aload_0 [this]\n" + |
| // " 1 invokevirtual X.bool() : boolean [17]\n" + |
| // " 4 ifeq 11\n" + |
| // " 7 goto 11\n" + |
| // " 10 astore_1\n" + |
| // " 11 return\n" + |
| // " Exception Table:\n" + |
| // " [pc: 0, pc: 7] -> 10 when : java.lang.Exception\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 13]\n" + |
| // " [pc: 7, line: 14]\n" + |
| // " [pc: 10, line: 16]\n" + |
| // " [pc: 11, line: 18]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 12] local: this index: 0 type: X\n" + |
| // " Stack map table: number of frames 3\n" + |
| // " [pc: 7, same]\n" + |
| // " [pc: 10, same_locals_1_stack_item, stack: {java.lang.Exception}]\n" |
| // + |
| // " [pc: 11, same]\n" + |
| // " \n" + |
| // " // Method descriptor #6 ()V\n" + |
| // " // Stack: 1, Locals: 2\n" + |
| // " void foo3();\n" + |
| // " 0 goto 4\n" + |
| // " 3 astore_1\n" + |
| // " 4 return\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 22]\n" + |
| // " [pc: 3, line: 24]\n" + |
| // " [pc: 4, line: 26]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 5] local: this index: 0 type: X\n" + |
| // " Stack map table: number of frames 3\n" + |
| // " [pc: 0, same]\n" + |
| // " [pc: 3, same_locals_1_stack_item, stack: {java.lang.Exception}]\n" |
| // + |
| // " [pc: 4, same]\n" + |
| // " \n" + |
| // " // Method descriptor #6 ()V\n" + |
| // " // Stack: 1, Locals: 2\n" + |
| // " void foo4();\n" + |
| // " 0 iconst_0\n" + |
| // " 1 istore_1 [i]\n" + |
| // " 2 aload_0 [this]\n" + |
| // " 3 invokevirtual X.bool() : boolean [17]\n" + |
| // " 6 ifne 13\n" + |
| // " 9 goto 13\n" + |
| // " 12 astore_1\n" + |
| // " 13 return\n" + |
| // " Exception Table:\n" + |
| // " [pc: 0, pc: 9] -> 12 when : java.lang.Exception\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 29]\n" + |
| // " [pc: 12, line: 32]\n" + |
| // " [pc: 13, line: 34]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 14] local: this index: 0 type: X\n" + |
| // " [pc: 2, pc: 9] local: i index: 1 type: int\n" + |
| // " Stack map table: number of frames 3\n" + |
| // " [pc: 2, append: {int}]\n" + |
| // " [pc: 12, full, stack: {java.lang.Exception}, locals: {X}]\n" + |
| // " [pc: 13, same]\n" + |
| // " \n" + |
| // " // Method descriptor #6 ()V\n" + |
| // " // Stack: 1, Locals: 1\n" + |
| // " void bar();\n" + |
| // " 0 aload_0 [this]\n" + |
| // " 1 invokevirtual X.bool() : boolean [17]\n" + |
| // " 4 ifeq 17\n" + |
| // " 7 aload_0 [this]\n" + |
| // " 8 invokevirtual X.bool() : boolean [17]\n" + |
| // " 11 ifeq 24\n" + |
| // " 14 goto 24\n" + |
| // " 17 aload_0 [this]\n" + |
| // " 18 invokevirtual X.bool() : boolean [17]\n" + |
| // " 21 ifeq 24\n" + |
| // " 24 return\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 36]\n" + |
| // " [pc: 7, line: 37]\n" + |
| // " [pc: 14, line: 38]\n" + |
| // " [pc: 17, line: 40]\n" + |
| // " [pc: 24, line: 44]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 25] local: this index: 0 type: X\n" + |
| // " Stack map table: number of frames 2\n" + |
| // " [pc: 17, same]\n" + |
| // " [pc: 24, same]\n" + |
| // " \n" + |
| // " // Method descriptor #29 (I)V\n" + |
| // " // Stack: 1, Locals: 2\n" + |
| // " void baz(int i);\n" + |
| // " 0 aload_0 [this]\n" + |
| // " 1 invokevirtual X.bool() : boolean [17]\n" + |
| // " 4 ifeq 34\n" + |
| // " 7 iload_1 [i]\n" + |
| // " 8 tableswitch default: 31\n" + |
| // " case 0: 28\n" + |
| // " 28 goto 39\n" + |
| // " 31 goto 39\n" + |
| // " 34 aload_0 [this]\n" + |
| // " 35 invokevirtual X.bool() : boolean [17]\n" + |
| // " 38 pop\n" + |
| // " 39 return\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 46]\n" + |
| // " [pc: 7, line: 47]\n" + |
| // " [pc: 28, line: 48]\n" + |
| // " [pc: 31, line: 49]\n" + |
| // " [pc: 34, line: 52]\n" + |
| // " [pc: 39, line: 54]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 40] local: this index: 0 type: X\n" + |
| // " [pc: 0, pc: 40] local: i index: 1 type: int\n" + |
| // " Stack map table: number of frames 4\n" + |
| // " [pc: 28, same]\n" + |
| // " [pc: 31, same]\n" + |
| // " [pc: 34, same]\n" + |
| // " [pc: 39, same]\n"; |
| // |
| // try { |
| // File f = new File(OUTPUT_DIR + File.separator + "X.class"); |
| // byte[] classFileBytes = |
| // org.eclipse.wst.jsdt.internal.compiler.util.Util.getFileByteContent(f); |
| // ClassFileBytesDisassembler disassembler = |
| // ToolFactory.createDefaultClassFileBytesDisassembler(); |
| // String result = disassembler.disassemble(classFileBytes, "\n", |
| // ClassFileBytesDisassembler.DETAILED); |
| // int index = result.indexOf(expectedOutput); |
| // if (index == -1 || expectedOutput.length() == 0) { |
| // System.out.println(Util.displayString(result, 3)); |
| // } |
| // if (index == -1) { |
| // assertEquals("Wrong contents", expectedOutput, result); |
| // } |
| // } catch (org.eclipse.wst.jsdt.core.util.ClassFormatException e) { |
| // assertTrue(false); |
| // } catch (IOException e) { |
| // assertTrue(false); |
| // } |
| // } |
| // //https://bugs.eclipse.org/bugs/show_bug.cgi?id=114894 - variation |
| // public void test051() { |
| // this.runConformTest( |
| // new String[] { |
| // "X.java", |
| // "public class X {\n" + |
| // " public static void main(String argv[]) {\n" + |
| // " System.out.println(\"[count=\" + count() + \"]\");\n" + |
| // " }\n" + |
| // " static int count() {\n" + |
| // " int count = 0;\n" + |
| // " try {\n" + |
| // " for (int i = 0;;) {\n" + |
| // " count++;\n" + |
| // " if (i++ > 10) \n" + |
| // " break; \n" + |
| // " }\n" + |
| // " } catch(Exception e) {\n" + |
| // " }\n" + |
| // " return count;\n" + |
| // " }\n" + |
| // "}\n", |
| // }, |
| // "[count=12]"); |
| // |
| // String expectedOutput = new |
| // CompilerOptions(this.getCompilerOptions()).complianceLevel < |
| // ClassFileConstants.JDK1_6 |
| // ? " // Method descriptor #32 ()I\n" + |
| // " // Stack: 2, Locals: 2\n" + |
| // " static int count();\n" + |
| // " 0 iconst_0\n" + |
| // " 1 istore_0 [count]\n" + |
| // " 2 iconst_0\n" + |
| // " 3 istore_1 [i]\n" + |
| // " 4 iinc 0 1 [count]\n" + |
| // " 7 iload_1 [i]\n" + |
| // " 8 iinc 1 1 [i]\n" + |
| // " 11 bipush 10\n" + |
| // " 13 if_icmple 4\n" + |
| // " 16 goto 20\n" + |
| // " 19 astore_1\n" + |
| // " 20 iload_0 [count]\n" + |
| // " 21 ireturn\n" + |
| // " Exception Table:\n" + |
| // " [pc: 2, pc: 16] -> 19 when : java.lang.Exception\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 6]\n" + |
| // " [pc: 2, line: 8]\n" + |
| // " [pc: 4, line: 9]\n" + |
| // " [pc: 7, line: 10]\n" + |
| // " [pc: 16, line: 11]\n" + |
| // " [pc: 19, line: 13]\n" + |
| // " [pc: 20, line: 15]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 2, pc: 22] local: count index: 0 type: int\n" + |
| // " [pc: 4, pc: 16] local: i index: 1 type: int\n" |
| // : |
| // " // Method descriptor #32 ()I\n" + |
| // " // Stack: 2, Locals: 2\n" + |
| // " static int count();\n" + |
| // " 0 iconst_0\n" + |
| // " 1 istore_0 [count]\n" + |
| // " 2 iconst_0\n" + |
| // " 3 istore_1 [i]\n" + |
| // " 4 iinc 0 1 [count]\n" + |
| // " 7 iload_1 [i]\n" + |
| // " 8 iinc 1 1 [i]\n" + |
| // " 11 bipush 10\n" + |
| // " 13 if_icmple 4\n" + |
| // " 16 goto 20\n" + |
| // " 19 astore_1\n" + |
| // " 20 iload_0 [count]\n" + |
| // " 21 ireturn\n" + |
| // " Exception Table:\n" + |
| // " [pc: 2, pc: 16] -> 19 when : java.lang.Exception\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 6]\n" + |
| // " [pc: 2, line: 8]\n" + |
| // " [pc: 4, line: 9]\n" + |
| // " [pc: 7, line: 10]\n" + |
| // " [pc: 16, line: 11]\n" + |
| // " [pc: 19, line: 13]\n" + |
| // " [pc: 20, line: 15]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 2, pc: 22] local: count index: 0 type: int\n" + |
| // " [pc: 4, pc: 16] local: i index: 1 type: int\n" + |
| // " Stack map table: number of frames 4\n" + |
| // " [pc: 4, append: {int, int}]\n" + |
| // " [pc: 16, chop 1 local(s)]\n" + |
| // " [pc: 19, same_locals_1_stack_item, stack: {java.lang.Exception}]\n" |
| // + |
| // " [pc: 20, same]\n"; |
| // |
| // try { |
| // File f = new File(OUTPUT_DIR + File.separator + "X.class"); |
| // byte[] classFileBytes = |
| // org.eclipse.wst.jsdt.internal.compiler.util.Util.getFileByteContent(f); |
| // ClassFileBytesDisassembler disassembler = |
| // ToolFactory.createDefaultClassFileBytesDisassembler(); |
| // String result = disassembler.disassemble(classFileBytes, "\n", |
| // ClassFileBytesDisassembler.DETAILED); |
| // int index = result.indexOf(expectedOutput); |
| // if (index == -1 || expectedOutput.length() == 0) { |
| // System.out.println(Util.displayString(result, 3)); |
| // } |
| // if (index == -1) { |
| // assertEquals("Wrong contents", expectedOutput, result); |
| // } |
| // } catch (org.eclipse.wst.jsdt.core.util.ClassFormatException e) { |
| // assertTrue(false); |
| // } catch (IOException e) { |
| // assertTrue(false); |
| // } |
| // } |
| // //https://bugs.eclipse.org/bugs/show_bug.cgi?id=114894 - variation |
| // public void test052() { |
| // this.runConformTest( |
| // new String[] { |
| // "X.java", |
| // "public class X {\n" + |
| // " public static void main(String argv[]) {\n" + |
| // " try {\n" + |
| // " for (int i = 0; i < 0; i++)\n" + |
| // " do ; while (true);\n" + |
| // " } catch(Exception e) {\n" + |
| // " }\n" + |
| // " } \n" + |
| // "}\n", |
| // }, |
| // ""); |
| // |
| // String expectedOutput = new |
| // CompilerOptions(this.getCompilerOptions()).complianceLevel < |
| // ClassFileConstants.JDK1_6 |
| // ? " // Method descriptor #15 ([Ljava/lang/String;)V\n" + |
| // " // Stack: 1, Locals: 2\n" + |
| // " public static void main(java.lang.String[] argv);\n" + |
| // " 0 iconst_0\n" + |
| // " 1 istore_1 [i]\n" + |
| // " 2 goto 8\n" + |
| // " 5 goto 5\n" + |
| // " 8 iload_1 [i]\n" + |
| // " 9 iflt 5\n" + |
| // " 12 goto 16\n" + |
| // " 15 astore_1\n" + |
| // " 16 return\n" + |
| // " Exception Table:\n" + |
| // " [pc: 0, pc: 12] -> 15 when : java.lang.Exception\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 4]\n" + |
| // " [pc: 5, line: 5]\n" + |
| // " [pc: 8, line: 4]\n" + |
| // " [pc: 15, line: 6]\n" + |
| // " [pc: 16, line: 8]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 17] local: argv index: 0 type: java.lang.String[]\n" |
| // + |
| // " [pc: 2, pc: 12] local: i index: 1 type: int\n" |
| // : |
| // " // Method descriptor #15 ([Ljava/lang/String;)V\n" + |
| // " // Stack: 1, Locals: 2\n" + |
| // " public static void main(java.lang.String[] argv);\n" + |
| // " 0 iconst_0\n" + |
| // " 1 istore_1 [i]\n" + |
| // " 2 goto 8\n" + |
| // " 5 goto 5\n" + |
| // " 8 iload_1 [i]\n" + |
| // " 9 iflt 5\n" + |
| // " 12 goto 16\n" + |
| // " 15 astore_1\n" + |
| // " 16 return\n" + |
| // " Exception Table:\n" + |
| // " [pc: 0, pc: 12] -> 15 when : java.lang.Exception\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 4]\n" + |
| // " [pc: 5, line: 5]\n" + |
| // " [pc: 8, line: 4]\n" + |
| // " [pc: 15, line: 6]\n" + |
| // " [pc: 16, line: 8]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 17] local: argv index: 0 type: java.lang.String[]\n" |
| // + |
| // " [pc: 2, pc: 12] local: i index: 1 type: int\n" + |
| // " Stack map table: number of frames 4\n" + |
| // " [pc: 5, append: {int}]\n" + |
| // " [pc: 8, same]\n" + |
| // " [pc: 15, full, stack: {java.lang.Exception}, locals: {java.lang.String[]}]\n" |
| // + |
| // " [pc: 16, same]\n"; |
| // |
| // try { |
| // File f = new File(OUTPUT_DIR + File.separator + "X.class"); |
| // byte[] classFileBytes = |
| // org.eclipse.wst.jsdt.internal.compiler.util.Util.getFileByteContent(f); |
| // ClassFileBytesDisassembler disassembler = |
| // ToolFactory.createDefaultClassFileBytesDisassembler(); |
| // String result = disassembler.disassemble(classFileBytes, "\n", |
| // ClassFileBytesDisassembler.DETAILED); |
| // int index = result.indexOf(expectedOutput); |
| // if (index == -1 || expectedOutput.length() == 0) { |
| // System.out.println(Util.displayString(result, 3)); |
| // } |
| // if (index == -1) { |
| // assertEquals("Wrong contents", expectedOutput, result); |
| // } |
| // } catch (org.eclipse.wst.jsdt.core.util.ClassFormatException e) { |
| // assertTrue(false); |
| // } catch (IOException e) { |
| // assertTrue(false); |
| // } |
| // } |
| // //https://bugs.eclipse.org/bugs/show_bug.cgi?id=114894 - variation |
| // public void test053() { |
| // this.runConformTest( |
| // new String[] { |
| // "X.java", |
| // "public class X {\n" + |
| // " public static void main(String[] args) {\n" + |
| // " try {\n" + |
| // " final int val;\n" + |
| // " for (val = 7; val > 0;) break;\n" + |
| // " System.out.println(val);\n" + |
| // " } catch(Exception e) {\n" + |
| // " }\n" + |
| // " } \n" + |
| // "}\n", |
| // }, |
| // "7"); |
| // |
| // String expectedOutput = new |
| // CompilerOptions(this.getCompilerOptions()).complianceLevel < |
| // ClassFileConstants.JDK1_6 |
| // ? " // Method descriptor #15 ([Ljava/lang/String;)V\n" + |
| // " // Stack: 2, Locals: 2\n" + |
| // " public static void main(java.lang.String[] args);\n" + |
| // " 0 bipush 7\n" + |
| // " 2 istore_1 [val]\n" + |
| // " 3 iload_1 [val]\n" + |
| // " 4 ifgt 7\n" + |
| // " 7 getstatic java.lang.System.out : java.io.PrintStream [16]\n" + |
| // " 10 iload_1 [val]\n" + |
| // " 11 invokevirtual java.io.PrintStream.println(int) : void [22]\n" + |
| // " 14 goto 18\n" + |
| // " 17 astore_1\n" + |
| // " 18 return\n" + |
| // " Exception Table:\n" + |
| // " [pc: 0, pc: 14] -> 17 when : java.lang.Exception\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 5]\n" + |
| // " [pc: 7, line: 6]\n" + |
| // " [pc: 17, line: 7]\n" + |
| // " [pc: 18, line: 9]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 19] local: args index: 0 type: java.lang.String[]\n" |
| // + |
| // " [pc: 3, pc: 17] local: val index: 1 type: int\n" |
| // : |
| // " // Method descriptor #15 ([Ljava/lang/String;)V\n" + |
| // " // Stack: 2, Locals: 2\n" + |
| // " public static void main(java.lang.String[] args);\n" + |
| // " 0 bipush 7\n" + |
| // " 2 istore_1 [val]\n" + |
| // " 3 iload_1 [val]\n" + |
| // " 4 ifgt 7\n" + |
| // " 7 getstatic java.lang.System.out : java.io.PrintStream [16]\n" + |
| // " 10 iload_1 [val]\n" + |
| // " 11 invokevirtual java.io.PrintStream.println(int) : void [22]\n" + |
| // " 14 goto 18\n" + |
| // " 17 astore_1\n" + |
| // " 18 return\n" + |
| // " Exception Table:\n" + |
| // " [pc: 0, pc: 14] -> 17 when : java.lang.Exception\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 5]\n" + |
| // " [pc: 7, line: 6]\n" + |
| // " [pc: 17, line: 7]\n" + |
| // " [pc: 18, line: 9]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 19] local: args index: 0 type: java.lang.String[]\n" |
| // + |
| // " [pc: 3, pc: 17] local: val index: 1 type: int\n" + |
| // " Stack map table: number of frames 4\n" + |
| // " [pc: 3, append: {int}]\n" + |
| // " [pc: 7, same]\n" + |
| // " [pc: 17, full, stack: {java.lang.Exception}, locals: {java.lang.String[]}]\n" |
| // + |
| // " [pc: 18, same]\n"; |
| // |
| // try { |
| // File f = new File(OUTPUT_DIR + File.separator + "X.class"); |
| // byte[] classFileBytes = |
| // org.eclipse.wst.jsdt.internal.compiler.util.Util.getFileByteContent(f); |
| // ClassFileBytesDisassembler disassembler = |
| // ToolFactory.createDefaultClassFileBytesDisassembler(); |
| // String result = disassembler.disassemble(classFileBytes, "\n", |
| // ClassFileBytesDisassembler.DETAILED); |
| // int index = result.indexOf(expectedOutput); |
| // if (index == -1 || expectedOutput.length() == 0) { |
| // System.out.println(Util.displayString(result, 3)); |
| // } |
| // if (index == -1) { |
| // assertEquals("Wrong contents", expectedOutput, result); |
| // } |
| // } catch (org.eclipse.wst.jsdt.core.util.ClassFormatException e) { |
| // assertTrue(false); |
| // } catch (IOException e) { |
| // assertTrue(false); |
| // } |
| // } |
| // //https://bugs.eclipse.org/bugs/show_bug.cgi?id=114894 - variation |
| // public void test054() { |
| // this.runConformTest( |
| // new String[] { |
| // "X.java", |
| // "public class X {\n" + |
| // " X parent;\n" + |
| // " int kind;\n" + |
| // " static boolean F = false;\n" + |
| // " public static void main(String[] args) {\n" + |
| // " X x = new X();\n" + |
| // " x.kind = 2; \n" + |
| // " try {\n" + |
| // " x.foo();\n" + |
| // " } catch(NullPointerException e) { \n" + |
| // " System.out.println(\"SUCCESS\");\n" + |
| // " return;\n" + |
| // " }\n" + |
| // " System.out.println(\"FAILED\"); \n" + |
| // " }\n" + |
| // " void foo() {\n" + |
| // " X x = this;\n" + |
| // " done : while (true) {\n" + |
| // " switch (x.kind) {\n" + |
| // " case 2 :\n" + |
| // " if (F) {\n" + |
| // " return;\n" + |
| // " }\n" + |
| // " break;\n" + |
| // " case 3 :\n" + |
| // " break done;\n" + |
| // " }\n" + |
| // " x = x.parent; // should throw npe\n" + |
| // " }\n" + |
| // " } \n" + |
| // "}\n", |
| // }, |
| // "SUCCESS"); |
| // |
| // String expectedOutput = new |
| // CompilerOptions(this.getCompilerOptions()).complianceLevel < |
| // ClassFileConstants.JDK1_6 |
| // ? " // Method descriptor #12 ()V\n" + |
| // " // Stack: 1, Locals: 2\n" + |
| // " void foo();\n" + |
| // " 0 aload_0 [this]\n" + |
| // " 1 astore_1 [x]\n" + |
| // " 2 aload_1 [x]\n" + |
| // " 3 getfield X.kind : int [25]\n" + |
| // " 6 tableswitch default: 38\n" + |
| // " case 2: 28\n" + |
| // " case 3: 35\n" + |
| // " 28 getstatic X.F : boolean [14]\n" + |
| // " 31 ifeq 38\n" + |
| // " 34 return\n" + |
| // " 35 goto 46\n" + |
| // " 38 aload_1 [x]\n" + |
| // " 39 getfield X.parent : X [53]\n" + |
| // " 42 astore_1 [x]\n" + |
| // " 43 goto 2\n" + |
| // " 46 return\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 17]\n" + |
| // " [pc: 2, line: 19]\n" + |
| // " [pc: 28, line: 21]\n" + |
| // " [pc: 34, line: 22]\n" + |
| // " [pc: 35, line: 26]\n" + |
| // " [pc: 38, line: 27]\n" + |
| // " [pc: 39, line: 28]\n" + |
| // " [pc: 43, line: 18]\n" + |
| // " [pc: 46, line: 30]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 47] local: this index: 0 type: X\n" + |
| // " [pc: 2, pc: 47] local: x index: 1 type: X\n" |
| // : |
| // " // Method descriptor #12 ()V\n" + |
| // " // Stack: 1, Locals: 2\n" + |
| // " void foo();\n" + |
| // " 0 aload_0 [this]\n" + |
| // " 1 astore_1 [x]\n" + |
| // " 2 aload_1 [x]\n" + |
| // " 3 getfield X.kind : int [25]\n" + |
| // " 6 tableswitch default: 38\n" + |
| // " case 2: 28\n" + |
| // " case 3: 35\n" + |
| // " 28 getstatic X.F : boolean [14]\n" + |
| // " 31 ifeq 38\n" + |
| // " 34 return\n" + |
| // " 35 goto 46\n" + |
| // " 38 aload_1 [x]\n" + |
| // " 39 getfield X.parent : X [55]\n" + |
| // " 42 astore_1 [x]\n" + |
| // " 43 goto 2\n" + |
| // " 46 return\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 17]\n" + |
| // " [pc: 2, line: 19]\n" + |
| // " [pc: 28, line: 21]\n" + |
| // " [pc: 34, line: 22]\n" + |
| // " [pc: 35, line: 26]\n" + |
| // " [pc: 38, line: 27]\n" + |
| // " [pc: 39, line: 28]\n" + |
| // " [pc: 43, line: 18]\n" + |
| // " [pc: 46, line: 30]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 47] local: this index: 0 type: X\n" + |
| // " [pc: 2, pc: 47] local: x index: 1 type: X\n" + |
| // " Stack map table: number of frames 5\n" + |
| // " [pc: 2, append: {X}]\n" + |
| // " [pc: 28, same]\n" + |
| // " [pc: 35, same]\n" + |
| // " [pc: 38, same]\n" + |
| // " [pc: 46, same]\n"; |
| // |
| // try { |
| // File f = new File(OUTPUT_DIR + File.separator + "X.class"); |
| // byte[] classFileBytes = |
| // org.eclipse.wst.jsdt.internal.compiler.util.Util.getFileByteContent(f); |
| // ClassFileBytesDisassembler disassembler = |
| // ToolFactory.createDefaultClassFileBytesDisassembler(); |
| // String result = disassembler.disassemble(classFileBytes, "\n", |
| // ClassFileBytesDisassembler.DETAILED); |
| // int index = result.indexOf(expectedOutput); |
| // if (index == -1 || expectedOutput.length() == 0) { |
| // System.out.println(Util.displayString(result, 3)); |
| // } |
| // if (index == -1) { |
| // assertEquals("Wrong contents", expectedOutput, result); |
| // } |
| // } catch (org.eclipse.wst.jsdt.core.util.ClassFormatException e) { |
| // assertTrue(false); |
| // } catch (IOException e) { |
| // assertTrue(false); |
| // } |
| // } |
| // //https://bugs.eclipse.org/bugs/show_bug.cgi?id=114894 - variation |
| // public void test055() { |
| // this.runConformTest( |
| // new String[] { |
| // "X.java", |
| // "public class X {\n" + |
| // "\n" + |
| // "void foo5() {\n" + |
| // " L : for (;;) {\n" + |
| // " continue L; // good\n" + |
| // " }\n" + |
| // "}\n" + |
| // "}\n", |
| // }, |
| // ""); |
| // |
| // String expectedOutput = new |
| // CompilerOptions(this.getCompilerOptions()).complianceLevel < |
| // ClassFileConstants.JDK1_6 |
| // ? " // Method descriptor #6 ()V\n" + |
| // " // Stack: 0, Locals: 1\n" + |
| // " void foo5();\n" + |
| // " 0 goto 0\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 4]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 3] local: this index: 0 type: X\n" |
| // : |
| // " // Method descriptor #6 ()V\n" + |
| // " // Stack: 0, Locals: 1\n" + |
| // " void foo5();\n" + |
| // " 0 goto 0\n" + |
| // " Line numbers:\n" + |
| // " [pc: 0, line: 4]\n" + |
| // " Local variable table:\n" + |
| // " [pc: 0, pc: 3] local: this index: 0 type: X\n" + |
| // " Stack map table: number of frames 1\n" + |
| // " [pc: 0, same]\n"; |
| // |
| // try { |
| // File f = new File(OUTPUT_DIR + File.separator + "X.class"); |
| // byte[] classFileBytes = |
| // org.eclipse.wst.jsdt.internal.compiler.util.Util.getFileByteContent(f); |
| // ClassFileBytesDisassembler disassembler = |
| // ToolFactory.createDefaultClassFileBytesDisassembler(); |
| // String result = disassembler.disassemble(classFileBytes, "\n", |
| // ClassFileBytesDisassembler.DETAILED); |
| // int index = result.indexOf(expectedOutput); |
| // if (index == -1 || expectedOutput.length() == 0) { |
| // System.out.println(Util.displayString(result, 3)); |
| // } |
| // if (index == -1) { |
| // assertEquals("Wrong contents", expectedOutput, result); |
| // } |
| // } catch (org.eclipse.wst.jsdt.core.util.ClassFormatException e) { |
| // assertTrue(false); |
| // } catch (IOException e) { |
| // assertTrue(false); |
| // } |
| // } |
| public void _test056() { |
| this |
| .runNegativeTest( |
| new String[] { |
| "p/BytecodeA.java", |
| "package p;\n" |
| + "class BytecodeA {\n" |
| + " \n" |
| + "int foo() { // good\n" |
| + " boolean b = true;\n" |
| + " if (b) {\n" |
| + " if (true)\n" |
| + " return 0;\n" |
| + " } else {\n" |
| + " if (true)\n" |
| + " return 1;\n" |
| + " }\n" |
| + " return 5;\n" |
| + "}\n" |
| + "int foo10() {\n" |
| + " try {\n" |
| + " //if (true)\n" |
| + " return 0;\n" |
| + " } catch (Exception e) {\n" |
| + " if (true)\n" |
| + " return 1;\n" |
| + " } finally {\n" |
| + " if (true)\n" |
| + " return 2;\n" |
| + " };\n" |
| + " return 1;\n" |
| + "} \n" |
| + "int foo11() {\n" |
| + " synchronized (this) {\n" |
| + " if (true)\n" |
| + " return 1;\n" |
| + " };\n" |
| + " return 2;\n" |
| + "} \n" |
| + "int foo12() {\n" |
| + " for (;;)\n" |
| + " return 1;\n" |
| + "}\n" |
| + "int foo13() {\n" |
| + " for (;;)\n" |
| + " if (true)\n" |
| + " return 1;\n" |
| + "}\n" |
| + "int foo14() {\n" |
| + " for (int i = 1; i < 10; i++)\n" |
| + " if (true)\n" |
| + " return 1;\n" |
| + " return 2;\n" |
| + "} \n" |
| + "int foo15() {\n" |
| + " for (int i = 1; i < 10; i++)\n" |
| + " return 1;\n" |
| + " return 2;\n" |
| + "}\n" |
| + "int foo16() {\n" |
| + " final int i;\n" |
| + " while (true) {\n" |
| + " i = 1;\n" |
| + " if (true)\n" |
| + " break;\n" |
| + " };\n" |
| + " return 1;\n" |
| + "} \n" |
| + "int foo17() {\n" |
| + " final int i;\n" |
| + " for (;;) {\n" |
| + " i = 1;\n" |
| + " if (true)\n" |
| + " break;\n" |
| + " };\n" |
| + " return 1;\n" |
| + "} \n" |
| + "void foo2() {\n" |
| + " L1 :; // good\n" |
| + "}\n" |
| + "void foo20() {\n" |
| + " if (true)\n" |
| + " return;\n" |
| + "} \n" |
| + "void foo3() {\n" |
| + " L : if (true) {\n" |
| + " for (;;) {\n" |
| + " continue L; // bad\n" |
| + " }\n" |
| + " }\n" |
| + "} \n" |
| + "void foo4() {\n" |
| + " L : if (true) {\n" |
| + " try {\n" |
| + " for (;;) {\n" |
| + " continue L; // bad\n" |
| + " }\n" |
| + " } finally {\n" |
| + " return;\n" |
| + " }\n" |
| + " } \n" |
| + "}\n" |
| + "void foo5() {\n" |
| + " L : for (;;) {\n" |
| + " continue L; // good\n" |
| + " }\n" |
| + "}\n" |
| + "void foo5bis() {\n" |
| + " L : K : for (;;) {\n" |
| + " continue L; // good\n" |
| + " }\n" |
| + "}\n" |
| + "void foo6(){\n" |
| + " int i;\n" |
| + " boolean a[] = new boolean[5];\n" |
| + " a[i=1] = i > 0; // good\n" |
| + "} \n" |
| + "void foo7(){\n" |
| + " Object x[];\n" |
| + " x [1] = (x = new Object[5]); // bad\n" |
| + "} \n" |
| + "void foo8() {\n" |
| + " try {\n" |
| + " } catch (java.io.IOException e) {\n" |
| + " foo(); // unreachable\n" |
| + " }\n" |
| + "}\n" |
| + "void foo9() {\n" |
| + " try {\n" |
| + " } catch (NullPointerException e) {\n" |
| + " foo(); // ok\n" |
| + " }\n" |
| + "}\n" |
| + " public static void main(String args[]) {\n" |
| + " BytecodeA a = new BytecodeA();\n" |
| + " a.foo10();\n" + " }\n" |
| + "}", }, |
| "----------\n" |
| + "1. WARNING in p\\BytecodeA.java (at line 74)\n" |
| + " L1 :; // good\n" |
| + " ^^\n" |
| + "The label L1 is never explicitly referenced\n" |
| + "----------\n" |
| + "2. ERROR in p\\BytecodeA.java (at line 83)\n" |
| + " continue L; // bad\n" |
| + " ^^^^^^^^^^\n" |
| + "continue cannot be used outside of a loop\n" |
| + "----------\n" |
| + "3. ERROR in p\\BytecodeA.java (at line 91)\n" |
| + " continue L; // bad\n" |
| + " ^^^^^^^^^^\n" |
| + "continue cannot be used outside of a loop\n" |
| + "----------\n" |
| + "4. WARNING in p\\BytecodeA.java (at line 93)\n" |
| + " } finally {\n" |
| + " return;\n" |
| + " }\n" |
| + " ^^^^^^^^^^^^^^^^^^^^^\n" |
| + "finally block does not complete normally\n" |
| + "----------\n" |
| + "5. WARNING in p\\BytecodeA.java (at line 104)\n" |
| + " L : K : for (;;) {\n" |
| + " ^\n" |
| + "The label K is never explicitly referenced\n" |
| + "----------\n" |
| + "6. ERROR in p\\BytecodeA.java (at line 105)\n" |
| + " continue L; // good\n" |
| + " ^^^^^^^^^^\n" |
| + "continue cannot be used outside of a loop\n" |
| + "----------\n" |
| + "7. ERROR in p\\BytecodeA.java (at line 115)\n" |
| + " x [1] = (x = new Object[5]); // bad\n" |
| + " ^\n" |
| + "The local variable x may not have been initialized\n" |
| + "----------\n" |
| + "8. ERROR in p\\BytecodeA.java (at line 119)\n" |
| + " } catch (java.io.IOException e) {\n" |
| + " ^^^^^^^^^^^^^^^^^^^\n" |
| + "Unreachable catch block for IOException. This exception is never thrown from the try statement body\n" |
| + "----------\n"); |
| } |
| |
| // was Compliance_1_x#test007 |
| public void test057() { |
| String[] sources = new String[] { |
| "p1/Test.java", |
| "package p1; \n" + "public class Test { \n" |
| + " public static void main(String[] arguments) { \n" |
| + " try { \n" + " throw null; \n" |
| + " } catch(NullPointerException e){ \n" |
| + " System.out.println(\"SUCCESS\"); \n" + " } \n" |
| + " } \n" + "} \n" }; |
| if (this.complianceLevel.equals(COMPLIANCE_1_3)) { |
| runNegativeTest(sources, "----------\n" |
| + "1. ERROR in p1\\Test.java (at line 5)\n" |
| + " throw null; \n" + " ^^^^\n" |
| + "Cannot throw null as an exception\n" + "----------\n"); |
| } else { |
| runConformTest(sources, "SUCCESS"); |
| } |
| } |
| |
| public static Class testClass() { |
| return TryStatementTest.class; |
| } |
| } |