| /* /nodynamiccopyright/ */ // hard coded linenumbers in other tests - DO NOT CHANGE |
| /* |
| * Debuggee which exercises various types of control flow |
| */ |
| |
| class ControlFlow { |
| boolean b = true; |
| int n = 22; |
| |
| public static void main(String args[]) throws Exception { |
| (new ControlFlow()).go(); |
| } |
| |
| void go() throws Exception { |
| if (b) { |
| System.out.println("if, no else"); |
| } |
| |
| if (b) { |
| System.out.println("if branch"); |
| } else { |
| throw new Exception("Wrong branch!?"); |
| } |
| |
| if (!b) { |
| throw new Exception("Wrong branch!?"); |
| } else { |
| System.out.println("else branch"); |
| } |
| |
| try { |
| throw new Exception(); |
| } catch (Exception e) { |
| System.out.println("caught exception"); |
| } finally { |
| System.out.println("finally"); |
| } |
| |
| // This isn't control flow at the source level, but it is at the bytecode level |
| synchronized (this) { |
| System.out.println("synchronized"); |
| } |
| |
| |
| for (int i = 0; i < n; i++) { |
| System.out.println("Loop iteration: " + (i+1) + "/" + n); |
| } |
| |
| switch (n) { |
| case 0: |
| throw new Exception("Wrong branch!?"); |
| case 1: |
| throw new Exception("Wrong branch!?"); |
| case 2: |
| throw new Exception("Wrong branch!?"); |
| case 3: |
| throw new Exception("Wrong branch!?"); |
| case 22: |
| System.out.println("switch case"); |
| break; |
| default: |
| throw new Exception("Wrong branch!?"); |
| } |
| |
| switch (n) { |
| case 0: |
| throw new Exception("Wrong branch!?"); |
| case 1: |
| throw new Exception("Wrong branch!?"); |
| case 2: |
| throw new Exception("Wrong branch!?"); |
| case 3: |
| throw new Exception("Wrong branch!?"); |
| default: |
| System.out.println("switch default"); |
| break; |
| } |
| } |
| } |