Merge remote-tracking branch 'origin/master' into BETA_JAVA15

Change-Id: If4a20eb83a34e658a8f70bec1d6dafd2ddc7c358
diff --git a/org.eclipse.jdt.debug.tests/java8/Bug562056.java b/org.eclipse.jdt.debug.tests/java8/Bug562056.java
new file mode 100644
index 0000000..3473703
--- /dev/null
+++ b/org.eclipse.jdt.debug.tests/java8/Bug562056.java
@@ -0,0 +1,16 @@
+public class Bug562056 {
+	Object handler = "Hello bug 562056";
+
+	public static void main(String[] args) {
+		(new Bug562056()).run();
+	}
+
+	private Runnable r = () -> {
+		String string = handler.toString(); // breakpoint here, inspect handler.toString()
+		System.out.println(string);
+	};
+
+	public void run() {
+		r.run();
+	}
+}
diff --git a/org.eclipse.jdt.debug.tests/java8/RemoteEvaluator.java b/org.eclipse.jdt.debug.tests/java8/RemoteEvaluator.java
new file mode 100644
index 0000000..fe4c53c
--- /dev/null
+++ b/org.eclipse.jdt.debug.tests/java8/RemoteEvaluator.java
@@ -0,0 +1,23 @@
+import java.util.Arrays;
+import java.util.function.Predicate;
+
+public class RemoteEvaluator {
+	public static final Predicate<String> P_EMPTY = s -> s.isEmpty();
+	
+	public static void main(String[] args) {
+		(new RemoteEvaluator()).exec();
+	}
+
+	public void exec() {
+		(new Inner()).run();
+	}
+	
+	class Inner {
+		private final Predicate<String> Q_EMPTY = s -> s.isEmpty();
+
+		public void run() {
+			String y = "111";
+			Arrays.asList("111", "222", "aaa").stream().filter(a -> a.equals(y)).count();
+		}
+	}
+}
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/AbstractDebugTest.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/AbstractDebugTest.java
index 08c87d2..45a356c 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/AbstractDebugTest.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/AbstractDebugTest.java
@@ -474,6 +474,8 @@
 				cfgs.add(createLaunchConfiguration(jp, "Bug404097BreakpointUsingLocalClass"));
 				cfgs.add(createLaunchConfiguration(jp, "Bug560392"));
 				cfgs.add(createLaunchConfiguration(jp, "Bug561715"));
+				cfgs.add(createLaunchConfiguration(jp, "Bug562056"));
+				cfgs.add(createLaunchConfiguration(jp, "RemoteEvaluator"));
 	    		loaded18 = true;
 	    		waitForBuild();
 	        }
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/LambdaVariableTest.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/LambdaVariableTest.java
index e40b9da..621b316 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/LambdaVariableTest.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/LambdaVariableTest.java
@@ -30,7 +30,7 @@
 		super(name);
 	}
 
-	public void testEvaluate_LambdaFieldVariable() throws Exception {
+	public void testEvaluate_LambdaCapturedParameter() throws Exception {
 		debugWithBreakpoint("Bug560392", 9);
 		String snippet = "key";
 		IValue value = doEval(javaThread, snippet);
@@ -39,6 +39,15 @@
 		assertEquals("wrong result : ", "a", value.getValueString());
 	}
 
+	public void testEvaluate_LambdaCapturedField() throws Exception {
+		debugWithBreakpoint("Bug562056", 9);
+		String snippet = "handler.toString()";
+		IValue value = doEval(javaThread, snippet);
+
+		assertEquals("wrong type : ", "java.lang.String", value.getReferenceTypeName());
+		assertEquals("wrong result : ", "Hello bug 562056", value.getValueString());
+	}
+
 	private void debugWithBreakpoint(String testClass, int lineNumber) throws Exception {
 		createLineBreakpoint(lineNumber, testClass);
 		javaThread = launchToBreakpoint(testClass);
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/RemoteEvaluatorTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/RemoteEvaluatorTests.java
new file mode 100644
index 0000000..4c9c93f
--- /dev/null
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/RemoteEvaluatorTests.java
@@ -0,0 +1,87 @@
+/*******************************************************************************
+ * Copyright (c) 2020 Gayan Perera and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *     Gayan Perera - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.debug.tests.eval;
+
+import org.eclipse.debug.core.model.IValue;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.debug.core.IJavaThread;
+import org.eclipse.jdt.debug.tests.AbstractDebugTest;
+
+public class RemoteEvaluatorTests extends AbstractDebugTest {
+	private IJavaThread javaThread;
+
+	public RemoteEvaluatorTests(String name) {
+		super(name);
+	}
+
+	public void testEvaluate_InInnerScope_FieldInOuterScope() throws Exception {
+		debugWithBreakpoint("RemoteEvaluator", 20);
+
+		String code = "java.util.Arrays.asList(\"a\", \"b\", \"ac\").stream().filter(v -> RemoteEvaluator.P_EMPTY.test(v)).count()";
+		IValue value = evaluate(code);
+
+		assertNotNull("result is null", value);
+		assertEquals("count is not 0", "0", value.getValueString());
+	}
+
+
+	public void testEvaluate_InOuterScope_FieldInSameScope() throws Exception {
+		debugWithBreakpoint("RemoteEvaluator", 12);
+		IValue value = evaluate("java.util.Arrays.asList(\"a\", \"b\", \"ac\").stream().filter(v -> RemoteEvaluator.P_EMPTY.test(v)).count()");
+
+		assertNotNull("result is null", value);
+		assertEquals("count is not 0", "0", value.getValueString());
+	}
+
+	public void testEvaluate_InInnerScope_PrivateFieldInSameScope() throws Exception {
+		debugWithBreakpoint("RemoteEvaluator", 20);
+		IValue value = evaluate("java.util.Arrays.asList(\"a\", \"b\", \"ac\").stream().filter(v -> this.Q_EMPTY.test(v)).count()");
+
+		assertNotNull("result is null", value);
+		assertEquals("count is not 0", "0", value.getValueString());
+	}
+
+	public void testEvaluate_InInnerScope_PrivateFieldInSameScope_WithoutThis() throws Exception {
+		debugWithBreakpoint("RemoteEvaluator", 20);
+		IValue value = evaluate("java.util.Arrays.asList(\"a\", \"b\", \"ac\").stream().filter(v -> Q_EMPTY.test(v)).count()");
+
+		assertNotNull("result is null", value);
+		assertEquals("count is not 0", "0", value.getValueString());
+	}
+
+	@Override
+	protected IJavaProject getProjectContext() {
+		return get18Project();
+	}
+
+	private void debugWithBreakpoint(String testClass, int lineNumber) throws Exception {
+		createLineBreakpoint(lineNumber, testClass);
+		javaThread = launchToBreakpoint(testClass);
+		assertNotNull("The program did not suspend", javaThread);
+	}
+
+	private IValue evaluate(String snippet) throws Exception {
+		return doEval(javaThread, snippet);
+	}
+
+	@Override
+	protected void tearDown() throws Exception {
+		try {
+			terminateAndRemove(javaThread);
+		} finally {
+			super.tearDown();
+			removeAllBreakpoints();
+		}
+	}
+}
diff --git a/org.eclipse.jdt.debug.ui/META-INF/MANIFEST.MF b/org.eclipse.jdt.debug.ui/META-INF/MANIFEST.MF
index d2742d7..3c160ea 100644
--- a/org.eclipse.jdt.debug.ui/META-INF/MANIFEST.MF
+++ b/org.eclipse.jdt.debug.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jdt.debug.ui; singleton:=true
-Bundle-Version: 3.10.700.qualifier
+Bundle-Version: 3.11.0.qualifier
 Bundle-Activator: org.eclipse.jdt.internal.debug.ui.JDIDebugUIPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/org.eclipse.jdt.debug.ui/doc/.cvsignore b/org.eclipse.jdt.debug.ui/doc/.cvsignore
deleted file mode 100644
index 5807f61..0000000
--- a/org.eclipse.jdt.debug.ui/doc/.cvsignore
+++ /dev/null
@@ -1,3 +0,0 @@
-book.css
-org_eclipse_jdt_debug_ui_vmInstallTypePage.html
-schema.css
diff --git a/org.eclipse.jdt.debug.ui/pom.xml b/org.eclipse.jdt.debug.ui/pom.xml
index d732ea9..3d33a98 100644
--- a/org.eclipse.jdt.debug.ui/pom.xml
+++ b/org.eclipse.jdt.debug.ui/pom.xml
@@ -18,7 +18,7 @@
   </parent>
   <groupId>org.eclipse.jdt</groupId>
   <artifactId>org.eclipse.jdt.debug.ui</artifactId>
-  <version>3.10.700-SNAPSHOT</version>
+  <version>3.11.0-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
   <properties>
     <code.ignoredWarnings>-warn:+resource,-deprecation,unavoidableGenericProblems</code.ignoredWarnings>
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/debug/ui/launchConfigurations/AbstractVMInstallPage.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/debug/ui/launchConfigurations/AbstractVMInstallPage.java
index 94fda72..e1196e3 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/debug/ui/launchConfigurations/AbstractVMInstallPage.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/debug/ui/launchConfigurations/AbstractVMInstallPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2019 IBM Corporation and others.
+ * Copyright (c) 2007, 2020 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -118,14 +118,35 @@
 	}
 
 	/**
-	 * Updates the name status based on the new name. This method should be called
-	 * by the page each time the VM name changes.
+	 * Updates the name status based on the new name. This method should be called by the page each time the VM name changes.
 	 *
-	 * @param newName new name of VM
+	 * Use nameChanged(String newName, boolean init)
+	 *
+	 * @param newName
+	 *            new name of VM
+	 *
 	 */
+	@Deprecated
 	protected void nameChanged(String newName) {
+		nameChanged(newName, false);
+	}
+
+	/**
+	 * Updates the name status based on the new name. This method should be called by the page each time the VM name changes.
+	 *
+	 * @param newName
+	 *            new name of VM
+	 * @param init
+	 *            <code>true</code> if page is getting initialized else <code>false</code>
+	 *
+	 * @since 3.11
+	 */
+	protected void nameChanged(String newName, boolean init) {
 		fNameStatus = Status.OK_STATUS;
 		if (newName == null || newName.trim().length() == 0) {
+			if (init) {
+				return;
+			}
 			int sev = IStatus.ERROR;
 			if (fOriginalName == null || fOriginalName.length() == 0) {
 				sev = IStatus.WARNING;
@@ -152,8 +173,8 @@
 	 */
 	private boolean isDuplicateName(String name) {
 		if (fExistingNames != null) {
-			for (int i = 0; i < fExistingNames.length; i++) {
-				if (name.equals(fExistingNames[i])) {
+			for (String n : fExistingNames) {
+				if (name.equals(n)) {
 					return true;
 				}
 			}
@@ -219,9 +240,7 @@
 	 */
 	protected void updatePageStatus() {
 		IStatus max = Status.OK_STATUS;
-		IStatus[] vmStatus = getVMStatus();
-		for (int i = 0; i < vmStatus.length; i++) {
-			IStatus status = vmStatus[i];
+		for (IStatus status : getVMStatus()) {
 			if (status.getSeverity() > max.getSeverity()) {
 				max = status;
 			}
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/debug/ui/launchConfigurations/AppletParametersTab.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/debug/ui/launchConfigurations/AppletParametersTab.java
index 61f09ae..93c83ca 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/debug/ui/launchConfigurations/AppletParametersTab.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/debug/ui/launchConfigurations/AppletParametersTab.java
@@ -296,9 +296,8 @@
 
 	private void handleParametersRemoveButtonSelected() {
 		IStructuredSelection selection = (IStructuredSelection) fViewer.getSelection();
-		Object[] keys = selection.toArray();
-		for (int i = 0; i < keys.length; i++) {
-			String key = (String) keys[i];
+		for (Object k : selection.toArray()) {
+			String key = (String) k;
 			Map<String, String> params = getViewerInput();
 			params.remove(key);
 		}
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/core/refactoring/BreakpointChange.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/core/refactoring/BreakpointChange.java
index f6c042b..134c358 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/core/refactoring/BreakpointChange.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/core/refactoring/BreakpointChange.java
@@ -86,12 +86,12 @@
 	 */
 	protected void apply(IJavaBreakpoint breakpoint) throws CoreException {
 		breakpoint.setHitCount(fHitCount);
-		for (int i = 0; i < fInstanceFilters.length; i++) {
-			breakpoint.addInstanceFilter(fInstanceFilters[i]);
+		for (IJavaObject filter : fInstanceFilters) {
+			breakpoint.addInstanceFilter(filter);
 		}
 		breakpoint.setSuspendPolicy(fSuspendPolicy);
-		for (int i = 0; i < fThreadFilters.length; i++) {
-			breakpoint.setThreadFilter(fThreadFilters[i]);
+		for (IJavaThread filter : fThreadFilters) {
+			breakpoint.setThreadFilter(filter);
 		}
 		breakpoint.setEnabled(fEnabled);
 	}
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/core/refactoring/BreakpointMovePackageParticipant.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/core/refactoring/BreakpointMovePackageParticipant.java
index 7faf607..a550d52 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/core/refactoring/BreakpointMovePackageParticipant.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/core/refactoring/BreakpointMovePackageParticipant.java
@@ -49,8 +49,7 @@
 	@Override
 	protected void gatherChanges(IMarker[] markers, List<Change> changes) throws CoreException, OperationCanceledException {
 		IPackageFragmentRoot destRoot = (IPackageFragmentRoot)getDestination();
-		for (int i = 0; i < markers.length; i++) {
-			IMarker marker = markers[i];
+		for (IMarker marker : markers) {
 			IBreakpoint breakpoint = getBreakpoint(marker);
 			if (breakpoint instanceof IJavaBreakpoint) {
 				IJavaBreakpoint javaBreakpoint = (IJavaBreakpoint) breakpoint;
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/core/refactoring/BreakpointMoveTypeParticipant.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/core/refactoring/BreakpointMoveTypeParticipant.java
index 5ec6e5c..5d2159e 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/core/refactoring/BreakpointMoveTypeParticipant.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/core/refactoring/BreakpointMoveTypeParticipant.java
@@ -49,8 +49,7 @@
 	protected void gatherChanges(IMarker[] markers, List<Change> changes) throws CoreException, OperationCanceledException {
 		IType originalType = (IType) getOriginalElement();
 		IPackageFragment destPackage = (IPackageFragment) getDestination();
-		for (int i = 0; i < markers.length; i++) {
-			IMarker marker = markers[i];
+		for (IMarker marker : markers) {
 			IBreakpoint breakpoint = getBreakpoint(marker);
 			if (breakpoint instanceof IJavaBreakpoint) {
 				IJavaBreakpoint javaBreakpoint = (IJavaBreakpoint) breakpoint;
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/core/refactoring/BreakpointRenameFieldParticipant.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/core/refactoring/BreakpointRenameFieldParticipant.java
index edb2a46..ce7835e 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/core/refactoring/BreakpointRenameFieldParticipant.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/core/refactoring/BreakpointRenameFieldParticipant.java
@@ -69,8 +69,7 @@
 	@Override
 	protected void gatherChanges(IMarker[] markers, List<Change> changes, String destFieldName) throws CoreException, OperationCanceledException {
 		IField originalField = (IField) getOriginalElement();
-		for (int i = 0; i < markers.length; i++) {
-			IMarker marker = markers[i];
+		for (IMarker marker : markers) {
 			IBreakpoint breakpoint = getBreakpoint(marker);
 			if (breakpoint instanceof IJavaWatchpoint) {
 				IJavaWatchpoint watchpoint = (IJavaWatchpoint) breakpoint;
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/core/refactoring/BreakpointRenameMethodParticipant.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/core/refactoring/BreakpointRenameMethodParticipant.java
index 2f2b03e..d192589 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/core/refactoring/BreakpointRenameMethodParticipant.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/core/refactoring/BreakpointRenameMethodParticipant.java
@@ -48,15 +48,14 @@
 	@Override
 	protected void gatherChanges(IMarker[] markers, List<Change> changes, String destMethodName) throws CoreException, OperationCanceledException {
 		IMethod originalMethod = (IMethod) getOriginalElement();
-		for (int i = 0; i < markers.length; i++) {
-			IMarker marker = markers[i];
+		for (IMarker marker : markers) {
 			IBreakpoint breakpoint = getBreakpoint(marker);
 			if (breakpoint instanceof IJavaMethodBreakpoint) {
 				IJavaMethodBreakpoint methodBreakpoint = (IJavaMethodBreakpoint) breakpoint;
 				//ensure we only update the marker that corresponds to the method being renamed
 				//https://bugs.eclipse.org/bugs/show_bug.cgi?id=280518
 				if(methodBreakpoint.getMethodName().equals(originalMethod.getElementName()) &&
-						methodBreakpoint.getMethodSignature().equals(originalMethod.getSignature())) {
+					methodBreakpoint.getMethodSignature().equals(originalMethod.getSignature())) {
 					IType breakpointType = BreakpointUtils.getType(methodBreakpoint);
 					if (breakpointType != null && originalMethod.getDeclaringType().equals(breakpointType)) {
 						IMethod destMethod = originalMethod.getDeclaringType().getMethod(destMethodName, originalMethod.getParameterTypes());
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/core/refactoring/BreakpointRenamePackageParticipant.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/core/refactoring/BreakpointRenamePackageParticipant.java
index 847729a..41c6d0e 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/core/refactoring/BreakpointRenamePackageParticipant.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/core/refactoring/BreakpointRenamePackageParticipant.java
@@ -51,8 +51,7 @@
 		IPackageFragment originalPackage = (IPackageFragment) getOriginalElement();
 		String originalPackageName = originalPackage.getElementName();
 		IPackageFragmentRoot root = (IPackageFragmentRoot)originalPackage.getParent();
-		for (int i = 0; i < markers.length; i++) {
-			IMarker marker = markers[i];
+		for (IMarker marker : markers) {
 			IBreakpoint breakpoint = getBreakpoint(marker);
 			if (breakpoint instanceof IJavaBreakpoint) {
 				IJavaBreakpoint javaBreakpoint = (IJavaBreakpoint) breakpoint;
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/core/refactoring/BreakpointRenameProjectParticipant.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/core/refactoring/BreakpointRenameProjectParticipant.java
index c3f6a13..4e0e575 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/core/refactoring/BreakpointRenameProjectParticipant.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/core/refactoring/BreakpointRenameProjectParticipant.java
@@ -56,8 +56,7 @@
 	protected void gatherChanges(IMarker[] markers, List<Change> changes, String destProjectName) throws CoreException, OperationCanceledException {
 		IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(destProjectName);
 		IJavaProject destProject = JavaCore.create(project);
-		for (int i = 0; i < markers.length; i++) {
-			IMarker marker = markers[i];
+		for (IMarker marker : markers) {
 			IBreakpoint breakpoint = getBreakpoint(marker);
 			if (breakpoint instanceof IJavaBreakpoint) {
 				IJavaBreakpoint javaBreakpoint = (IJavaBreakpoint) breakpoint;
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/core/refactoring/BreakpointRenameTypeParticipant.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/core/refactoring/BreakpointRenameTypeParticipant.java
index e701b72..0848ca7 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/core/refactoring/BreakpointRenameTypeParticipant.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/core/refactoring/BreakpointRenameTypeParticipant.java
@@ -84,29 +84,28 @@
         newType = (IType) BreakpointChange.findElement(destCU, newType);
 
 
-        for (int i = 0; i < markers.length; i++) {
-            IMarker marker = markers[i];
-            IBreakpoint breakpoint = getBreakpoint(marker);
-            if (breakpoint instanceof IJavaBreakpoint) {
-                IJavaBreakpoint javaBreakpoint = (IJavaBreakpoint) breakpoint;
-                IType breakpointType = BreakpointUtils.getType(javaBreakpoint);
-                IType destType = null;
-                if (breakpointType != null) {
-                	IJavaElement element = null;
-                	if (isContained(originalType, breakpointType)) {
-                		element = BreakpointChange.findElement(newType, breakpointType);
-                	} else if (isContained(originalCU, breakpointType)) {
-                		// non public, or other type in the CU
-                		element = BreakpointChange.findElement(destCU, breakpointType);
-                	}
-                	if (element instanceof IType) {
-                		destType = (IType) element;
-                		changes.add(createTypeChange(javaBreakpoint, destType, breakpointType));
-                	}
-                }
-
-            }
-        }
+		for (IMarker marker : markers) {
+			IBreakpoint breakpoint = getBreakpoint(marker);
+			if (breakpoint instanceof IJavaBreakpoint) {
+				IJavaBreakpoint javaBreakpoint = (IJavaBreakpoint) breakpoint;
+				IType breakpointType = BreakpointUtils.getType(javaBreakpoint);
+				IType destType = null;
+				if (breakpointType != null) {
+					IJavaElement element = null;
+					if (isContained(originalType, breakpointType)) {
+						element = BreakpointChange.findElement(newType, breakpointType);
+					} else if (isContained(originalCU, breakpointType)) {
+						// non public, or other type in the CU
+						element = BreakpointChange.findElement(destCU, breakpointType);
+					}
+					if (element instanceof IType) {
+						destType = (IType) element;
+						changes.add(createTypeChange(javaBreakpoint, destType, breakpointType));
+					}
+				}
+				
+			}
+		}
 
     }
 
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/BreakpointMarkerUpdater.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/BreakpointMarkerUpdater.java
index fface6e..afb621c 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/BreakpointMarkerUpdater.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/BreakpointMarkerUpdater.java
@@ -193,18 +193,17 @@
 		String modelId = JDIDebugPlugin.getUniqueIdentifier();
 		String markerType= JavaLineBreakpoint.getMarkerType();
 		IBreakpointManager manager= DebugPlugin.getDefault().getBreakpointManager();
-		IBreakpoint[] breakpoints= manager.getBreakpoints(modelId);
-		for (int i = 0; i < breakpoints.length; i++) {
-			if (!(breakpoints[i] instanceof IJavaLineBreakpoint)) {
+		for (IBreakpoint b : manager.getBreakpoints(modelId)) {
+			if (!(b instanceof IJavaLineBreakpoint)) {
 				continue;
 			}
-			IJavaLineBreakpoint breakpoint = (IJavaLineBreakpoint) breakpoints[i];
+			IJavaLineBreakpoint breakpoint = (IJavaLineBreakpoint) b;
 			IMarker marker = breakpoint.getMarker();
 			if (marker != null && marker.exists() && marker.getType().equals(markerType) && currentmarker.getId() != marker.getId()) {
 				String breakpointTypeName = breakpoint.getTypeName();
 				if ((JavaDebugUtils.typeNamesEqual(breakpointTypeName, typeName) || (breakpointTypeName != null && breakpointTypeName.startsWith(typeName + '$')))
-						&& breakpoint.getLineNumber() == lineNumber && resource.equals(marker.getResource())) {
-						return breakpoint;
+					&& breakpoint.getLineNumber() == lineNumber && resource.equals(marker.getResource())) {
+					return breakpoint;
 				}
 			}
 		}
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/CreateStepFilterDialog.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/CreateStepFilterDialog.java
index 50cd85e..03e069c 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/CreateStepFilterDialog.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/CreateStepFilterDialog.java
@@ -134,8 +134,8 @@
 	}
 
 	private boolean isDuplicateFilter(String trimmedValue) {
-		for (int i=0; i<existingFilters.length; i++) {
-			if(existingFilters[i].getName().equals(trimmedValue)) {
+		for (Filter existingFilter : existingFilters) {
+			if (existingFilter.getName().equals(trimmedValue)) {
 				return true;
 			}
 		}
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/EditLogicalStructureDialog.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/EditLogicalStructureDialog.java
index ac3aed6..abbb0fa 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/EditLogicalStructureDialog.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/EditLogicalStructureDialog.java
@@ -14,7 +14,6 @@
 package org.eclipse.jdt.internal.debug.ui;
 
 import java.util.ArrayList;
-import java.util.Iterator;
 import java.util.List;
 
 import org.eclipse.core.commands.AbstractHandler;
@@ -95,10 +94,10 @@
 
 		public AttributesContentProvider(String[][] variables) {
 			fVariables= new ArrayList<>();
-			for (int i= 0; i < variables.length; i++) {
+			for (String[] v : variables) {
 				String[] variable= new String[2];
-				variable[0]= variables[i][0];
-				variable[1]= variables[i][1];
+				variable[0] = v[0];
+				variable[1] = v[1];
 				fVariables.add(variable);
 			}
 		}
@@ -154,8 +153,7 @@
 		 * @param list the list
 		 */
 		public void up(List<String[]> list) {
-			for (Iterator<String[]> iter= list.iterator(); iter.hasNext();) {
-				String[] variable= iter.next();
+			for (String[] variable : list) {
 				int index= fVariables.indexOf(variable);
 				fVariables.remove(variable);
 				fVariables.add(index - 1, variable);
@@ -167,8 +165,7 @@
 		 * @param list the list
 		 */
 		public void down(List<String[]> list) {
-			for (Iterator<String[]> iter= list.iterator(); iter.hasNext();) {
-				String[] variable= iter.next();
+			for (String[] variable : list) {
 				int index= fVariables.indexOf(variable);
 				fVariables.remove(variable);
 				fVariables.add(index + 1, variable);
@@ -442,11 +439,10 @@
 		IStructuredSelection selection= (IStructuredSelection)fAttributeListViewer.getSelection();
 		if (selection.size() > 0) {
 			List<String[]> selectedElements= selection.toList();
-			Object[] elements= fAttributesContentProvider.getElements();
 			Object newSelectedElement= null;
-			for (int i= 0; i < elements.length; i++) {
-				if (!selectedElements.contains(elements[i])) {
-					newSelectedElement= elements[i];
+			for (Object element : fAttributesContentProvider.getElements()) {
+				if (!selectedElements.contains(element)) {
+					newSelectedElement = element;
 				} else {
 					break;
 				}
@@ -505,16 +501,14 @@
 		} else if (isValue) {
 			// dispose the attribute list
 			saveAttributeValue();
-			Control[] children= fAttributesContainer.getChildren();
-			for (int i= 0; i < children.length; i++) {
-				children[i].dispose();
+			for (Control child : fAttributesContainer.getChildren()) {
+				child.dispose();
 			}
 		}
 
 		// dispose and recreate the code snippet editor group
-		Control[] children= fCodeGroup.getChildren();
-		for (int i = 0; i < children.length; i++) {
-			children[i].dispose();
+		for (Control child : fCodeGroup.getChildren()) {
+			child.dispose();
 		}
 		fSnippetViewer.dispose();
 		createCodeGroupWidgets(isValue);
@@ -598,8 +592,8 @@
 			} else if (oneElementSelected && fSnippetDocument.get().trim().length() == 0) {
 				status.setError(DebugUIMessages.EditLogicalStructureDialog_21);
 			} else {
-				for (int i= 0; i < elements.length; i++) {
-					String[] variable= (String[]) elements[i];
+				for (Object element : elements) {
+					String[] variable = (String[]) element;
 					if (variable[0].trim().length() == 0) {
 						status.setError(DebugUIMessages.EditLogicalStructureDialog_22);
 						break;
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/EvaluationContextManager.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/EvaluationContextManager.java
index c09f994..9868c61 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/EvaluationContextManager.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/EvaluationContextManager.java
@@ -79,9 +79,8 @@
 				if (fgManager == null) {
 					fgManager = new EvaluationContextManager();
 					IWorkbench workbench = PlatformUI.getWorkbench();
-					IWorkbenchWindow[] windows = workbench.getWorkbenchWindows();
-					for (int i = 0; i < windows.length; i++) {
-						fgManager.windowOpened(windows[i]);
+					for (IWorkbenchWindow window : workbench.getWorkbenchWindows()) {
+						fgManager.windowOpened(window);
 					}
 					workbench.addWindowListener(fgManager);
 					fgManager.fActiveWindow = workbench.getActiveWorkbenchWindow();
@@ -231,10 +230,9 @@
 			frame = getContext(activePage);
 		}
 		if (frame == null) {
-			IWorkbenchPage[] pages = window.getPages();
-			for (int i = 0; i < pages.length; i++) {
-				if (activePage != pages[i]) {
-					frame = getContext(pages[i]);
+			for (IWorkbenchPage page : window.getPages()) {
+				if (activePage != page) {
+					frame = getContext(page);
 					if (frame != null) {
 						return frame;
 					}
@@ -243,10 +241,9 @@
 
 			alreadyVisited.add(window);
 
-			IWorkbenchWindow[] windows = PlatformUI.getWorkbench().getWorkbenchWindows();
-			for (int i = 0; i < windows.length; i++) {
-				if (!alreadyVisited.contains(windows[i])) {
-					frame = getEvaluationContext(windows[i], alreadyVisited);
+			for (IWorkbenchWindow w : PlatformUI.getWorkbench().getWorkbenchWindows()) {
+				if (!alreadyVisited.contains(w)) {
+					frame = getEvaluationContext(w, alreadyVisited);
 					if (frame != null) {
 						return frame;
 					}
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/AbstractThreadsViewFilterAction.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/AbstractThreadsViewFilterAction.java
index d511cbf..8bbd01c 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/AbstractThreadsViewFilterAction.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/AbstractThreadsViewFilterAction.java
@@ -103,8 +103,7 @@
 			// if showing all threads, no need to worry about displaying/hiding
 			return;
 		}
-		for (int i = 0; i < events.length; i++) {
-			DebugEvent event = events[i];
+		for (DebugEvent event : events) {
 			switch (event.getKind()) {
 				case DebugEvent.RESUME:
 					if (event.getDetail() == DebugEvent.CLIENT_REQUEST) {
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/AddAdvancedAction.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/AddAdvancedAction.java
index 42e6984..1e98d6c 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/AddAdvancedAction.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/AddAdvancedAction.java
@@ -50,9 +50,9 @@
 	public void setViewer(IClasspathViewer viewer) {
 		super.setViewer(viewer);
 		if (fActions != null) {
-			for (int i = 0; i < fActions.length; i++) {
-				if (fActions[i] instanceof RuntimeClasspathAction) {
-					((RuntimeClasspathAction)fActions[i]).setViewer(viewer);
+			for (IAction action : fActions) {
+				if (action instanceof RuntimeClasspathAction) {
+					((RuntimeClasspathAction) action).setViewer(viewer);
 				}
 			}
 		}
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/AddFolderAction.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/AddFolderAction.java
index ee59566..c45a163 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/AddFolderAction.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/AddFolderAction.java
@@ -83,10 +83,10 @@
 			List<IResource> fAlreadySelected = getSelectedFolders();
 			@Override
 			public IStatus validate(Object[] selection) {
-				for (int i= 0; i < selection.length; i++) {
-					if (!(selection[i] instanceof IContainer)) {
+				for (Object s : selection) {
+					if (!(s instanceof IContainer)) {
 						return new Status(IStatus.ERROR, JDIDebugPlugin.getUniqueIdentifier(), IJavaDebugUIConstants.INTERNAL_ERROR, "Selection must be a folder", null);  //$NON-NLS-1$
-					} else if (fAlreadySelected.contains(selection[i])) {
+					} else if (fAlreadySelected.contains(s)) {
 						return new Status(IStatus.ERROR, JDIDebugPlugin.getUniqueIdentifier(), IJavaDebugUIConstants.INTERNAL_ERROR, "Classpath already includes selected folder(s).", null);  //$NON-NLS-1$
 					}
 
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/AddProjectAction.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/AddProjectAction.java
index 042fee0..b6118fc 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/AddProjectAction.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/AddProjectAction.java
@@ -68,8 +68,8 @@
 
 			List<IJavaProject> additions = new ArrayList<>(selections.length);
 			try {
-				for (int i = 0; i < selections.length; i++) {
-					IJavaProject jp = (IJavaProject)selections[i];
+				for (Object selection : selections) {
+					IJavaProject jp = (IJavaProject) selection;
 					if (dialog.isAddRequiredProjects()) {
 						collectRequiredProjects(jp, additions);
 					} else {
@@ -129,14 +129,13 @@
 			projects= new IJavaProject[0];
 		}
 		List<IJavaProject> remaining = new ArrayList<>();
-		for (int i = 0; i < projects.length; i++) {
-			remaining.add(projects[i]);
+		for (IJavaProject project : projects) {
+			remaining.add(project);
 		}
 		List<IJavaProject> alreadySelected = new ArrayList<>();
-		IRuntimeClasspathEntry[] entries = getViewer().getEntries();
-		for (int i = 0; i < entries.length; i++) {
-			if (entries[i].getType() == IRuntimeClasspathEntry.PROJECT) {
-				IResource res = root.findMember(entries[i].getPath());
+		for (IRuntimeClasspathEntry entry : getViewer().getEntries()) {
+			if (entry.getType() == IRuntimeClasspathEntry.PROJECT) {
+				IResource res = root.findMember(entry.getPath());
 				IJavaProject jp = (IJavaProject)JavaCore.create(res);
 				alreadySelected.add(jp);
 			}
@@ -160,9 +159,7 @@
 
 			IJavaModel model= proj.getJavaModel();
 
-			IClasspathEntry[] entries= proj.getRawClasspath();
-			for (int i= 0; i < entries.length; i++) {
-				IClasspathEntry curr= entries[i];
+			for (IClasspathEntry curr : proj.getRawClasspath()) {
 				if (curr.getEntryKind() == IClasspathEntry.CPE_PROJECT) {
 					IJavaProject ref= model.getJavaProject(curr.getPath().segment(0));
 					if (ref.exists()) {
@@ -182,48 +179,46 @@
 	 * @throws CoreException if an exception occurs
 	 */
 	protected void collectExportedEntries(IJavaProject proj, List<IRuntimeClasspathEntry> runtimeEntries) throws CoreException {
-		IClasspathEntry[] entries = proj.getRawClasspath();
-		for (int i = 0; i < entries.length; i++) {
-			IClasspathEntry entry = entries[i];
+		for (IClasspathEntry entry : proj.getRawClasspath()) {
 			if (entry.isExported()) {
 				IRuntimeClasspathEntry rte = null;
 				switch (entry.getEntryKind()) {
-					case IClasspathEntry.CPE_CONTAINER:
-						IClasspathContainer container = JavaCore.getClasspathContainer(entry.getPath(), proj);
-						int kind = 0;
-						switch (container.getKind()) {
-							case IClasspathContainer.K_APPLICATION:
-								kind = IRuntimeClasspathEntry.USER_CLASSES;
-								break;
-							case IClasspathContainer.K_SYSTEM:
-								kind = IRuntimeClasspathEntry.BOOTSTRAP_CLASSES;
-								break;
-							case IClasspathContainer.K_DEFAULT_SYSTEM:
-								kind = IRuntimeClasspathEntry.STANDARD_CLASSES;
-								break;
+				case IClasspathEntry.CPE_CONTAINER:
+					IClasspathContainer container = JavaCore.getClasspathContainer(entry.getPath(), proj);
+					int kind = 0;
+					switch (container.getKind()) {
+					case IClasspathContainer.K_APPLICATION:
+						kind = IRuntimeClasspathEntry.USER_CLASSES;
+						break;
+					case IClasspathContainer.K_SYSTEM:
+						kind = IRuntimeClasspathEntry.BOOTSTRAP_CLASSES;
+						break;
+					case IClasspathContainer.K_DEFAULT_SYSTEM:
+						kind = IRuntimeClasspathEntry.STANDARD_CLASSES;
+						break;
+					}
+					rte = JavaRuntime.newRuntimeContainerClasspathEntry(entry.getPath(), kind, proj);
+					break;
+				case IClasspathEntry.CPE_LIBRARY:
+					rte = JavaRuntime.newArchiveRuntimeClasspathEntry(entry.getPath());
+					rte.setSourceAttachmentPath(entry.getSourceAttachmentPath());
+					rte.setSourceAttachmentRootPath(entry.getSourceAttachmentRootPath());
+					break;
+				case IClasspathEntry.CPE_PROJECT:
+					String name = entry.getPath().segment(0);
+					IProject p = ResourcesPlugin.getWorkspace().getRoot().getProject(name);
+					if (p.exists()) {
+						IJavaProject jp = JavaCore.create(p);
+						if (jp.exists()) {
+							rte = JavaRuntime.newProjectRuntimeClasspathEntry(jp);
 						}
-						rte = JavaRuntime.newRuntimeContainerClasspathEntry(entry.getPath(), kind, proj);
-						break;
-					case IClasspathEntry.CPE_LIBRARY:
-						rte = JavaRuntime.newArchiveRuntimeClasspathEntry(entry.getPath());
-						rte.setSourceAttachmentPath(entry.getSourceAttachmentPath());
-						rte.setSourceAttachmentRootPath(entry.getSourceAttachmentRootPath());
-						break;
-					case IClasspathEntry.CPE_PROJECT:
-						String name = entry.getPath().segment(0);
-						IProject p = ResourcesPlugin.getWorkspace().getRoot().getProject(name);
-						if (p.exists()) {
-							IJavaProject jp = JavaCore.create(p);
-							if (jp.exists()) {
-								rte = JavaRuntime.newProjectRuntimeClasspathEntry(jp);
-							}
-						}
-						break;
-					case IClasspathEntry.CPE_VARIABLE:
-						rte = JavaRuntime.newVariableRuntimeClasspathEntry(entry.getPath());
-						break;
-					default:
-						break;
+					}
+					break;
+				case IClasspathEntry.CPE_VARIABLE:
+					rte = JavaRuntime.newVariableRuntimeClasspathEntry(entry.getPath());
+					break;
+				default:
+					break;
 				}
 				if (rte != null) {
 					if (!runtimeEntries.contains(rte)) {
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/AttachSourceAction.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/AttachSourceAction.java
index b602b0b..be9134f 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/AttachSourceAction.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/AttachSourceAction.java
@@ -49,8 +49,7 @@
 	public void run() {
 		IClasspathEntry classpathEntry = BuildPathDialogAccess.configureSourceAttachment(getShell(), fEntries[0].getClasspathEntry());
 		if (classpathEntry != null) {
-			for (int i = 0; i < fEntries.length; i++) {
-				IRuntimeClasspathEntry entry = fEntries[i];
+			for (IRuntimeClasspathEntry entry : fEntries) {
 				entry.setSourceAttachmentPath(classpathEntry.getSourceAttachmentPath());
 				entry.setSourceAttachmentRootPath(classpathEntry.getSourceAttachmentRootPath());
 				getViewer().refresh(entry);
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/BreakpointToggleAction.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/BreakpointToggleAction.java
index 615ee7b..4afc2e4 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/BreakpointToggleAction.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/BreakpointToggleAction.java
@@ -177,8 +177,7 @@
 			IStructuredSelection selection= getStructuredSelection();
 			if (selection != null) {
 				IBreakpoint selectedBreakpoint= (IBreakpoint)selection.getFirstElement();
-				for (int i = 0; i < breakpoints.length; i++) {
-					IBreakpoint breakpoint = breakpoints[i];
+				for (IBreakpoint breakpoint : breakpoints) {
 					if (selectedBreakpoint.equals(breakpoint)) {
 						selectionChanged(getAction(), selection);
 						return;
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/ControlAccessibleListener.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/ControlAccessibleListener.java
index 448dfcc..9844f68 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/ControlAccessibleListener.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/ControlAccessibleListener.java
@@ -31,10 +31,9 @@
 
 	public static void addListener(Control comp, String name) {
 		//strip mnemonic
-		String[] strs = name.split("&"); //$NON-NLS-1$
 		StringBuilder stripped = new StringBuilder();
-		for (int i = 0; i < strs.length; i++) {
-			stripped.append(strs[i]);
+		for (String str : name.split("&")) { //$NON-NLS-1$
+			stripped.append(str);
 		}
 		comp.getAccessible().addAccessibleListener(new ControlAccessibleListener(stripped.toString()));
 	}
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/EditClasspathEntryAction.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/EditClasspathEntryAction.java
index 8bd13d4..73de762 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/EditClasspathEntryAction.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/EditClasspathEntryAction.java
@@ -74,8 +74,8 @@
 					}
 				}
 				setEntries(list);
-				for (int i = 0; i < wrappers.length; i++) {
-					getViewer().refresh(wrappers[i]);
+				for (IRuntimeClasspathEntry wrapper : wrappers) {
+					getViewer().refresh(wrapper);
 				}
 			}
 		}
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/EvaluateAction.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/EvaluateAction.java
index 7b5dfd1..60641c0 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/EvaluateAction.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/EvaluateAction.java
@@ -289,6 +289,9 @@
         			}
         		}
         	}
+			String error = NLS.bind(ActionMessages.EvaluateAction__evaluation_failed__Reason, message);
+			Status status = new Status(IStatus.WARNING, JDIDebugUIPlugin.getUniqueIdentifier(), error, e);
+			JDIDebugUIPlugin.log(status);
             reportError(message);
         } catch (InterruptedException e) {
         }
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/breakpoints/AbstractDetailPane.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/breakpoints/AbstractDetailPane.java
index adde917..9292b24 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/breakpoints/AbstractDetailPane.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/breakpoints/AbstractDetailPane.java
@@ -147,8 +147,8 @@
 	 * @param autosave the auto-save properties
 	 */
 	protected void addAutosaveProperties(int[] autosave) {
-		for (int i = 0; i < autosave.length; i++) {
-			fAutoSaveProperties.add(new Integer(autosave[i]));
+		for (int element : autosave) {
+			fAutoSaveProperties.add(new Integer(element));
 		}
 	}
 
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/breakpoints/AddClassPrepareBreakpointAction.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/breakpoints/AddClassPrepareBreakpointAction.java
index f6359b7..94e5110 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/breakpoints/AddClassPrepareBreakpointAction.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/breakpoints/AddClassPrepareBreakpointAction.java
@@ -59,52 +59,51 @@
      */
     private void createBreakpoints(final Object[] selection) {
     	try {
-	        for (int i = 0; i < selection.length; i++) {
-	            final IType type = (IType) selection[i];
-	            final IResource resource = BreakpointUtils.getBreakpointResource(type);
-	            final Map<String, Object> map = new HashMap<>(10);
-	            BreakpointUtils.addJavaBreakpointAttributes(map, type);
-	            int kind = IJavaClassPrepareBreakpoint.TYPE_CLASS;
-	            if (!type.isClass()) {
-	                kind = IJavaClassPrepareBreakpoint.TYPE_INTERFACE;
-	            }
-	            IBreakpoint[] breakpoints = DebugPlugin.getDefault().getBreakpointManager().getBreakpoints(JDIDebugModel.getPluginIdentifier());
-	            boolean exists = false;
-	            for (int j = 0; j < breakpoints.length; j++) {
-	                IJavaBreakpoint breakpoint = (IJavaBreakpoint) breakpoints[j];
-	                if (breakpoint instanceof IJavaClassPrepareBreakpoint) {
+			for (Object a : selection) {
+				final IType type = (IType) a;
+				final IResource resource = BreakpointUtils.getBreakpointResource(type);
+				final Map<String, Object> map = new HashMap<>(10);
+				BreakpointUtils.addJavaBreakpointAttributes(map, type);
+				int kind = IJavaClassPrepareBreakpoint.TYPE_CLASS;
+				if (!type.isClass()) {
+					kind = IJavaClassPrepareBreakpoint.TYPE_INTERFACE;
+				}
+				boolean exists = false;
+				for (IBreakpoint b : DebugPlugin.getDefault().getBreakpointManager().getBreakpoints(JDIDebugModel.getPluginIdentifier())) {
+					IJavaBreakpoint breakpoint = (IJavaBreakpoint) b;
+					if (breakpoint instanceof IJavaClassPrepareBreakpoint) {
 						String typeName = breakpoint.getTypeName();
 						if (typeName != null && typeName.equals(type.getFullyQualifiedName())) {
-	                        exists = true;
-	                        break;
-	                    }
-	                }
-	            }
-	            if (!exists) {
-	                ISourceRange range = type.getNameRange();
-	                int start = -1;
-	                int end = -1;
-	                if (range != null) {
-	                    start = range.getOffset();
-	                    end = start + range.getLength();
-	                }
-	                final int finalKind = kind;
-	                final int finalStart = start;
-	                final int finalEnd = end;
-	                new Job(BreakpointMessages.AddClassPrepareBreakpointAction_2) {
-	                    @Override
+							exists = true;
+							break;
+						}
+					}
+				}
+				if (!exists) {
+					ISourceRange range = type.getNameRange();
+					int start = -1;
+					int end = -1;
+					if (range != null) {
+						start = range.getOffset();
+						end = start + range.getLength();
+					}
+					final int finalKind = kind;
+					final int finalStart = start;
+					final int finalEnd = end;
+					new Job(BreakpointMessages.AddClassPrepareBreakpointAction_2) {
+						@Override
 						protected IStatus run(IProgressMonitor monitor) {
-	                        try {
-	                            JDIDebugModel.createClassPrepareBreakpoint(resource, type.getFullyQualifiedName(), finalKind, finalStart, finalEnd, true, map);
-	                            return Status.OK_STATUS;
-	                        } catch (CoreException e) {
-	                            return e.getStatus();
-	                        }
-	                    }
+							try {
+								JDIDebugModel.createClassPrepareBreakpoint(resource, type.getFullyQualifiedName(), finalKind, finalStart, finalEnd, true, map);
+								return Status.OK_STATUS;
+							} catch (CoreException e) {
+								return e.getStatus();
+							}
+						}
 
-	                }.schedule();
-	            }
-	        }
+					}.schedule();
+				}
+			}
 	    } catch(CoreException e) {
 	    	JDIDebugUIPlugin.statusDialog(e.getStatus());
 	    }
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/breakpoints/AddExceptionAction.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/breakpoints/AddExceptionAction.java
index 3a0bea7..1b148a2 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/breakpoints/AddExceptionAction.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/breakpoints/AddExceptionAction.java
@@ -129,9 +129,9 @@
 						JDIDebugModel.getPluginIdentifier());
 		IJavaExceptionBreakpoint breakpoint = null;
 		boolean exists = false;
-		for (int j = 0; j < breakpoints.length; j++) {
-			if (breakpoints[j] instanceof IJavaExceptionBreakpoint) {
-				breakpoint = (IJavaExceptionBreakpoint) breakpoints[j];
+		for (IBreakpoint b : breakpoints) {
+			if (b instanceof IJavaExceptionBreakpoint) {
+				breakpoint = (IJavaExceptionBreakpoint) b;
 				String typeName = breakpoint.getTypeName();
 				if (typeName != null && typeName.equals(type.getFullyQualifiedName())) {
 					exists = true;
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/breakpoints/CompositeBreakpointEditor.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/breakpoints/CompositeBreakpointEditor.java
index 94ded24..25e78c8 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/breakpoints/CompositeBreakpointEditor.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/breakpoints/CompositeBreakpointEditor.java
@@ -40,8 +40,8 @@
 	 */
 	@Override
 	public void addPropertyListener(IPropertyListener listener) {
-		for (int i = 0; i < fEditors.length; i++) {
-			fEditors[i].addPropertyListener(listener);
+		for (AbstractJavaBreakpointEditor editor : fEditors) {
+			editor.addPropertyListener(listener);
 		}
 	}
 
@@ -50,8 +50,8 @@
 	 */
 	@Override
 	public void removePropertyListener(IPropertyListener listener) {
-		for (int i = 0; i < fEditors.length; i++) {
-			fEditors[i].removePropertyListener(listener);
+		for (AbstractJavaBreakpointEditor editor : fEditors) {
+			editor.removePropertyListener(listener);
 		}
 	}
 
@@ -60,8 +60,8 @@
 	 */
 	@Override
 	protected void dispose() {
-		for (int i = 0; i < fEditors.length; i++) {
-			fEditors[i].dispose();
+		for (AbstractJavaBreakpointEditor editor : fEditors) {
+			editor.dispose();
 		}
 		fEditors = null;
 	}
@@ -72,8 +72,8 @@
 	@Override
 	public Control createControl(Composite parent) {
 		Composite comp = SWTFactory.createComposite(parent, parent.getFont(), 1, 1, GridData.FILL_BOTH, 0, 0);
-		for (int i = 0; i < fEditors.length; i++) {
-			fEditors[i].createControl(comp);
+		for (AbstractJavaBreakpointEditor editor : fEditors) {
+			editor.createControl(comp);
 		}
 		return comp;
 	}
@@ -91,8 +91,8 @@
 	 */
 	@Override
 	public void doSave() throws CoreException {
-		for (int i = 0; i < fEditors.length; i++) {
-			fEditors[i].doSave();
+		for (AbstractJavaBreakpointEditor editor : fEditors) {
+			editor.doSave();
 		}
 	}
 
@@ -101,8 +101,8 @@
 	 */
 	@Override
 	public boolean isDirty() {
-		for (int i = 0; i < fEditors.length; i++) {
-			if (fEditors[i].isDirty()) {
+		for (AbstractJavaBreakpointEditor editor : fEditors) {
+			if (editor.isDirty()) {
 				return true;
 			}
 		}
@@ -114,8 +114,8 @@
 	 */
 	@Override
 	public IStatus getStatus() {
-		for (int i = 0; i < fEditors.length; i++) {
-			IStatus status = fEditors[i].getStatus();
+		for (AbstractJavaBreakpointEditor editor : fEditors) {
+			IStatus status = editor.getStatus();
 			if (!status.isOK()) {
 				return status;
 			}
@@ -136,8 +136,8 @@
 	 */
 	@Override
 	public void setInput(Object breakpoint) throws CoreException {
-		for (int i = 0; i < fEditors.length; i++) {
-			fEditors[i].setInput(breakpoint);
+		for (AbstractJavaBreakpointEditor editor : fEditors) {
+			editor.setInput(breakpoint);
 		}
 	}
 
@@ -147,8 +147,8 @@
 	@Override
 	public void setMnemonics(boolean mnemonics) {
 		super.setMnemonics(mnemonics);
-		for (int i = 0; i < fEditors.length; i++) {
-			fEditors[i].setMnemonics(mnemonics);
+		for (AbstractJavaBreakpointEditor editor : fEditors) {
+			editor.setMnemonics(mnemonics);
 		}
 	}
 
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/classpath/ClasspathContentProvider.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/classpath/ClasspathContentProvider.java
index b189413..321b765 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/classpath/ClasspathContentProvider.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/classpath/ClasspathContentProvider.java
@@ -170,9 +170,7 @@
 		}
 		if (parentElement == null) {
 			List<Object> all= new ArrayList<>();
-			Object[] topEntries= model.getEntries();
-			for (int i = 0; i < topEntries.length; i++) {
-				Object object = topEntries[i];
+			for (Object object : model.getEntries()) {
 				if (object instanceof ClasspathEntry) {
 					all.add(object);
 				} else if (object instanceof ClasspathGroup) {
@@ -219,16 +217,14 @@
 
 	public void setEntries(IRuntimeClasspathEntry[] entries) {
 		model.removeAll();
-		IRuntimeClasspathEntry entry;
-		for (int i = 0; i < entries.length; i++) {
-			entry= entries[i];
+		for (IRuntimeClasspathEntry entry : entries) {
 			switch (entry.getClasspathProperty()) {
-				case IRuntimeClasspathEntry.USER_CLASSES:
-					model.addEntry(ClasspathModel.USER, entry);
-					break;
-				default:
-					model.addEntry(ClasspathModel.BOOTSTRAP, entry);
-					break;
+			case IRuntimeClasspathEntry.USER_CLASSES:
+				model.addEntry(ClasspathModel.USER, entry);
+				break;
+			default:
+				model.addEntry(ClasspathModel.BOOTSTRAP, entry);
+				break;
 			}
 		}
 		refresh();
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/classpath/ClasspathModel.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/classpath/ClasspathModel.java
index ee97b2f..09ec096 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/classpath/ClasspathModel.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/classpath/ClasspathModel.java
@@ -145,8 +145,7 @@
 
 	public void removeAll(Object[] entries) {
 
-		for (int i = 0; i < entries.length; i++) {
-			Object object = entries[i];
+		for (Object object : entries) {
 			if (object instanceof ClasspathEntry) {
 				IClasspathEntry entryParent= ((ClasspathEntry)object).getParent();
 				if (entryParent instanceof ClasspathGroup) {
@@ -165,8 +164,8 @@
 			getBootstrapEntry();
 		}
 		bootstrapEntries.removeAll();
-		for (int i = 0; i < entries.length; i++) {
-			bootstrapEntries.addEntry(new ClasspathEntry(entries[i], bootstrapEntries), null);
+		for (IRuntimeClasspathEntry entry : entries) {
+			bootstrapEntries.addEntry(new ClasspathEntry(entry, bootstrapEntries), null);
 		}
 	}
 
@@ -174,8 +173,8 @@
 
 		ClasspathGroup group= new ClasspathGroup(name, entryParent, canBeRemoved);
 
-		for (int i = 0; i < entries.length; i++) {
-			group.addEntry(new ClasspathEntry(entries[i], group), null);
+		for (IRuntimeClasspathEntry entry : entries) {
+			group.addEntry(new ClasspathEntry(entry, group), null);
 		}
 
 		if (addEntry) {
@@ -189,8 +188,8 @@
 			getUserEntry();
 		}
 		userEntries.removeAll();
-		for (int i = 0; i < entries.length; i++) {
-			userEntries.addEntry(new ClasspathEntry(entries[i], userEntries), null);
+		for (IRuntimeClasspathEntry entry : entries) {
+			userEntries.addEntry(new ClasspathEntry(entry, userEntries), null);
 		}
 	}
 
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/classpath/DependenciesContentProvider.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/classpath/DependenciesContentProvider.java
index a50f491..aceb4d9 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/classpath/DependenciesContentProvider.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/classpath/DependenciesContentProvider.java
@@ -44,16 +44,14 @@
 	@Override
 	public void setEntries(IRuntimeClasspathEntry[] entries) {
 		model.removeAll();
-		IRuntimeClasspathEntry entry;
-		for (int i = 0; i < entries.length; i++) {
-			entry= entries[i];
+		for (IRuntimeClasspathEntry entry : entries) {
 			switch (entry.getClasspathProperty()) {
-				case IRuntimeClasspathEntry.MODULE_PATH:
-					model.addEntry(DependencyModel.MODULE_PATH, entry);
-					break;
-				default:
-					model.addEntry(DependencyModel.CLASS_PATH, entry);
-					break;
+			case IRuntimeClasspathEntry.MODULE_PATH:
+				model.addEntry(DependencyModel.MODULE_PATH, entry);
+				break;
+			default:
+				model.addEntry(DependencyModel.CLASS_PATH, entry);
+				break;
 			}
 		}
 		refresh();
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/EEVMPage.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/EEVMPage.java
index c5c41b7..614eb2f 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/EEVMPage.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/EEVMPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2018 IBM Corporation and others.
+ * Copyright (c) 2007, 2020 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -132,7 +132,7 @@
 			@Override
 			public void modifyText(ModifyEvent e) {
 				if (!fIgnoreCallbacks) {
-					validateVMName();
+					validateVMName(false);
 				}
 			}
 		});
@@ -228,8 +228,8 @@
 	/**
 	 * Validates the entered name of the VM
 	 */
-	private void validateVMName() {
-		nameChanged(fVMName.getText());
+	private void validateVMName(boolean init) {
+		nameChanged(fVMName.getText(), init);
 	}
 
 	/* (non-Javadoc)
@@ -309,8 +309,15 @@
 		try {
 			fIgnoreCallbacks = true;
 			fLibraryBlock.setSelection(fVM);
-			fVMName.setText(fVM.getName());
-			fVMName.setSelection(fVM.getName().length());
+			if (fVMName.getText() != null && fVMName.getText().length() == 0) {
+				if (fVM.getName().length() != 0) {
+					fVMName.setText(fVM.getName());
+					fVMName.setSelection(fVM.getName().length());
+				}
+			} else {
+				fVMName.setText(fVM.getName());
+				fVMName.setSelection(fVM.getName().length());
+			}
 			String eePath = fVM.getAttribute(EEVMInstall.ATTR_DEFINITION_FILE);
 			if (eePath != null) {
 				fEEFile.setText(eePath);
@@ -320,7 +327,7 @@
 			if (vmArgs != null) {
 				fVMArgs.setText(vmArgs);
 			}
-			validateVMName();
+			validateVMName(true);
 		} finally {
 			fIgnoreCallbacks = false;
 		}
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/JREsPreferencePage.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/JREsPreferencePage.java
index 0a6ba6c..0dd221c 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/JREsPreferencePage.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/JREsPreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2018 IBM Corporation and others.
+ * Copyright (c) 2000, 2020 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -338,7 +338,9 @@
 	@Override
 	public void dispose() {
 		super.dispose();
-		fJREBlock.dispose();
+		if (fJREBlock != null) {
+			fJREBlock.dispose();
+		}
 	}
 
 	/*
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/StandardVMPage.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/StandardVMPage.java
index 8af7ce7..058a897 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/StandardVMPage.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/StandardVMPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2018 IBM Corporation and others.
+ * Copyright (c) 2007, 2020 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -130,13 +130,13 @@
 		fVMName.addModifyListener(new ModifyListener() {
 			@Override
 			public void modifyText(ModifyEvent e) {
-				validateVMName();
+				validateVMName(false);
 			}
 		});
 		fJRERoot.addModifyListener(new ModifyListener() {
 			@Override
 			public void modifyText(ModifyEvent e) {
-				validateJRELocation();
+				validateJRELocation(false);
 			}
 		});
 		folders.addSelectionListener(new SelectionListener() {
@@ -178,12 +178,17 @@
 
 	/**
 	 * Validates the JRE location
+	 * @param init <code>true</code> if page is getting initialized else <code>false</code>
 	 * @return the status after validating the JRE location
 	 */
-	private void validateJRELocation() {
+	private void validateJRELocation(boolean init) {
 		String locationName = fJRERoot.getText();
 		IStatus s = null;
 		File file = null;
+		if (locationName.length() == 0 && init) {
+			return;
+		}
+
 		if (locationName.length() == 0) {
 			s = new StatusInfo(IStatus.WARNING, JREMessages.addVMDialog_enterLocation);
 		}
@@ -289,10 +294,11 @@
 
 	/**
 	 * Validates the entered name of the VM
+	 * @param init <code>true</code> if page is getting initialized else <code>false</code>
 	 * @return the status of the name validation
 	 */
-	private void validateVMName() {
-		nameChanged(fVMName.getText());
+	private void validateVMName(boolean init) {
+		nameChanged(fVMName.getText(), init);
 	}
 
 	/* (non-Javadoc)
@@ -371,7 +377,13 @@
 	 */
 	private void initializeFields() {
 		fLibraryBlock.setSelection(fVM);
-		fVMName.setText(fVM.getName());
+		if (fVMName.getText() != null && fVMName.getText().length() == 0) {
+			if (fVM.getName().length() != 0) {
+				fVMName.setText(fVM.getName());
+			}
+		} else {
+			fVMName.setText(fVM.getName());
+		}
 		File installLocation = fVM.getInstallLocation();
 		if (installLocation != null) {
 			fJRERoot.setText(installLocation.getAbsolutePath());
@@ -380,8 +392,8 @@
 		if (vmArgs != null) {
 			fVMArgs.setText(vmArgs);
 		}
-		validateVMName();
-		validateJRELocation();
+		validateVMName(true);
+		validateJRELocation(true);
 	}
 
 	/**
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/AppletLaunchConfigurationUtils.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/AppletLaunchConfigurationUtils.java
index bea23dc..aa81d95 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/AppletLaunchConfigurationUtils.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/AppletLaunchConfigurationUtils.java
@@ -145,10 +145,9 @@
 		}
 		if (element instanceof ICompilationUnit) {
 			ICompilationUnit cu= (ICompilationUnit)element;
-			IType[] types= cu.getAllTypes();
-			for (int i= 0; i < types.length; i++) {
-				if (isSubclassOfApplet(monitor, types[i])) {
-					result.add(types[i]);
+			for (IType type : cu.getAllTypes()) {
+				if (isSubclassOfApplet(monitor, type)) {
+					result.add(type);
 				}
 			}
 		} else if (element instanceof IOrdinaryClassFile) {
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/ArchiveFileFilter.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/ArchiveFileFilter.java
index da61bf0..57a7afb 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/ArchiveFileFilter.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/ArchiveFileFilter.java
@@ -60,10 +60,9 @@
 			return isArchivePath(((IFile)element).getFullPath());
 		} else if (element instanceof IContainer) { // IProject, IFolder
 			try {
-				IResource[] resources= ((IContainer)element).members();
-				for (int i= 0; i < resources.length; i++) {
+				for (IResource resource : ((IContainer) element).members()) {
 					// recursive! Only show containers that contain an archive
-					if (select(viewer, parent, resources[i])) {
+					if (select(viewer, parent, resource)) {
 						return true;
 					}
 				}
@@ -77,8 +76,8 @@
 	public static boolean isArchivePath(IPath path) {
 		String ext= path.getFileExtension();
 		if (ext != null && ext.length() != 0) {
-			for (int i= 0; i < fgArchiveExtensions.length; i++) {
-				if (ext.equalsIgnoreCase(fgArchiveExtensions[i])) {
+			for (String archiveExtension : fgArchiveExtensions) {
+				if (ext.equalsIgnoreCase(archiveExtension)) {
 					return true;
 				}
 			}
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/DebugTypeSelectionDialog.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/DebugTypeSelectionDialog.java
index 11a002a..224cab5 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/DebugTypeSelectionDialog.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/DebugTypeSelectionDialog.java
@@ -288,9 +288,9 @@
 	@Override
 	protected void fillContentProvider(AbstractContentProvider contentProvider, ItemsFilter itemsFilter, IProgressMonitor progressMonitor) throws CoreException {
 		if(fTypes != null && fTypes.length > 0) {
-			for(int i = 0; i < fTypes.length; i++) {
-				if(itemsFilter.isConsistentItem(fTypes[i])) {
-					contentProvider.add(fTypes[i], itemsFilter);
+			for (IType type : fTypes) {
+				if (itemsFilter.isConsistentItem(type)) {
+					contentProvider.add(type, itemsFilter);
 				}
 			}
 		}
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/propertypages/ExceptionFilterEditor.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/propertypages/ExceptionFilterEditor.java
index 0849d31..0aad2b2 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/propertypages/ExceptionFilterEditor.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/propertypages/ExceptionFilterEditor.java
@@ -183,8 +183,8 @@
 		Object[] filters = fFilterContentProvider.getElements(null);
 		List<String> inclusionFilters = new ArrayList<>(filters.length);
 		List<String> exclusionFilters = new ArrayList<>(filters.length);
-		for (int i = 0; i < filters.length; i++) {
-			Filter filter = (Filter) filters[i];
+		for (Object f : filters) {
+			Filter filter = (Filter) f;
 			String name = filter.getName();
 			if (name.equals(DEFAULT_PACKAGE)) {
 				name = ""; //$NON-NLS-1$
@@ -350,9 +350,8 @@
 			return;
 			// otherwise, commit the new value if not a duplicate
 		} else {
-			Object[] filters = fFilterContentProvider.getElements(null);
-			for (int i = 0; i < filters.length; i++) {
-				Filter filter = (Filter) filters[i];
+			for (Object f : fFilterContentProvider.getElements(null)) {
+				Filter filter = (Filter) f;
 				if (filter.getName().equals(trimmedValue)) {
 					removeNewFilter();
 					cleanupEditor();
@@ -446,8 +445,8 @@
 		}
 		Object[] packages = dialog.getResult();
 		if (packages != null) {
-			for (int i = 0; i < packages.length; i++) {
-				IJavaElement pkg = (IJavaElement) packages[i];
+			for (Object p : packages) {
+				IJavaElement pkg = (IJavaElement) p;
 				String filter = pkg.getElementName();
 				if (filter.length() < 1) {
 					filter = DEFAULT_PACKAGE;
@@ -479,10 +478,9 @@
 		}
 
 		Object[] types = dialog.getResult();
-		IType type;
 		if (types != null) {
-			for (int i = 0; i < types.length; i++) {
-				type = (IType) types[i];
+			for (Object t : types) {
+				IType type = (IType) t;
 				Filter f = fFilterContentProvider.addFilter(type.getFullyQualifiedName());
 				fFilterContentProvider.checkFilter(f, true);
 			}
@@ -522,8 +520,7 @@
 		}
 
 		protected void populateFilters(String[] filters, boolean checked) {
-			for (int i = 0; i < filters.length; i++) {
-				String name = filters[i];
+			for (String name : filters) {
 				if (name.length() == 0) {
 					name = DEFAULT_PACKAGE;
 				}
@@ -542,8 +539,8 @@
 		}
 
 		public void removeFilters(Object[] filters) {
-			for (int i = 0; i < filters.length; i++) {
-				Filter filter = (Filter) filters[i];
+			for (Object f : filters) {
+				Filter filter = (Filter) f;
 				fFilters.remove(filter);
 			}
 			fViewer.remove(filters);
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/propertypages/InstanceFilterEditor.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/propertypages/InstanceFilterEditor.java
index 60d8b90..8d504be 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/propertypages/InstanceFilterEditor.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/propertypages/InstanceFilterEditor.java
@@ -93,9 +93,8 @@
 	 */
 	protected void setInitialCheckedState() {
 		try {
-			IJavaObject[] objects = fBreakpoint.getInstanceFilters();
-			for (int i= 0; i < objects.length; i++) {
-				fCheckHandler.checkObject(objects[i], true);
+			for (IJavaObject object : fBreakpoint.getInstanceFilters()) {
+				fCheckHandler.checkObject(object, true);
 			}
 		} catch (CoreException e) {
 			JDIDebugUIPlugin.log(e);
@@ -104,10 +103,9 @@
 
 	protected void doStore() {
 		try {
-			IJavaObject[] objects = fBreakpoint.getInstanceFilters();
-			for (int i= 0; i < objects.length; i++) {
-				if (!fInstanceViewer.getChecked(objects[i])) {
-					fBreakpoint.removeInstanceFilter(objects[i]);
+			for (IJavaObject object : fBreakpoint.getInstanceFilters()) {
+				if (!fInstanceViewer.getChecked(object)) {
+					fBreakpoint.removeInstanceFilter(object);
 				}
 			}
 		}  catch (CoreException e) {
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/propertypages/ThreadFilterEditor.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/propertypages/ThreadFilterEditor.java
index a983da5..395406c 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/propertypages/ThreadFilterEditor.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/propertypages/ThreadFilterEditor.java
@@ -79,18 +79,15 @@
 	}
 
 	protected void doStore() {
-		IDebugTarget[] targets= getDebugTargets();
 		IJavaDebugTarget target;
-		IThread[] threads;
 		IJavaThread thread;
-		for (int i= 0, numTargets= targets.length; i < numTargets; i++) {
-			target = targets[i].getAdapter(IJavaDebugTarget.class);
+		for (IDebugTarget debugTarget : getDebugTargets()) {
+			target = debugTarget.getAdapter(IJavaDebugTarget.class);
 			if (target != null) {
 				try {
 					if (fThreadViewer.getChecked(target)) {
-						threads= target.getThreads();
-						for (int j=0, numThreads= threads.length; j < numThreads; j++) {
-							thread= (IJavaThread)threads[j];
+						for (IThread targetThread : target.getThreads()) {
+							thread= (IJavaThread)targetThread;
 							if (fThreadViewer.getChecked(thread)) {
 								// thread selected for filtering
 								fPage.getBreakpoint().setThreadFilter(thread);
@@ -116,9 +113,8 @@
 	 */
 	protected void setInitialCheckedState() {
 		try {
-			IDebugTarget[] targets= getDebugTargets();
-			for (int i= 0, numTargets= targets.length; i < numTargets; i++) {
-				IJavaDebugTarget target = targets[i].getAdapter(IJavaDebugTarget.class);
+			for (IDebugTarget debugTarget : getDebugTargets()) {
+				IJavaDebugTarget target = debugTarget.getAdapter(IJavaDebugTarget.class);
 				if (target != null) {
 					IJavaThread filteredThread= fPage.getBreakpoint().getThreadFilter(target);
 					if (filteredThread != null) {
@@ -176,8 +172,8 @@
 				IThread thread;
 				boolean checkedThread= false;
 				// Try to check the "main" thread by default
-				for (int i= 0, numThreads= threads.length; i < numThreads; i++) {
-					thread= threads[i];
+				for (IThread targetThread : threads) {
+					thread= targetThread;
 					String name= null;
 					try {
 						name= thread.getName();
@@ -191,8 +187,8 @@
 				// If the main thread couldn't be checked, check the first
 				// available thread
 				if (!checkedThread) {
-					for (int i= 0, numThreads= threads.length; i < numThreads; i++) {
-						if (fThreadViewer.setChecked(threads[i], true)) {
+					for (IThread targetThread : threads) {
+						if (fThreadViewer.setChecked(targetThread, true)) {
 							break;
 						}
 					}
@@ -205,8 +201,8 @@
 					JDIDebugUIPlugin.log(exception);
 					return;
 				}
-				for (int i= 0, numThreads= threads.length; i < numThreads; i++) {
-					fThreadViewer.setChecked(threads[i], false);
+				for (IThread thread : threads) {
+					fThreadViewer.setChecked(thread, false);
 				}
 			}
 		}
@@ -235,10 +231,10 @@
 					JDIDebugUIPlugin.log(exception);
 					return;
 				}
-				for (int i= 0, numThreads= threads.length; i < numThreads; i++) {
-					if (threads[i] != thread) {
+				for (IThread targetThread : threads) {
+					if (targetThread != thread) {
 						// Uncheck all threads other than the selected thread
-						fThreadViewer.setChecked(threads[i], false);
+						fThreadViewer.setChecked(targetThread, false);
 					}
 				}
 			} else {
@@ -257,8 +253,8 @@
 			IDebugTarget target;
 			IThread[] threads;
 			boolean checkedThread;
-			for (int i= 0, numTargets= targets.length; i < numTargets; i++) {
-				target= targets[i];
+			for (IDebugTarget debugTarget : targets) {
+				target= debugTarget;
 				if (!fThreadViewer.getChecked(target)) {
 					continue;
 				}
@@ -269,8 +265,8 @@
 					continue;
 				}
 				checkedThread= false;
-				for (int j= 0, numThreads= threads.length; j < numThreads; j++) {
-					if (fThreadViewer.getChecked(threads[j])) {
+				for (IThread thread : threads) {
+					if (fThreadViewer.getChecked(thread)) {
 						checkedThread= true;
 						break;
 					}
@@ -306,10 +302,10 @@
 				ILaunch[] launches= ((ILaunchManager) parent).getLaunches();
 				IDebugTarget[] targets;
 				IJavaDebugTarget target;
-				for (int i= 0, numLaunches= launches.length; i < numLaunches; i++) {
-					targets= launches[i].getDebugTargets();
-					for (int j= 0, numTargets= targets.length; j < numTargets; j++) {
-						target= targets[j].getAdapter(IJavaDebugTarget.class);
+				for (ILaunch launch : launches) {
+					targets= launch.getDebugTargets();
+					for (IDebugTarget debugTarget : targets) {
+						target= debugTarget.getAdapter(IJavaDebugTarget.class);
 						if (target != null && !target.isDisconnected() && !target.isTerminated()) {
 							children.add(target);
 						}
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/search/LaunchConfigurationQueryParticipant.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/search/LaunchConfigurationQueryParticipant.java
index 19f9134..c6fe60f 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/search/LaunchConfigurationQueryParticipant.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/search/LaunchConfigurationQueryParticipant.java
@@ -243,8 +243,8 @@
 		}
 		IResource[] resources = config.getMappedResources();
 		if (resources != null) {
-			for (int i = 0; i < resources.length; i++) {
-				if (scope.encloses(resources[i].getFullPath().toString())) {
+			for (IResource resource : resources) {
+				if (scope.encloses(resource.getFullPath().toString())) {
 					return true;
 				}
 			}
@@ -264,13 +264,13 @@
 		ILaunchConfiguration[] configs = DebugPlugin.getDefault().getLaunchManager().getLaunchConfigurations();
 		monitor.beginTask("Searching for launch configurations", configs.length); //$NON-NLS-1$
 		try {
-			for (int i = 0; i < configs.length; ++i) {
+			for (ILaunchConfiguration config : configs) {
 				if (monitor.isCanceled()) {
 					return;
 				}
 				monitor.worked(1);
-				if (matches(scope, configs[i], pattern)) {
-					requestor.reportMatch(new Match(configs[i], 0, 0));
+				if (matches(scope, config, pattern)) {
+					requestor.reportMatch(new Match(config, 0, 0));
 				}
 			}
 		} finally {
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/snippeteditor/JavaSnippetEditor.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/snippeteditor/JavaSnippetEditor.java
index 507281d..9ed9c13 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/snippeteditor/JavaSnippetEditor.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/snippeteditor/JavaSnippetEditor.java
@@ -506,11 +506,9 @@
 		if (fVM != null) {
 			DebugPlugin.getDefault().addDebugEventFilter(this);
 			try {
-				IThread[] threads= fVM.getThreads();
-				for (int i = 0; i < threads.length; i++) {
-					IThread iThread = threads[i];
-					if (iThread.isSuspended()) {
-						iThread.resume();
+				for (IThread thread : fVM.getThreads()) {
+					if (thread.isSuspended()) {
+						thread.resume();
 					}
 				}
 			} catch (DebugException de) {
@@ -630,10 +628,8 @@
 			public void run() {
 				Shell shell= getShell();
 				if (fSnippetStateListeners != null && shell != null && !shell.isDisposed()) {
-					List<ISnippetStateChangedListener> v = new ArrayList<>(fSnippetStateListeners);
-					for (int i= 0; i < v.size(); i++) {
-						ISnippetStateChangedListener l= v.get(i);
-						l.snippetStateChanged(JavaSnippetEditor.this);
+					for (ISnippetStateChangedListener listener : new ArrayList<>(fSnippetStateListeners)) {
+						listener.snippetStateChanged(JavaSnippetEditor.this);
 					}
 				}
 			}
@@ -844,8 +840,8 @@
 		String delimiter = document.getLegalLineDelimiters()[0];
 
 		final StringBuilder errorString = new StringBuilder();
-		for (int i = 0; i < errors.length; i++) {
-			errorString.append(errors[i] + delimiter);
+		for (String error : errors) {
+			errorString.append(error + delimiter);
 		}
 
 		Runnable r = new Runnable() {
@@ -1083,8 +1079,7 @@
 	 */
 	@Override
 	public DebugEvent[] filterDebugEvents(DebugEvent[] events) {
-		for (int i = 0; i < events.length; i++) {
-			DebugEvent e = events[i];
+		for (DebugEvent e : events) {
 			Object source = e.getSource();
 			if (source instanceof IDebugElement) {
 				IDebugElement de = (IDebugElement)source;
@@ -1117,19 +1112,18 @@
 								if (e.getDetail() == DebugEvent.STEP_END && (lineNumber == 28)
 									&& f.getDeclaringTypeName().equals("org.eclipse.jdt.internal.debug.ui.snippeteditor.ScrapbookMain1") //$NON-NLS-1$
 									&& jt.getDebugTarget() == fVM) {
-								    // restore step filters
-								    target.setStepFiltersEnabled(fStepFiltersSetting);
+									// restore step filters
+									target.setStepFiltersEnabled(fStepFiltersSetting);
 									setThread(jt);
 									return null;
 								} else if (e.getDetail() == DebugEvent.BREAKPOINT &&  bps.length > 0 && bps[0].equals(ScrapbookLauncher.getDefault().getMagicBreakpoint(jt.getDebugTarget()))) {
 									// locate the 'eval' method and step over
-									IStackFrame[] frames = jt.getStackFrames();
-									for (int j = 0; j < frames.length; j++) {
-										IJavaStackFrame frame = (IJavaStackFrame)frames[j];
+									for (IStackFrame stackframe :  jt.getStackFrames()) {
+										IJavaStackFrame frame = (IJavaStackFrame) stackframe;
 										if (frame.getReceivingTypeName().equals("org.eclipse.jdt.internal.debug.ui.snippeteditor.ScrapbookMain1") && frame.getName().equals("eval")) { //$NON-NLS-1$ //$NON-NLS-2$
-										    // ignore step filters for this step
-										    fStepFiltersSetting = target.isStepFiltersEnabled();
-										    target.setStepFiltersEnabled(false);
+											// ignore step filters for this step
+											fStepFiltersSetting = target.isStepFiltersEnabled();
+											target.setStepFiltersEnabled(false);
 											frame.stepOver();
 											return null;
 										}
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/snippeteditor/ScrapbookLauncher.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/snippeteditor/ScrapbookLauncher.java
index 0eea33f..3ebf6e3 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/snippeteditor/ScrapbookLauncher.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/snippeteditor/ScrapbookLauncher.java
@@ -146,10 +146,9 @@
 		cp.add(supportEntry);
 		// get bootpath entries
 		try {
-			IRuntimeClasspathEntry[] entries = JavaRuntime.computeUnresolvedRuntimeClasspath(javaProject);
-			for (int i = 0; i < entries.length; i++) {
-				if (entries[i].getClasspathProperty() != IRuntimeClasspathEntry.USER_CLASSES) {
-					cp.add(entries[i]);
+			for (IRuntimeClasspathEntry entry : JavaRuntime.computeUnresolvedRuntimeClasspath(javaProject)) {
+				if (entry.getClasspathProperty() != IRuntimeClasspathEntry.USER_CLASSES) {
+					cp.add(entry);
 				}
 			}
 			IRuntimeClasspathEntry[] classPath = cp.toArray(new IRuntimeClasspathEntry[cp.size()]);
@@ -216,8 +215,8 @@
 
 			// convert to mementos
 			List<String> classpathList= new ArrayList<>(classPath.length);
-			for (int i = 0; i < classPath.length; i++) {
-				classpathList.add(classPath[i].getMemento());
+			for (IRuntimeClasspathEntry cp : classPath) {
+				classpathList.add(cp.getMemento());
 			}
 			if(wc == null) {
 				wc = config.getWorkingCopy();
@@ -230,9 +229,9 @@
 			}
 
 			StringBuilder urlsString = new StringBuilder();
-			for (int i = 0; i < urls.length; i++) {
+			for (String url : urls) {
 				urlsString.append(' ');
-				urlsString.append(urls[i]);
+				urlsString.append(url);
 			}
 			wc.setAttribute(IJavaLaunchConfigurationConstants.ATTR_PROGRAM_ARGUMENTS, urlsString.toString());
 			wc.setAttribute(SCRAPBOOK_LAUNCH, SCRAPBOOK_LAUNCH);
@@ -293,8 +292,7 @@
 	 */
 	@Override
 	public void handleDebugEvents(DebugEvent[] events) {
-		for (int i = 0; i < events.length; i++) {
-			DebugEvent event = events[i];
+		for (DebugEvent event : events) {
 			if (event.getSource() instanceof IDebugTarget && event.getKind() == DebugEvent.TERMINATE) {
 				cleanup((IDebugTarget)event.getSource());
 			}
@@ -506,16 +504,15 @@
 	public void cleanupLaunchConfigurations() {
 		try {
 			ILaunchConfigurationType lcType = getLaunchManager().getLaunchConfigurationType(IJavaLaunchConfigurationConstants.ID_JAVA_APPLICATION);
-			ILaunchConfiguration[] configs = getLaunchManager().getLaunchConfigurations(lcType);
 			IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
-			for (int i = 0; i < configs.length; i++) {
-				String path = configs[i].getAttribute(SCRAPBOOK_FILE_PATH, (String)null);
+			for (ILaunchConfiguration config : getLaunchManager().getLaunchConfigurations(lcType)) {
+				String path = config.getAttribute(SCRAPBOOK_FILE_PATH, (String)null);
 				if (path != null) {
 					IPath pagePath = new Path(path);
 					IResource res = root.findMember(pagePath);
 					if (res == null) {
 						// config without a page - delete it
-						configs[i].delete();
+						config.delete();
 					}
 				}
 			}
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/snippeteditor/SelectImportsDialog.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/snippeteditor/SelectImportsDialog.java
index 798725e..869ffb6 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/snippeteditor/SelectImportsDialog.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/snippeteditor/SelectImportsDialog.java
@@ -84,8 +84,7 @@
 		protected void populateImports() {
 			fImportNames= new ArrayList<>(1);
 			if (fImports != null) {
-				for (int i = 0; i < fImports.length; i++) {
-					String name = fImports[i];
+				for (String name : fImports) {
 					addImport(name);
 				}
 			}
@@ -101,8 +100,8 @@
 
 
 		protected void removeImports(Object[] imports) {
-			for (int i = 0; i < imports.length; i++) {
-				Filter imprt = (Filter)imports[i];
+			for (Object i : imports) {
+				Filter imprt = (Filter) i;
 				fImportNames.remove(imprt);
 			}
 			fViewer.remove(imports);
@@ -201,9 +200,7 @@
 			IJavaProject project= fEditor.getJavaProject();
 			List<IJavaElement> projects= new ArrayList<>();
 			projects.add(project);
-			IPackageFragmentRoot[] roots= project.getAllPackageFragmentRoots();
-			for (int i = 0; i < roots.length; i++) {
-				IPackageFragmentRoot root = roots[i];
+			for (IPackageFragmentRoot root : project.getAllPackageFragmentRoots()) {
 				projects.add(root.getParent());
 			}
 			dialog = JDIDebugUIPlugin.createAllPackagesDialog(shell, projects.toArray(new IJavaProject[projects.size()]), false);
@@ -224,8 +221,8 @@
 		}
 		Object[] packages= dialog.getResult();
 		if (packages != null) {
-			for (int i = 0; i < packages.length; i++) {
-				IJavaElement pkg = (IJavaElement)packages[i];
+			for (Object p : packages) {
+				IJavaElement pkg = (IJavaElement) p;
 				String filter = pkg.getElementName();
 				filter += ".*"; //$NON-NLS-1$
 				fImportContentProvider.addImport(filter);
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/sourcelookup/JavaProjectSourceContainerBrowser.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/sourcelookup/JavaProjectSourceContainerBrowser.java
index 6c9cb8d..3c82081 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/sourcelookup/JavaProjectSourceContainerBrowser.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/sourcelookup/JavaProjectSourceContainerBrowser.java
@@ -97,8 +97,8 @@
 			Object[] selections = dialog.getResult();
 			List<IJavaProject> additions = new ArrayList<>(selections.length);
 			try {
-				for (int i = 0; i < selections.length; i++) {
-					IJavaProject jp = (IJavaProject)selections[i];
+				for (Object selection : selections) {
+					IJavaProject jp = (IJavaProject) selection;
 					if (dialog.isAddRequiredProjects()) {
 						collectRequiredProjects(jp, additions);
 					} else {
@@ -145,13 +145,11 @@
 			projects= new IJavaProject[0];
 		}
 		List<IJavaProject> remaining = new ArrayList<>();
-		for (int i = 0; i < projects.length; i++) {
-			remaining.add(projects[i]);
+		for (IJavaProject project : projects) {
+			remaining.add(project);
 		}
 		List<IJavaProject> alreadySelected = new ArrayList<>();
-		ISourceContainer[] containers = director.getSourceContainers();
-		for (int i = 0; i < containers.length; i++) {
-			ISourceContainer container = containers[i];
+		for (ISourceContainer container : director.getSourceContainers()) {
 			if (container.getType().getId().equals(JavaProjectSourceContainer.TYPE_ID)) {
 				alreadySelected.add(((JavaProjectSourceContainer)container).getJavaProject());
 			}
@@ -175,9 +173,7 @@
 
 			IJavaModel model= proj.getJavaModel();
 
-			IClasspathEntry[] entries= proj.getRawClasspath();
-			for (int i= 0; i < entries.length; i++) {
-				IClasspathEntry curr= entries[i];
+			for (IClasspathEntry curr : proj.getRawClasspath()) {
 				if (curr.getEntryKind() == IClasspathEntry.CPE_PROJECT) {
 					IJavaProject ref= model.getJavaProject(curr.getPath().segment(0));
 					if (ref.exists()) {
@@ -197,9 +193,7 @@
 	 * @throws CoreException if an exception occurs
 	 */
 	protected void collectExportedEntries(IJavaProject proj, List<ISourceContainer> list) throws CoreException {
-		IClasspathEntry[] entries = proj.getRawClasspath();
-		for (int i = 0; i < entries.length; i++) {
-			IClasspathEntry entry = entries[i];
+		for (IClasspathEntry entry : proj.getRawClasspath()) {
 			ISourceContainer sourceContainer = null;
 			if (entry.isExported()) {
 				switch (entry.getEntryKind()) {
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/threadgroups/JavaModelProxyFactory.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/threadgroups/JavaModelProxyFactory.java
index 8526f23..09c6eb0 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/threadgroups/JavaModelProxyFactory.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/threadgroups/JavaModelProxyFactory.java
@@ -35,9 +35,8 @@
 		if (IDebugUIConstants.ID_DEBUG_VIEW.equals(context.getId())) {
 			if (element instanceof IJavaDebugTarget) {
 				ILaunch launch = ((IDebugTarget) element).getLaunch();
-				Object[] children = launch.getChildren();
-				for (int i = 0; i < children.length; i++) {
-					if (children[i] == element) {
+				for (Object child : launch.getChildren()) {
+					if (child == element) {
 						// ensure the target is a visible child of the launch
 						return new JavaDebugTargetProxy((IDebugTarget) element);
 					}
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/threadgroups/JavaThreadGroupContentProvider.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/threadgroups/JavaThreadGroupContentProvider.java
index f7c6ad3..66b02a2 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/threadgroups/JavaThreadGroupContentProvider.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/threadgroups/JavaThreadGroupContentProvider.java
@@ -59,12 +59,12 @@
 			IJavaThread[] threads = group.getThreads();
 			Object[] kids = new Object[threadGroups.length + threads.length];
 			int index = 0;
-			for (int i = 0; i < threads.length; i++) {
-				kids[index]= threads[i];
+			for (IJavaThread thread : threads) {
+				kids[index]= thread;
 				index++;
 			}
-			for (int i = 0; i < threadGroups.length; i++) {
-				kids[index] = threadGroups[i];
+			for (IJavaThreadGroup threadGroup : threadGroups) {
+				kids[index] = threadGroup;
 				index++;
 			}
 			return kids;
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/variables/JavaContentProviderFilter.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/variables/JavaContentProviderFilter.java
index 8217702..376cc9f 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/variables/JavaContentProviderFilter.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/variables/JavaContentProviderFilter.java
@@ -49,10 +49,10 @@
 
 		if (filterStatics || filterConstants) {
 			List<Object> keep = new ArrayList<>(variables.length);
-			for (int i = 0; i < variables.length; i++) {
+			for (Object variable : variables) {
 				boolean filter = false;
-				if (variables[i] instanceof IJavaVariable){
-					IJavaVariable var = (IJavaVariable)variables[i];
+				if (variable instanceof IJavaVariable) {
+					IJavaVariable var = (IJavaVariable) variable;
 					if (var.isStatic()){
 						if (var.isFinal()){
 							filter = filterConstants;
@@ -61,8 +61,8 @@
 						}
 					}
 				}
-				if (!filter){
-					keep.add(variables[i]);
+				if (!filter) {
+					keep.add(variable);
 				}
 			}
 			return keep.toArray(new Object[keep.size()]);
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/RemoteEvaluatorBuilder.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/RemoteEvaluatorBuilder.java
index 03a05fa..34d5aa8 100644
--- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/RemoteEvaluatorBuilder.java
+++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/RemoteEvaluatorBuilder.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2019 Jesper Steen Møller and others.
+ * Copyright (c) 2019, 2020 Jesper Steen Møller and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -118,10 +118,14 @@
 				@Override
 				public void acceptProblem(IMarker problemMarker, String fragmentSource, int fragmentKind) {
 					if (problemMarker.getAttribute(IMarker.SEVERITY, IMarker.SEVERITY_INFO) >= IMarker.SEVERITY_ERROR) {
-						errors.add(problemMarker.toString());
+						errors.add(toString(problemMarker));
 					}
 				}
 
+				private String toString(IMarker marker) {
+					return marker.getAttribute(IMarker.MESSAGE, ""); //$NON-NLS-1$
+				}
+
 				@Override
 				public boolean acceptClassFiles(byte[][] classFileBytes, String[][] classFileCompoundNames, String mainCodeSnippetClassName) {
 					for (int i = 0; i < classFileCompoundNames.length; ++i) {
@@ -1483,6 +1487,12 @@
 			return false;
 		}
 
+		private boolean needToQualify(SimpleName node) {
+			if (node.getParent() instanceof QualifiedName || node.getParent() instanceof QualifiedType) {
+				return false;
+			}
+			return true;
+		}
 		@Override
 		public boolean visit(SimpleName node) {
 			IBinding binding = node.resolveBinding();
@@ -1492,15 +1502,18 @@
 					// For future optimization: Check for duplicates, so same value is only bound once
 					if (vb.isField()) {
 						if (Modifier.isStatic(vb.getModifiers())) {
-							ITypeBinding declaringClass = vb.getDeclaringClass();
-							buffer.append(declaringClass.getQualifiedName());
-							buffer.append("."); //$NON-NLS-1$
+							if (needToQualify(node)) {
+								ITypeBinding declaringClass = vb.getDeclaringClass();
+								buffer.append(declaringClass.getQualifiedName());
+								buffer.append("."); //$NON-NLS-1$
+							}
+
 							buffer.append(node.getIdentifier());
 
 						} else {
 							// TODO: Fix this to use same method as visit(FieldAccess)
 							ITypeBinding declaringClass = vb.getDeclaringClass();
-							String newVarName = new String(LOCAL_VAR_PREFIX) + allocateNewVariable(declaringClass, "this"); //$NON-NLS-1$
+							String newVarName = allocateNewVariable(declaringClass, LOCAL_VAR_PREFIX.concat("this")); //$NON-NLS-1$
 							binder.bindThis(declaringClass, newVarName);
 							// buffer.append("this."); //$NON-NLS-1$
 							buffer.append(newVarName);
@@ -1786,7 +1799,7 @@
 		public boolean visit(ThisExpression node) {
 			ITypeBinding thisType = node.resolveTypeBinding();
 
-			String newVarName = new String(LOCAL_VAR_PREFIX) + allocateNewVariable(thisType, "this"); //$NON-NLS-1$
+			String newVarName = allocateNewVariable(thisType, LOCAL_VAR_PREFIX.concat("this")); //$NON-NLS-1$
 			binder.bindThis(thisType, newVarName);
 			// buffer.append("this."); //$NON-NLS-1$
 			buffer.append(newVarName);
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/ASTEvaluationEngine.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/ASTEvaluationEngine.java
index fa25001..fc682b1 100644
--- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/ASTEvaluationEngine.java
+++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/ASTEvaluationEngine.java
@@ -331,7 +331,8 @@
 				if (variable instanceof IJavaVariable && !isLambdaOrImplicitVariable(variable)) {
 					IJavaVariable javaVariable = (IJavaVariable) variable;
 					final boolean lambdaField = LambdaUtils.isLambdaField(variable);
-					String variableName = (lambdaField) ? variable.getName().substring(ANONYMOUS_VAR_PREFIX.length()) : variable.getName();
+					String name = variable.getName();
+					String variableName = (lambdaField && name.startsWith(ANONYMOUS_VAR_PREFIX)) ? name.substring(ANONYMOUS_VAR_PREFIX.length()) : name;
 					if (variableName != null && (!variableName.contains("$") || lambdaField)) { //$NON-NLS-1$
 						if (!isLocalType(javaVariable.getSignature()) && !names.contains(variableName)) {
 							locals[numLocals] = javaVariable;
diff --git a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIStackFrame.java b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIStackFrame.java
index 4deac01..f7b5255 100644
--- a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIStackFrame.java
+++ b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/model/JDIStackFrame.java
@@ -384,7 +384,7 @@
 						IJavaStackFrame previousFrame = frames.get(previousIndex);
 						ObjectReference underlyingThisObject = ((JDIStackFrame) previousFrame).getUnderlyingThisObject();
 						IJavaValue closureValue = JDIValue.createValue((JDIDebugTarget) getDebugTarget(), underlyingThisObject);
-						setLambdaVariableNames(closureValue, underlyingThisObject);
+						tryToResolveLambdaVariableNames(closureValue, underlyingThisObject);
 						fVariables.add(new JDILambdaVariable(closureValue));
 					}
 				}
@@ -404,7 +404,15 @@
 		}
 	}
 
-	private void setLambdaVariableNames(IJavaValue value, ObjectReference underlyingThisObject) {
+	/**
+	 * Tries to resolve "real" captured variable names by inspecting corresponding Java source code (if available)
+	 */
+	protected void tryToResolveLambdaVariableNames(IJavaValue value, ObjectReference underlyingThisObject) {
+		if (!isProbablyJavaCode()) {
+			// See bug 562056: we won't parse Java code if the current frame doesn't belong to Java, because
+			// we will most likely have different source line numbers and will produce garbage or errors
+			return;
+		}
 		try {
 			IType type = JavaDebugUtils.resolveType(value.getJavaType());
 			if (type == null) {
@@ -427,6 +435,27 @@
 		}
 	}
 
+	/**
+	 * @return {@code true} if the current frame relates to the class generated from Java source file (and not from some different language)
+	 */
+	protected boolean isProbablyJavaCode() {
+		try {
+			String sourceName = getSourceName();
+			// Note: JavaCore.isJavaLikeFileName(sourceName) is too generic to be used here
+			// because it allows files that aren't using Java syntax, like groovy
+			// See https://github.com/groovy/groovy-eclipse/blob/master/base/org.eclipse.jdt.groovy.core/plugin.xml
+			if (sourceName == null || sourceName.endsWith(".java")) { //$NON-NLS-1$
+				// if nothing is defined (no source attributes), assume Java
+				return true;
+			}
+		} catch (DebugException e) {
+			// If we fail, assume Java
+			return true;
+		}
+		// Underlined source code is most likely not written in Java
+		return false;
+	}
+
 	private final static class LambdaASTVisitor extends ASTVisitor {
 		private final ObjectReference underlyingThisObject;
 		private boolean methodIsStatic;
diff --git a/org.eclipse.jdt.launching.javaagent/META-INF/MANIFEST.MF b/org.eclipse.jdt.launching.javaagent/META-INF/MANIFEST.MF
index 318829c..d1eadd1 100644
--- a/org.eclipse.jdt.launching.javaagent/META-INF/MANIFEST.MF
+++ b/org.eclipse.jdt.launching.javaagent/META-INF/MANIFEST.MF
@@ -2,10 +2,10 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jdt.launching.javaagent;singleton:=true
-Bundle-Version: 3.9.200.qualifier
+Bundle-Version: 3.9.300.qualifier
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
-Require-Bundle: org.objectweb.asm;bundle-version="[7.2.0,8.0.0)"
+Require-Bundle: org.objectweb.asm;bundle-version="[8.0.1,9.0.0)"
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Automatic-Module-Name: org.eclipse.jdt.launching.javaagent
diff --git a/org.eclipse.jdt.launching.javaagent/pom.xml b/org.eclipse.jdt.launching.javaagent/pom.xml
index 8d32e4f..900fbcc 100644
--- a/org.eclipse.jdt.launching.javaagent/pom.xml
+++ b/org.eclipse.jdt.launching.javaagent/pom.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-  Copyright (c) 2011, 2019 Igor Fedorenko
+  Copyright (c) 2011, 2020 Igor Fedorenko
   All rights reserved. This program and the accompanying materials
   are made available under the terms of the Eclipse Public License 2.0
   which accompanies this distribution, and is available at
@@ -24,7 +24,7 @@
     <dependency>
       <groupId>org.ow2.asm</groupId>
       <artifactId>asm</artifactId>
-      <version>7.2</version>
+      <version>8.0.1</version>
     </dependency>
   </dependencies>
 
diff --git a/org.eclipse.jdt.launching.javaagent/src/main/java/org/eclipse/jdt/launching/internal/weaving/ClassfileTransformer.java b/org.eclipse.jdt.launching.javaagent/src/main/java/org/eclipse/jdt/launching/internal/weaving/ClassfileTransformer.java
index e14b845..16cbb3a 100644
--- a/org.eclipse.jdt.launching.javaagent/src/main/java/org/eclipse/jdt/launching/internal/weaving/ClassfileTransformer.java
+++ b/org.eclipse.jdt.launching.javaagent/src/main/java/org/eclipse/jdt/launching/internal/weaving/ClassfileTransformer.java
@@ -25,10 +25,10 @@
 	private static final String STRATA_ID = "jdt"; //$NON-NLS-1$
 
 	/** max supported java class format major version, must match {@link #ASM_API} below **/
-	public static final int MAX_CLASS_MAJOR = Opcodes.V14;
+	public static final int MAX_CLASS_MAJOR = Opcodes.V15;
 
 	/** supported ASM API version, must match {@link #MAX_CLASS_MAJOR} above */
-	private static final int ASM_API = Opcodes.ASM7;
+	private static final int ASM_API = Opcodes.ASM8;
 
 	public byte[] transform(byte[] classfileBuffer, final String location) {
 
diff --git a/org.eclipse.jdt.launching/doc/.cvsignore b/org.eclipse.jdt.launching/doc/.cvsignore
deleted file mode 100644
index 731cc1f..0000000
--- a/org.eclipse.jdt.launching/doc/.cvsignore
+++ /dev/null
@@ -1,6 +0,0 @@
-book.css
-org_eclipse_jdt_launching_classpathProviders.html
-org_eclipse_jdt_launching_runtimeClasspathEntryResolvers.html
-org_eclipse_jdt_launching_vmConnectors.html
-org_eclipse_jdt_launching_vmInstallTypes.html
-schema.css
diff --git a/org.eclipse.jdt.launching/lib/javaagent-shaded.jar b/org.eclipse.jdt.launching/lib/javaagent-shaded.jar
index 0705a1c..80690a9 100644
--- a/org.eclipse.jdt.launching/lib/javaagent-shaded.jar
+++ b/org.eclipse.jdt.launching/lib/javaagent-shaded.jar
Binary files differ