diff --git a/org.eclipse.jdt.debug.tests/console tests/org/eclipse/jdt/debug/tests/console/ConsoleTerminateAllActionTests.java b/org.eclipse.jdt.debug.tests/console tests/org/eclipse/jdt/debug/tests/console/ConsoleTerminateAllActionTests.java
index 897a139..33ace80 100644
--- a/org.eclipse.jdt.debug.tests/console tests/org/eclipse/jdt/debug/tests/console/ConsoleTerminateAllActionTests.java
+++ b/org.eclipse.jdt.debug.tests/console tests/org/eclipse/jdt/debug/tests/console/ConsoleTerminateAllActionTests.java
@@ -48,8 +48,8 @@
 
 	}
 	public void testTerminateAll_01() throws Exception{
-		createLineBreakpoint(15, "TerminateAll_01");
-		createLineBreakpoint(15, "TerminateAll_02");
+		createLineBreakpoint(18, "TerminateAll_01");
+		createLineBreakpoint(18, "TerminateAll_02");
 		IJavaThread thread1 = null;
 		IJavaThread thread2 = null; {
 
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/test/stepping/ForceReturnTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/test/stepping/ForceReturnTests.java
index 4428fad..f258a8b 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/test/stepping/ForceReturnTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/test/stepping/ForceReturnTests.java
@@ -49,8 +49,8 @@
 	 */
 	public void testForceIntReturnTopFrame() throws Exception {
 		String typeName = "ForceReturnTests";
-		ILineBreakpoint bp2 = createLineBreakpoint(22, typeName);
-		ILineBreakpoint bp = createLineBreakpoint(31, typeName);
+		ILineBreakpoint bp2 = createLineBreakpoint(25, typeName);
+		ILineBreakpoint bp = createLineBreakpoint(34, typeName);
 
 		IJavaThread thread = null;
 		try {
@@ -65,7 +65,7 @@
 				assertTrue("Suspend should be from thread", source instanceof IJavaThread);
 				thread = (IJavaThread) source;
 				stackFrame = (IJavaStackFrame) thread.getTopStackFrame();
-				if (stackFrame.getLineNumber() < 22) {
+				if (stackFrame.getLineNumber() < 25) {
 					// @see bug 197282. Some VMs optimize the variable assignment and may
 					// already have performed the assignment
 					thread = resumeToLineBreakpoint(thread, bp2);
@@ -88,8 +88,8 @@
 	 */
 	public void testForceIntReturn() throws Exception {
 		String typeName = "ForceReturnTestsTwo";
-		ILineBreakpoint bp2 = createLineBreakpoint(23, typeName);
-		ILineBreakpoint bp = createLineBreakpoint(37, typeName);
+		ILineBreakpoint bp2 = createLineBreakpoint(26, typeName);
+		ILineBreakpoint bp = createLineBreakpoint(40, typeName);
 
 		IJavaThread thread = null;
 		try {
@@ -106,7 +106,7 @@
 				assertTrue("Suspend should be from thread", source instanceof IJavaThread);
 				thread = (IJavaThread) source;
 				stackFrame = (IJavaStackFrame) thread.getTopStackFrame();
-				if (stackFrame.getLineNumber() < 23) {
+				if (stackFrame.getLineNumber() < 26) {
 					// @see bug 197282. Some VMs optimize the variable assignment and may
 					// already have performed the assignment
 					thread = resumeToLineBreakpoint(thread, bp2);
@@ -129,8 +129,8 @@
 	 */
 	public void testForceStringReturnTopFrame() throws Exception {
 		String typeName = "ForceReturnTests";
-		ILineBreakpoint bp2 = createLineBreakpoint(24, typeName);
-		ILineBreakpoint bp = createLineBreakpoint(36, typeName);
+		ILineBreakpoint bp2 = createLineBreakpoint(27, typeName);
+		ILineBreakpoint bp = createLineBreakpoint(39, typeName);
 
 		IJavaThread thread = null;
 		try {
@@ -146,7 +146,7 @@
 				assertTrue("Suspend should be from thread", source instanceof IJavaThread);
 				thread = (IJavaThread) source;
 				stackFrame = (IJavaStackFrame) thread.getTopStackFrame();
-				if (stackFrame.getLineNumber() < 24) {
+				if (stackFrame.getLineNumber() < 27) {
 					// @see bug 197282. Some VMs optimize the variable assignment and may
 					// already have performed the assignment
 					thread = resumeToLineBreakpoint(thread, bp2);
@@ -169,8 +169,8 @@
 	 */
 	public void testForceStringReturn() throws Exception {
 		String typeName = "ForceReturnTestsTwo";
-		ILineBreakpoint bp2 = createLineBreakpoint(25, typeName);
-		ILineBreakpoint bp = createLineBreakpoint(46, typeName);
+		ILineBreakpoint bp2 = createLineBreakpoint(28, typeName);
+		ILineBreakpoint bp = createLineBreakpoint(49, typeName);
 
 		IJavaThread thread = null;
 		try {
@@ -187,7 +187,7 @@
 				assertTrue("Suspend should be from thread", source instanceof IJavaThread);
 				thread = (IJavaThread) source;
 				stackFrame = (IJavaStackFrame) thread.getTopStackFrame();
-				if (stackFrame.getLineNumber() < 25) {
+				if (stackFrame.getLineNumber() < 28) {
 					// @see bug 197282. Some VMs optimize the variable assignment and may
 					// already have performed the assignment
 					thread = resumeToLineBreakpoint(thread, bp2);
@@ -210,8 +210,8 @@
 	 */
 	public void testForceObjectReturnTopFrame() throws Exception {
 		String typeName = "ForceReturnTests";
-		ILineBreakpoint bp2 = createLineBreakpoint(26, typeName);
-		ILineBreakpoint bp = createLineBreakpoint(43, typeName);
+		ILineBreakpoint bp2 = createLineBreakpoint(29, typeName);
+		ILineBreakpoint bp = createLineBreakpoint(46, typeName);
 
 		IJavaThread thread = null;
 		try {
@@ -227,7 +227,7 @@
 				assertTrue("Suspend should be from thread", source instanceof IJavaThread);
 				thread = (IJavaThread) source;
 				stackFrame = (IJavaStackFrame) thread.getTopStackFrame();
-				if (stackFrame.getLineNumber() < 26) {
+				if (stackFrame.getLineNumber() < 29) {
 					// @see bug 197282. Some VMs optimize the variable assignment and may
 					// already have performed the assignment
 					thread = resumeToLineBreakpoint(thread, bp2);
@@ -250,8 +250,8 @@
 	 */
 	public void testForceObjectReturn() throws Exception {
 		String typeName = "ForceReturnTestsTwo";
-		ILineBreakpoint bp2 = createLineBreakpoint(27, typeName);
-		ILineBreakpoint bp = createLineBreakpoint(56, typeName);
+		ILineBreakpoint bp2 = createLineBreakpoint(30, typeName);
+		ILineBreakpoint bp = createLineBreakpoint(59, typeName);
 
 		IJavaThread thread = null;
 		try {
@@ -268,7 +268,7 @@
 				assertTrue("Suspend should be from thread", source instanceof IJavaThread);
 				thread = (IJavaThread) source;
 				stackFrame = (IJavaStackFrame) thread.getTopStackFrame();
-				if (stackFrame.getLineNumber() < 27) {
+				if (stackFrame.getLineNumber() < 30) {
 					// @see bug 197282. Some VMs optimize the variable assignment and may
 					// already have performed the assignment
 					thread = resumeToLineBreakpoint(thread, bp2);
@@ -291,7 +291,7 @@
 	 */
 	public void testIncompatibleReturnTypeTopFrame() throws Exception {
 		String typeName = "ForceReturnTests";
-		ILineBreakpoint bp = createLineBreakpoint(43, typeName);
+		ILineBreakpoint bp = createLineBreakpoint(46, typeName);
 
 		IJavaThread thread = null;
 		try {
@@ -322,7 +322,7 @@
 	 */
 	public void testIncompatibleReturnType() throws Exception {
 		String typeName = "ForceReturnTestsTwo";
-		ILineBreakpoint bp = createLineBreakpoint(46, typeName);
+		ILineBreakpoint bp = createLineBreakpoint(49, typeName);
 
 		IJavaThread thread = null;
 		try {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/test/stepping/StepFilterTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/test/stepping/StepFilterTests.java
index 643e89d..062d376 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/test/stepping/StepFilterTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/test/stepping/StepFilterTests.java
@@ -49,7 +49,7 @@
 	public void testSimpleStepFilter() throws Exception {
 		getPrefStore().setValue(IJDIPreferencesConstants.PREF_ACTIVE_FILTERS_LIST, fOriginalActiveFilters + ",StepFilterTwo," + fOriginalInactiveFilters);
 		String typeName = "StepFilterOne";
-		ILineBreakpoint bp = createLineBreakpoint(23, typeName);
+		ILineBreakpoint bp = createLineBreakpoint(26, typeName);
 		bp.setEnabled(true);
 
 		IJavaThread thread = null;
@@ -64,7 +64,7 @@
 			}
 			assertEquals("Wrong receiving type", "StepFilterOne", recTypeName);
 			int lineNumber = stackFrame.getLineNumber();
-			assertEquals("Wrong line number", 24, lineNumber);
+			assertEquals("Wrong line number", 27, lineNumber);
 		} finally {
 			terminateAndRemove(thread);
 			removeAllBreakpoints();
@@ -79,7 +79,7 @@
 	public void testDontStepThruStepFilters() throws Exception {
 		getPrefStore().setValue(IJDIPreferencesConstants.PREF_ACTIVE_FILTERS_LIST, fOriginalActiveFilters + ",StepFilterTwo," + fOriginalInactiveFilters);
 		String typeName = "StepFilterOne";
-		ILineBreakpoint bp = createLineBreakpoint(24, typeName);
+		ILineBreakpoint bp = createLineBreakpoint(27, typeName);
 		bp.setEnabled(true);
 
 		IJavaThread thread = null;
@@ -94,7 +94,7 @@
 			}
 			assertEquals("Wrong receiving type", "StepFilterOne", recTypeName);
 			int lineNumber = stackFrame.getLineNumber();
-			assertEquals("Wrong line number", 25, lineNumber);
+			assertEquals("Wrong line number", 28, lineNumber);
 		} finally {
 			terminateAndRemove(thread);
 			removeAllBreakpoints();
@@ -109,7 +109,7 @@
 	public void testInactiveStepFilter() throws Exception {
 		getPrefStore().setValue(IJDIPreferencesConstants.PREF_INACTIVE_FILTERS_LIST, fOriginalActiveFilters + ",StepFilterTwo");
 		String typeName = "StepFilterOne";
-		ILineBreakpoint bp = createLineBreakpoint(23, typeName);
+		ILineBreakpoint bp = createLineBreakpoint(26, typeName);
 		bp.setEnabled(true);
 
 		IJavaThread thread = null;
@@ -124,7 +124,7 @@
 			}
 			assertEquals("Wrong receiving type", "StepFilterTwo", recTypeName);
 			int lineNumber = stackFrame.getLineNumber();
-			assertEquals("Wrong line number", 25, lineNumber);
+			assertEquals("Wrong line number", 28, lineNumber);
 		} finally {
 			terminateAndRemove(thread);
 			removeAllBreakpoints();
@@ -140,7 +140,7 @@
 	public void testDeepStepFilter() throws Exception {
 		getPrefStore().setValue(IJDIPreferencesConstants.PREF_ACTIVE_FILTERS_LIST, fOriginalActiveFilters + ",StepFilterTwo," + fOriginalInactiveFilters);
 		String typeName = "StepFilterOne";
-		ILineBreakpoint bp = createLineBreakpoint(24, typeName);
+		ILineBreakpoint bp = createLineBreakpoint(27, typeName);
 		bp.setEnabled(true);
 
 		IJavaThread thread = null;
@@ -155,7 +155,7 @@
 			}
 			assertEquals("Wrong receiving type", "StepFilterThree", recTypeName);
 			int lineNumber = stackFrame.getLineNumber();
-			assertEquals("Wrong line number", 19, lineNumber);
+			assertEquals("Wrong line number", 22, lineNumber);
 		} finally {
 			terminateAndRemove(thread);
 			removeAllBreakpoints();
@@ -170,7 +170,7 @@
 	public void testStepReturnFilter() throws Exception {
 		getPrefStore().setValue(IJDIPreferencesConstants.PREF_ACTIVE_FILTERS_LIST, fOriginalActiveFilters + ",StepFilterTwo," + fOriginalInactiveFilters);
 		String typeName = "StepFilterOne";
-		ILineBreakpoint bp = createLineBreakpoint(19, "StepFilterThree");
+		ILineBreakpoint bp = createLineBreakpoint(22, "StepFilterThree");
 		bp.setEnabled(true);
 
 		IJavaThread thread = null;
@@ -185,7 +185,7 @@
 			}
 			assertEquals("Wrong receiving type", "StepFilterOne", recTypeName);
 			int lineNumber = stackFrame.getLineNumber();
-			assertEquals("Wrong line number", 23, lineNumber);
+			assertEquals("Wrong line number", 26, lineNumber);
 		} finally {
 			terminateAndRemove(thread);
 			removeAllBreakpoints();
@@ -200,7 +200,7 @@
 	public void testStepOverFilter() throws Exception {
 		getPrefStore().setValue(IJDIPreferencesConstants.PREF_ACTIVE_FILTERS_LIST, fOriginalActiveFilters + ",StepFilterTwo,StepFilterThree," + fOriginalInactiveFilters);
 		String typeName = "StepFilterOne";
-		ILineBreakpoint bp = createLineBreakpoint(19, "StepFilterThree");
+		ILineBreakpoint bp = createLineBreakpoint(22, "StepFilterThree");
 		bp.setEnabled(true);
 
 		IJavaThread thread = null;
@@ -215,7 +215,7 @@
 			}
 			assertEquals("Wrong receiving type", "StepFilterOne", recTypeName);
 			int lineNumber = stackFrame.getLineNumber();
-			assertEquals("Wrong line number", 23, lineNumber);
+			assertEquals("Wrong line number", 26, lineNumber);
 		} finally {
 			terminateAndRemove(thread);
 			removeAllBreakpoints();
@@ -231,7 +231,7 @@
 		getPrefStore().setValue(IJDIPreferencesConstants.PREF_FILTER_GETTERS, true);
 		getPrefStore().setValue(IJDIPreferencesConstants.PREF_FILTER_SETTERS, false);
 		String typeName = "StepFilterFour";
-		ILineBreakpoint bp = createLineBreakpoint(91, typeName);
+		ILineBreakpoint bp = createLineBreakpoint(94, typeName);
 		bp.setEnabled(true);
 
 		IJavaThread thread = null;
@@ -241,15 +241,15 @@
 			stackFrame = (IJavaStackFrame)stepIntoWithFilters(stackFrame).getTopStackFrame();
 			String recTypeName = stackFrame.getReceivingTypeName();
 			assertEquals("Wrong receiving type", "StepFilterFour", recTypeName);
-			assertEquals("Wrong line number", 92, stackFrame.getLineNumber());
+			assertEquals("Wrong line number", 95, stackFrame.getLineNumber());
 			stackFrame = (IJavaStackFrame)stepIntoWithFilters(stackFrame).getTopStackFrame();
 			stackFrame = (IJavaStackFrame)stepIntoWithFilters(stackFrame).getTopStackFrame();
 			stackFrame = (IJavaStackFrame)stepIntoWithFilters(stackFrame).getTopStackFrame();
 			stackFrame = (IJavaStackFrame)stepIntoWithFilters(stackFrame).getTopStackFrame();
-			assertEquals("Wrong line number", 96, stackFrame.getLineNumber());
+			assertEquals("Wrong line number", 99, stackFrame.getLineNumber());
 			// now step into the line with the call to sum() which is not a simple getter
 			stackFrame = (IJavaStackFrame)stepIntoWithFilters(stackFrame).getTopStackFrame();
-			assertEquals("Wrong line number", 71, stackFrame.getLineNumber());
+			assertEquals("Wrong line number", 74, stackFrame.getLineNumber());
 			assertEquals("Should be in sum()", "sum", stackFrame.getMethodName());
 		} finally {
 			terminateAndRemove(thread);
@@ -266,7 +266,7 @@
 		getPrefStore().setValue(IJDIPreferencesConstants.PREF_FILTER_GETTERS, false);
 		getPrefStore().setValue(IJDIPreferencesConstants.PREF_FILTER_SETTERS, true);
 		String typeName = "StepFilterFour";
-		ILineBreakpoint bp = createLineBreakpoint(84, typeName);
+		ILineBreakpoint bp = createLineBreakpoint(87, typeName);
 		bp.setEnabled(true);
 
 		IJavaThread thread = null;
@@ -280,11 +280,11 @@
 			stackFrame = (IJavaStackFrame)stepIntoWithFilters(stackFrame).getTopStackFrame();
 			stackFrame = (IJavaStackFrame)stepIntoWithFilters(stackFrame).getTopStackFrame();
 			stackFrame = (IJavaStackFrame)stepIntoWithFilters(stackFrame).getTopStackFrame();
-			assertEquals("Wrong line number", 91, stackFrame.getLineNumber());
+			assertEquals("Wrong line number", 94, stackFrame.getLineNumber());
 			// now step into the line with the call to getI() which is a simple getter
 			// since we're not filtering getters, we should end up in getI
 			stackFrame = (IJavaStackFrame)stepIntoWithFilters(stackFrame).getTopStackFrame();
-			assertEquals("Wrong line number", 34, stackFrame.getLineNumber());
+			assertEquals("Wrong line number", 37, stackFrame.getLineNumber());
 			assertEquals("Should be in getI()", "getI", stackFrame.getMethodName());
 		} finally {
 			terminateAndRemove(thread);
@@ -303,18 +303,18 @@
 		String typeName = "TestContributedStepFilterClass";
 		getPrefStore().setValue(IJDIPreferencesConstants.PREF_ACTIVE_FILTERS_LIST, fOriginalActiveFilters + ",StepFilterTwo,"
 				+ fOriginalInactiveFilters);
-		ILineBreakpoint bp = createLineBreakpoint(17, typeName);
+		ILineBreakpoint bp = createLineBreakpoint(20, typeName);
 		bp.setEnabled(true);
 
 		IJavaThread thread = null;
 		try {
 			thread = launchToLineBreakpoint(typeName, bp, false);
 			IJavaStackFrame stackFrame = (IJavaStackFrame) thread.getTopStackFrame();
-			assertEquals("Wrong line number", 17, stackFrame.getLineNumber());
+			assertEquals("Wrong line number", 20, stackFrame.getLineNumber());
 			thread = stepIntoWithFilters(stackFrame);
 			assertNotNull("We should have stepped over the method call", thread);
 			stackFrame = (IJavaStackFrame) thread.getTopStackFrame();
-			assertEquals("Wrong line number", 18, stackFrame.getLineNumber());
+			assertEquals("Wrong line number", 21, stackFrame.getLineNumber());
 			assertEquals("Should be in main", "main", stackFrame.getMethodName());
 		}
 		finally {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/test/stepping/StepIntoSelectionTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/test/stepping/StepIntoSelectionTests.java
index 2dabddb..3da76fa 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/test/stepping/StepIntoSelectionTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/test/stepping/StepIntoSelectionTests.java
@@ -44,7 +44,7 @@
 	 */
 	public void testStepIntoSourceConstructor() throws Exception {
 		String typeName = "org.eclipse.debug.tests.targets.StepIntoSelectionClass";
-		createLineBreakpoint(21, typeName);
+		createLineBreakpoint(24, typeName);
 
 		IJavaThread thread= null;
 		try {
@@ -80,7 +80,7 @@
 	 */
 	public void testStepIntoSourceMethod() throws Exception {
 		String typeName = "org.eclipse.debug.tests.targets.StepIntoSelectionClass";
-		createLineBreakpoint(23, typeName);
+		createLineBreakpoint(26, typeName);
 
 		IJavaThread thread= null;
 		try {
@@ -116,7 +116,7 @@
 	 */
 	public void testStepIntoSourceMethodWithParameters() throws Exception {
 		String typeName = "org.eclipse.debug.tests.targets.StepIntoSelectionClass";
-		createLineBreakpoint(36, typeName);
+		createLineBreakpoint(39, typeName);
 
 		IJavaThread thread= null;
 		try {
@@ -152,7 +152,7 @@
 	 */
 	public void testStepIntoBinaryMethod() throws Exception {
 		String typeName = "org.eclipse.debug.tests.targets.StepIntoSelectionClass";
-		createLineBreakpoint(34, typeName);
+		createLineBreakpoint(37, typeName);
 
 		IJavaThread thread= null;
 		try {
@@ -191,7 +191,7 @@
 	 */
 	public void testStepIntoBinaryConstructor() throws Exception {
 		String typeName = "org.eclipse.debug.tests.targets.StepIntoSelectionClass";
-		createLineBreakpoint(34, typeName);
+		createLineBreakpoint(37, typeName);
 
 		IJavaThread thread= null;
 		try {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/test/stepping/StepIntoSelectionWithGenerics.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/test/stepping/StepIntoSelectionWithGenerics.java
index c3c37b9..9ee7060 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/test/stepping/StepIntoSelectionWithGenerics.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/test/stepping/StepIntoSelectionWithGenerics.java
@@ -56,7 +56,7 @@
 	 * @throws Exception
 	 */
 	public void testStepIntoSelection1() throws Exception {
-		createLineBreakpoint(30, qtypename);
+		createLineBreakpoint(33, qtypename);
 
 		IJavaThread thread= null;
 		try {
@@ -80,7 +80,7 @@
 
 			IJavaStackFrame frame = (IJavaStackFrame)thread.getTopStackFrame();
 			assertEquals("Should be in StepIntoSelectionWithGenerics."+mname, mname, frame.getMethodName());
-			assertEquals("Should be stopped on line", 26, frame.getLineNumber());
+			assertEquals("Should be stopped on line", 29, frame.getLineNumber());
 
 		} finally {
 			terminateAndRemove(thread);
@@ -94,7 +94,7 @@
 	 * @throws Exception
 	 */
 	public void testStepIntoSelection2() throws Exception {
-		createLineBreakpoint(31, qtypename);
+		createLineBreakpoint(34, qtypename);
 
 		IJavaThread thread= null;
 		try {
@@ -120,7 +120,7 @@
 
 			IJavaStackFrame frame = (IJavaStackFrame)thread.getTopStackFrame();
 			assertEquals("Should be in InnerClazz."+mname, mname, frame.getMethodName());
-			assertEquals("Should be stopped on line", 21, frame.getLineNumber());
+			assertEquals("Should be stopped on line", 24, frame.getLineNumber());
 
 		} finally {
 			terminateAndRemove(thread);
@@ -134,7 +134,7 @@
 	 * @throws Exception
 	 */
 	public void testStepIntoSelection3() throws Exception {
-		createLineBreakpoint(32, qtypename);
+		createLineBreakpoint(35, qtypename);
 
 		IJavaThread thread= null;
 		try {
@@ -160,7 +160,7 @@
 
 			IJavaStackFrame frame = (IJavaStackFrame)thread.getTopStackFrame();
 			assertEquals("Should be in InnerClazz2."+mname, mname, frame.getMethodName());
-			assertEquals("Should be stopped on line", 17, frame.getLineNumber());
+			assertEquals("Should be stopped on line", 20, frame.getLineNumber());
 
 		} finally {
 			terminateAndRemove(thread);
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/BreakpointLocationVerificationTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/BreakpointLocationVerificationTests.java
index f4d5ebc..51488bc 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/BreakpointLocationVerificationTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/BreakpointLocationVerificationTests.java
@@ -98,7 +98,7 @@
 	 * @throws Exception
 	 */
 	public void testFinalFieldWithTypeDecl() throws Exception {
-		testLocation(14, 14, "FinalBreakpointLocations");
+		testLocation(17, 17, "FinalBreakpointLocations");
 	}
 
 	/**
@@ -109,7 +109,7 @@
 	 * @throws Exception
 	 */
 	public void testFinalFieldWithTypeDecla() throws Exception {
-		testLocation(14, 14, "FinalBreakpointLocations", "FinalBreakpointLocations", true);
+		testLocation(17, 17, "FinalBreakpointLocations", "FinalBreakpointLocations", true);
 	}
 
 	/**
@@ -164,7 +164,7 @@
 	 * @throws Exception
 	 */
 	public void testFinalFieldWithTypeDecl5() throws Exception {
-		testLocation(27, 30, "FinalBreakpointLocations");
+		testLocation(30, 33, "FinalBreakpointLocations");
 	}
 
 	/**
@@ -175,7 +175,7 @@
 	 * @throws Exception
 	 */
 	public void testFinalFieldWithTypeDecl5a() throws Exception {
-		testLocation(27, 30, "FinalBreakpointLocations", "FinalBreakpointLocations", true);
+		testLocation(30, 33, "FinalBreakpointLocations", "FinalBreakpointLocations", true);
 	}
 
 	/**
@@ -184,7 +184,7 @@
 	 * @throws Exception
 	 */
 	public void testLineBeforeTypeDeclaration() throws Exception {
-		testLocation(9, 18, "BreakpointsLocation");
+		testLocation(12, 21, "BreakpointsLocation");
 	}
 
 	/**
@@ -200,7 +200,7 @@
 	 * @throws Exception
 	 */
 	public void testLineInInnerType() throws Exception {
-		testLocation(25, 25, "BreakpointsLocation.InnerClass");
+		testLocation(28, 28, "BreakpointsLocation.InnerClass");
 	}
 
 	/**
@@ -208,7 +208,7 @@
 	 * @throws Exception
 	 */
 	public void testLineInAnnonymousType() throws Exception {
-		testLocation(39, 39, "BreakpointsLocation");
+		testLocation(42, 42, "BreakpointsLocation");
 	}
 
 	/**
@@ -217,7 +217,7 @@
 	 */
 	public void testLineAfterAllCode() throws Exception {
 		// ********* this test need to be updated every time BreakpointsLocation.java is modified *************
-		testLocation(82, -1, "BreakpointsLocation");
+		testLocation(85, -1, "BreakpointsLocation");
 		// ******************************
 	}
 
@@ -226,7 +226,7 @@
 	 * @throws Exception
 	 */
 	public void testLineVariableDeclarationWithAssigment() throws Exception {
-		testLocation(43, 46, "BreakpointsLocation");
+		testLocation(46, 49, "BreakpointsLocation");
 	}
 
 	/**
@@ -234,7 +234,7 @@
 	 * @throws Exception
 	 */
 	public void testFieldLocationOnFinalField() throws Exception {
-		testLocation(13, 13, "org.eclipse.debug.tests.targets.BreakpointsLocationBug344984");
+		testLocation(16, 16, "org.eclipse.debug.tests.targets.BreakpointsLocationBug344984");
 	}
 
 	/**
@@ -243,7 +243,7 @@
 	 * @throws Exception
 	 */
 	public void testFieldLocationOnFinalFielda() throws Exception {
-		testLocation(13, 13, "org.eclipse.debug.tests.targets.BreakpointsLocationBug344984", "org.eclipse.debug.tests.targets.BreakpointsLocationBug344984", true);
+		testLocation(16, 16, "org.eclipse.debug.tests.targets.BreakpointsLocationBug344984", "org.eclipse.debug.tests.targets.BreakpointsLocationBug344984", true);
 	}
 
 	/**
@@ -251,7 +251,7 @@
 	 * @throws Exception
 	 */
     public void testEmptyLabel() throws Exception {
-        testLocation(15, 16, "LabelTest");
+		testLocation(18, 19, "LabelTest");
     }
 
     /**
@@ -259,7 +259,7 @@
 	 * @throws Exception
 	 */
     public void testNestedEmptyLabels() throws Exception {
-        testLocation(19, 21, "LabelTest");
+		testLocation(22, 24, "LabelTest");
     }
 
     /**
@@ -267,7 +267,7 @@
 	 * @throws Exception
 	 */
     public void testLabelWithCode() throws Exception {
-        testLocation(21, 21, "LabelTest");
+		testLocation(24, 24, "LabelTest");
     }
 
     /**
@@ -275,7 +275,7 @@
 	 * @throws Exception
 	 */
 	public void testLineFieldDeclarationWithAssigment() throws Exception {
-		testLocation(51, 55, "BreakpointsLocation");
+		testLocation(54, 58, "BreakpointsLocation");
 	}
 
 	/**
@@ -283,7 +283,7 @@
 	 * @throws Exception
 	 */
 	public void testLineExpressionReplacedByConstant1() throws Exception {
-		testLocation(62, 62, "BreakpointsLocation");
+		testLocation(65, 65, "BreakpointsLocation");
 	}
 
 	/**
@@ -291,7 +291,7 @@
 	 * @throws Exception
 	 */
 	public void testLineExpressionReplacedByConstant2() throws Exception {
-		testLocation(64, 62, "BreakpointsLocation");
+		testLocation(67, 65, "BreakpointsLocation");
 	}
 
 	/**
@@ -299,7 +299,7 @@
 	 * @throws Exception
 	 */
 	public void testLineExpressionNotReplacedByConstant1() throws Exception {
-		testLocation(70, 70, "BreakpointsLocation");
+		testLocation(73, 73, "BreakpointsLocation");
 	}
 
 	/**
@@ -307,7 +307,7 @@
 	 * @throws Exception
 	 */
 	public void testLineExpressionNotReplacedByConstant2() throws Exception {
-		testLocation(72, 72, "BreakpointsLocation");
+		testLocation(75, 75, "BreakpointsLocation");
 	}
 
 	/**
@@ -315,7 +315,7 @@
 	 * @throws Exception
 	 */
 	public void testLineLitteral1() throws Exception {
-		testLocation(46, 46, "BreakpointsLocation");
+		testLocation(49, 49, "BreakpointsLocation");
 	}
 
 	/**
@@ -323,7 +323,7 @@
 	 * @throws Exception
 	 */
 	public void testLineLitteral2() throws Exception {
-		testLocation(55, 55, "BreakpointsLocation");
+		testLocation(58, 58, "BreakpointsLocation");
 	}
 
 	/**
@@ -336,7 +336,7 @@
 			testLocation(79, 79, "BreakpointsLocation", "BreakpointsLocation.1StaticInnerClass", false);
 		}
 		else {
-			testLocation(79, 79, "BreakpointsLocation", "BreakpointsLocation.1.StaticInnerClass", false);
+			testLocation(82, 82, "BreakpointsLocation", "BreakpointsLocation.1.StaticInnerClass", false);
 		}
 	}
 
@@ -375,7 +375,7 @@
 	 * @throws Exception
 	 */
 	public void testFieldLocationNotOnField() throws Exception {
-		testField(33, 18, null, null);
+		testField(36, 21, null, null);
 	}
 
 	/**
@@ -408,7 +408,7 @@
 	 * @throws Exception
 	 */
 	public void testMethodOnSignature() throws Exception {
-		testMethod(17, 20, "test1", "BreakpointsLocation", "()V");
+		testMethod(20, 23, "test1", "BreakpointsLocation", "()V");
 	}
 
 	/**
@@ -432,6 +432,6 @@
 	 * @throws Exception
 	 */
 	public void testMethodOnMethodSignatureNotAvailable() throws Exception {
-		testMethod(32, 1, "test2", "BreakpointsLocation", null);
+		testMethod(35, 4, "test2", "BreakpointsLocation", null);
 	}
 }
\ No newline at end of file
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/ConditionalBreakpointsTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/ConditionalBreakpointsTests.java
index 745047b..41086a4 100755
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/ConditionalBreakpointsTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/ConditionalBreakpointsTests.java
@@ -43,7 +43,7 @@
 	 */
 	public void testSimpleConditionalBreakpoint() throws Exception {
 		String typeName = "HitCountLooper";
-		IJavaLineBreakpoint bp = createConditionalLineBreakpoint(16, typeName, "i == 3", true);
+		IJavaLineBreakpoint bp = createConditionalLineBreakpoint(19, typeName, "i == 3", true);
 
 		IJavaThread thread= null;
 		try {
@@ -71,7 +71,7 @@
 	 */
 	public void testStaticMethodCallConditionalBreakpoint() throws Exception {
 		String typeName = "HitCountLooper";
-		IJavaLineBreakpoint bp = createConditionalLineBreakpoint(16, typeName, "ArgumentsTests.fact(i) == 24", true);
+		IJavaLineBreakpoint bp = createConditionalLineBreakpoint(19, typeName, "ArgumentsTests.fact(i) == 24", true);
 
 		IJavaThread thread= null;
 		try {
@@ -99,7 +99,7 @@
 	 */
 	public void testSimpleConditionalBreakpointSuspendOnChange() throws Exception {
 		String typeName = "HitCountLooper";
-		IJavaLineBreakpoint bp = createConditionalLineBreakpoint(16, typeName, "i != 9", false);
+		IJavaLineBreakpoint bp = createConditionalLineBreakpoint(19, typeName, "i != 9", false);
 
 		IJavaThread thread= null;
 		try {
@@ -138,7 +138,7 @@
 	 */
 	public void testConditionalStepReturn() throws Exception {
 		String typeName = "ConditionalStepReturn";
-		IJavaLineBreakpoint lineBreakpoint = createLineBreakpoint(17, typeName);
+		IJavaLineBreakpoint lineBreakpoint = createLineBreakpoint(20, typeName);
 		createConditionalLineBreakpoint(18, typeName, "!bool", true);
 
 		IJavaThread thread= null;
@@ -162,8 +162,8 @@
 	 */
 	public void testEvalConditionOnStep() throws Exception {
 		String typeName = "HitCountLooper";
-		IJavaLineBreakpoint bp = createLineBreakpoint(16, typeName);
-		IJavaLineBreakpoint bp2 = createConditionalLineBreakpoint(17, typeName, "i = 3; return true;", true);
+		IJavaLineBreakpoint bp = createLineBreakpoint(19, typeName);
+		IJavaLineBreakpoint bp2 = createConditionalLineBreakpoint(20, typeName, "i = 3; return true;", true);
 
 		IJavaThread thread= null;
 		try {
@@ -199,8 +199,8 @@
 	 */
 	public void testSuspendLongRunningCondition() throws Exception {
 		String typeName = "MethodCall";
-		IJavaLineBreakpoint first = createLineBreakpoint(19, typeName);
-		createConditionalLineBreakpoint(27, typeName, "for (int x = 0; x < 1000; x++) { System.out.println(x);} Thread.sleep(1000); return true;", true);
+		IJavaLineBreakpoint first = createLineBreakpoint(22, typeName);
+		createConditionalLineBreakpoint(30, typeName, "for (int x = 0; x < 1000; x++) { System.out.println(x);} Thread.sleep(1000); return true;", true);
 
 		IJavaThread thread= null;
 		try {
@@ -537,7 +537,7 @@
 	 */
 	public void testConditionBreakpointReturnBooleanObjectTrue() throws Exception {
 		String typeName = "HitCountLooper";
-		IJavaLineBreakpoint bp = createConditionalLineBreakpoint(16, typeName, "return new Boolean(true)", true);
+		IJavaLineBreakpoint bp = createConditionalLineBreakpoint(19, typeName, "return new Boolean(true)", true);
 
 		IJavaThread thread = null;
 		try {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/ConditionalBreakpointsWithGenerics.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/ConditionalBreakpointsWithGenerics.java
index bf7547d..0ce0e08 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/ConditionalBreakpointsWithGenerics.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/ConditionalBreakpointsWithGenerics.java
@@ -51,9 +51,9 @@
 	public void testDuplicateGenericTypes() throws Exception {
 		String typeName = "a.b.c.ConditionalsNearGenerics";
 		String innerTypeName = "a.b.c.ConditionalsNearGenerics.ItemIterator";
-		createConditionalLineBreakpoint(33, typeName, "false", true);
-		createConditionalLineBreakpoint(44, typeName, "false", true);
-		ILineBreakpoint bp = createConditionalLineBreakpoint(56, innerTypeName, "true", true);
+		createConditionalLineBreakpoint(36, typeName, "false", true);
+		createConditionalLineBreakpoint(47, typeName, "false", true);
+		ILineBreakpoint bp = createConditionalLineBreakpoint(59, innerTypeName, "true", true);
 
 		IJavaThread thread= null;
 		try {
@@ -75,7 +75,7 @@
 		String type = "a.b.c.StepIntoSelectionWithGenerics";
 		IJavaThread thread = null;
 		try {
-			createConditionalLineBreakpoint(32, type, "true", true);
+			createConditionalLineBreakpoint(35, type, "true", true);
 			thread = launchToBreakpoint(type);
 			assertNotNull("Breakpoint not hit within timeout period", thread);
 		}
@@ -96,7 +96,7 @@
 		String type = "a.b.c.StepIntoSelectionWithGenerics";
 		IJavaThread thread = null;
 		try {
-			createConditionalLineBreakpoint(21, type, "true", true);
+			createConditionalLineBreakpoint(24, type, "true", true);
 			thread = launchToBreakpoint(type);
 			assertNotNull("Breakpoint not hit within timeout period", thread);
 		}
@@ -117,7 +117,7 @@
 		String type = "a.b.c.StepIntoSelectionWithGenerics";
 		IJavaThread thread = null;
 		try {
-			createConditionalLineBreakpoint(17, type, "true", true);
+			createConditionalLineBreakpoint(20, type, "true", true);
 			thread = launchToBreakpoint(type);
 			assertNotNull("Breakpoint not hit within timeout period", thread);
 		}
@@ -138,7 +138,7 @@
 		String type = "a.b.c.MethodBreakpoints";
 		IJavaThread thread = null;
 		try {
-			createConditionalLineBreakpoint(26, type, "true", true);
+			createConditionalLineBreakpoint(29, type, "true", true);
 			thread = launchToBreakpoint(type);
 			assertNotNull("Breakpoint not hit within timeout period", thread);
 		}
@@ -159,7 +159,7 @@
 		String type = "a.b.c.MethodBreakpoints";
 		IJavaThread thread = null;
 		try {
-			createConditionalLineBreakpoint(31, type, "true", true);
+			createConditionalLineBreakpoint(34, type, "true", true);
 			thread = launchToBreakpoint(type);
 			assertNotNull("Breakpoint not hit within timeout period", thread);
 		}
@@ -182,7 +182,7 @@
 			String condition = "MethodBreakpoints<Integer> breakpoints = new MethodBreakpoints<Integer>();\n"
 						+ "breakpoints.typeParameter(10);\n"
 						+ "return true;";
-			createConditionalLineBreakpoint(31, type, condition, true);
+			createConditionalLineBreakpoint(34, type, condition, true);
 			thread = launchToBreakpoint(type);
 			assertNotNull("Breakpoint not hit within timeout period", thread);
 		}
@@ -205,7 +205,7 @@
 		try {
 			String condition = "Iterator<Integer> i = tokenize(Arrays.asList(1, 2, 3), \"condition\");\n"+
 								"return i.hasNext();";
-			createConditionalLineBreakpoint(33, type, condition, true);
+			createConditionalLineBreakpoint(36, type, condition, true);
 			thread = launchToBreakpoint(type);
 			assertNotNull("Breakpoint not hit within timeout period", thread);
 		}
@@ -230,7 +230,7 @@
 					+ "InnerClazz2<Double> ic2 = new InnerClazz2<Double>();\n"
 					+ "ic2.hello();\n"
 					+ "return true;";
-			createConditionalLineBreakpoint(32, type, condition, true);
+			createConditionalLineBreakpoint(35, type, condition, true);
 			thread = launchToBreakpoint(type);
 			assertNotNull("Breakpoint not hit within timeout period", thread);
 		}
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/DeferredBreakpointTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/DeferredBreakpointTests.java
index 02f41dd..034c3f2 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/DeferredBreakpointTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/DeferredBreakpointTests.java
@@ -48,25 +48,25 @@
 		String typeName = "Breakpoints";
 		List<IBreakpoint> bps = new ArrayList<>();
 		int[] lines = new int[]{
-				43,		// anonymous class
-				102,	// blocks
-				77,		// constructor
-				88,		// else
-				120,	// finally after catch
-				128,	// finally after try
-				93,		// for loop
-				81,		// if
-				17,		// initializer
-				22,		// inner class
-				72,		// return true
-				107,	// instance method
-				53,		// static method
-				133,	// case statement
-				140,	// default statement
-				146,	// synchronized blocks
-				125,	// try
-				118,	// catch
-				97		// while
+				46, // anonymous class
+				105, // blocks
+				80, // constructor
+				91, // else
+				123, // finally after catch
+				131, // finally after try
+				96, // for loop
+				84, // if
+				20, // initializer
+				25, // inner class
+				75, // return true
+				110, // instance method
+				56, // static method
+				136, // case statement
+				143, // default statement
+				149, // synchronized blocks
+				128, // try
+				121, // catch
+				100 // while
 		};
 		createBreakpoints(typeName, bps, lines);
 
@@ -133,7 +133,7 @@
 	 */
 	public void testEnableDisableBreakpoint() throws Exception {
 		String typeName = "HitCountLooper";
-		ILineBreakpoint bp = createLineBreakpoint(16, typeName);
+		ILineBreakpoint bp = createLineBreakpoint(19, typeName);
 		bp.setEnabled(true);
 
 		IJavaThread thread = null;
@@ -153,8 +153,8 @@
 	 */
 	public void testSkipLineBreakpoint() throws Exception {
 		String typeName = "Breakpoints";
-		ILineBreakpoint bp = createLineBreakpoint(52, typeName);
-		createLineBreakpoint(54, typeName);
+		ILineBreakpoint bp = createLineBreakpoint(55, typeName);
+		createLineBreakpoint(57, typeName);
 
 		IJavaThread thread = null;
 		try {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/ExceptionBreakpointTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/ExceptionBreakpointTests.java
index 6e899e8..27459c2 100755
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/ExceptionBreakpointTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/ExceptionBreakpointTests.java
@@ -75,7 +75,7 @@
 			assertNotNull("suspended, but not by breakpoint", hit);
 			assertEquals("suspended, but not by exception breakpoint", ex ,hit);
 			IJavaStackFrame frame= (IJavaStackFrame)thread.getTopStackFrame();
-			assertTrue("Should have been suspended at line number 35, not " + frame.getLineNumber(), frame.getLineNumber() == 35);
+			assertTrue("Should have been suspended at line number 38, not " + frame.getLineNumber(), frame.getLineNumber() == 38);
 			ex.delete();
 		} finally {
 			terminateAndRemove(thread);
@@ -177,7 +177,7 @@
 		try {
 			thread= launchToBreakpoint(typeName);
 			IJavaStackFrame frame= (IJavaStackFrame)thread.getTopStackFrame();
-			assertEquals("Should have been suspended at linenumber", 35, frame.getLineNumber());
+			assertEquals("Should have been suspended at linenumber", 38, frame.getLineNumber());
 
 			ex.delete();
 		} finally {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/HitCountBreakpointsTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/HitCountBreakpointsTests.java
index 928bd11..313ad10 100755
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/HitCountBreakpointsTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/HitCountBreakpointsTests.java
@@ -39,7 +39,7 @@
 	 */
 	public void testResetHitCountBreakpoint() throws Exception {
 		String typeName = "HitCountLooper";
-		IJavaLineBreakpoint bp = createLineBreakpoint(16, typeName);
+		IJavaLineBreakpoint bp = createLineBreakpoint(19, typeName);
 		bp.setHitCount(3);
 
 		IJavaThread thread= null;
@@ -82,7 +82,7 @@
 	 */
 	public void testExpiredHitCountBreakpoint() throws Exception {
 		String typeName = "HitCountLooper";
-		IJavaLineBreakpoint bp = createLineBreakpoint(16, typeName);
+		IJavaLineBreakpoint bp = createLineBreakpoint(19, typeName);
 		bp.setHitCount(3);
 
 		IJavaThread thread= null;
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/JavaBreakpointListenerTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/JavaBreakpointListenerTests.java
index d129dd7..b39bbe3 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/JavaBreakpointListenerTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/JavaBreakpointListenerTests.java
@@ -237,7 +237,7 @@
 	 * @throws Exception
 	 */
 	public void testLineBreakpoint() throws Exception {
-		IJavaLineBreakpoint breakpoint = createLineBreakpoint(54, "Breakpoints");
+		IJavaLineBreakpoint breakpoint = createLineBreakpoint(57, "Breakpoints");
 		fBreakpoint = breakpoint;
 		resetCallbacks();
 
@@ -420,7 +420,7 @@
 	 * @throws Exception
 	 */
 	public void testUnanimousInstallVote() throws Exception {
-		IJavaLineBreakpoint breakpoint = createLineBreakpoint(54, "Breakpoints");
+		IJavaLineBreakpoint breakpoint = createLineBreakpoint(57, "Breakpoints");
 		InstallVoter v1 = new InstallVoter(SUSPEND, breakpoint);
 		InstallVoter v2 = new InstallVoter(SUSPEND, breakpoint);
 		InstallVoter v3 = new InstallVoter(SUSPEND, breakpoint);
@@ -446,7 +446,7 @@
 	 * @throws Exception
 	 */
 	public void testDontCareInstallVote() throws Exception {
-		IJavaLineBreakpoint breakpoint = createLineBreakpoint(54, "Breakpoints");
+		IJavaLineBreakpoint breakpoint = createLineBreakpoint(57, "Breakpoints");
 		InstallVoter v1 = new InstallVoter(DONT_CARE, breakpoint);
 		InstallVoter v2 = new InstallVoter(DONT_CARE, breakpoint);
 		InstallVoter v3 = new InstallVoter(DONT_CARE, breakpoint);
@@ -472,7 +472,7 @@
 	 * @throws Exception
 	 */
 	public void testInstallDontCareVote() throws Exception {
-		IJavaLineBreakpoint breakpoint = createLineBreakpoint(54, "Breakpoints");
+		IJavaLineBreakpoint breakpoint = createLineBreakpoint(57, "Breakpoints");
 		InstallVoter v1 = new InstallVoter(SUSPEND, breakpoint);
 		InstallVoter v2 = new InstallVoter(DONT_CARE, breakpoint);
 		InstallVoter v3 = new InstallVoter(DONT_CARE, breakpoint);
@@ -498,7 +498,7 @@
 	 * @throws Exception
 	 */
 	public void testInstallDontVote() throws Exception {
-		IJavaLineBreakpoint breakpoint = createLineBreakpoint(54, "Breakpoints");
+		IJavaLineBreakpoint breakpoint = createLineBreakpoint(57, "Breakpoints");
 		InstallVoter v1 = new InstallVoter(SUSPEND, breakpoint);
 		InstallVoter v2 = new InstallVoter(DONT_SUSPEND, breakpoint);
 		InstallVoter v3 = new InstallVoter(DONT_SUSPEND, breakpoint);
@@ -524,8 +524,8 @@
 	 * @throws Exception
 	 */
 	public void testDontInstallVote() throws Exception {
-		IJavaLineBreakpoint breakpoint1 = createLineBreakpoint(54, "Breakpoints");
-		IJavaLineBreakpoint breakpoint2 = createLineBreakpoint(55, "Breakpoints");
+		IJavaLineBreakpoint breakpoint1 = createLineBreakpoint(57, "Breakpoints");
+		IJavaLineBreakpoint breakpoint2 = createLineBreakpoint(58, "Breakpoints");
 		InstallVoter v1 = new InstallVoter(DONT_CARE, breakpoint1);
 		InstallVoter v2 = new InstallVoter(DONT_SUSPEND, breakpoint1);
 		InstallVoter v3 = new InstallVoter(DONT_SUSPEND, breakpoint1);
@@ -551,7 +551,7 @@
 	 * @throws Exception
 	 */
 	public void testUnanimousSuspendVote() throws Exception {
-		IJavaLineBreakpoint breakpoint = createLineBreakpoint(54, "Breakpoints");
+		IJavaLineBreakpoint breakpoint = createLineBreakpoint(57, "Breakpoints");
 		SuspendVoter v1 = new SuspendVoter(SUSPEND, breakpoint);
 		SuspendVoter v2 = new SuspendVoter(SUSPEND, breakpoint);
 		SuspendVoter v3 = new SuspendVoter(SUSPEND, breakpoint);
@@ -577,7 +577,7 @@
 	 * @throws Exception
 	 */
 	public void testDontCareSuspendVote() throws Exception {
-		IJavaLineBreakpoint breakpoint = createLineBreakpoint(54, "Breakpoints");
+		IJavaLineBreakpoint breakpoint = createLineBreakpoint(57, "Breakpoints");
 		SuspendVoter v1 = new SuspendVoter(DONT_CARE, breakpoint);
 		SuspendVoter v2 = new SuspendVoter(DONT_CARE, breakpoint);
 		SuspendVoter v3 = new SuspendVoter(DONT_CARE, breakpoint);
@@ -603,7 +603,7 @@
 	 * @throws Exception
 	 */
 	public void testSuspendDontCareVote() throws Exception {
-		IJavaLineBreakpoint breakpoint = createLineBreakpoint(54, "Breakpoints");
+		IJavaLineBreakpoint breakpoint = createLineBreakpoint(57, "Breakpoints");
 		SuspendVoter v1 = new SuspendVoter(SUSPEND, breakpoint);
 		SuspendVoter v2 = new SuspendVoter(DONT_CARE, breakpoint);
 		SuspendVoter v3 = new SuspendVoter(DONT_CARE, breakpoint);
@@ -629,7 +629,7 @@
 	 * @throws Exception
 	 */
 	public void testSuspendDontVote() throws Exception {
-		IJavaLineBreakpoint breakpoint = createLineBreakpoint(54, "Breakpoints");
+		IJavaLineBreakpoint breakpoint = createLineBreakpoint(57, "Breakpoints");
 		SuspendVoter v1 = new SuspendVoter(SUSPEND, breakpoint);
 		SuspendVoter v2 = new SuspendVoter(DONT_SUSPEND, breakpoint);
 		SuspendVoter v3 = new SuspendVoter(DONT_SUSPEND, breakpoint);
@@ -778,7 +778,7 @@
 	 */
 	public void testEvalListenerExtension() throws Exception {
 		String typeName = "HitCountLooper";
-		IJavaLineBreakpoint bp = createLineBreakpoint(16, typeName);
+		IJavaLineBreakpoint bp = createLineBreakpoint(19, typeName);
 		bp.addBreakpointListener("org.eclipse.jdt.debug.tests.evalListener");
 		EvalualtionBreakpointListener.reset();
 		EvalualtionBreakpointListener.PROJECT = get14Project();
@@ -819,8 +819,8 @@
 	 */
 	public void testStepEndResumeVote() throws Exception {
 		String typeName = "HitCountLooper";
-		IJavaLineBreakpoint first = createLineBreakpoint(16, typeName);
-		IJavaLineBreakpoint second = createLineBreakpoint(17, typeName);
+		IJavaLineBreakpoint first = createLineBreakpoint(19, typeName);
+		IJavaLineBreakpoint second = createLineBreakpoint(20, typeName);
 		second.addBreakpointListener("org.eclipse.jdt.debug.tests.resumeListener");
 
 		IJavaThread thread= null;
@@ -845,9 +845,9 @@
 	public void testStepOverHitsNestedEvaluationHandlerResume() throws Exception {
 		String typeName = "MethodLoop";
 		// breakpoint on line 24 is where the step is initiated from
-		IJavaLineBreakpoint first = createLineBreakpoint(24, typeName);
+		IJavaLineBreakpoint first = createLineBreakpoint(27, typeName);
 		// second breakpoint is where the evaluation is performed with a resume vote
-		IJavaLineBreakpoint second = createLineBreakpoint(29, typeName);
+		IJavaLineBreakpoint second = createLineBreakpoint(32, typeName);
 		second.addBreakpointListener("org.eclipse.jdt.debug.tests.evalListener");
 		EvalualtionBreakpointListener.reset();
 		EvalualtionBreakpointListener.PROJECT = get14Project();
@@ -898,9 +898,9 @@
 	public void testStepOverHitsNestedEvaluationHandlerSuspend() throws Exception {
 		String typeName = "MethodLoop";
 		// breakpoint on line 24 is where the step is initiated from
-		IJavaLineBreakpoint first = createLineBreakpoint(24, typeName);
+		IJavaLineBreakpoint first = createLineBreakpoint(27, typeName);
 		// second breakpoint is where the evaluation is performed with a resume vote
-		IJavaLineBreakpoint second = createLineBreakpoint(29, typeName);
+		IJavaLineBreakpoint second = createLineBreakpoint(32, typeName);
 		second.addBreakpointListener("org.eclipse.jdt.debug.tests.evalListener");
 		EvalualtionBreakpointListener.reset();
 		EvalualtionBreakpointListener.PROJECT = get14Project();
@@ -951,8 +951,8 @@
 	 */
 	public void testSuspendEvaluation() throws Exception {
 		String typeName = "MethodLoop";
-		IJavaLineBreakpoint first = createLineBreakpoint(19, typeName);
-		IJavaLineBreakpoint second = createLineBreakpoint(29, typeName);
+		IJavaLineBreakpoint first = createLineBreakpoint(22, typeName);
+		IJavaLineBreakpoint second = createLineBreakpoint(32, typeName);
 		second.addBreakpointListener("org.eclipse.jdt.debug.tests.evalListener");
 		EvalualtionBreakpointListener.reset();
 		EvalualtionBreakpointListener.PROJECT = get14Project();
@@ -986,7 +986,7 @@
 	public void testGlobalListener() throws Exception {
 		GlobalBreakpointListener.clear();
 		String typeName = "HitCountLooper";
-		IJavaLineBreakpoint bp = createLineBreakpoint(16, typeName);
+		IJavaLineBreakpoint bp = createLineBreakpoint(19, typeName);
 
 		IJavaThread thread= null;
 		try {
@@ -1015,8 +1015,8 @@
 		String typeName = "HitCountLooper";
 		Collector collector = new Collector();
 		JDIDebugModel.addJavaBreakpointListener(collector);
-		IJavaLineBreakpoint bp = createConditionalLineBreakpoint(16, typeName, "return false;", true);
-		IJavaLineBreakpoint second = createConditionalLineBreakpoint(17, typeName, "i == 3", true);
+		IJavaLineBreakpoint bp = createConditionalLineBreakpoint(19, typeName, "return false;", true);
+		IJavaLineBreakpoint second = createConditionalLineBreakpoint(20, typeName, "i == 3", true);
 
 		IJavaThread thread= null;
 		try {
@@ -1041,8 +1041,8 @@
 		String typeName = "HitCountLooper";
 		Collector collector = new Collector();
 		JDIDebugModel.addJavaBreakpointListener(collector);
-		IJavaLineBreakpoint bp = createLineBreakpoint(16, typeName);
-		IJavaLineBreakpoint second = createConditionalLineBreakpoint(17, typeName, "i == 1", true);
+		IJavaLineBreakpoint bp = createLineBreakpoint(19, typeName);
+		IJavaLineBreakpoint second = createConditionalLineBreakpoint(20, typeName, "i == 1", true);
 
 		IJavaThread thread= null;
 		try {
@@ -1077,7 +1077,7 @@
 	 */
 	public void testListenersOnCompilationError() throws Exception {
 		String typeName = "HitCountLooper";
-		IJavaLineBreakpoint bp = createConditionalLineBreakpoint(17, typeName, "x == 1", true);
+		IJavaLineBreakpoint bp = createConditionalLineBreakpoint(20, typeName, "x == 1", true);
 		bp.addBreakpointListener("org.eclipse.jdt.debug.tests.evalListener");
 		EvalualtionBreakpointListener.reset();
 
@@ -1177,7 +1177,7 @@
 	public void testAddDuplicateListeners() throws Exception {
 		try {
 			String typeName = "HitCountLooper";
-			IJavaLineBreakpoint bp = createLineBreakpoint(16, typeName);
+			IJavaLineBreakpoint bp = createLineBreakpoint(19, typeName);
 
 			String[] listeners = bp.getBreakpointListeners();
 			assertEquals(0, listeners.length);
@@ -1210,7 +1210,7 @@
 	public void testGetListenersAfterDelete() throws Exception {
 		try {
 			String typeName = "HitCountLooper";
-			IJavaLineBreakpoint bp = createLineBreakpoint(16, typeName);
+			IJavaLineBreakpoint bp = createLineBreakpoint(19, typeName);
 
 			String[] listeners = bp.getBreakpointListeners();
 			assertEquals(0, listeners.length);
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/MethodBreakpointTests15.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/MethodBreakpointTests15.java
index d4ba7cf..6476551 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/MethodBreakpointTests15.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/MethodBreakpointTests15.java
@@ -44,19 +44,19 @@
 	}
 
 	public void testStaticTypeParameter() throws Exception {
-		IJavaMethodBreakpoint breakpoint  = createBreakpoint(25);
+		IJavaMethodBreakpoint breakpoint = createBreakpoint(28);
 		assertEquals("Wrong method", "staticTypeParameter", breakpoint.getMethodName());
 		runToBreakpoint(getTypeName(), breakpoint);
 	}
 
 	public void testTypeParameter() throws Exception {
-		IJavaMethodBreakpoint breakpoint  = createBreakpoint(29);
+		IJavaMethodBreakpoint breakpoint = createBreakpoint(32);
 		assertEquals("Wrong method", "typeParameter", breakpoint.getMethodName());
 		runToBreakpoint(getTypeName(), breakpoint);
 	}
 
 	public void testMethodTypeParameter() throws Exception {
-		IJavaMethodBreakpoint breakpoint  = createBreakpoint(34);
+		IJavaMethodBreakpoint breakpoint = createBreakpoint(37);
 		assertEquals("Wrong method", "methodTypeParameter", breakpoint.getMethodName());
 		runToBreakpoint(getTypeName(), breakpoint);
 	}
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/MiscBreakpointsTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/MiscBreakpointsTests.java
index a4d565f..55a98ba 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/MiscBreakpointsTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/MiscBreakpointsTests.java
@@ -54,7 +54,7 @@
 			javaThread= launchAndSuspend(typeName);
 
 			int stackLine = javaThread.getTopStackFrame().getLineNumber();
-			assertTrue("line number should be '26', but was " + stackLine, stackLine == 26);
+			assertTrue("line number should be '29', but was " + stackLine, stackLine == 29);
 
 		} finally {
             getPrefStore().setValue(IJDIPreferencesConstants.PREF_SUSPEND_ON_UNCAUGHT_EXCEPTIONS, false);
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/PatternBreakpointTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/PatternBreakpointTests.java
index 3f05701..5559dab 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/PatternBreakpointTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/PatternBreakpointTests.java
@@ -46,43 +46,43 @@
 		String pattern = "Break";
 		List<IJavaPatternBreakpoint> bps = new ArrayList<>();
 		// anonymous class
-		bps.add(createPatternBreakpoint(43, sourceName, pattern));
+		bps.add(createPatternBreakpoint(46, sourceName, pattern));
 		// blocks
-		bps.add(createPatternBreakpoint(102, sourceName, pattern));
+		bps.add(createPatternBreakpoint(105, sourceName, pattern));
 		// constructor
-		bps.add(createPatternBreakpoint(77, sourceName, pattern));
+		bps.add(createPatternBreakpoint(80, sourceName, pattern));
 		// else
-		bps.add(createPatternBreakpoint(88, sourceName, pattern));
+		bps.add(createPatternBreakpoint(91, sourceName, pattern));
 		//finally after catch
-		bps.add(createPatternBreakpoint(120, sourceName, pattern));
+		bps.add(createPatternBreakpoint(123, sourceName, pattern));
 		//finally after try
-		bps.add(createPatternBreakpoint(128, sourceName, pattern));
+		bps.add(createPatternBreakpoint(131, sourceName, pattern));
 		// for loop
-		bps.add(createPatternBreakpoint(93, sourceName, pattern));
+		bps.add(createPatternBreakpoint(96, sourceName, pattern));
 		// if
-		bps.add(createPatternBreakpoint(81, sourceName, pattern));
+		bps.add(createPatternBreakpoint(84, sourceName, pattern));
 		// initializer
-		bps.add(createPatternBreakpoint(17, sourceName, pattern));
+		bps.add(createPatternBreakpoint(20, sourceName, pattern));
 		// inner class
-		bps.add(createPatternBreakpoint(22, sourceName, pattern));
+		bps.add(createPatternBreakpoint(25, sourceName, pattern));
 		// return true
-		bps.add(createPatternBreakpoint(72, sourceName, pattern));
+		bps.add(createPatternBreakpoint(75, sourceName, pattern));
 		// instance method
-		bps.add(createPatternBreakpoint(107, sourceName, pattern));
+		bps.add(createPatternBreakpoint(110, sourceName, pattern));
 		// static method
-		bps.add(createPatternBreakpoint(53, sourceName, pattern));
+		bps.add(createPatternBreakpoint(56, sourceName, pattern));
 		// case statement
-		bps.add(createPatternBreakpoint(133, sourceName, pattern));
+		bps.add(createPatternBreakpoint(136, sourceName, pattern));
 		// default statement
-		bps.add(createPatternBreakpoint(140, sourceName, pattern));
+		bps.add(createPatternBreakpoint(143, sourceName, pattern));
 		// synchronized blocks
-		bps.add(createPatternBreakpoint(146, sourceName, pattern));
+		bps.add(createPatternBreakpoint(149, sourceName, pattern));
 		// try
-		bps.add(createPatternBreakpoint(125, sourceName, pattern));
+		bps.add(createPatternBreakpoint(128, sourceName, pattern));
 		//catch
-		bps.add(createPatternBreakpoint(118, sourceName, pattern));
+		bps.add(createPatternBreakpoint(121, sourceName, pattern));
 		// while
-		bps.add(createPatternBreakpoint(97, sourceName, pattern));
+		bps.add(createPatternBreakpoint(100, sourceName, pattern));
 
 
 		IJavaThread thread= null;
@@ -115,9 +115,9 @@
 	 * @throws Exception
 	 */
 	public void testToggleStratumBreakpoint() throws Exception {
-		IJavaStratumLineBreakpoint stratumLineBreakpoint = createStratumBreakpoint(3, "date.jsp", "JSP");
+		IJavaStratumLineBreakpoint stratumLineBreakpoint = createStratumBreakpoint(6, "date.jsp", "JSP");
 		String typeName = "Breakpoints";
-		createLineBreakpoint(52, typeName);
+		createLineBreakpoint(55, typeName);
 		IJavaThread thread= null;
 		try {
 			thread= launchToBreakpoint(typeName);
@@ -148,7 +148,7 @@
 	public void testTogglePatternBreakpoint() throws Exception {
 		IJavaPatternBreakpoint patternBreakpoint = createPatternBreakpoint(3, "date.jsp", "date");
 		String typeName = "Breakpoints";
-		createLineBreakpoint(52, typeName);
+		createLineBreakpoint(55, typeName);
 		IJavaThread thread= null;
 		try {
 			thread= launchToBreakpoint(typeName);
@@ -181,43 +181,43 @@
 		String pattern = "Break";
 		List<IJavaPatternBreakpoint> bps = new ArrayList<>();
 		// anonymous class
-		bps.add(createPatternBreakpoint(43, sourceName, pattern));
+		bps.add(createPatternBreakpoint(46, sourceName, pattern));
 		// blocks
-		bps.add(createPatternBreakpoint(102, sourceName, pattern));
+		bps.add(createPatternBreakpoint(105, sourceName, pattern));
 		// constructor
-		bps.add(createPatternBreakpoint(77, sourceName, pattern));
+		bps.add(createPatternBreakpoint(80, sourceName, pattern));
 		// else
-		bps.add(createPatternBreakpoint(88, sourceName, pattern));
+		bps.add(createPatternBreakpoint(91, sourceName, pattern));
 		//finally after catch
-		bps.add(createPatternBreakpoint(120, sourceName, pattern));
+		bps.add(createPatternBreakpoint(123, sourceName, pattern));
 		//finally after try
-		bps.add(createPatternBreakpoint(128, sourceName, pattern));
+		bps.add(createPatternBreakpoint(131, sourceName, pattern));
 		// for loop
-		bps.add(createPatternBreakpoint(93, sourceName, pattern));
+		bps.add(createPatternBreakpoint(96, sourceName, pattern));
 		// if
-		bps.add(createPatternBreakpoint(81, sourceName, pattern));
+		bps.add(createPatternBreakpoint(84, sourceName, pattern));
 		// initializer
-		bps.add(createPatternBreakpoint(17, sourceName, pattern));
+		bps.add(createPatternBreakpoint(20, sourceName, pattern));
 		// inner class
-		bps.add(createPatternBreakpoint(22, sourceName, pattern));
+		bps.add(createPatternBreakpoint(25, sourceName, pattern));
 		// return true
-		bps.add(createPatternBreakpoint(72, sourceName, pattern));
+		bps.add(createPatternBreakpoint(75, sourceName, pattern));
 		// instance method
-		bps.add(createPatternBreakpoint(107, sourceName, pattern));
+		bps.add(createPatternBreakpoint(110, sourceName, pattern));
 		// static method
-		bps.add(createPatternBreakpoint(53, sourceName, pattern));
+		bps.add(createPatternBreakpoint(56, sourceName, pattern));
 		// case statement
-		bps.add(createPatternBreakpoint(133, sourceName, pattern));
+		bps.add(createPatternBreakpoint(136, sourceName, pattern));
 		// default statement
-		bps.add(createPatternBreakpoint(140, sourceName, pattern));
+		bps.add(createPatternBreakpoint(143, sourceName, pattern));
 		// synchronized blocks
-		bps.add(createPatternBreakpoint(146, sourceName, pattern));
+		bps.add(createPatternBreakpoint(149, sourceName, pattern));
 		// try
-		bps.add(createPatternBreakpoint(125, sourceName, pattern));
+		bps.add(createPatternBreakpoint(128, sourceName, pattern));
 		//catch
-		bps.add(createPatternBreakpoint(118, sourceName, pattern));
+		bps.add(createPatternBreakpoint(121, sourceName, pattern));
 		// while
-		bps.add(createPatternBreakpoint(97, sourceName, pattern));
+		bps.add(createPatternBreakpoint(100, sourceName, pattern));
 
 
 		IJavaThread thread= null;
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/PreLaunchBreakpointTest.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/PreLaunchBreakpointTest.java
index 60d2635..7a1ca32 100755
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/PreLaunchBreakpointTest.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/PreLaunchBreakpointTest.java
@@ -52,7 +52,7 @@
 		preferenceStore.setValue(IInternalDebugUIConstants.PREF_RELAUNCH_IN_DEBUG_MODE, MessageDialogWithToggle.ALWAYS);
 		IJavaThread thread = null;
 		try {
-			createLineBreakpoint(52, typeName);
+			createLineBreakpoint(55, typeName);
 			DebugEventWaiter waiter= new DebugElementKindEventDetailWaiter(DebugEvent.SUSPEND, IJavaThread.class, DebugEvent.BREAKPOINT);
 			waiter.setTimeout(DEFAULT_TIMEOUT);
 			configuration.launch(ILaunchManager.RUN_MODE, null);
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/RunToLineTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/RunToLineTests.java
index 56a8416..e07d9a4 100755
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/RunToLineTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/RunToLineTests.java
@@ -89,7 +89,7 @@
 	 * @throws Exception
 	 */
 	public void testRunToLine() throws Exception {
-	    runToLine(55, 55, true);
+		runToLine(58, 58, true);
 	}
 
 	/**
@@ -98,8 +98,8 @@
 	 * @throws Exception
 	 */
 	public void testRunToLineSkipBreakpoint() throws Exception {
-	    createLineBreakpoint(53, "Breakpoints");
-	    runToLine(55, 55, true);
+		createLineBreakpoint(56, "Breakpoints");
+		runToLine(58, 58, true);
 	}
 
 	/**
@@ -108,8 +108,8 @@
 	 * @throws Exception
 	 */
 	public void testRunToLineHitBreakpoint() throws Exception {
-	    createLineBreakpoint(53, "Breakpoints");
-	    runToLine(55, 53, false);
+		createLineBreakpoint(56, "Breakpoints");
+		runToLine(58, 56, false);
 	}
 
 	/**
@@ -124,7 +124,7 @@
 	 */
 	public void runToLine(final int lineNumber, int expectedLineNumber, boolean skipBreakpoints) throws Exception {
 		String typeName = "Breakpoints";
-		IJavaLineBreakpoint breakpoint = createLineBreakpoint(52, typeName);
+		IJavaLineBreakpoint breakpoint = createLineBreakpoint(55, typeName);
 
 		boolean restore = DebugUITools.getPreferenceStore().getBoolean(IDebugUIConstants.PREF_SKIP_BREAKPOINTS_DURING_RUN_TO_LINE);
 		DebugUITools.getPreferenceStore().setValue(IDebugUIConstants.PREF_SKIP_BREAKPOINTS_DURING_RUN_TO_LINE, skipBreakpoints);
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/SuspendVMBreakpointsTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/SuspendVMBreakpointsTests.java
index 3e8bb16..baaecf4 100755
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/SuspendVMBreakpointsTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/SuspendVMBreakpointsTests.java
@@ -107,7 +107,7 @@
 			IStackFrame frame = thread.getTopStackFrame();
 			assertNotNull("No breakpoint", hit);
 			assertTrue("Should be an access", wp.isAccessSuspend(thread.getDebugTarget()));
-			assertEquals("Should be line 30", 30, frame.getLineNumber());
+			assertEquals("Should be line 33", 33, frame.getLineNumber());
 
 			verifyAllThreadsSuspended(thread);
 
@@ -140,7 +140,7 @@
 			// should be modification
 			assertTrue("First hit should be modification", !wp.isAccessSuspend(thread.getDebugTarget()));
 			// line 27
-			assertEquals("Should be on line 27", 27, frame.getLineNumber());
+			assertEquals("Should be on line 30", 30, frame.getLineNumber());
 
 			verifyAllThreadsSuspended(thread);
 
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/TargetPatternBreakpointTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/TargetPatternBreakpointTests.java
index e8b6353..dcef86a 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/TargetPatternBreakpointTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/TargetPatternBreakpointTests.java
@@ -54,43 +54,43 @@
 		String sourceName = "Breakpoints.java";
 		List<IJavaTargetPatternBreakpoint> bps = new ArrayList<>();
 		// anonymous class
-		bps.add(createTargetPatternBreakpoint(43, sourceName));
+		bps.add(createTargetPatternBreakpoint(46, sourceName));
 		// blocks
-		bps.add(createTargetPatternBreakpoint(102, sourceName));
+		bps.add(createTargetPatternBreakpoint(105, sourceName));
 		// constructor
-		bps.add(createTargetPatternBreakpoint(77, sourceName));
+		bps.add(createTargetPatternBreakpoint(80, sourceName));
 		// else
-		bps.add(createTargetPatternBreakpoint(66, sourceName));
+		bps.add(createTargetPatternBreakpoint(69, sourceName));
 		//finally after catch
-		bps.add(createTargetPatternBreakpoint(120, sourceName));
+		bps.add(createTargetPatternBreakpoint(123, sourceName));
 		//finally after try
-		bps.add(createTargetPatternBreakpoint(128, sourceName));
+		bps.add(createTargetPatternBreakpoint(131, sourceName));
 		// for loop
-		bps.add(createTargetPatternBreakpoint(93, sourceName));
+		bps.add(createTargetPatternBreakpoint(96, sourceName));
 		// if
-		bps.add(createTargetPatternBreakpoint(81, sourceName));
+		bps.add(createTargetPatternBreakpoint(84, sourceName));
 		// initializer
-		bps.add(createTargetPatternBreakpoint(17, sourceName));
+		bps.add(createTargetPatternBreakpoint(20, sourceName));
 		// inner class
-		bps.add(createTargetPatternBreakpoint(22, sourceName));
+		bps.add(createTargetPatternBreakpoint(25, sourceName));
 		// return true
-		bps.add(createTargetPatternBreakpoint(72, sourceName));
+		bps.add(createTargetPatternBreakpoint(75, sourceName));
 		// instance method
-		bps.add(createTargetPatternBreakpoint(107, sourceName));
+		bps.add(createTargetPatternBreakpoint(110, sourceName));
 		// static method
-		bps.add(createTargetPatternBreakpoint(53, sourceName));
+		bps.add(createTargetPatternBreakpoint(56, sourceName));
 		// case statement
-		bps.add(createTargetPatternBreakpoint(133, sourceName));
+		bps.add(createTargetPatternBreakpoint(136, sourceName));
 		// default statement
-		bps.add(createTargetPatternBreakpoint(140, sourceName));
+		bps.add(createTargetPatternBreakpoint(143, sourceName));
 		// synchronized blocks
-		bps.add(createTargetPatternBreakpoint(146, sourceName));
+		bps.add(createTargetPatternBreakpoint(149, sourceName));
 		// try
-		bps.add(createTargetPatternBreakpoint(125, sourceName));
+		bps.add(createTargetPatternBreakpoint(128, sourceName));
 		//catch
-		bps.add(createTargetPatternBreakpoint(118, sourceName));
+		bps.add(createTargetPatternBreakpoint(121, sourceName));
 		// while
-		bps.add(createTargetPatternBreakpoint(97, sourceName));
+		bps.add(createTargetPatternBreakpoint(100, sourceName));
 
 
 		IJavaThread thread= null;
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/TestToggleBreakpointsTarget.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/TestToggleBreakpointsTarget.java
index 2fd0a3c..64ac094 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/TestToggleBreakpointsTarget.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/TestToggleBreakpointsTarget.java
@@ -42,12 +42,12 @@
 		manager.addBreakpointListener(listener);
 		try {
 			Path path = new Path("testfiles/source/SomeClass.java");
-			toggleBreakpoint(path, 22); // 0 based offset in document line numbers
+			toggleBreakpoint(path, 25); // 0 based offset in document line numbers
 			TestUtil.waitForJobs(getName(), 100, DEFAULT_TIMEOUT);
 			IBreakpoint added = listener.getAdded();
 			assertTrue("Should be a line breakpoint", added instanceof IJavaLineBreakpoint);
 			IJavaLineBreakpoint breakpoint = (IJavaLineBreakpoint) added;
-			assertEquals("Wrong line number", 23, breakpoint.getLineNumber());
+			assertEquals("Wrong line number", 26, breakpoint.getLineNumber());
 			assertEquals("Wrong type name", "a.b.c.SomeClass", breakpoint.getTypeName());
 		} finally {
 			manager.removeBreakpointListener(listener);
@@ -67,7 +67,7 @@
 		manager.addBreakpointListener(listener);
 		try {
 			Path path = new Path("testfiles/source/SomeClass.java");
-			toggleBreakpoint(path, 19); // 0 based offset in document line numbers
+			toggleBreakpoint(path, 22); // 0 based offset in document line numbers
 			TestUtil.waitForJobs(getName(), 100, DEFAULT_TIMEOUT);
 			IBreakpoint added = listener.getAdded();
 			assertTrue("Should be a watchpoint", added instanceof IJavaWatchpoint);
@@ -92,7 +92,7 @@
 		manager.addBreakpointListener(listener);
 		try {
 			Path path = new Path("testfiles/source/SomeClass.java");
-			toggleBreakpoint(path, 21); // 0 based offset in document line numbers
+			toggleBreakpoint(path, 24); // 0 based offset in document line numbers
 			TestUtil.waitForJobs(getName(), 100, DEFAULT_TIMEOUT);
 			IBreakpoint added = listener.getAdded();
 			assertTrue("Should be a method breakpoint", added instanceof IJavaMethodBreakpoint);
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/TestToggleBreakpointsTarget8.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/TestToggleBreakpointsTarget8.java
index f6c0304..e04ff36 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/TestToggleBreakpointsTarget8.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/TestToggleBreakpointsTarget8.java
@@ -45,7 +45,7 @@
 		manager.addBreakpointListener(listener);
 		try {
 			Path path = new Path("java8/EvalTestIntf18.java");
-			toggleBreakpoint(path, 20); // 0 based offset in document line numbers
+			toggleBreakpoint(path, 23); // 0 based offset in document line numbers
 			TestUtil.waitForJobs(getName(), 100, DEFAULT_TIMEOUT);
 			IBreakpoint added = listener.getAdded();
 			assertTrue("Should be a method breakpoint", added instanceof IJavaMethodBreakpoint);
@@ -71,7 +71,7 @@
 		manager.addBreakpointListener(listener);
 		try {
 			Path path = new Path("java8/EvalTestIntf18.java");
-			toggleBreakpoint(path, 25); // 0 based offset in document line numbers
+			toggleBreakpoint(path, 28); // 0 based offset in document line numbers
 			TestUtil.waitForJobs(getName(), 100, DEFAULT_TIMEOUT);
 			IBreakpoint added = listener.getAdded();
 			assertTrue("Should be a method breakpoint", added instanceof IJavaMethodBreakpoint);
@@ -98,7 +98,7 @@
 		manager.addBreakpointListener(listener);
 		try {
 			Path path = new Path("java8/EvalTestIntf18.java");
-			toggleBreakpoint(path, 19); // 0 based offset in document line numbers
+			toggleBreakpoint(path, 22); // 0 based offset in document line numbers
 			TestUtil.waitForJobs(getName(), 100, DEFAULT_TIMEOUT);
 			assertTrue(listener.isEmpty());
 		} finally {
@@ -119,12 +119,12 @@
 		manager.addBreakpointListener(listener);
 		try {
 			Path path = new Path("java8/EvalTestIntf18.java");
-			toggleBreakpoint(path, 21); // 0 based offset in document line numbers
+			toggleBreakpoint(path, 24); // 0 based offset in document line numbers
 			TestUtil.waitForJobs(getName(), 100, DEFAULT_TIMEOUT);
 			IBreakpoint added = listener.getAdded();
 			assertTrue("Should be a line breakpoint", added instanceof IJavaLineBreakpoint);
 			IJavaLineBreakpoint breakpoint = (IJavaLineBreakpoint) added;
-			assertEquals("Wrong line number", 22, breakpoint.getLineNumber());
+			assertEquals("Wrong line number", 25, breakpoint.getLineNumber());
 			assertEquals("Wrong type name", "Intf18", breakpoint.getTypeName());
 		} finally {
 			manager.removeBreakpointListener(listener);
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/ThreadFilterBreakpointsTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/ThreadFilterBreakpointsTests.java
index 5f4c5cc..e8018c3 100755
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/ThreadFilterBreakpointsTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/ThreadFilterBreakpointsTests.java
@@ -38,7 +38,7 @@
 	 */
 	public void testSimpleThreadFilterBreakpoint() throws Exception {
 		String typeName = "HitCountLooper";
-		IJavaLineBreakpoint bp = createLineBreakpoint(16, typeName);
+		IJavaLineBreakpoint bp = createLineBreakpoint(19, typeName);
 
 		IJavaThread thread= null;
 		try {
@@ -60,13 +60,13 @@
 	 */
 	public void testMultiThreadFilterBreakpoint() throws Exception {
 		String typeName = "MultiThreadedLoop";
-		IJavaLineBreakpoint bp1 = createLineBreakpoint(17, typeName);
+		IJavaLineBreakpoint bp1 = createLineBreakpoint(20, typeName);
 
 		IJavaThread thread= null;
 		try {
 			thread= launchToLineBreakpoint(typeName, bp1);
 
-			IJavaLineBreakpoint bp2 = createLineBreakpoint(40, typeName);
+			IJavaLineBreakpoint bp2 = createLineBreakpoint(43, typeName);
 			bp2.setThreadFilter(thread);
 
 			thread = resumeToLineBreakpoint(thread, bp2);
@@ -135,7 +135,7 @@
 	 */
 	public void testModificationWatchpointThreadFilterBreakpoint() throws Exception {
 		String typeName = "MultiThreadedList";
-		IJavaLineBreakpoint bp1 = createLineBreakpoint(22, typeName);
+		IJavaLineBreakpoint bp1 = createLineBreakpoint(25, typeName);
 
 		IJavaThread thread= null;
 		try {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/ThreadNameChangeTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/ThreadNameChangeTests.java
index c29fcc7..5ed7a3d 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/ThreadNameChangeTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/ThreadNameChangeTests.java
@@ -58,8 +58,8 @@
 	 */
 	public void testListenToThreadNameChange() throws Exception {
 		String typeName = "ThreadNameChange";
-		final int bpLine1 = 36;
-		final int bpLine2 = 40;
+		final int bpLine1 = 39;
+		final int bpLine2 = 43;
 
 		IJavaLineBreakpoint bp1 = createLineBreakpoint(bpLine1, "", typeName + ".java", typeName);
 		IJavaLineBreakpoint bp2 = createLineBreakpoint(bpLine2, "", typeName + ".java", typeName);
@@ -109,8 +109,8 @@
 		System.setProperty(DISABLE_THREAD_NAME_CHANGE_LISTENER, String.valueOf(Boolean.TRUE));
 
 		String typeName = "ThreadNameChange";
-		final int bpLine1 = 36;
-		final int bpLine2 = 40;
+		final int bpLine1 = 39;
+		final int bpLine2 = 43;
 
 		IJavaLineBreakpoint bp1 = createLineBreakpoint(bpLine1, "", typeName + ".java", typeName);
 		IJavaLineBreakpoint bp2 = createLineBreakpoint(bpLine2, "", typeName + ".java", typeName);
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/TriggerPointBreakpointsTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/TriggerPointBreakpointsTests.java
index 570a500..3dda63a 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/TriggerPointBreakpointsTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/TriggerPointBreakpointsTests.java
@@ -40,8 +40,8 @@
 	 */
 	public void testTriggerPointBreakpoint() throws Exception {
 		String typeName = "TriggerPoint_01";
-		IJavaLineBreakpoint bp1 = createLineBreakpoint(25, typeName);
-		IJavaLineBreakpoint bp2 = createLineBreakpoint(30, typeName);
+		IJavaLineBreakpoint bp1 = createLineBreakpoint(28, typeName);
+		IJavaLineBreakpoint bp2 = createLineBreakpoint(33, typeName);
 		bp2.setTriggerPoint(true);
 
 		IJavaThread thread= null;
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/WatchpointTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/WatchpointTests.java
index 2ccdf4e..ceb3ff3 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/WatchpointTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/WatchpointTests.java
@@ -58,8 +58,8 @@
 
 			// should be modification
 			assertTrue("First hit should be modification", !wp.isAccessSuspend(thread.getDebugTarget()));
-			// line 27
-			assertEquals("Should be on line 27", 27, frame.getLineNumber());
+			// line 30
+			assertEquals("Should be on line 30", 30, frame.getLineNumber());
 
 			// should hit access 10 times
 			int count = 10;
@@ -73,7 +73,7 @@
 					throw new TestAgainException("Retest - the debug target is terminated or disconnected");
 				}
 				assertTrue("Should be an access", wp.isAccessSuspend(thread.getDebugTarget()));
-				assertEquals("Should be line 30", 30, frame.getLineNumber());
+				assertEquals("Should be line 33", 33, frame.getLineNumber());
 				count--;
 			}
 
@@ -105,8 +105,8 @@
 
 			// should be modification
 			assertTrue("First hit should be modification", !wp.isAccessSuspend(thread.getDebugTarget()));
-			// line 27
-			assertEquals("Should be on line 27", 27, frame.getLineNumber());
+			// line 30
+			assertEquals("Should be on line 30", 30, frame.getLineNumber());
 
 			resumeAndExit(thread);
 
@@ -153,7 +153,7 @@
 			IStackFrame frame = thread.getTopStackFrame();
 			assertNotNull("No breakpoint", wp);
 			assertTrue("Should be an access", wp.isAccessSuspend(thread.getDebugTarget()));
-			assertEquals("Should be line 30", 30, frame.getLineNumber());
+			assertEquals("Should be line 33", 33, frame.getLineNumber());
 
 			// should hit access 9 more times
 			int count = 9;
@@ -167,7 +167,7 @@
 					throw new TestAgainException("Retest - the debug target is terminated or disconnected");
 				}
 				assertTrue("Should be an access", wp.isAccessSuspend(thread.getDebugTarget()));
-				assertEquals("Should be line 30", 30, frame.getLineNumber());
+				assertEquals("Should be line 33", 33, frame.getLineNumber());
 				count--;
 			}
 
@@ -201,7 +201,7 @@
 				throw new TestAgainException("Retest - the debug target is terminated or disconnected");
 			}
 			assertTrue("Should be an access", wp.isAccessSuspend(thread.getDebugTarget()));
-			assertEquals("Should be line 30", 30, frame.getLineNumber());
+			assertEquals("Should be line 33", 33, frame.getLineNumber());
 
 			wp.setEnabled(false);
 
@@ -232,7 +232,7 @@
 			IJavaStackFrame frame = (IJavaStackFrame) thread.getTopStackFrame();
 			assertNotNull("No breakpoint", hit);
 			assertTrue("Should be an access", wp.isAccessSuspend(thread.getDebugTarget()));
-			assertEquals("Should be line 30", 30, frame.getLineNumber());
+			assertEquals("Should be line 33", 33, frame.getLineNumber());
 			IVariable var = findVariable(frame, "value");
 			assertNotNull("Could not find variable 'value'", var);
 
@@ -256,7 +256,7 @@
 					throw new TestAgainException("Retest - the debug target is terminated or disconnected");
 				}
 				assertTrue("Should be an access", wp.isAccessSuspend(thread.getDebugTarget()));
-				assertEquals("Should be line 30", 30, frame.getLineNumber());
+				assertEquals("Should be line 33", 33, frame.getLineNumber());
 				count--;
 			}
 
@@ -289,7 +289,7 @@
 			// should be modification
 			assertTrue("First hit should be modification", !wp.isAccessSuspend(thread.getDebugTarget()));
 			// line 27
-			assertEquals("Should be on line 27", 27, frame.getLineNumber());
+			assertEquals("Should be on line 30", 30, frame.getLineNumber());
 
 			getBreakpointManager().setEnabled(false);
 			resumeAndExit(thread);
@@ -323,7 +323,7 @@
 			// should be modification
 			assertTrue("First hit should be modification", !wp.isAccessSuspend(thread.getDebugTarget()));
 			// line 27
-			assertEquals("Should be on line 15", 15, frame.getLineNumber());
+			assertEquals("Should be on line 18", 18, frame.getLineNumber());
 
 			getBreakpointManager().setEnabled(false);
 			resumeAndExit(thread);
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/ArrayTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/ArrayTests.java
index 3437637..3766f9b 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/ArrayTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/ArrayTests.java
@@ -36,7 +36,7 @@
 
 	public void testGetSize() throws Exception {
 		String typeName = "ArrayTests";
-		ILineBreakpoint bp = createLineBreakpoint(19, typeName);
+		ILineBreakpoint bp = createLineBreakpoint(22, typeName);
 
 		IJavaThread thread = null;
 		try {
@@ -56,7 +56,7 @@
 
 	public void testGetVariable() throws Exception {
 		String typeName = "ArrayTests";
-		ILineBreakpoint bp = createLineBreakpoint(19, typeName);
+		ILineBreakpoint bp = createLineBreakpoint(22, typeName);
 
 		IJavaThread thread = null;
 		try {
@@ -78,7 +78,7 @@
 
 	public void testGetVariableRange() throws Exception {
 		String typeName = "ArrayTests";
-		ILineBreakpoint bp = createLineBreakpoint(19, typeName);
+		ILineBreakpoint bp = createLineBreakpoint(22, typeName);
 
 		IJavaThread thread = null;
 		try {
@@ -103,7 +103,7 @@
 
 	public void testSetValueRange() throws Exception {
 		String typeName = "ByteArrayTests";
-		ILineBreakpoint bp = createLineBreakpoint(27, typeName);
+		ILineBreakpoint bp = createLineBreakpoint(30, typeName);
 
 		IJavaThread thread = null;
 		try {
@@ -140,7 +140,7 @@
 
 	public void testCreateArray() throws Exception {
 		String typeName = "ByteArrayTests";
-		ILineBreakpoint bp = createLineBreakpoint(32, typeName);
+		ILineBreakpoint bp = createLineBreakpoint(35, typeName);
 
 		IJavaThread thread = null;
 		try {
@@ -186,7 +186,7 @@
 	 */
 	public void testSetZeroLengthArray() throws Exception {
 		String typeName = "ByteArrayTests";
-		ILineBreakpoint bp = createLineBreakpoint(32, typeName);
+		ILineBreakpoint bp = createLineBreakpoint(35, typeName);
 
 		IJavaThread thread = null;
 		try {
@@ -220,7 +220,7 @@
 	 */
 	public void testSetBadLowerIndexArray() throws Exception {
 		String typeName = "ByteArrayTests";
-		ILineBreakpoint bp = createLineBreakpoint(32, typeName);
+		ILineBreakpoint bp = createLineBreakpoint(35, typeName);
 
 		IJavaThread thread = null;
 		try {
@@ -259,7 +259,7 @@
 	 */
 	public void testSetBadUpperIndexArray() throws Exception {
 		String typeName = "ByteArrayTests";
-		ILineBreakpoint bp = createLineBreakpoint(32, typeName);
+		ILineBreakpoint bp = createLineBreakpoint(35, typeName);
 
 		IJavaThread thread = null;
 		try {
@@ -299,7 +299,7 @@
 	 */
 	public void testSetExactUpperIndexArray() throws Exception {
 		String typeName = "ByteArrayTests";
-		ILineBreakpoint bp = createLineBreakpoint(32, typeName);
+		ILineBreakpoint bp = createLineBreakpoint(35, typeName);
 
 		IJavaThread thread = null;
 		try {
@@ -339,7 +339,7 @@
 	 */
 	public void testSetBadLowerSrcIndexArray() throws Exception {
 		String typeName = "ByteArrayTests";
-		ILineBreakpoint bp = createLineBreakpoint(32, typeName);
+		ILineBreakpoint bp = createLineBreakpoint(35, typeName);
 
 		IJavaThread thread = null;
 		try {
@@ -379,7 +379,7 @@
 	 */
 	public void testSetBadUpperSrcIndexArray() throws Exception {
 		String typeName = "ByteArrayTests";
-		ILineBreakpoint bp = createLineBreakpoint(32, typeName);
+		ILineBreakpoint bp = createLineBreakpoint(35, typeName);
 
 		IJavaThread thread = null;
 		try {
@@ -419,7 +419,7 @@
 	 */
 	public void testSetExactSrcIndexArray() throws Exception {
 		String typeName = "ByteArrayTests";
-		ILineBreakpoint bp = createLineBreakpoint(32, typeName);
+		ILineBreakpoint bp = createLineBreakpoint(35, typeName);
 
 		IJavaThread thread = null;
 		try {
@@ -459,7 +459,7 @@
 	 */
 	public void testSetBadLowerLengthArray() throws Exception {
 		String typeName = "ByteArrayTests";
-		ILineBreakpoint bp = createLineBreakpoint(32, typeName);
+		ILineBreakpoint bp = createLineBreakpoint(35, typeName);
 
 		IJavaThread thread = null;
 		try {
@@ -499,7 +499,7 @@
 	 */
 	public void testSetMinus1LengthArray() throws Exception {
 		String typeName = "ByteArrayTests";
-		ILineBreakpoint bp = createLineBreakpoint(32, typeName);
+		ILineBreakpoint bp = createLineBreakpoint(35, typeName);
 
 		IJavaThread thread = null;
 		try {
@@ -537,7 +537,7 @@
 	 */
 	public void testSetBadLengthPlusIndexArray() throws Exception {
 		String typeName = "ByteArrayTests";
-		ILineBreakpoint bp = createLineBreakpoint(32, typeName);
+		ILineBreakpoint bp = createLineBreakpoint(35, typeName);
 
 		IJavaThread thread = null;
 		try {
@@ -577,7 +577,7 @@
 	 */
 	public void testSetBadLengthPlusSrcIndexArray() throws Exception {
 		String typeName = "ByteArrayTests";
-		ILineBreakpoint bp = createLineBreakpoint(32, typeName);
+		ILineBreakpoint bp = createLineBreakpoint(35, typeName);
 
 		IJavaThread thread = null;
 		try {
@@ -616,7 +616,7 @@
 	 */
 	public void testSetLongerSrcArray() throws Exception {
 		String typeName = "ByteArrayTests";
-		ILineBreakpoint bp = createLineBreakpoint(32, typeName);
+		ILineBreakpoint bp = createLineBreakpoint(35, typeName);
 
 		IJavaThread thread = null;
 		try {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/EventDispatcherTest.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/EventDispatcherTest.java
index ce276a0..a14b843 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/EventDispatcherTest.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/EventDispatcherTest.java
@@ -90,7 +90,7 @@
 		IJavaThread suspendedThread = null;
 		try {
 			DebugPlugin.getDefault().addDebugEventListener(debugListener);
-			createLineBreakpoint(24, "BulkThreadCreationTest");
+			createLineBreakpoint(27, "BulkThreadCreationTest");
 			suspendedThread = launchToBreakpoint("BulkThreadCreationTest");
 		}
 		finally {
@@ -111,7 +111,7 @@
 	 */
 	public void testConditionalExpressionEventDispatching() throws Exception {
 		String typeName = "BreakpointListenerTest";
-		createConditionalLineBreakpoint(15, typeName, "foo(); return false;", true);
+		createConditionalLineBreakpoint(18, typeName, "foo(); return false;", true);
 		IJavaLineBreakpoint breakpoint = createLineBreakpoint(20, typeName);
 		IJavaThread thread = null;
 		try {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/EventSetTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/EventSetTests.java
index b4b16f7..6e57c5b 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/EventSetTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/EventSetTests.java
@@ -35,8 +35,8 @@
 		String typeName = "Breakpoints";
 		List<IJavaLineBreakpoint> bps = new ArrayList<>();
 		// add two breakpoints at the same location
-		bps.add(createLineBreakpoint(88, typeName));
-		bps.add(createLineBreakpoint(88, typeName));
+		bps.add(createLineBreakpoint(91, typeName));
+		bps.add(createLineBreakpoint(91, typeName));
 
 
 		IJavaThread thread= null;
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/HcrTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/HcrTests.java
index 3e9c98d..10e074c 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/HcrTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/HcrTests.java
@@ -129,7 +129,7 @@
 
 	public void testSimpleHcr() throws Exception {
 		String typeName = "org.eclipse.debug.tests.targets.HcrClass";
-		createLineBreakpoint(39, typeName);
+		createLineBreakpoint(42, typeName);
 
 		IJavaThread thread= null;
 		try {
@@ -179,7 +179,7 @@
 				assertEquals("Should have dropped to method 'one'", "one", frame.getMethodName());
 
 				// resume to breakpoint
-				createLineBreakpoint(39, typeName);
+				createLineBreakpoint(42, typeName);
 				thread = resume(thread);
 
 				// value of 'x' should now be "Two"
@@ -203,7 +203,7 @@
 	 */
 	public void testGeneralHcrListener() throws Exception {
 		String typeName = "org.eclipse.debug.tests.targets.HcrClass";
-		createLineBreakpoint(39, typeName);
+		createLineBreakpoint(42, typeName);
 		HCRListener listener = new HCRListener();
 		JDIDebugModel.addHotCodeReplaceListener(listener);
 		IJavaThread thread= null;
@@ -254,7 +254,7 @@
 	 */
 	public void testSpecificHcrListener() throws Exception {
 		String typeName = "org.eclipse.debug.tests.targets.HcrClass";
-		createLineBreakpoint(39, typeName);
+		createLineBreakpoint(42, typeName);
 		HCRListener listener = new HCRListener();
 		HCRListener listener2 = new HCRListener();
 		JDIDebugModel.addHotCodeReplaceListener(listener);
@@ -309,7 +309,7 @@
 	 */
 	public void testHCRLocalType() throws Exception {
 		String typeName = "org.eclipse.debug.tests.targets.HcrClass2";
-		createLineBreakpoint(33, typeName);
+		createLineBreakpoint(36, typeName);
 		HCRListener listener = new HCRListener();
 		JDIDebugModel.addHotCodeReplaceListener(listener);
 		IJavaThread thread= null;
@@ -320,7 +320,7 @@
 			if (target.supportsHotCodeReplace()) {
 				IJavaStackFrame frame = (IJavaStackFrame)thread.getTopStackFrame();
 				assertEquals("We should be stopped in the local type", "org.eclipse.debug.tests.targets.HcrClass2$2$Local",  frame.getDeclaringTypeName());
-				assertEquals("We shoud be stopped on line 33", 33, frame.getLineNumber());
+				assertEquals("We shoud be stopped on line 36", 36, frame.getLineNumber());
 				ICompilationUnit cu = getCompilationUnit(get14Project(), "src", "org.eclipse.debug.tests.targets", "HcrClass2.java");
 				cu = cu.getPrimary();
 				if (!cu.isWorkingCopy()) {
@@ -343,7 +343,7 @@
 				assertTrue("the thread should be suspended again after the HCR", thread.isSuspended());
 				frame = (IJavaStackFrame) thread.getTopStackFrame();
 				assertEquals("We should be stopped in the local type", "org.eclipse.debug.tests.targets.HcrClass2$2$Local",  frame.getDeclaringTypeName());
-				assertEquals("We shoud be stopped on line 33", 33, frame.getLineNumber());
+				assertEquals("We shoud be stopped on line 36", 36, frame.getLineNumber());
 			} else {
 				System.err.println("Warning: HCR test skipped since target VM does not support HCR.");
 			}
@@ -362,7 +362,7 @@
 	 */
 	public void testHCRLocalType2() throws Exception {
 		String typeName = "org.eclipse.debug.tests.targets.HcrClass2";
-		createLineBreakpoint(37, typeName);
+		createLineBreakpoint(40, typeName);
 		HCRListener listener = new HCRListener();
 		JDIDebugModel.addHotCodeReplaceListener(listener);
 		IJavaThread thread= null;
@@ -373,7 +373,7 @@
 			if (target.supportsHotCodeReplace()) {
 				IJavaStackFrame frame = (IJavaStackFrame)thread.getTopStackFrame();
 				assertEquals("We should be stopped in the local type", "org.eclipse.debug.tests.targets.HcrClass2$2$Local",  frame.getDeclaringTypeName());
-				assertEquals("We shoud be stopped on line 37", 37, frame.getLineNumber());
+				assertEquals("We shoud be stopped on line 40", 40, frame.getLineNumber());
 				ICompilationUnit cu = getCompilationUnit(get14Project(), "src", "org.eclipse.debug.tests.targets", "HcrClass2.java");
 				cu = cu.getPrimary();
 				if (!cu.isWorkingCopy()) {
@@ -396,7 +396,7 @@
 				assertTrue("the thread should be suspended again after the HCR", thread.isSuspended());
 				frame = (IJavaStackFrame) thread.getTopStackFrame();
 				assertEquals("We should be stopped in the local type", "org.eclipse.debug.tests.targets.HcrClass2$2$Local",  frame.getDeclaringTypeName());
-				assertEquals("We shoud be stopped on line 37", 37, frame.getLineNumber());
+				assertEquals("We shoud be stopped on line 40", 40, frame.getLineNumber());
 			} else {
 				System.err.println("Warning: HCR test skipped since target VM does not support HCR.");
 			}
@@ -415,7 +415,7 @@
 	 */
 	public void testHCRLocalType3() throws Exception {
 		String typeName = "org.eclipse.debug.tests.targets.HcrClass2";
-		createLineBreakpoint(19, typeName);
+		createLineBreakpoint(22, typeName);
 		HCRListener listener = new HCRListener();
 		JDIDebugModel.addHotCodeReplaceListener(listener);
 		IJavaThread thread= null;
@@ -426,7 +426,7 @@
 			if (target.supportsHotCodeReplace()) {
 				IJavaStackFrame frame = (IJavaStackFrame)thread.getTopStackFrame();
 				assertEquals("We should be stopped in the local type", "org.eclipse.debug.tests.targets.HcrClass2$1$Local",  frame.getDeclaringTypeName());
-				assertEquals("We shoud be stopped on line 19", 19, frame.getLineNumber());
+				assertEquals("We shoud be stopped on line 22", 22, frame.getLineNumber());
 				ICompilationUnit cu = getCompilationUnit(get14Project(), "src", "org.eclipse.debug.tests.targets", "HcrClass2.java");
 				cu = cu.getPrimary();
 				if (!cu.isWorkingCopy()) {
@@ -449,7 +449,7 @@
 				assertTrue("the thread should be suspended again after the HCR", thread.isSuspended());
 				frame = (IJavaStackFrame) thread.getTopStackFrame();
 				assertEquals("We should be stopped in the local type", "org.eclipse.debug.tests.targets.HcrClass2$1$Local",  frame.getDeclaringTypeName());
-				assertEquals("We shoud be stopped on line 19", 19, frame.getLineNumber());
+				assertEquals("We shoud be stopped on line 22", 22, frame.getLineNumber());
 			} else {
 				System.err.println("Warning: HCR test skipped since target VM does not support HCR.");
 			}
@@ -469,7 +469,7 @@
 	 */
 	public void testHCRAnonymousType() throws Exception {
 		String typeName = "org.eclipse.debug.tests.targets.HcrClass3";
-		createLineBreakpoint(34, typeName);
+		createLineBreakpoint(37, typeName);
 		HCRListener listener = new HCRListener();
 		JDIDebugModel.addHotCodeReplaceListener(listener);
 		IJavaThread thread= null;
@@ -480,7 +480,7 @@
 			if (target.supportsHotCodeReplace()) {
 				IJavaStackFrame frame = (IJavaStackFrame)thread.getTopStackFrame();
 				assertEquals("We should be stopped in the anonymous type", "org.eclipse.debug.tests.targets.HcrClass3$2",  frame.getDeclaringTypeName());
-				assertEquals("We shoud be stopped on line 34", 34, frame.getLineNumber());
+				assertEquals("We shoud be stopped on line 37", 37, frame.getLineNumber());
 				ICompilationUnit cu = getCompilationUnit(get14Project(), "src", "org.eclipse.debug.tests.targets", "HcrClass3.java");
 				cu = cu.getPrimary();
 				if (!cu.isWorkingCopy()) {
@@ -504,7 +504,7 @@
 				assertTrue("the thread should be suspended again after the HCR", thread.isSuspended());
 				frame = (IJavaStackFrame) thread.getTopStackFrame();
 				assertEquals("We should be stopped in the anonymous type", "org.eclipse.debug.tests.targets.HcrClass3$2",  frame.getDeclaringTypeName());
-				assertEquals("We shoud be stopped on line 34", 34, frame.getLineNumber());
+				assertEquals("We shoud be stopped on line 37", 37, frame.getLineNumber());
 			} else {
 				System.err.println("Warning: HCR test skipped since target VM does not support HCR.");
 			}
@@ -522,7 +522,7 @@
 	 */
 	public void testHCRAnonymousType2() throws Exception {
 		String typeName = "org.eclipse.debug.tests.targets.HcrClass3";
-		createLineBreakpoint(44, typeName);
+		createLineBreakpoint(47, typeName);
 		HCRListener listener = new HCRListener();
 		JDIDebugModel.addHotCodeReplaceListener(listener);
 		IJavaThread thread= null;
@@ -533,7 +533,7 @@
 			if (target.supportsHotCodeReplace()) {
 				IJavaStackFrame frame = (IJavaStackFrame)thread.getTopStackFrame();
 				assertEquals("We should be stopped in the anonymous type", "org.eclipse.debug.tests.targets.HcrClass3$3",  frame.getDeclaringTypeName());
-				assertEquals("We shoud be stopped on line 44", 44, frame.getLineNumber());
+				assertEquals("We shoud be stopped on line 47", 47, frame.getLineNumber());
 				ICompilationUnit cu = getCompilationUnit(get14Project(), "src", "org.eclipse.debug.tests.targets", "HcrClass3.java");
 				cu = cu.getPrimary();
 				if (!cu.isWorkingCopy()) {
@@ -556,7 +556,7 @@
 				assertTrue("the thread should be suspended again after the HCR", thread.isSuspended());
 				frame = (IJavaStackFrame) thread.getTopStackFrame();
 				assertEquals("We should be stopped in the anonymous type", "org.eclipse.debug.tests.targets.HcrClass3$3",  frame.getDeclaringTypeName());
-				assertEquals("We shoud be stopped on line 44", 44, frame.getLineNumber());
+				assertEquals("We shoud be stopped on line 47", 47, frame.getLineNumber());
 			} else {
 				System.err.println("Warning: HCR test skipped since target VM does not support HCR.");
 			}
@@ -574,7 +574,7 @@
 	 */
 	public void testHCRAnonymousType3() throws Exception {
 		String typeName = "org.eclipse.debug.tests.targets.HcrClass3";
-		createLineBreakpoint(24, typeName);
+		createLineBreakpoint(27, typeName);
 		HCRListener listener = new HCRListener();
 		JDIDebugModel.addHotCodeReplaceListener(listener);
 		IJavaThread thread= null;
@@ -585,7 +585,7 @@
 			if (target.supportsHotCodeReplace()) {
 				IJavaStackFrame frame = (IJavaStackFrame)thread.getTopStackFrame();
 				assertEquals("We should be stopped in the anonymous type", "org.eclipse.debug.tests.targets.HcrClass3$1",  frame.getDeclaringTypeName());
-				assertEquals("We shoud be stopped on line 24", 24, frame.getLineNumber());
+				assertEquals("We shoud be stopped on line 27", 27, frame.getLineNumber());
 				ICompilationUnit cu = getCompilationUnit(get14Project(), "src", "org.eclipse.debug.tests.targets", "HcrClass3.java");
 				cu = cu.getPrimary();
 				if (!cu.isWorkingCopy()) {
@@ -608,7 +608,7 @@
 				assertTrue("the thread should be suspended again after the HCR", thread.isSuspended());
 				frame = (IJavaStackFrame) thread.getTopStackFrame();
 				assertEquals("We should be stopped in the anonymous type", "org.eclipse.debug.tests.targets.HcrClass3$1",  frame.getDeclaringTypeName());
-				assertEquals("We shoud be stopped on line 24", 24, frame.getLineNumber());
+				assertEquals("We shoud be stopped on line 27", 27, frame.getLineNumber());
 			} else {
 				System.err.println("Warning: HCR test skipped since target VM does not support HCR.");
 			}
@@ -626,7 +626,7 @@
 	 */
 	public void testHCRConstructor() throws Exception {
 		String typeName = "org.eclipse.debug.tests.targets.HcrClass4";
-		createLineBreakpoint(21, typeName);
+		createLineBreakpoint(24, typeName);
 		HCRListener listener = new HCRListener();
 		JDIDebugModel.addHotCodeReplaceListener(listener);
 		IJavaThread thread= null;
@@ -637,7 +637,7 @@
 			if (target.supportsHotCodeReplace()) {
 				IJavaStackFrame frame = (IJavaStackFrame)thread.getTopStackFrame();
 				assertEquals("We should be stopped in the run() method", "run",  frame.getMethodName());
-				assertEquals("We shoud be stopped on line 21", 21, frame.getLineNumber());
+				assertEquals("We shoud be stopped on line 24", 24, frame.getLineNumber());
 				ICompilationUnit cu = getCompilationUnit(get14Project(), "src", "org.eclipse.debug.tests.targets", "HcrClass4.java");
 				cu = cu.getPrimary();
 				if (!cu.isWorkingCopy()) {
@@ -660,7 +660,7 @@
 				assertTrue("the thread should be suspended again after the HCR", thread.isSuspended());
 				frame = (IJavaStackFrame) thread.getTopStackFrame();
 				assertEquals("We should be stopped in the run() method", "run",  frame.getMethodName());
-				assertEquals("We shoud be stopped on line 21", 21, frame.getLineNumber());
+				assertEquals("We shoud be stopped on line 24", 24, frame.getLineNumber());
 			} else {
 				System.err.println("Warning: HCR test skipped since target VM does not support HCR.");
 			}
@@ -678,7 +678,7 @@
 	 */
 	public void testHCRConstructor2() throws Exception {
 		String typeName = "org.eclipse.debug.tests.targets.HcrClass4";
-		createLineBreakpoint(16, typeName);
+		createLineBreakpoint(19, typeName);
 		HCRListener listener = new HCRListener();
 		JDIDebugModel.addHotCodeReplaceListener(listener);
 		IJavaThread thread= null;
@@ -689,7 +689,7 @@
 			if (target.supportsHotCodeReplace()) {
 				IJavaStackFrame frame = (IJavaStackFrame)thread.getTopStackFrame();
 				assertEquals("We should be stopped in the constuctor method", "<init>",  frame.getMethodName());
-				assertEquals("We shoud be stopped on line 16", 16, frame.getLineNumber());
+				assertEquals("We shoud be stopped on line 19", 19, frame.getLineNumber());
 				ICompilationUnit cu = getCompilationUnit(get14Project(), "src", "org.eclipse.debug.tests.targets", "HcrClass4.java");
 				cu = cu.getPrimary();
 				if (!cu.isWorkingCopy()) {
@@ -713,7 +713,7 @@
 				frame = (IJavaStackFrame) thread.getTopStackFrame();
 				assertEquals("We should be stopped in the constructor method", "<init>",  frame.getMethodName());
 				//after HCR constructors re-enter
-				assertEquals("We shoud be stopped on line 15", 15, frame.getLineNumber());
+				assertEquals("We shoud be stopped on line 18", 18, frame.getLineNumber());
 			} else {
 				System.err.println("Warning: HCR test skipped since target VM does not support HCR.");
 			}
@@ -732,7 +732,7 @@
 	 */
 	public void testHCRInnerType() throws Exception {
 		String typeName = "org.eclipse.debug.tests.targets.HcrClass5";
-		createLineBreakpoint(23, typeName);
+		createLineBreakpoint(26, typeName);
 		HCRListener listener = new HCRListener();
 		JDIDebugModel.addHotCodeReplaceListener(listener);
 		IJavaThread thread= null;
@@ -745,7 +745,7 @@
 				IJavaStackFrame frame = (IJavaStackFrame)thread.getTopStackFrame();
 				assertEquals("We should be stopped in the run() method", "run",  frame.getMethodName());
 				assertEquals("We should be stopped in the HcrClass5$InnerClass type", "org.eclipse.debug.tests.targets.HcrClass5$InnerClass", frame.getDeclaringTypeName());
-				assertEquals("We shoud be stopped on line 23", 23, frame.getLineNumber());
+				assertEquals("We shoud be stopped on line 26", 26, frame.getLineNumber());
 				ICompilationUnit cu = getCompilationUnit(get14Project(), "src", "org.eclipse.debug.tests.targets", "HcrClass5.java");
 				cu = cu.getPrimary();
 				if (!cu.isWorkingCopy()) {
@@ -769,7 +769,7 @@
 				frame = (IJavaStackFrame) thread.getTopStackFrame();
 				assertEquals("We should be stopped in the run() method", "run",  frame.getMethodName());
 				assertEquals("We should be stopped in the HcrClass5$InnerClass type", "org.eclipse.debug.tests.targets.HcrClass5$InnerClass", frame.getDeclaringTypeName());
-				assertEquals("We shoud be stopped on line 23", 23, frame.getLineNumber());
+				assertEquals("We shoud be stopped on line 26", 26, frame.getLineNumber());
 			} else {
 				System.err.println("Warning: HCR test skipped since target VM does not support HCR.");
 			}
@@ -787,7 +787,7 @@
 	 */
 	public void testHCRInnerType2() throws Exception {
 		String typeName = "org.eclipse.debug.tests.targets.HcrClass5";
-		createLineBreakpoint(27, typeName);
+		createLineBreakpoint(30, typeName);
 		HCRListener listener = new HCRListener();
 		JDIDebugModel.addHotCodeReplaceListener(listener);
 		IJavaThread thread= null;
@@ -800,7 +800,7 @@
 				IJavaStackFrame frame = (IJavaStackFrame)thread.getTopStackFrame();
 				assertEquals("We should be stopped in the run2() method", "run2",  frame.getMethodName());
 				assertEquals("We should be stopped in the HcrClass5$InnerClass type", "org.eclipse.debug.tests.targets.HcrClass5$InnerClass", frame.getDeclaringTypeName());
-				assertEquals("We shoud be stopped on line 27", 27, frame.getLineNumber());
+				assertEquals("We shoud be stopped on line 30", 30, frame.getLineNumber());
 				ICompilationUnit cu = getCompilationUnit(get14Project(), "src", "org.eclipse.debug.tests.targets", "HcrClass5.java");
 				cu = cu.getPrimary();
 				if (!cu.isWorkingCopy()) {
@@ -824,7 +824,7 @@
 				frame = (IJavaStackFrame) thread.getTopStackFrame();
 				assertEquals("We should be stopped in the run2() method", "run2",  frame.getMethodName());
 				assertEquals("We should be stopped in the HcrClass5$InnerClass type", "org.eclipse.debug.tests.targets.HcrClass5$InnerClass", frame.getDeclaringTypeName());
-				assertEquals("We shoud be stopped on line 27", 27, frame.getLineNumber());
+				assertEquals("We shoud be stopped on line 30", 30, frame.getLineNumber());
 			} else {
 				System.err.println("Warning: HCR test skipped since target VM does not support HCR.");
 			}
@@ -842,7 +842,7 @@
 	 */
 	public void testHCRInnerType3() throws Exception {
 		String typeName = "org.eclipse.debug.tests.targets.HcrClass5";
-		createLineBreakpoint(18, typeName);
+		createLineBreakpoint(21, typeName);
 		HCRListener listener = new HCRListener();
 		JDIDebugModel.addHotCodeReplaceListener(listener);
 		IJavaThread thread= null;
@@ -855,7 +855,7 @@
 				IJavaStackFrame frame = (IJavaStackFrame)thread.getTopStackFrame();
 				assertEquals("We should be stopped in the <init> method", "<init>",  frame.getMethodName());
 				assertEquals("We should be stopped in the HcrClass5$InnerClass type", "org.eclipse.debug.tests.targets.HcrClass5$InnerClass", frame.getDeclaringTypeName());
-				assertEquals("We shoud be stopped on line 18", 18, frame.getLineNumber());
+				assertEquals("We shoud be stopped on line 21", 21, frame.getLineNumber());
 				ICompilationUnit cu = getCompilationUnit(get14Project(), "src", "org.eclipse.debug.tests.targets", "HcrClass5.java");
 				cu = cu.getPrimary();
 				if (!cu.isWorkingCopy()) {
@@ -880,7 +880,7 @@
 				assertEquals("We should be stopped in the <init> method", "<init>",  frame.getMethodName());
 				assertEquals("We should be stopped in the HcrClass5$InnerClass type", "org.eclipse.debug.tests.targets.HcrClass5$InnerClass", frame.getDeclaringTypeName());
 				//after HCR constructors re-enter
-				assertEquals("We shoud be stopped on line 17", 17, frame.getLineNumber());
+				assertEquals("We shoud be stopped on line 20", 20, frame.getLineNumber());
 			} else {
 				System.err.println("Warning: HCR test skipped since target VM does not support HCR.");
 			}
@@ -899,7 +899,7 @@
 	 */
 	public void testHCRInnerType4() throws Exception {
 		String typeName = "org.eclipse.debug.tests.targets.HcrClass5";
-		createLineBreakpoint(33, typeName);
+		createLineBreakpoint(36, typeName);
 		HCRListener listener = new HCRListener();
 		JDIDebugModel.addHotCodeReplaceListener(listener);
 		IJavaThread thread= null;
@@ -912,7 +912,7 @@
 				IJavaStackFrame frame = (IJavaStackFrame)thread.getTopStackFrame();
 				assertEquals("We should be stopped in the run() method", "run",  frame.getMethodName());
 				assertEquals("We should be stopped in the HcrClass5 type", "org.eclipse.debug.tests.targets.HcrClass5", frame.getDeclaringTypeName());
-				assertEquals("We shoud be stopped on line 33", 33, frame.getLineNumber());
+				assertEquals("We shoud be stopped on line 36", 36, frame.getLineNumber());
 				ICompilationUnit cu = getCompilationUnit(get14Project(), "src", "org.eclipse.debug.tests.targets", "HcrClass5.java");
 				cu = cu.getPrimary();
 				if (!cu.isWorkingCopy()) {
@@ -936,7 +936,7 @@
 				frame = (IJavaStackFrame) thread.getTopStackFrame();
 				assertEquals("We should be stopped in the run method", "run",  frame.getMethodName());
 				assertEquals("We should be stopped in the HcrClass5 type", "org.eclipse.debug.tests.targets.HcrClass5", frame.getDeclaringTypeName());
-				assertEquals("We shoud be stopped on line 33", 33, frame.getLineNumber());
+				assertEquals("We shoud be stopped on line 36", 36, frame.getLineNumber());
 			} else {
 				System.err.println("Warning: HCR test skipped since target VM does not support HCR.");
 			}
@@ -955,7 +955,7 @@
 	 */
 	public void testHCRInnerType5() throws Exception {
 		String typeName = "org.eclipse.debug.tests.targets.HcrClass5";
-		createLineBreakpoint(37, typeName);
+		createLineBreakpoint(40, typeName);
 		HCRListener listener = new HCRListener();
 		JDIDebugModel.addHotCodeReplaceListener(listener);
 		IJavaThread thread= null;
@@ -968,7 +968,7 @@
 				IJavaStackFrame frame = (IJavaStackFrame)thread.getTopStackFrame();
 				assertEquals("We should be stopped in the outerrun() method", "outerrun",  frame.getMethodName());
 				assertEquals("We should be stopped in the HcrClass5 type", "org.eclipse.debug.tests.targets.HcrClass5", frame.getDeclaringTypeName());
-				assertEquals("We shoud be stopped on line 37", 37, frame.getLineNumber());
+				assertEquals("We shoud be stopped on line 40", 40, frame.getLineNumber());
 				ICompilationUnit cu = getCompilationUnit(get14Project(), "src", "org.eclipse.debug.tests.targets", "HcrClass5.java");
 				cu = cu.getPrimary();
 				if (!cu.isWorkingCopy()) {
@@ -992,7 +992,7 @@
 				frame = (IJavaStackFrame) thread.getTopStackFrame();
 				assertEquals("We should be stopped in the outerrun method", "outerrun",  frame.getMethodName());
 				assertEquals("We should be stopped in the HcrClass5 type", "org.eclipse.debug.tests.targets.HcrClass5", frame.getDeclaringTypeName());
-				assertEquals("We shoud be stopped on line 37", 37, frame.getLineNumber());
+				assertEquals("We shoud be stopped on line 40", 40, frame.getLineNumber());
 			} else {
 				System.err.println("Warning: HCR test skipped since target VM does not support HCR.");
 			}
@@ -1010,7 +1010,7 @@
 	 */
 	public void testHCRLocalInner() throws Exception {
 		String typeName = "org.eclipse.debug.tests.targets.HcrClass9";
-		createLineBreakpoint(19, typeName);
+		createLineBreakpoint(22, typeName);
 		HCRListener listener = new HCRListener();
 		JDIDebugModel.addHotCodeReplaceListener(listener);
 		IJavaThread thread= null;
@@ -1023,7 +1023,7 @@
 				IJavaStackFrame frame = (IJavaStackFrame)thread.getTopStackFrame();
 				assertEquals("We should be stopped in the run() method", "run",  frame.getMethodName());
 				assertEquals("We should be stopped in the HcrClass9$1$Local type", "org.eclipse.debug.tests.targets.HcrClass9$1$Local", frame.getDeclaringTypeName());
-				assertEquals("We shoud be stopped on line 19", 19, frame.getLineNumber());
+				assertEquals("We shoud be stopped on line 22", 22, frame.getLineNumber());
 				ICompilationUnit cu = getCompilationUnit(get14Project(), "src", "org.eclipse.debug.tests.targets", "HcrClass9.java");
 				cu = cu.getPrimary();
 				if (!cu.isWorkingCopy()) {
@@ -1047,7 +1047,7 @@
 				frame = (IJavaStackFrame) thread.getTopStackFrame();
 				assertEquals("We should be stopped in the run method", "run",  frame.getMethodName());
 				assertEquals("We should be stopped in the HcrClass9$1$Local type", "org.eclipse.debug.tests.targets.HcrClass9$1$Local", frame.getDeclaringTypeName());
-				assertEquals("We shoud be stopped on line 19", 19, frame.getLineNumber());
+				assertEquals("We shoud be stopped on line 22", 22, frame.getLineNumber());
 			} else {
 				System.err.println("Warning: HCR test skipped since target VM does not support HCR.");
 			}
@@ -1065,7 +1065,7 @@
 	 */
 	public void testHCRLocalAnonymous() throws Exception {
 		String typeName = "org.eclipse.debug.tests.targets.HcrClass8";
-		createLineBreakpoint(24, typeName);
+		createLineBreakpoint(27, typeName);
 		HCRListener listener = new HCRListener();
 		JDIDebugModel.addHotCodeReplaceListener(listener);
 		IJavaThread thread= null;
@@ -1078,7 +1078,7 @@
 				IJavaStackFrame frame = (IJavaStackFrame)thread.getTopStackFrame();
 				assertEquals("We should be stopped in the run() method", "run",  frame.getMethodName());
 				assertEquals("We should be stopped in the HcrClass8$1$Local type", "org.eclipse.debug.tests.targets.HcrClass8$1$Local", frame.getDeclaringTypeName());
-				assertEquals("We shoud be stopped on line 24", 24, frame.getLineNumber());
+				assertEquals("We shoud be stopped on line 27", 27, frame.getLineNumber());
 				ICompilationUnit cu = getCompilationUnit(get14Project(), "src", "org.eclipse.debug.tests.targets", "HcrClass8.java");
 				cu = cu.getPrimary();
 				if (!cu.isWorkingCopy()) {
@@ -1102,7 +1102,7 @@
 				frame = (IJavaStackFrame) thread.getTopStackFrame();
 				assertEquals("We should be stopped in the run method", "run",  frame.getMethodName());
 				assertEquals("We should be stopped in the HcrClass8$1$Local type", "org.eclipse.debug.tests.targets.HcrClass8$1$Local", frame.getDeclaringTypeName());
-				assertEquals("We shoud be stopped on line 24", 24, frame.getLineNumber());
+				assertEquals("We shoud be stopped on line 27", 27, frame.getLineNumber());
 			} else {
 				System.err.println("Warning: HCR test skipped since target VM does not support HCR.");
 			}
@@ -1120,7 +1120,7 @@
 	 */
 	public void testHCRInnerLocal() throws Exception {
 		String typeName = "org.eclipse.debug.tests.targets.HcrClass7";
-		createLineBreakpoint(19, typeName);
+		createLineBreakpoint(22, typeName);
 		HCRListener listener = new HCRListener();
 		JDIDebugModel.addHotCodeReplaceListener(listener);
 		IJavaThread thread= null;
@@ -1133,7 +1133,7 @@
 				IJavaStackFrame frame = (IJavaStackFrame)thread.getTopStackFrame();
 				assertEquals("We should be stopped in the run() method", "run",  frame.getMethodName());
 				assertEquals("We should be stopped in the HcrClass7$1$Local$Inner type", "org.eclipse.debug.tests.targets.HcrClass7$1$Local$Inner", frame.getDeclaringTypeName());
-				assertEquals("We shoud be stopped on line 19", 19, frame.getLineNumber());
+				assertEquals("We shoud be stopped on line 22", 22, frame.getLineNumber());
 				ICompilationUnit cu = getCompilationUnit(get14Project(), "src", "org.eclipse.debug.tests.targets", "HcrClass7.java");
 				cu = cu.getPrimary();
 				if (!cu.isWorkingCopy()) {
@@ -1157,7 +1157,7 @@
 				frame = (IJavaStackFrame) thread.getTopStackFrame();
 				assertEquals("We should be stopped in the run method", "run",  frame.getMethodName());
 				assertEquals("We should be stopped in the HcrClass7$1$Local$Inner type", "org.eclipse.debug.tests.targets.HcrClass7$1$Local$Inner", frame.getDeclaringTypeName());
-				assertEquals("We shoud be stopped on line 19", 19, frame.getLineNumber());
+				assertEquals("We shoud be stopped on line 22", 22, frame.getLineNumber());
 			} else {
 				System.err.println("Warning: HCR test skipped since target VM does not support HCR.");
 			}
@@ -1175,7 +1175,7 @@
 	 */
 	public void testHCRAnnonymousLocal() throws Exception {
 		String typeName = "org.eclipse.debug.tests.targets.HcrClass6";
-		createLineBreakpoint(23, typeName);
+		createLineBreakpoint(26, typeName);
 		HCRListener listener = new HCRListener();
 		JDIDebugModel.addHotCodeReplaceListener(listener);
 		IJavaThread thread= null;
@@ -1188,7 +1188,7 @@
 				IJavaStackFrame frame = (IJavaStackFrame)thread.getTopStackFrame();
 				assertEquals("We should be stopped in the run() method", "run",  frame.getMethodName());
 				assertEquals("We should be stopped in the HcrClass6$1 type", "org.eclipse.debug.tests.targets.HcrClass6$1", frame.getDeclaringTypeName());
-				assertEquals("We shoud be stopped on line 23", 23, frame.getLineNumber());
+				assertEquals("We shoud be stopped on line 26", 26, frame.getLineNumber());
 				ICompilationUnit cu = getCompilationUnit(get14Project(), "src", "org.eclipse.debug.tests.targets", "HcrClass6.java");
 				cu = cu.getPrimary();
 				if (!cu.isWorkingCopy()) {
@@ -1212,7 +1212,7 @@
 				frame = (IJavaStackFrame) thread.getTopStackFrame();
 				assertEquals("We should be stopped in the run method", "run",  frame.getMethodName());
 				assertEquals("We should be stopped in the HcrClass6$1 type", "org.eclipse.debug.tests.targets.HcrClass6$1", frame.getDeclaringTypeName());
-				assertEquals("We shoud be stopped on line 23", 23, frame.getLineNumber());
+				assertEquals("We shoud be stopped on line 26", 26, frame.getLineNumber());
 			} else {
 				System.err.println("Warning: HCR test skipped since target VM does not support HCR.");
 			}
@@ -1240,7 +1240,7 @@
 		// Paths are same, except the project part
 		assertEquals(type1.getResource().getFullPath().removeFirstSegments(1), type2.getResource().getFullPath().removeFirstSegments(1));
 
-		final int lineNumber = 39;
+		final int lineNumber = 42;
 		IJavaLineBreakpoint bp1 = createLineBreakpoint(type1, lineNumber);
 		IJavaLineBreakpoint bp2 = createLineBreakpoint(type2, lineNumber);
 		assertNotEquals(bp1, bp2);
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/InstanceFilterTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/InstanceFilterTests.java
index a4b74da..23bba5e 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/InstanceFilterTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/InstanceFilterTests.java
@@ -47,9 +47,9 @@
 	public void testLineBreakpoint() throws Exception {
 		String typeName = "InstanceFilterObject";
 		// main
-		IJavaLineBreakpoint mainBreakpoint = createLineBreakpoint(39, typeName);
+		IJavaLineBreakpoint mainBreakpoint = createLineBreakpoint(42, typeName);
 		// simpleMethod
-		IJavaLineBreakpoint simpleMethod = createLineBreakpoint(19, typeName);
+		IJavaLineBreakpoint simpleMethod = createLineBreakpoint(22, typeName);
 
 		IJavaThread thread= null;
 		try {
@@ -101,7 +101,7 @@
 	public void testMethodEntryBreakpoint() throws Exception {
 		String typeName = "InstanceFilterObject";
 		// main
-		IJavaLineBreakpoint mainBreakpoint = createLineBreakpoint(39, typeName);
+		IJavaLineBreakpoint mainBreakpoint = createLineBreakpoint(42, typeName);
 		// simpleMethod
 		IJavaMethodBreakpoint simpleMethod = createMethodBreakpoint(typeName, "simpleMethod", "()V", true, false);
 
@@ -160,7 +160,7 @@
 	public void testMethodExitBreakpoint() throws Exception {
 		String typeName = "InstanceFilterObject";
 		// main
-		IJavaLineBreakpoint mainBreakpoint = createLineBreakpoint(39, typeName);
+		IJavaLineBreakpoint mainBreakpoint = createLineBreakpoint(42, typeName);
 		// simpleMethod
 		IJavaMethodBreakpoint simpleMethod = createMethodBreakpoint(typeName, "simpleMethod", "()V", false, true);
 
@@ -219,7 +219,7 @@
 	public void testExceptionBreakpoint() throws Exception {
 		String typeName = "InstanceFilterObject";
 		// main
-		IJavaLineBreakpoint mainBreakpoint = createLineBreakpoint(39, typeName);
+		IJavaLineBreakpoint mainBreakpoint = createLineBreakpoint(42, typeName);
 		// exception breakpoint
 		IJavaExceptionBreakpoint npe = createExceptionBreakpoint("java.lang.NullPointerException", true, true);
 
@@ -273,7 +273,7 @@
 	public void testAccessWatchpoint() throws Exception {
 		String typeName = "InstanceFilterObject";
 		// main
-		IJavaLineBreakpoint mainBreakpoint = createLineBreakpoint(39, typeName);
+		IJavaLineBreakpoint mainBreakpoint = createLineBreakpoint(42, typeName);
 		// exception breakpoint
 		IJavaWatchpoint watchpoint = createWatchpoint(typeName, "field", true, false);
 
@@ -330,7 +330,7 @@
 	public void testModificationWatchpoint() throws Exception {
 		String typeName = "InstanceFilterObject";
 		// main
-		IJavaLineBreakpoint mainBreakpoint = createLineBreakpoint(39, typeName);
+		IJavaLineBreakpoint mainBreakpoint = createLineBreakpoint(42, typeName);
 		// exception breakpoint
 		IJavaWatchpoint watchpoint = createWatchpoint(typeName, "field", false, true);
 		// disable to avoid variable initializer
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/InstanceVariableTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/InstanceVariableTests.java
index 3033730..8229ed0 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/InstanceVariableTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/InstanceVariableTests.java
@@ -36,7 +36,7 @@
 	public void testGetField() throws Exception {
 		String typeName = "InstanceVariablesTests";
 
-		ILineBreakpoint bp = createLineBreakpoint(30, typeName);
+		ILineBreakpoint bp = createLineBreakpoint(33, typeName);
 
 		IJavaThread thread= null;
 		try {
@@ -71,7 +71,7 @@
 	public void testGetDeclaredFieldNames() throws Exception {
 		String typeName = "InstanceVariablesTests";
 
-		ILineBreakpoint bp = createLineBreakpoint(28, typeName);
+		ILineBreakpoint bp = createLineBreakpoint(31, typeName);
 
 		IJavaThread thread= null;
 		try {
@@ -104,7 +104,7 @@
 	public void testGetDeclaredFieldNamesInSubclass() throws Exception {
 		String typeName = "InstanceVariablesTests";
 
-		ILineBreakpoint bp = createLineBreakpoint(30, typeName);
+		ILineBreakpoint bp = createLineBreakpoint(33, typeName);
 
 		IJavaThread thread= null;
 		try {
@@ -134,7 +134,7 @@
 	public void testGetAllFieldNamesInSubclass() throws Exception {
 		String typeName = "InstanceVariablesTests";
 
-		ILineBreakpoint bp = createLineBreakpoint(30, typeName);
+		ILineBreakpoint bp = createLineBreakpoint(33, typeName);
 
 		IJavaThread thread= null;
 		try {
@@ -157,7 +157,7 @@
 	public void testEvaluationAssignments() throws Exception {
 		String typeName = "InstanceVariablesTests";
 
-		ILineBreakpoint bp = createLineBreakpoint(28, typeName);
+		ILineBreakpoint bp = createLineBreakpoint(31, typeName);
 
 		IJavaThread thread= null;
 		try {
@@ -185,7 +185,7 @@
 	public void testValueHasChanged() throws Exception {
 		String typeName = "VariableChanges";
 
-		ILineBreakpoint bp = createLineBreakpoint(21, typeName);
+		ILineBreakpoint bp = createLineBreakpoint(24, typeName);
 
 		IJavaThread thread= null;
 		try {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/JDWPTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/JDWPTests.java
index 7a338cd..f0a72e4 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/JDWPTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/JDWPTests.java
@@ -49,7 +49,7 @@
 	 */
 	public void testCapabilities() throws Exception {
 		String typeName = "Breakpoints";
-		ILineBreakpoint bp = createLineBreakpoint(52, typeName);
+		ILineBreakpoint bp = createLineBreakpoint(55, typeName);
 
 		IJavaThread thread = null;
 		try {
@@ -81,7 +81,7 @@
 	 */
 	public void testClassesBySingature() throws Exception {
 		String typeName = "Breakpoints";
-		ILineBreakpoint bp = createLineBreakpoint(52, typeName);
+		ILineBreakpoint bp = createLineBreakpoint(55, typeName);
 
 		IJavaThread thread = null;
 		try {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/JavaDebugTargetTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/JavaDebugTargetTests.java
index f61b75f..2ddb84d 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/JavaDebugTargetTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/JavaDebugTargetTests.java
@@ -40,7 +40,7 @@
 
 	public void testGetVMName() throws Exception {
 		String typeName = "Breakpoints";
-		createLineBreakpoint(52, typeName);
+		createLineBreakpoint(55, typeName);
 
 		IJavaThread thread= null;
 		try {
@@ -58,7 +58,7 @@
 
 	public void testGetVersion() throws Exception {
 		String typeName = "Breakpoints";
-		createLineBreakpoint(52, typeName);
+		createLineBreakpoint(55, typeName);
 
 		IJavaThread thread= null;
 		try {
@@ -76,7 +76,7 @@
 
 	public void testIsAvailable() throws Exception {
 		String typeName = "Breakpoints";
-		createLineBreakpoint(52, typeName);
+		createLineBreakpoint(55, typeName);
 
 		IJavaThread thread = null;
 		try {
@@ -138,7 +138,7 @@
 		// Paths are same, except the project part
 		assertEquals(type1.getResource().getFullPath().removeFirstSegments(1), type2.getResource().getFullPath().removeFirstSegments(1));
 
-		final int lineNumber = 21;
+		final int lineNumber = 24;
 		IJavaLineBreakpoint bp1 = createLineBreakpoint(type1, lineNumber);
 		IJavaLineBreakpoint bp2 = createLineBreakpoint(type2, lineNumber);
 		assertNotEquals(bp1, bp2);
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/LineTrackerTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/LineTrackerTests.java
index 9175d40..222dac3 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/LineTrackerTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/LineTrackerTests.java
@@ -260,7 +260,7 @@
 	public void testStringConcatenation() throws Exception {
 	    ConsoleLineTracker.setDelegate(this);
 	    String typeName = "PrintConcatenation";
-	    createConditionalLineBreakpoint(20, typeName, "System.out.println(\"var = \" + foo); return false;", true);
+		createConditionalLineBreakpoint(23, typeName, "System.out.println(\"var = \" + foo); return false;", true);
 	    fTarget = null;
 	    try {
 	        fTarget = launchAndTerminate(typeName);
@@ -284,7 +284,7 @@
 	public void testIntConcatenation() throws Exception {
 	    ConsoleLineTracker.setDelegate(this);
 	    String typeName = "PrintConcatenation";
-	    createConditionalLineBreakpoint(20, typeName, "System.out.println(\"var = \" + x); return false;", true);
+		createConditionalLineBreakpoint(23, typeName, "System.out.println(\"var = \" + x); return false;", true);
 	    fTarget = null;
 	    try {
 	        fTarget = launchAndTerminate(typeName);
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/LiteralTests17.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/LiteralTests17.java
index 6a5a307..f691a9c 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/LiteralTests17.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/LiteralTests17.java
@@ -52,7 +52,7 @@
 	 * @throws Exception
 	 */
 	IValue doEval(String snippet) throws Exception {
-		ILineBreakpoint bp = createLineBreakpoint(25, LITERAL_TYPE_NAME);
+		ILineBreakpoint bp = createLineBreakpoint(28, LITERAL_TYPE_NAME);
 		IJavaThread thread = null;
 		try {
 			thread = launchToLineBreakpoint(LITERAL_TYPE_NAME, bp);
@@ -78,7 +78,7 @@
 	 * @throws Exception
 	 */
 	IValue doEval(String snippet, String snippet2) throws Exception {
-		ILineBreakpoint bp = createLineBreakpoint(25, LITERAL_TYPE_NAME);
+		ILineBreakpoint bp = createLineBreakpoint(28, LITERAL_TYPE_NAME);
 		IJavaThread thread = null;
 		try {
 			thread = launchToLineBreakpoint(LITERAL_TYPE_NAME, bp);
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/LocalVariableTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/LocalVariableTests.java
index 553f7f6..e2b4fce 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/LocalVariableTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/LocalVariableTests.java
@@ -44,7 +44,7 @@
 	 */
 	public void testFindConflicting1() throws Exception {
 		String typeName = "LocalVariableTests2";
-		ILineBreakpoint bp = createLineBreakpoint(21, typeName);
+		ILineBreakpoint bp = createLineBreakpoint(24, typeName);
 
 		IJavaThread thread= null;
 		try {
@@ -70,7 +70,7 @@
 	 */
 	public void testFindConflicting2() throws Exception {
 		String typeName = "LocalVariableTests2";
-		ILineBreakpoint bp = createLineBreakpoint(25, typeName);
+		ILineBreakpoint bp = createLineBreakpoint(28, typeName);
 
 		IJavaThread thread= null;
 		try {
@@ -89,7 +89,7 @@
 	public void testSimpleVisibility() throws Exception {
 		String typeName = "LocalVariablesTests";
 
-		ILineBreakpoint bp = createLineBreakpoint(18, typeName);
+		ILineBreakpoint bp = createLineBreakpoint(21, typeName);
 
 		IJavaThread thread= null;
 		try {
@@ -127,7 +127,7 @@
 	public void testEvaluationAssignments() throws Exception {
 		String typeName = "LocalVariablesTests";
 
-		ILineBreakpoint bp = createLineBreakpoint(22, typeName);
+		ILineBreakpoint bp = createLineBreakpoint(25, typeName);
 
 		IJavaThread thread= null;
 		try {
@@ -158,11 +158,11 @@
 	}
 
 	protected void doArrayDetailTestNonDefPkg(String varName, String expectedDetails) throws Exception {
-		doArrayDetailTest(varName, expectedDetails, "org.eclipse.debug.tests.targets.ArrayDetailTests", 64);
+		doArrayDetailTest(varName, expectedDetails, "org.eclipse.debug.tests.targets.ArrayDetailTests", 67);
 	}
 
 	protected void doArrayDetailTestDefPkg(String varName, String expectedDetails) throws Exception {
-		doArrayDetailTest(varName, expectedDetails, "ArrayDetailTestsDef", 63);
+		doArrayDetailTest(varName, expectedDetails, "ArrayDetailTestsDef", 66);
 	}
 
 	protected void doArrayDetailTest(String varName, String expectedDetails, String mainName, int lineNumber) throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/ProcessTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/ProcessTests.java
index 03dcf73..796ddb5 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/ProcessTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/ProcessTests.java
@@ -33,7 +33,7 @@
 
 	public void testExitValueNormal() throws Exception {
 		String typeName = "Breakpoints";
-		ILineBreakpoint bp = createLineBreakpoint(43, typeName);
+		ILineBreakpoint bp = createLineBreakpoint(46, typeName);
 
 		IJavaThread thread= null;
 		try {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/StaticVariableTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/StaticVariableTests.java
index e45a64a..421091c 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/StaticVariableTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/StaticVariableTests.java
@@ -29,7 +29,7 @@
 	public void testSetValue() throws Exception {
 		String typeName = "StaticVariablesTests";
 
-		ILineBreakpoint bp = createLineBreakpoint(40, typeName);
+		ILineBreakpoint bp = createLineBreakpoint(43, typeName);
 
 		IJavaThread thread= null;
 		try {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/TypeTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/TypeTests.java
index c030592..d6a399c 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/TypeTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/TypeTests.java
@@ -40,11 +40,11 @@
 		String typeName = "Breakpoints";
 		List<IJavaLineBreakpoint> bps = new ArrayList<>();
 		// main
-		bps.add(createLineBreakpoint(52, typeName));
+		bps.add(createLineBreakpoint(55, typeName));
 		// threading
-		bps.add(createLineBreakpoint(66, typeName));
+		bps.add(createLineBreakpoint(69, typeName));
 		// InnerRunnable.run
-		bps.add(createLineBreakpoint(61, typeName));
+		bps.add(createLineBreakpoint(64, typeName));
 
 		IJavaThread thread= null;
 		try {
@@ -87,8 +87,8 @@
         String typeName = "Breakpoints";
         List<IJavaLineBreakpoint> bps = new ArrayList<>();
         // instance method
+		bps.add(createLineBreakpoint(84, typeName));
         bps.add(createLineBreakpoint(81, typeName));
-        bps.add(createLineBreakpoint(88, typeName));
         IJavaObject[] loaders = new IJavaObject[2];
         int index = 0;
 
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/WorkingDirectoryTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/WorkingDirectoryTests.java
index c37f3b9..9abae2b 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/WorkingDirectoryTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/WorkingDirectoryTests.java
@@ -35,7 +35,7 @@
 
 	public void testDefaultWorkingDirectory() throws Exception {
 		String typeName = "WorkingDirectoryTest";
-		createLineBreakpoint(16, typeName);
+		createLineBreakpoint(19, typeName);
 
 		IJavaThread thread= null;
 		try {
@@ -71,7 +71,7 @@
 
 	public void testWorkspaceRelativeWorkingDirectory() throws Exception {
 		String typeName = "WorkingDirectoryTest";
-		createLineBreakpoint(16, typeName);
+		createLineBreakpoint(19, typeName);
 		IPath wd = get14Project().getProject().getFolder("src").getFullPath().makeRelative();
 		setWorkingDirectory(wd);
 
@@ -94,7 +94,7 @@
 
 	public void testAbsoluteWorkingDirectory() throws Exception {
 		String typeName = "WorkingDirectoryTest";
-		createLineBreakpoint(16, typeName);
+		createLineBreakpoint(19, typeName);
 		IPath wd = get14Project().getProject().getFolder("src").getLocation();
 		setWorkingDirectory(wd);
 
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/ArrayAllocationTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/ArrayAllocationTests.java
index 4d0d5c0..5e9ff5e 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/ArrayAllocationTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/ArrayAllocationTests.java
@@ -23,7 +23,7 @@
 	}
 
 	protected void init() throws Exception {
-		initializeFrame("EvalArrayTests",37,1);
+		initializeFrame("EvalArrayTests", 40, 1);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/ArrayAssignmentTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/ArrayAssignmentTests.java
index 201cacd..f3d445f 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/ArrayAssignmentTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/ArrayAssignmentTests.java
@@ -24,7 +24,7 @@
 	}
 
 	protected void init() throws Exception {
-		initializeFrame("EvalArrayTests",37,1);
+		initializeFrame("EvalArrayTests", 40, 1);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/ArrayValueTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/ArrayValueTests.java
index e0acef0..40d0dad 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/ArrayValueTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/ArrayValueTests.java
@@ -24,7 +24,7 @@
 	}
 
 	protected void init() throws Exception {
-		initializeFrame("EvalArrayTests",37,1);
+		initializeFrame("EvalArrayTests", 40, 1);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/BooleanAssignmentOperatorsTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/BooleanAssignmentOperatorsTests.java
index 20bf3f1..b437b35 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/BooleanAssignmentOperatorsTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/BooleanAssignmentOperatorsTests.java
@@ -23,7 +23,7 @@
 	}
 
 	protected void init() throws Exception {
-		initializeFrame("EvalSimpleTests",37,1);
+		initializeFrame("EvalSimpleTests", 40, 1);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/BooleanOperatorsTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/BooleanOperatorsTests.java
index 3007a50..23dfdae 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/BooleanOperatorsTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/BooleanOperatorsTests.java
@@ -23,7 +23,7 @@
 	}
 
 	protected void init() throws Exception {
-		initializeFrame("EvalSimpleTests",15,1);
+		initializeFrame("EvalSimpleTests", 18, 1);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/ByteOperatorsTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/ByteOperatorsTests.java
index 62eacec..281308f 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/ByteOperatorsTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/ByteOperatorsTests.java
@@ -24,7 +24,7 @@
 	}
 
 	protected void init() throws Exception {
-		initializeFrame("EvalSimpleTests",15,1);
+		initializeFrame("EvalSimpleTests", 18, 1);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/CharOperatorsTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/CharOperatorsTests.java
index cec3b44..2deb240 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/CharOperatorsTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/CharOperatorsTests.java
@@ -24,7 +24,7 @@
 	}
 
 	protected void init() throws Exception {
-		initializeFrame("EvalSimpleTests",15,1);
+		initializeFrame("EvalSimpleTests", 18, 1);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/DoubleOperatorsTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/DoubleOperatorsTests.java
index 64b4623..182fc22 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/DoubleOperatorsTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/DoubleOperatorsTests.java
@@ -24,7 +24,7 @@
 	}
 
 	protected void init() throws Exception {
-		initializeFrame("EvalSimpleTests",15,1);
+		initializeFrame("EvalSimpleTests", 18, 1);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/FieldValueTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/FieldValueTests.java
index c0fab77..f4b5b0c 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/FieldValueTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/FieldValueTests.java
@@ -25,7 +25,7 @@
 	}
 
 	protected void init() throws Exception {
-		initializeFrame("EvalTypeTests",63,2);
+		initializeFrame("EvalTypeTests", 66, 2);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/FloatOperatorsTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/FloatOperatorsTests.java
index a86ef2f..170f4ac 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/FloatOperatorsTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/FloatOperatorsTests.java
@@ -24,7 +24,7 @@
 	}
 
 	protected void init() throws Exception {
-		initializeFrame("EvalSimpleTests",15,1);
+		initializeFrame("EvalSimpleTests", 18, 1);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/GeneralEvalTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/GeneralEvalTests.java
index f3e0cb2..d9b4d07 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/GeneralEvalTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/GeneralEvalTests.java
@@ -120,7 +120,7 @@
 		IJavaThread thread = null;
 		try {
 			String typename = "bug401270";
-			createLineBreakpoint(13, typename);
+			createLineBreakpoint(16, typename);
 			thread = launchToBreakpoint(typename);
 			assertNotNull("the program did not suspend", thread);
 			String snippet = "(true==true==true==true==true)";
@@ -141,7 +141,7 @@
 		IJavaThread thread = null;
 		try {
 			String typename = "bug401270";
-			createLineBreakpoint(14, typename);
+			createLineBreakpoint(17, typename);
 			thread = launchToBreakpoint(typename);
 			assertNotNull("the program did not suspend", thread);
 			String snippet = "!(true==true==true==true==true)";
@@ -162,7 +162,7 @@
 		IJavaThread thread = null;
 		try {
 			String typename = "bug401270";
-			createLineBreakpoint(15, typename);
+			createLineBreakpoint(18, typename);
 			thread = launchToBreakpoint(typename);
 			assertNotNull("the program did not suspend", thread);
 			String snippet = "(true&&true&&true&&true&&true)";
@@ -183,7 +183,7 @@
 		IJavaThread thread = null;
 		try {
 			String typename = "bug401270";
-			createLineBreakpoint(16, typename);
+			createLineBreakpoint(19, typename);
 			thread = launchToBreakpoint(typename);
 			assertNotNull("the program did not suspend", thread);
 			String snippet = "!(true&&true&&true&&true&&true)";
@@ -204,7 +204,7 @@
 		IJavaThread thread = null;
 		try {
 			String typename = "bug401270";
-			createLineBreakpoint(17, typename);
+			createLineBreakpoint(20, typename);
 			thread = launchToBreakpoint(typename);
 			assertNotNull("the program did not suspend", thread);
 			String snippet = "true&&true||false";
@@ -225,7 +225,7 @@
 		IJavaThread thread = null;
 		try {
 			String typename = "bug401270";
-			createLineBreakpoint(18, typename);
+			createLineBreakpoint(21, typename);
 			thread = launchToBreakpoint(typename);
 			assertNotNull("the program did not suspend", thread);
 			String snippet = "(1<=2==true||false)";
@@ -246,7 +246,7 @@
 		IJavaThread thread = null;
 		try {
 			String typename = "bug401270";
-			createLineBreakpoint(19, typename);
+			createLineBreakpoint(22, typename);
 			thread = launchToBreakpoint(typename);
 			assertNotNull("the program did not suspend", thread);
 			String snippet = "!(1<=2==true||false)";
@@ -267,7 +267,7 @@
 		IJavaThread thread = null;
 		try {
 			String typename = "bug401270";
-			createLineBreakpoint(20, typename);
+			createLineBreakpoint(23, typename);
 			thread = launchToBreakpoint(typename);
 			assertNotNull("the program did not suspend", thread);
 			String snippet = "(true != false && false)";
@@ -288,7 +288,7 @@
 		IJavaThread thread = null;
 		try {
 			String typename = "bug401270";
-			createLineBreakpoint(21, typename);
+			createLineBreakpoint(24, typename);
 			thread = launchToBreakpoint(typename);
 			assertNotNull("the program did not suspend", thread);
 			String snippet = "!(true != false && false)";
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/GenericsEvalTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/GenericsEvalTests.java
index 18e28bd..c0d215e 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/GenericsEvalTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/GenericsEvalTests.java
@@ -47,7 +47,7 @@
 		IJavaThread thread = null;
 		try {
 			String type = "a.b.c.MethodBreakpoints";
-			createLineBreakpoint(31, type);
+			createLineBreakpoint(34, type);
 			thread = launchToBreakpoint(type);
 			assertNotNull("The program did not suspend", thread);
 			String snippet = "methodTypeParameter(1);";
@@ -69,7 +69,7 @@
 		IJavaThread thread = null;
 		try {
 			String type = "a.b.c.MethodBreakpoints";
-			createLineBreakpoint(31, type);
+			createLineBreakpoint(34, type);
 			thread = launchToBreakpoint(type);
 			assertNotNull("The program did not suspend", thread);
 			String snippet = "new MethodBreakpoints<String>().typeParameter(\"test\")";
@@ -91,7 +91,7 @@
 		IJavaThread thread = null;
 		try {
 			String type = "a.b.c.MethodBreakpoints";
-			createLineBreakpoint(31, type);
+			createLineBreakpoint(34, type);
 			thread = launchToBreakpoint(type);
 			assertNotNull("The program did not suspend", thread);
 			String snippet = "MethodBreakpoints.staticTypeParameter(new ArrayList<Long>())";
@@ -107,7 +107,7 @@
 		IJavaThread thread = null;
 		try {
 			String type = "a.b.c.StepIntoSelectionWithGenerics";
-			createLineBreakpoint(21, type);
+			createLineBreakpoint(24, type);
 			thread = launchToBreakpoint(type);
 			assertNotNull("The program did not suspend", thread);
 			String snippet = "new java.util.ArrayList<String>().isEmpty()";
@@ -123,7 +123,7 @@
 		IJavaThread thread = null;
 		try {
 			String type = "a.b.c.StepIntoSelectionWithGenerics";
-			createLineBreakpoint(17, type);
+			createLineBreakpoint(20, type);
 			thread = launchToBreakpoint(type);
 			assertNotNull("The program did not suspend", thread);
 			String snippet = "new java.util.ArrayList<String>().isEmpty()";
@@ -139,7 +139,7 @@
 		IJavaThread thread = null;
 		try {
 			String type = "a.b.c.StepIntoSelectionWithGenerics";
-			createLineBreakpoint(32, type);
+			createLineBreakpoint(35, type);
 			thread = launchToBreakpoint(type);
 			assertNotNull("The program did not suspend", thread);
 			String snippet = "new StepIntoSelectionWithGenerics<String>().hello()";
@@ -155,7 +155,7 @@
 		IJavaThread thread = null;
 		try {
 			String type = "a.b.c.StepIntoSelectionWithGenerics";
-			createLineBreakpoint(32, type);
+			createLineBreakpoint(35, type);
 			thread = launchToBreakpoint(type);
 			assertNotNull("The program did not suspend", thread);
 			String snippet = "new StepIntoSelectionWithGenerics<String>().new InnerClazz<Integer>().hello()";
@@ -171,7 +171,7 @@
 		IJavaThread thread = null;
 		try {
 			String type = "a.b.c.StepIntoSelectionWithGenerics";
-			createLineBreakpoint(32, type);
+			createLineBreakpoint(35, type);
 			thread = launchToBreakpoint(type);
 			assertNotNull("The program did not suspend", thread);
 			String snippet = "new StepIntoSelectionWithGenerics<String>().new InnerClazz<Integer>().new InnerClazz2<Double>().hello()";
@@ -187,7 +187,7 @@
 		IJavaThread thread = null;
 		try {
 			String type = "a.b.c.ConditionalsNearGenerics";
-			createLineBreakpoint(32, type);
+			createLineBreakpoint(35, type);
 			thread = launchToBreakpoint(type);
 			assertNotNull("The program did not suspend", thread);
 			String snippet = "char[] chars = name.toCharArray();";
@@ -203,7 +203,7 @@
 		IJavaThread thread = null;
 		try {
 			String type = "a.b.c.ConditionalsNearGenerics";
-			createLineBreakpoint(33, type);
+			createLineBreakpoint(36, type);
 			thread = launchToBreakpoint(type);
 			assertNotNull("The program did not suspend", thread);
 			String snippet = "tokenize(Arrays.asList(1,2,3), name)";
@@ -219,7 +219,7 @@
 		IJavaThread thread = null;
 		try {
 			String type = "a.b.c.ConditionalsNearGenerics";
-			createLineBreakpoint(44, type);
+			createLineBreakpoint(47, type);
 			thread = launchToBreakpoint(type);
 			assertNotNull("The program did not suspend", thread);
 			String snippet = "list.iterator()";
@@ -235,8 +235,8 @@
 		IJavaThread thread = null;
 		try {
 			String type = "a.b.c.ConditionalsNearGenerics";
-			ILineBreakpoint bp = createLineBreakpoint(56, type);
-			assertTrue("The breakpoint on line 56 must exist", bp.getMarker().exists());
+			ILineBreakpoint bp = createLineBreakpoint(59, type);
+			assertTrue("The breakpoint on line 59 must exist", bp.getMarker().exists());
 			thread = launchToBreakpoint(type);
 			assertNotNull("The program did not suspend", thread);
 			String snippet = "this.input";
@@ -252,8 +252,8 @@
 		IJavaThread thread = null;
 		try {
 			String type = "a.b.c.ConditionalsNearGenerics";
-			ILineBreakpoint bp = createLineBreakpoint(64, type);
-			assertTrue("The breakpoint on line 64 must exist", bp.getMarker().exists());
+			ILineBreakpoint bp = createLineBreakpoint(67, type);
+			assertTrue("The breakpoint on line 67 must exist", bp.getMarker().exists());
 			thread = launchToBreakpoint(type);
 			assertNotNull("The program did not suspend", thread);
 			String snippet = "this.input";
@@ -353,7 +353,7 @@
 		IJavaThread thread = null;
 		try {
 			String typename = "a.b.c.bug329294WithGenerics";
-			createLineBreakpoint(11, typename);
+			createLineBreakpoint(14, typename);
 			thread = launchToBreakpoint(typename);
 			assertNotNull("The program did not suspend", thread);
 			String snippet = "fInner1.innerBool";
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/IntOperatorsTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/IntOperatorsTests.java
index 3f23c79..346c446 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/IntOperatorsTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/IntOperatorsTests.java
@@ -24,7 +24,7 @@
 	}
 
 	protected void init() throws Exception {
-		initializeFrame("EvalSimpleTests",15,1);
+		initializeFrame("EvalSimpleTests", 18, 1);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/Java8Tests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/Java8Tests.java
index 0c6df12..9c14ddd 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/Java8Tests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/Java8Tests.java
@@ -72,7 +72,7 @@
 		IJavaThread thread = null;
 		try {
 			String type = "EvalTestIntf18";
-			IJavaLineBreakpoint bp = createLineBreakpoint(23, "", "EvalTestIntf18.java", "Intf18");
+			IJavaLineBreakpoint bp = createLineBreakpoint(26, "", "EvalTestIntf18.java", "Intf18");
 			assertNotNull("should have created breakpoint", bp);
 			thread = launchToBreakpoint(type);
 			assertNotNull("The program did not suspend", thread);
@@ -94,7 +94,7 @@
 		IJavaThread thread = null;
 		try {
 			String type = "EvalIntfSuperDefault";
-			IJavaLineBreakpoint bp = createLineBreakpoint(26, "", "EvalIntfSuperDefault.java", "EvalIntfSuperDefault");
+			IJavaLineBreakpoint bp = createLineBreakpoint(29, "", "EvalIntfSuperDefault.java", "EvalIntfSuperDefault");
 			assertNotNull("should have created breakpoint", bp);
 			thread = launchToBreakpoint(type);
 			assertNotNull("The program did not suspend", thread);
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/LocalVarAssignmentTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/LocalVarAssignmentTests.java
index 464e096..a896206 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/LocalVarAssignmentTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/LocalVarAssignmentTests.java
@@ -24,7 +24,7 @@
 	}
 
 	protected void init() throws Exception {
-		initializeFrame("EvalSimpleTests",37,1);
+		initializeFrame("EvalSimpleTests", 40, 1);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/LocalVarValueTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/LocalVarValueTests.java
index a782c87..f013520 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/LocalVarValueTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/LocalVarValueTests.java
@@ -24,7 +24,7 @@
 	}
 
 	protected void init() throws Exception {
-		initializeFrame("EvalSimpleTests",37,1);
+		initializeFrame("EvalSimpleTests", 40, 1);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/LongOperatorsTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/LongOperatorsTests.java
index 278ffd5..457bfca 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/LongOperatorsTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/LongOperatorsTests.java
@@ -24,7 +24,7 @@
 	}
 
 	protected void init() throws Exception {
-		initializeFrame("EvalSimpleTests",15,1);
+		initializeFrame("EvalSimpleTests", 18, 1);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/LoopTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/LoopTests.java
index 2edbadb..1677a7b 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/LoopTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/LoopTests.java
@@ -23,7 +23,7 @@
 	}
 
 	protected void init() throws Exception {
-		initializeFrame("EvalSimpleTests",37,1);
+		initializeFrame("EvalSimpleTests", 40, 1);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_120.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_120.java
index c12dfa7..3e117a5 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_120.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_120.java
@@ -13,9 +13,8 @@
  *******************************************************************************/
 package org.eclipse.jdt.debug.tests.eval;
 
-import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
-
 import org.eclipse.debug.core.model.IValue;
+import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
 import org.eclipse.jdt.internal.debug.core.model.JDIObjectValue;
 
 public class NestedTypeFieldValue_120 extends Tests {
@@ -28,7 +27,7 @@
 	}
 
 	public void init() throws Exception {
-		initializeFrame("EvalNestedTypeTests", 120, 4);
+		initializeFrame("EvalNestedTypeTests", 123, 4);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_145.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_145.java
index ca90d65..15965fd 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_145.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_145.java
@@ -13,9 +13,8 @@
  *******************************************************************************/
 package org.eclipse.jdt.debug.tests.eval;
 
-import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
-
 import org.eclipse.debug.core.model.IValue;
+import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
 import org.eclipse.jdt.internal.debug.core.model.JDIObjectValue;
 
 public class NestedTypeFieldValue_145 extends Tests {
@@ -28,7 +27,7 @@
 	}
 
 	public void init() throws Exception {
-		initializeFrame("EvalNestedTypeTests", 145, 4);
+		initializeFrame("EvalNestedTypeTests", 148, 4);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_155.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_155.java
index 796c73a..1e25e6a 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_155.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_155.java
@@ -13,9 +13,8 @@
  *******************************************************************************/
 package org.eclipse.jdt.debug.tests.eval;
 
-import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
-
 import org.eclipse.debug.core.model.IValue;
+import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
 import org.eclipse.jdt.internal.debug.core.model.JDIObjectValue;
 
 public class NestedTypeFieldValue_155 extends Tests {
@@ -28,7 +27,7 @@
 	}
 
 	public void init() throws Exception {
-		initializeFrame("EvalNestedTypeTests", 155, 3);
+		initializeFrame("EvalNestedTypeTests", 158, 3);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_179.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_179.java
index 4cd1f99..d84bab7 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_179.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_179.java
@@ -13,9 +13,8 @@
  *******************************************************************************/
 package org.eclipse.jdt.debug.tests.eval;
 
-import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
-
 import org.eclipse.debug.core.model.IValue;
+import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
 import org.eclipse.jdt.internal.debug.core.model.JDIObjectValue;
 
 public class NestedTypeFieldValue_179 extends Tests {
@@ -28,7 +27,7 @@
 	}
 
 	public void init() throws Exception {
-		initializeFrame("EvalNestedTypeTests", 179, 4);
+		initializeFrame("EvalNestedTypeTests", 182, 4);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_203.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_203.java
index d613d72..b5f8b97 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_203.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_203.java
@@ -13,9 +13,8 @@
  *******************************************************************************/
 package org.eclipse.jdt.debug.tests.eval;
 
-import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
-
 import org.eclipse.debug.core.model.IValue;
+import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
 import org.eclipse.jdt.internal.debug.core.model.JDIObjectValue;
 
 public class NestedTypeFieldValue_203 extends Tests {
@@ -28,7 +27,7 @@
 	}
 
 	public void init() throws Exception {
-		initializeFrame("EvalNestedTypeTests", 203, 4);
+		initializeFrame("EvalNestedTypeTests", 206, 4);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_214.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_214.java
index 42e1f5d..a4a9a2c 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_214.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_214.java
@@ -13,9 +13,8 @@
  *******************************************************************************/
 package org.eclipse.jdt.debug.tests.eval;
 
-import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
-
 import org.eclipse.debug.core.model.IValue;
+import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
 import org.eclipse.jdt.internal.debug.core.model.JDIObjectValue;
 
 public class NestedTypeFieldValue_214 extends Tests {
@@ -28,7 +27,7 @@
 	}
 
 	public void init() throws Exception {
-		initializeFrame("EvalNestedTypeTests", 214, 3);
+		initializeFrame("EvalNestedTypeTests", 217, 3);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_252.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_252.java
index 4cd8e45..50ef029 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_252.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_252.java
@@ -13,9 +13,8 @@
  *******************************************************************************/
 package org.eclipse.jdt.debug.tests.eval;
 
-import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
-
 import org.eclipse.debug.core.model.IValue;
+import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
 import org.eclipse.jdt.internal.debug.core.model.JDIObjectValue;
 
 public class NestedTypeFieldValue_252 extends Tests {
@@ -28,7 +27,7 @@
 	}
 
 	public void init() throws Exception {
-		initializeFrame("EvalNestedTypeTests", 252, 4);
+		initializeFrame("EvalNestedTypeTests", 255, 4);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_279.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_279.java
index 5176c15..e199c55 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_279.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_279.java
@@ -13,9 +13,8 @@
  *******************************************************************************/
 package org.eclipse.jdt.debug.tests.eval;
 
-import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
-
 import org.eclipse.debug.core.model.IValue;
+import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
 import org.eclipse.jdt.internal.debug.core.model.JDIObjectValue;
 
 public class NestedTypeFieldValue_279 extends Tests {
@@ -28,7 +27,7 @@
 	}
 
 	public void init() throws Exception {
-		initializeFrame("EvalNestedTypeTests", 279, 4);
+		initializeFrame("EvalNestedTypeTests", 282, 4);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_304.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_304.java
index f625f78..a5c96f1 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_304.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_304.java
@@ -13,9 +13,8 @@
  *******************************************************************************/
 package org.eclipse.jdt.debug.tests.eval;
 
-import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
-
 import org.eclipse.debug.core.model.IValue;
+import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
 import org.eclipse.jdt.internal.debug.core.model.JDIObjectValue;
 
 public class NestedTypeFieldValue_304 extends Tests {
@@ -28,7 +27,7 @@
 	}
 
 	public void init() throws Exception {
-		initializeFrame("EvalNestedTypeTests", 304, 4);
+		initializeFrame("EvalNestedTypeTests", 307, 4);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_315.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_315.java
index 654f6f3..2bcfcfd 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_315.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_315.java
@@ -13,9 +13,8 @@
  *******************************************************************************/
 package org.eclipse.jdt.debug.tests.eval;
 
-import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
-
 import org.eclipse.debug.core.model.IValue;
+import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
 import org.eclipse.jdt.internal.debug.core.model.JDIObjectValue;
 
 public class NestedTypeFieldValue_315 extends Tests {
@@ -28,7 +27,7 @@
 	}
 
 	public void init() throws Exception {
-		initializeFrame("EvalNestedTypeTests", 315, 3);
+		initializeFrame("EvalNestedTypeTests", 318, 3);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_354.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_354.java
index 8bb168c..4284d65 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_354.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_354.java
@@ -13,9 +13,8 @@
  *******************************************************************************/
 package org.eclipse.jdt.debug.tests.eval;
 
-import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
-
 import org.eclipse.debug.core.model.IValue;
+import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
 import org.eclipse.jdt.internal.debug.core.model.JDIObjectValue;
 
 public class NestedTypeFieldValue_354 extends Tests {
@@ -28,7 +27,7 @@
 	}
 
 	public void init() throws Exception {
-		initializeFrame("EvalNestedTypeTests", 354, 4);
+		initializeFrame("EvalNestedTypeTests", 357, 4);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_381.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_381.java
index 9f86002..25b6f75 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_381.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_381.java
@@ -13,9 +13,8 @@
  *******************************************************************************/
 package org.eclipse.jdt.debug.tests.eval;
 
-import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
-
 import org.eclipse.debug.core.model.IValue;
+import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
 import org.eclipse.jdt.internal.debug.core.model.JDIObjectValue;
 
 public class NestedTypeFieldValue_381 extends Tests {
@@ -28,7 +27,7 @@
 	}
 
 	public void init() throws Exception {
-		initializeFrame("EvalNestedTypeTests", 381, 4);
+		initializeFrame("EvalNestedTypeTests", 384, 4);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_406.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_406.java
index 3af5944..180ba31 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_406.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_406.java
@@ -13,9 +13,8 @@
  *******************************************************************************/
 package org.eclipse.jdt.debug.tests.eval;
 
-import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
-
 import org.eclipse.debug.core.model.IValue;
+import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
 import org.eclipse.jdt.internal.debug.core.model.JDIObjectValue;
 
 public class NestedTypeFieldValue_406 extends Tests {
@@ -28,7 +27,7 @@
 	}
 
 	public void init() throws Exception {
-		initializeFrame("EvalNestedTypeTests", 406, 4);
+		initializeFrame("EvalNestedTypeTests", 409, 4);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_417.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_417.java
index 678a0bb..c5d5564 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_417.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_417.java
@@ -13,9 +13,8 @@
  *******************************************************************************/
 package org.eclipse.jdt.debug.tests.eval;
 
-import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
-
 import org.eclipse.debug.core.model.IValue;
+import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
 import org.eclipse.jdt.internal.debug.core.model.JDIObjectValue;
 
 public class NestedTypeFieldValue_417 extends Tests {
@@ -28,7 +27,7 @@
 	}
 
 	public void init() throws Exception {
-		initializeFrame("EvalNestedTypeTests", 417, 3);
+		initializeFrame("EvalNestedTypeTests", 420, 3);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_455.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_455.java
index 60b88d0..7ad2cc8 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_455.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_455.java
@@ -13,9 +13,8 @@
  *******************************************************************************/
 package org.eclipse.jdt.debug.tests.eval;
 
-import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
-
 import org.eclipse.debug.core.model.IValue;
+import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
 import org.eclipse.jdt.internal.debug.core.model.JDIObjectValue;
 
 public class NestedTypeFieldValue_455 extends Tests {
@@ -28,7 +27,7 @@
 	}
 
 	public void init() throws Exception {
-		initializeFrame("EvalNestedTypeTests", 455, 4);
+		initializeFrame("EvalNestedTypeTests", 458, 4);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_481.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_481.java
index da4b1c8..9454bb6 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_481.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_481.java
@@ -13,9 +13,8 @@
  *******************************************************************************/
 package org.eclipse.jdt.debug.tests.eval;
 
-import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
-
 import org.eclipse.debug.core.model.IValue;
+import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
 import org.eclipse.jdt.internal.debug.core.model.JDIObjectValue;
 
 public class NestedTypeFieldValue_481 extends Tests {
@@ -28,7 +27,7 @@
 	}
 
 	public void init() throws Exception {
-		initializeFrame("EvalNestedTypeTests", 481, 4);
+		initializeFrame("EvalNestedTypeTests", 484, 4);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_506.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_506.java
index a4639cf..a011dde 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_506.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_506.java
@@ -13,9 +13,8 @@
  *******************************************************************************/
 package org.eclipse.jdt.debug.tests.eval;
 
-import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
-
 import org.eclipse.debug.core.model.IValue;
+import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
 import org.eclipse.jdt.internal.debug.core.model.JDIObjectValue;
 
 public class NestedTypeFieldValue_506 extends Tests {
@@ -28,7 +27,7 @@
 	}
 
 	public void init() throws Exception {
-		initializeFrame("EvalNestedTypeTests", 506, 4);
+		initializeFrame("EvalNestedTypeTests", 509, 4);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_566.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_566.java
index 2b4502a..c7ec450 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_566.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_566.java
@@ -13,9 +13,8 @@
  *******************************************************************************/
 package org.eclipse.jdt.debug.tests.eval;
 
-import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
-
 import org.eclipse.debug.core.model.IValue;
+import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
 import org.eclipse.jdt.internal.debug.core.model.JDIObjectValue;
 
 public class NestedTypeFieldValue_566 extends Tests {
@@ -28,7 +27,7 @@
 	}
 
 	public void init() throws Exception {
-		initializeFrame("EvalNestedTypeTests", 566, 4);
+		initializeFrame("EvalNestedTypeTests", 569, 4);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_592.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_592.java
index 3173285..a8677c9 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_592.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_592.java
@@ -13,9 +13,8 @@
  *******************************************************************************/
 package org.eclipse.jdt.debug.tests.eval;
 
-import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
-
 import org.eclipse.debug.core.model.IValue;
+import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
 import org.eclipse.jdt.internal.debug.core.model.JDIObjectValue;
 
 public class NestedTypeFieldValue_592 extends Tests {
@@ -28,7 +27,7 @@
 	}
 
 	public void init() throws Exception {
-		initializeFrame("EvalNestedTypeTests", 592, 4);
+		initializeFrame("EvalNestedTypeTests", 595, 4);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_616.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_616.java
index e5a9088..43db590 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_616.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_616.java
@@ -13,9 +13,8 @@
  *******************************************************************************/
 package org.eclipse.jdt.debug.tests.eval;
 
-import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
-
 import org.eclipse.debug.core.model.IValue;
+import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
 import org.eclipse.jdt.internal.debug.core.model.JDIObjectValue;
 
 public class NestedTypeFieldValue_616 extends Tests {
@@ -28,7 +27,7 @@
 	}
 
 	public void init() throws Exception {
-		initializeFrame("EvalNestedTypeTests", 616, 4);
+		initializeFrame("EvalNestedTypeTests", 619, 4);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_65.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_65.java
index 851d687..f58202f 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_65.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_65.java
@@ -13,9 +13,8 @@
  *******************************************************************************/
 package org.eclipse.jdt.debug.tests.eval;
 
-import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
-
 import org.eclipse.debug.core.model.IValue;
+import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
 import org.eclipse.jdt.internal.debug.core.model.JDIObjectValue;
 
 public class NestedTypeFieldValue_65 extends Tests {
@@ -28,7 +27,7 @@
 	}
 
 	public void init() throws Exception {
-		initializeFrame("EvalNestedTypeTests", 65, 4);
+		initializeFrame("EvalNestedTypeTests", 68, 4);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_69.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_69.java
index 2e71a52..6a6c53b 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_69.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_69.java
@@ -13,9 +13,8 @@
  *******************************************************************************/
 package org.eclipse.jdt.debug.tests.eval;
 
-import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
-
 import org.eclipse.debug.core.model.IValue;
+import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
 import org.eclipse.jdt.internal.debug.core.model.JDIObjectValue;
 
 public class NestedTypeFieldValue_69 extends Tests {
@@ -28,7 +27,7 @@
 	}
 
 	public void init() throws Exception {
-		initializeFrame("EvalNestedTypeTests", 69, 4);
+		initializeFrame("EvalNestedTypeTests", 72, 4);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_690.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_690.java
index b2254fc..e27e749 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_690.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_690.java
@@ -13,9 +13,8 @@
  *******************************************************************************/
 package org.eclipse.jdt.debug.tests.eval;
 
-import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
-
 import org.eclipse.debug.core.model.IValue;
+import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
 import org.eclipse.jdt.internal.debug.core.model.JDIObjectValue;
 
 public class NestedTypeFieldValue_690 extends Tests {
@@ -28,7 +27,7 @@
 	}
 
 	public void init() throws Exception {
-		initializeFrame("EvalNestedTypeTests", 690, 4);
+		initializeFrame("EvalNestedTypeTests", 693, 4);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_714.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_714.java
index 97bb3b8..fc835cd 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_714.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_714.java
@@ -13,9 +13,8 @@
  *******************************************************************************/
 package org.eclipse.jdt.debug.tests.eval;
 
-import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
-
 import org.eclipse.debug.core.model.IValue;
+import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
 import org.eclipse.jdt.internal.debug.core.model.JDIObjectValue;
 
 public class NestedTypeFieldValue_714 extends Tests {
@@ -28,7 +27,7 @@
 	}
 
 	public void init() throws Exception {
-		initializeFrame("EvalNestedTypeTests", 714, 4);
+		initializeFrame("EvalNestedTypeTests", 717, 4);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_94.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_94.java
index 3fd8f07..b91ad08 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_94.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NestedTypeFieldValue_94.java
@@ -13,9 +13,8 @@
  *******************************************************************************/
 package org.eclipse.jdt.debug.tests.eval;
 
-import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
-
 import org.eclipse.debug.core.model.IValue;
+import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
 import org.eclipse.jdt.internal.debug.core.model.JDIObjectValue;
 
 public class NestedTypeFieldValue_94 extends Tests {
@@ -28,7 +27,7 @@
 	}
 
 	public void init() throws Exception {
-		initializeFrame("EvalNestedTypeTests", 94, 4);
+		initializeFrame("EvalNestedTypeTests", 97, 4);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NumericTypesCastTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NumericTypesCastTests.java
index 6675de9..f546492 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NumericTypesCastTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/NumericTypesCastTests.java
@@ -23,7 +23,7 @@
 	}
 
 	protected void init() throws Exception {
-		initializeFrame("EvalSimpleTests",15,1);
+		initializeFrame("EvalSimpleTests", 18, 1);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/QualifiedFieldValueTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/QualifiedFieldValueTests.java
index eded086..177d497 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/QualifiedFieldValueTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/QualifiedFieldValueTests.java
@@ -24,7 +24,7 @@
 	}
 
 	protected void init() throws Exception {
-		initializeFrame("EvalTypeTests",73,1);
+		initializeFrame("EvalTypeTests", 76, 1);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/QualifiedStaticFieldValueTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/QualifiedStaticFieldValueTests.java
index 0c39f2d..6408d61 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/QualifiedStaticFieldValueTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/QualifiedStaticFieldValueTests.java
@@ -24,7 +24,7 @@
 	}
 
 	protected void init() throws Exception {
-		initializeFrame("EvalTypeTests",73,1);
+		initializeFrame("EvalTypeTests", 76, 1);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/QualifiedStaticFieldValueTests2.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/QualifiedStaticFieldValueTests2.java
index ab49750..1e740d8 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/QualifiedStaticFieldValueTests2.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/QualifiedStaticFieldValueTests2.java
@@ -24,7 +24,7 @@
 	}
 
 	protected void init() throws Exception {
-		initializeFrame("EvalTypeTests",73,1);
+		initializeFrame("EvalTypeTests", 76, 1);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/ShortOperatorsTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/ShortOperatorsTests.java
index fc04ee7..7dbd682 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/ShortOperatorsTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/ShortOperatorsTests.java
@@ -24,7 +24,7 @@
 	}
 
 	protected void init() throws Exception {
-		initializeFrame("EvalSimpleTests",15,1);
+		initializeFrame("EvalSimpleTests", 18, 1);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/StaticFieldValueTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/StaticFieldValueTests.java
index 6f22046..fca63cf 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/StaticFieldValueTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/StaticFieldValueTests.java
@@ -25,7 +25,7 @@
 	}
 
 	protected void init() throws Exception {
-		initializeFrame("EvalTypeTests",63,2);
+		initializeFrame("EvalTypeTests", 66, 2);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/StaticFieldValueTests2.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/StaticFieldValueTests2.java
index e7d8ad4..468ec33 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/StaticFieldValueTests2.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/StaticFieldValueTests2.java
@@ -25,7 +25,7 @@
 	}
 
 	protected void init() throws Exception {
-		initializeFrame("EvalTypeTests",67,2);
+		initializeFrame("EvalTypeTests", 70, 2);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/StringPlusOpTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/StringPlusOpTests.java
index c68b2c8..a310240 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/StringPlusOpTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/StringPlusOpTests.java
@@ -23,7 +23,7 @@
 	}
 
 	protected void init() throws Exception {
-		initializeFrame("EvalSimpleTests",15,1);
+		initializeFrame("EvalSimpleTests", 18, 1);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TestsAnonymousClassVariable.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TestsAnonymousClassVariable.java
index eb2781b..e851257 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TestsAnonymousClassVariable.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TestsAnonymousClassVariable.java
@@ -36,7 +36,7 @@
 
 	public void testEvalAnonymousClassVariable1() throws Throwable {
 		try {
-			init(17, 2);
+			init(20, 2);
 			IValue value = eval("innerClassField");
 			String typeName = value.getReferenceTypeName();
 			assertEquals("T_T_this_e : wrong type : ", "int", typeName);
@@ -50,7 +50,7 @@
 
 	public void testEvalAnonymousClassVariable2() throws Throwable {
 		try {
-			init(30, 1);
+			init(33, 1);
 			IValue value = eval("latch");
 			String typeName = value.getReferenceTypeName();
 			assertEquals("T_T_this_e : wrong type : ", "java.util.concurrent.CountDownLatch", typeName);
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TestsArrays.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TestsArrays.java
index 09cdb02..7db929f 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TestsArrays.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TestsArrays.java
@@ -13,9 +13,8 @@
  *******************************************************************************/
 package org.eclipse.jdt.debug.tests.eval;
 
-import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
-
 import org.eclipse.debug.core.model.IValue;
+import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
 import org.eclipse.jdt.internal.debug.core.model.JDIObjectValue;
 
 public class TestsArrays extends Tests {
@@ -28,7 +27,7 @@
 	}
 
 	public void init() throws Exception {
-		initializeFrame("EvalArrayTests", 37, 1, 1);
+		initializeFrame("EvalArrayTests", 40, 1, 1);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TestsNestedTypes1.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TestsNestedTypes1.java
index 3c9d64e..d6bcb2f 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TestsNestedTypes1.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TestsNestedTypes1.java
@@ -13,9 +13,8 @@
  *******************************************************************************/
 package org.eclipse.jdt.debug.tests.eval;
 
-import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
-
 import org.eclipse.debug.core.model.IValue;
+import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
 import org.eclipse.jdt.internal.debug.core.model.JDIObjectValue;
 
 public class TestsNestedTypes1 extends Tests {
@@ -28,7 +27,7 @@
 	}
 
 	public void init() throws Exception {
-		initializeFrame("EvalNestedTypeTests", 252, 4, 1);
+		initializeFrame("EvalNestedTypeTests", 255, 4, 1);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TestsNumberLiteral.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TestsNumberLiteral.java
index b2e7f2a..ad2a34f 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TestsNumberLiteral.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TestsNumberLiteral.java
@@ -13,9 +13,8 @@
  *******************************************************************************/
 package org.eclipse.jdt.debug.tests.eval;
 
-import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
-
 import org.eclipse.debug.core.model.IValue;
+import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
 public class TestsNumberLiteral extends Tests {
 	/**
 	 * Constructor for TypeHierarchy.
@@ -26,7 +25,7 @@
 	}
 
 	public void init() throws Exception {
-		initializeFrame("EvalSimpleTests", 37, 1, 1);
+		initializeFrame("EvalSimpleTests", 40, 1, 1);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TestsTypeHierarchy2.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TestsTypeHierarchy2.java
index c734fb8..0c4440f 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TestsTypeHierarchy2.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TestsTypeHierarchy2.java
@@ -13,9 +13,8 @@
  *******************************************************************************/
 package org.eclipse.jdt.debug.tests.eval;
 
-import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
-
 import org.eclipse.debug.core.model.IValue;
+import org.eclipse.jdt.debug.core.IJavaPrimitiveValue;
 public class TestsTypeHierarchy2 extends Tests {
 	/**
 	 * Constructor for TypeHierarchy.
@@ -26,7 +25,7 @@
 	}
 
 	public void init() throws Exception {
-		initializeFrame("EvalTypeHierarchyTests", 119, 2, 1);
+		initializeFrame("EvalTypeHierarchyTests", 122, 2, 1);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TypeHierarchy_119_1.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TypeHierarchy_119_1.java
index b596495..0a0c01a 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TypeHierarchy_119_1.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TypeHierarchy_119_1.java
@@ -26,7 +26,7 @@
 	}
 
 	public void init() throws Exception {
-		initializeFrame("EvalTypeHierarchyTests", 119, 2, 1);
+		initializeFrame("EvalTypeHierarchyTests", 122, 2, 1);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TypeHierarchy_32_1.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TypeHierarchy_32_1.java
index 85e2511..9dce71f 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TypeHierarchy_32_1.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TypeHierarchy_32_1.java
@@ -26,7 +26,7 @@
 	}
 
 	public void init() throws Exception {
-		initializeFrame("EvalTypeHierarchyTests", 32, 2, 1);
+		initializeFrame("EvalTypeHierarchyTests", 35, 2, 1);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TypeHierarchy_32_2.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TypeHierarchy_32_2.java
index d2f0f4c..7fd06ae 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TypeHierarchy_32_2.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TypeHierarchy_32_2.java
@@ -26,7 +26,7 @@
 	}
 
 	public void init() throws Exception {
-		initializeFrame("EvalTypeHierarchyTests", 32, 2, 2);
+		initializeFrame("EvalTypeHierarchyTests", 35, 2, 2);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TypeHierarchy_32_3.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TypeHierarchy_32_3.java
index c959166..94468b8 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TypeHierarchy_32_3.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TypeHierarchy_32_3.java
@@ -26,7 +26,7 @@
 	}
 
 	public void init() throws Exception {
-		initializeFrame("EvalTypeHierarchyTests", 32, 2, 3);
+		initializeFrame("EvalTypeHierarchyTests", 35, 2, 3);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TypeHierarchy_32_4.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TypeHierarchy_32_4.java
index 5bf9773..1a80a3f 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TypeHierarchy_32_4.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TypeHierarchy_32_4.java
@@ -26,7 +26,7 @@
 	}
 
 	public void init() throws Exception {
-		initializeFrame("EvalTypeHierarchyTests", 32, 2, 4);
+		initializeFrame("EvalTypeHierarchyTests", 35, 2, 4);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TypeHierarchy_32_5.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TypeHierarchy_32_5.java
index 51e04a7..02af2a2 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TypeHierarchy_32_5.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TypeHierarchy_32_5.java
@@ -26,7 +26,7 @@
 	}
 
 	public void init() throws Exception {
-		initializeFrame("EvalTypeHierarchyTests", 32, 2, 5);
+		initializeFrame("EvalTypeHierarchyTests", 35, 2, 5);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TypeHierarchy_32_6.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TypeHierarchy_32_6.java
index 46c328f..b18109c 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TypeHierarchy_32_6.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TypeHierarchy_32_6.java
@@ -26,7 +26,7 @@
 	}
 
 	public void init() throws Exception {
-		initializeFrame("EvalTypeHierarchyTests", 32, 2, 6);
+		initializeFrame("EvalTypeHierarchyTests", 35, 2, 6);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TypeHierarchy_68_1.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TypeHierarchy_68_1.java
index 8d7c243..7d7dc19 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TypeHierarchy_68_1.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TypeHierarchy_68_1.java
@@ -26,7 +26,7 @@
 	}
 
 	public void init() throws Exception {
-		initializeFrame("EvalTypeHierarchyTests", 68, 2, 1);
+		initializeFrame("EvalTypeHierarchyTests", 71, 2, 1);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TypeHierarchy_68_2.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TypeHierarchy_68_2.java
index 6eaa503..4b0b54bc 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TypeHierarchy_68_2.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TypeHierarchy_68_2.java
@@ -26,7 +26,7 @@
 	}
 
 	public void init() throws Exception {
-		initializeFrame("EvalTypeHierarchyTests", 68, 2, 2);
+		initializeFrame("EvalTypeHierarchyTests", 71, 2, 2);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TypeHierarchy_68_3.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TypeHierarchy_68_3.java
index 15be252..ed8d017 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TypeHierarchy_68_3.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/TypeHierarchy_68_3.java
@@ -26,7 +26,7 @@
 	}
 
 	public void init() throws Exception {
-		initializeFrame("EvalTypeHierarchyTests", 68, 2, 3);
+		initializeFrame("EvalTypeHierarchyTests", 71, 2, 3);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/VariableDeclarationTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/VariableDeclarationTests.java
index f817d6b..9543f93 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/VariableDeclarationTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/VariableDeclarationTests.java
@@ -26,7 +26,7 @@
 	}
 
 	protected void init() throws Exception {
-		initializeFrame("EvalSimpleTests",15,1);
+		initializeFrame("EvalSimpleTests", 18, 1);
 	}
 
 	protected void end() throws Exception {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/launching/LaunchTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/launching/LaunchTests.java
index 13e753e..b669358 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/launching/LaunchTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/launching/LaunchTests.java
@@ -97,7 +97,7 @@
 	 */
 	public void testUnregisteredLaunch() throws Exception {
 	   String typeName = "Breakpoints"; //$NON-NLS-1$
-	   createLineBreakpoint(52, typeName);
+		createLineBreakpoint(55, typeName);
 	   IJavaThread thread = null;
        try {
            thread = launchToBreakpoint(typeName, false);
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/sourcelookup/JarSourceLookupTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/sourcelookup/JarSourceLookupTests.java
index 7f8d09d..10f0d86 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/sourcelookup/JarSourceLookupTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/sourcelookup/JarSourceLookupTests.java
@@ -194,7 +194,7 @@
 	 */
 	public void testInspectClassFileFromJar() throws Exception {
 		createLaunchConfiguration(fgJarProject, LAUNCHCONFIGURATIONS, A_RUN_JAR);
-		createLineBreakpoint(18, A_RUN_JAR);
+		createLineBreakpoint(21, A_RUN_JAR);
 		ILaunchConfiguration config = getLaunchConfiguration(fgJarProject, LAUNCHCONFIGURATIONS, A_RUN_JAR);
 		IJavaThread thread = null;
 		try {
@@ -221,7 +221,7 @@
 	 */
 	public void testShowClassFileFromJar() throws Exception {
 		createLaunchConfiguration(fgJarProject, LAUNCHCONFIGURATIONS, A_RUN_JAR);
-		createLineBreakpoint(18, A_RUN_JAR);
+		createLineBreakpoint(21, A_RUN_JAR);
 		ILaunchConfiguration config = getLaunchConfiguration(fgJarProject, LAUNCHCONFIGURATIONS, A_RUN_JAR);
 		IJavaThread thread = null;
 		try {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/sourcelookup/SourceLookupTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/sourcelookup/SourceLookupTests.java
index 0fb62b1..aba5dcd 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/sourcelookup/SourceLookupTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/sourcelookup/SourceLookupTests.java
@@ -61,8 +61,8 @@
 	 */
 	public void testStackFrameReuse() throws Exception {
 		String typeName = "org.eclipse.debug.tests.targets.CallStack";
-		createLineBreakpoint(28, "org.eclipse.debug.tests.targets.ClassOne");
-		createLineBreakpoint(28, "org.eclipse.debug.tests.targets.ClassTwo");
+		createLineBreakpoint(31, "org.eclipse.debug.tests.targets.ClassOne");
+		createLineBreakpoint(31, "org.eclipse.debug.tests.targets.ClassTwo");
 
 		IJavaThread thread= null;
 		try {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/sourcelookup/TypeResolutionTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/sourcelookup/TypeResolutionTests.java
index 3c2aa53..b738675 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/sourcelookup/TypeResolutionTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/sourcelookup/TypeResolutionTests.java
@@ -36,35 +36,35 @@
 	}
 
 	public void testTypeAB() throws Exception {
-		resolve(94, "EvalNestedTypeTests$A$AB");
+		resolve(97, "EvalNestedTypeTests$A$AB");
 	}
 
 	public void testTypeAC() throws Exception {
-		resolve(120, "EvalNestedTypeTests$A$AC");
+		resolve(123, "EvalNestedTypeTests$A$AC");
 	}
 
 	public void testAnonTypeA1() throws Exception {
-		resolve(145, "EvalNestedTypeTests$A$1");
+		resolve(148, "EvalNestedTypeTests$A$1");
 	}
 
 	public void testTypeAE() throws Exception {
-		resolve(179, "EvalNestedTypeTests$A$AE");
+		resolve(182, "EvalNestedTypeTests$A$AE");
 	}
 
 	public void testAnonTypeA2() throws Exception {
-		resolve(203, "EvalNestedTypeTests$A$2");
+		resolve(206, "EvalNestedTypeTests$A$2");
 	}
 
 	public void testTypeBB() throws Exception {
-		resolve(252, "EvalNestedTypeTests$B$BB");
+		resolve(255, "EvalNestedTypeTests$B$BB");
 	}
 
 	public void testTypeBC() throws Exception {
-		resolve(279, "EvalNestedTypeTests$B$BC");
+		resolve(282, "EvalNestedTypeTests$B$BC");
 	}
 
 	public void testAnonTypeB() throws Exception {
-		resolve(304, "EvalNestedTypeTests$B$1");
+		resolve(307, "EvalNestedTypeTests$B$1");
 	}
 
 	public void testTypeB() throws Exception {
@@ -72,55 +72,55 @@
 	}
 
 	public void testTypeCB() throws Exception {
-		resolve(354, "EvalNestedTypeTests$C$CB");
+		resolve(357, "EvalNestedTypeTests$C$CB");
 	}
 
 	public void testTypeCC() throws Exception {
-		resolve(381, "EvalNestedTypeTests$C$CC");
+		resolve(378, "EvalNestedTypeTests$C$CC");
 	}
 
 	public void testAnonTypeC1() throws Exception {
-		resolve(406, "EvalNestedTypeTests$C$1");
+		resolve(409, "EvalNestedTypeTests$C$1");
 	}
 
 	public void testAnonTypeDB() throws Exception {
-		resolve(455, "EvalNestedTypeTests$1$DB");
+		resolve(458, "EvalNestedTypeTests$1$DB");
 	}
 
 	public void testAnonTypeDC() throws Exception {
-		resolve(481, "EvalNestedTypeTests$1$DC");
+		resolve(484, "EvalNestedTypeTests$1$DC");
 	}
 
 	public void testAnonType11() throws Exception {
-		resolve(506, "EvalNestedTypeTests$1$1");
+		resolve(509, "EvalNestedTypeTests$1$1");
 	}
 
 	public void testTopLevelType() throws Exception {
-		resolve(523, "EvalNestedTypeTests");
+		resolve(526, "EvalNestedTypeTests");
 	}
 
 	public void testTypeEB() throws Exception {
-		resolve(566, "EvalNestedTypeTests$E$EB");
+		resolve(569, "EvalNestedTypeTests$E$EB");
 	}
 
 	public void testTypeEC() throws Exception {
-		resolve(592, "EvalNestedTypeTests$E$EC");
+		resolve(595, "EvalNestedTypeTests$E$EC");
 	}
 
 	public void testAnonTypeE1() throws Exception {
-		resolve(616, "EvalNestedTypeTests$E$1");
+		resolve(619, "EvalNestedTypeTests$E$1");
 	}
 
 	public void testAnonTypeFB() throws Exception {
-		resolve(664, "EvalNestedTypeTests$2$FB");
+		resolve(667, "EvalNestedTypeTests$2$FB");
 	}
 
 	public void testAnonTypeFC() throws Exception {
-		resolve(690, "EvalNestedTypeTests$2$FC");
+		resolve(693, "EvalNestedTypeTests$2$FC");
 	}
 
 	public void testAnonType21() throws Exception {
-		resolve(714, "EvalNestedTypeTests$2$1");
+		resolve(717, "EvalNestedTypeTests$2$1");
 	}
 
 	/**
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/state/RefreshStateTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/state/RefreshStateTests.java
index 85c4020..fdc293b 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/state/RefreshStateTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/state/RefreshStateTests.java
@@ -16,6 +16,7 @@
 import java.io.ByteArrayOutputStream;
 import java.io.DataOutputStream;
 
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.debug.core.DebugEvent;
 import org.eclipse.debug.core.model.ILineBreakpoint;
 import org.eclipse.debug.core.model.IThread;
@@ -48,7 +49,7 @@
 	 */
 	public void testThreadHasResumed() throws Exception {
 		String typeName = "org.eclipse.debug.tests.targets.CallLoop";
-		ILineBreakpoint bp = createLineBreakpoint(16, "org.eclipse.debug.tests.targets.Looper");
+		ILineBreakpoint bp = createLineBreakpoint(19, "org.eclipse.debug.tests.targets.Looper");
 
 		IJavaThread thread = null;
 		try {
@@ -88,7 +89,7 @@
 	 */
 	public void testAllThreadsResumed() throws Exception {
 		String typeName = "org.eclipse.debug.tests.targets.CallLoop";
-		IJavaLineBreakpoint bp = createLineBreakpoint(16, "org.eclipse.debug.tests.targets.Looper");
+		IJavaLineBreakpoint bp = createLineBreakpoint(19, "org.eclipse.debug.tests.targets.Looper");
 		bp.setSuspendPolicy(IJavaBreakpoint.SUSPEND_VM);
 
 		IJavaThread thread = null;
@@ -131,7 +132,7 @@
 	 */
 	public void testThreadHasSuspended() throws Exception {
 		String typeName = "org.eclipse.debug.tests.targets.CallLoop";
-		ILineBreakpoint bp = createLineBreakpoint(16, "org.eclipse.debug.tests.targets.Looper");
+		ILineBreakpoint bp = createLineBreakpoint(19, "org.eclipse.debug.tests.targets.Looper");
 
 		IJavaThread thread = null;
 		try {
@@ -180,7 +181,7 @@
 	 */
 	public void testAllThreadsSuspended() throws Exception {
 		String typeName = "org.eclipse.debug.tests.targets.CallLoop";
-		ILineBreakpoint bp = createLineBreakpoint(16, "org.eclipse.debug.tests.targets.Looper");
+		ILineBreakpoint bp = createLineBreakpoint(19, "org.eclipse.debug.tests.targets.Looper");
 
 		IJavaThread thread = null;
 		try {
@@ -232,7 +233,7 @@
 	 */
 	public void testTargetHasSuspended() throws Exception {
 		String typeName = "org.eclipse.debug.tests.targets.CallLoop";
-		ILineBreakpoint bp = createLineBreakpoint(16, "org.eclipse.debug.tests.targets.Looper");
+		ILineBreakpoint bp = createLineBreakpoint(19, "org.eclipse.debug.tests.targets.Looper");
 
 		IJavaThread thread = null;
 		try {
@@ -280,7 +281,7 @@
 	 */
 	public void testTargetHasResumed() throws Exception {
 		String typeName = "org.eclipse.debug.tests.targets.CallLoop";
-		IJavaLineBreakpoint bp = createLineBreakpoint(16, "org.eclipse.debug.tests.targets.Looper");
+		IJavaLineBreakpoint bp = createLineBreakpoint(19, "org.eclipse.debug.tests.targets.Looper");
 		bp.setSuspendPolicy(IJavaBreakpoint.SUSPEND_VM);
 
 		IJavaThread thread = null;
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/ui/DebugHoverTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/ui/DebugHoverTests.java
index 4242148..d9177b6 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/ui/DebugHoverTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/ui/DebugHoverTests.java
@@ -90,8 +90,8 @@
 		final String expectedMethod2 = "lambda$1";
 		final int framesNumber1 = 6;
 		final int framesNumber2 = 9;
-		final int bpLine1 = 31;
-		final int bpLine2 = 38;
+		final int bpLine1 = 34;
+		final int bpLine2 = 41;
 
 		IJavaBreakpoint bp1 = createLineBreakpoint(bpLine1, "", typeName + ".java", typeName);
 		IJavaBreakpoint bp2 = createLineBreakpoint(bpLine2, "", typeName + ".java", typeName);
@@ -109,9 +109,9 @@
 			hover.setEditor(part);
 
 			Map<String, Region> offsets = new LinkedHashMap<>();
-			offsets.put("arg", new Region(1041, "arg".length()));
-			offsets.put("var1", new Region(1012, "var1".length()));
-			offsets.put("var2", new Region(983, "var2".length()));
+			offsets.put("arg", new Region(1059, "arg".length()));
+			offsets.put("var1", new Region(1030, "var1".length()));
+			offsets.put("var2", new Region(1001, "var2".length()));
 
 			Set<Entry<String, Region>> entrySet = offsets.entrySet();
 			int startLine = bpLine1;
@@ -125,9 +125,9 @@
 			part = openEditorAndValidateStack(expectedMethod2, framesNumber2, file, thread);
 
 			offsets = new LinkedHashMap<>();
-			offsets.put("arg", new Region(1198, "arg".length()));
-			offsets.put("var1", new Region(1168, "var1".length()));
-			offsets.put("var3", new Region(1138, "var3".length()));
+			offsets.put("arg", new Region(1216, "arg".length()));
+			offsets.put("var1", new Region(1186, "var1".length()));
+			offsets.put("var3", new Region(1156, "var3".length()));
 			// This will not work yet, I have no idea how to identify parent
 			// lambda element...
 			// offsets.put("var2", new Region(1108, "var2".length()));
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/variables/TestAnonymousInspect.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/variables/TestAnonymousInspect.java
index 0d91497..945266e 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/variables/TestAnonymousInspect.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/variables/TestAnonymousInspect.java
@@ -95,7 +95,7 @@
 	public void testInspectInAnonField() throws Exception {
 		IJavaThread thread = null;
 		try {
-			createLineBreakpoint(26, TYPE_NAME);
+			createLineBreakpoint(29, TYPE_NAME);
 			thread = launchToBreakpoint(TYPE_NAME);
 			assertNotNull("The application should have suspended - we cannot have a null thread", thread);
 			IValue value = doEval(thread);
@@ -119,7 +119,7 @@
 	public void testInspectInAnonMethod() throws Exception {
 		IJavaThread thread = null;
 		try {
-			createLineBreakpoint(34, TYPE_NAME);
+			createLineBreakpoint(37, TYPE_NAME);
 			thread = launchToBreakpoint(TYPE_NAME);
 			assertNotNull("The application should have suspended - we cannot have a null thread", thread);
 			IValue value = doEval(thread);
@@ -143,7 +143,7 @@
 	public void testInspectInAnonInitializer() throws Exception {
 		IJavaThread thread = null;
 		try {
-			createLineBreakpoint(17, TYPE_NAME);
+			createLineBreakpoint(20, TYPE_NAME);
 			thread = launchToBreakpoint(TYPE_NAME);
 			assertNotNull("The application should have suspended - we cannot have a null thread", thread);
 			IValue value = doEval(thread);
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/variables/TestInstanceRetrieval.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/variables/TestInstanceRetrieval.java
index 00d7acc..62e1824 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/variables/TestInstanceRetrieval.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/variables/TestInstanceRetrieval.java
@@ -44,8 +44,8 @@
 	 */
 	public void testGetInstances() throws Exception {
 		String typeName = "java6.AllInstancesTests";
-		createLineBreakpoint(61, typeName);
-		IJavaLineBreakpoint bp2 = createLineBreakpoint(63, typeName);
+		createLineBreakpoint(64, typeName);
+		IJavaLineBreakpoint bp2 = createLineBreakpoint(66, typeName);
 		IJavaThread thread= null;
 		try {
 			thread= launchToBreakpoint(typeName);
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/variables/TestIntegerAccessUnboxing15.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/variables/TestIntegerAccessUnboxing15.java
index 246ef59..949e8b3 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/variables/TestIntegerAccessUnboxing15.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/variables/TestIntegerAccessUnboxing15.java
@@ -69,7 +69,7 @@
 		IJavaThread thread= null;
 		IAstEvaluationEngine engine = null;
 		String typeName = "a.b.c.IntegerAccess";
-		createLineBreakpoint(get15Project().findType(typeName), 24);
+		createLineBreakpoint(get15Project().findType(typeName), 27);
 		try {
 			thread= launchToBreakpoint(get15Project(), typeName);
 			assertNotNull("Breakpoint not hit within timeout period", thread);
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/variables/TestLogicalStructures.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/variables/TestLogicalStructures.java
index f8238ef..d282a98 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/variables/TestLogicalStructures.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/variables/TestLogicalStructures.java
@@ -46,7 +46,7 @@
 	 */
 	public void testListLogicalStructure() throws Exception {
 		String typeName = "LogicalStructures";
-		createLineBreakpoint(33, typeName);
+		createLineBreakpoint(36, typeName);
 		IJavaThread thread= null;
 		try {
 			thread= launchToBreakpoint(typeName);
@@ -122,7 +122,7 @@
 	 */
 	public void testEntryLogicalStructure() throws Exception {
 		String typeName = "LogicalStructures";
-		createLineBreakpoint(33, typeName);
+		createLineBreakpoint(36, typeName);
 		IJavaThread thread= null;
 		try {
 			thread= launchToBreakpoint(typeName);
