Bug 497509 - Cannot execute "throw new Exception()" expression during
debug

Change-Id: I4e80af93f37e0d544275f2da6d7262d78a1a029a
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TestsBreakpointConditions.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TestsBreakpointConditions.java
index 14b6046..76efae8 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TestsBreakpointConditions.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TestsBreakpointConditions.java
@@ -1,5 +1,5 @@
 /*******************************************************************************

- * Copyright (c) 2015 IBM Corporation and others.

+ * Copyright (c) 2015, 2016 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

@@ -64,4 +64,19 @@
 		}

 

 	}

+	/*

+	 * To test throw as a last statement

+	 */

+	public void testCondition4() throws Throwable {

+		try {

+			init();

+			IValue value = eval("System.out.println(\"test\");throw new Exception(\"test\")");

+			System.out.println(value);

+

+		}

+		finally {

+			end();

+		}

+

+	}

 }

diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/EvaluationSourceGenerator.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/EvaluationSourceGenerator.java
index 76cd0b0..9076ffd 100644
--- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/EvaluationSourceGenerator.java
+++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/EvaluationSourceGenerator.java
@@ -178,6 +178,9 @@
 						token == ITerminalSymbols.TokenNameprivate || token == ITerminalSymbols.TokenNameprotected || token == ITerminalSymbols.TokenNamepublic)){
 					token = scanner.getNextToken();
 				}
+				else if (count == 0 && (token == ITerminalSymbols.TokenNamethrow)){
+					return false;
+				}
 				else if (count ==1 && (token == ITerminalSymbols.TokenNameLBRACE || token == ITerminalSymbols.TokenNameEQUAL)){
 					return true;
 				}