Bug 559090: [14] Merge master to BETA_JAVA14 branch

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

Change-Id: I460feba004edcc744628893f5a60f7332fd7c00f
diff --git a/org.eclipse.jdt.astview/META-INF/MANIFEST.MF b/org.eclipse.jdt.astview/META-INF/MANIFEST.MF
index 558b104..b3345ae 100644
--- a/org.eclipse.jdt.astview/META-INF/MANIFEST.MF
+++ b/org.eclipse.jdt.astview/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jdt.astview; singleton:=true
-Bundle-Version: 1.4.200.qualifier
+Bundle-Version: 1.4.300.qualifier
 Eclipse-SourceReferences: scm:git:git://git.eclipse.org/gitroot/jdt/eclipse.jdt.ui.git;path="org.eclipse.jdt.astview";tag=R4_4
 Bundle-Activator: org.eclipse.jdt.astview.ASTViewPlugin
 Bundle-Vendor: %providerName
diff --git a/org.eclipse.jdt.astview/pom.xml b/org.eclipse.jdt.astview/pom.xml
index 8f01b0e..bf29a60 100644
--- a/org.eclipse.jdt.astview/pom.xml
+++ b/org.eclipse.jdt.astview/pom.xml
@@ -18,6 +18,6 @@
   </parent>
   <groupId>org.eclipse.jdt</groupId>
   <artifactId>org.eclipse.jdt.astview</artifactId>
-  <version>1.4.200-SNAPSHOT</version>
+  <version>1.4.300-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/ASTViewPlugin.java b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/ASTViewPlugin.java
index 604c82b..fce9eca 100644
--- a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/ASTViewPlugin.java
+++ b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/ASTViewPlugin.java
@@ -1,13 +1,13 @@
 /*******************************************************************************
  * Copyright (c) 2000, 2005 IBM Corporation and others.
  *
- * This program and the accompanying materials 
+ * 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:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -27,7 +27,7 @@
 	public ASTViewPlugin() {
 		fgDefault= this;
 	}
-	
+
 	public static String getPluginId() {
 		return "org.eclipse.jdt.astview"; //$NON-NLS-1$
 	}
@@ -38,15 +38,15 @@
 	public static ASTViewPlugin getDefault() {
 		return fgDefault;
 	}
-	
+
 	public static void log(IStatus status) {
 		getDefault().getLog().log(status);
 	}
-	
+
 	public static void logErrorMessage(String message) {
 		log(new Status(IStatus.ERROR, getPluginId(), IStatus.ERROR, message, null));
 	}
-	
+
 	public static void logErrorStatus(String message, IStatus status) {
 		if (status == null) {
 			logErrorMessage(message);
@@ -56,9 +56,9 @@
 		multi.add(status);
 		log(multi);
 	}
-	
+
 	public static void log(String message, Throwable e) {
 		log(new Status(IStatus.ERROR, getPluginId(), IStatus.ERROR, message, e));
 	}
-	
+
 }
diff --git a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/EditorUtility.java b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/EditorUtility.java
index 28cdd13..2a875ed 100644
--- a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/EditorUtility.java
+++ b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/EditorUtility.java
@@ -1,13 +1,13 @@
 /*******************************************************************************
  * Copyright (c) 2000, 2007 IBM Corporation and others.
  *
- * This program and the accompanying materials 
+ * 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:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -45,7 +45,7 @@
 		}
 		return null;
 	}
-	
+
 	public static ITypeRoot getJavaInput(IEditorPart part) {
 		IEditorInput editorInput= part.getEditorInput();
 		if (editorInput != null) {
@@ -54,7 +54,7 @@
 				return (ITypeRoot) input;
 			}
 		}
-		return null;	
+		return null;
 	}
 
 	public static void selectInEditor(ITextEditor editor, int offset, int length) {
diff --git a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/TreeInfoCollector.java b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/TreeInfoCollector.java
index ecb5158..e0abdaf 100644
--- a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/TreeInfoCollector.java
+++ b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/TreeInfoCollector.java
@@ -1,7 +1,7 @@
 /*******************************************************************************
  * Copyright (c) 2000, 2013 IBM Corporation and others.
  *
- * This program and the accompanying materials 
+ * 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/
@@ -21,18 +21,18 @@
  *
  */
 public class TreeInfoCollector {
-	
+
 	public static class NodeCounter extends ASTVisitor {
 
 		public int numberOfNodes= 0;
-		
+
 		@Override
 		public void preVisit(ASTNode node) {
 			numberOfNodes++;
 		}
 	}
- 	
-	
+
+
 	private final CompilationUnit fRoot;
 
 	public TreeInfoCollector(CompilationUnit root) {
@@ -42,12 +42,12 @@
 	public int getSize() {
 		return fRoot.subtreeBytes();
 	}
-	
+
 	public int getNumberOfNodes() {
 		NodeCounter counter= new NodeCounter();
 		fRoot.accept(counter);
 		return counter.numberOfNodes;
 	}
-	
+
 
 }
diff --git a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/ASTAttribute.java b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/ASTAttribute.java
index a55a81c..3747f57 100644
--- a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/ASTAttribute.java
+++ b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/ASTAttribute.java
@@ -1,13 +1,13 @@
 /*******************************************************************************
  * Copyright (c) 2000, 2005 IBM Corporation and others.
  *
- * This program and the accompanying materials 
+ * 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:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -21,14 +21,14 @@
  *
  */
 public abstract class ASTAttribute {
-	
+
 	protected static final Object[] EMPTY= new Object[0];
 
 	public abstract Object getParent();
 	public abstract Object[] getChildren();
 	public abstract String getLabel();
 	public abstract Image getImage();
-	
+
 	public ASTNode getParentASTNode() {
 		Object parent= getParent();
 		while (parent instanceof ASTAttribute) {
@@ -39,5 +39,5 @@
 		}
 		return null;
 	}
-	
+
 }
diff --git a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/ASTView.java b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/ASTView.java
index 7f451a7..8e440be 100644
--- a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/ASTView.java
+++ b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/ASTView.java
@@ -154,31 +154,31 @@
 	 */
 	@Deprecated
 	private static final int JLS12= AST.JLS12;
-	
+
 	/**
 	 * @deprecated to get rid of deprecation warnings in code
 	 */
 	@Deprecated
 	private static final int JLS11= AST.JLS11;
-	
+
 	/**
 	 * @deprecated to get rid of deprecation warnings in code
 	 */
 	@Deprecated
 	private static final int JLS10= AST.JLS10;
-	
+
 	/**
 	 * @deprecated to get rid of deprecation warnings in code
 	 */
 	@Deprecated
 	private static final int JLS9= AST.JLS9;
-	
+
 	/**
 	 * @deprecated to get rid of deprecation warnings in code
 	 */
 	@Deprecated
 	private static final int JLS8= AST.JLS8;
-	
+
 	/**
 	 * @deprecated to get rid of deprecation warnings in code
 	 */
@@ -236,23 +236,23 @@
 				setChecked(true);
 			}
 		}
-	
+
 		public int getLevel() {
 			return fLevel;
 		}
-		
+
 		@Override
 		public void run() {
 			setASTLevel(fLevel, true);
 		}
 	}
-	
+
 	private class ASTInputKindAction extends Action {
 		public static final int USE_PARSER= 1;
 		public static final int USE_RECONCILE= 2;
 		public static final int USE_CACHE= 3;
 		public static final int USE_FOCAL= 4;
-		
+
 		private int fInputKind;
 
 		public ASTInputKindAction(String label, int inputKind) {
@@ -262,27 +262,27 @@
 				setChecked(true);
 			}
 		}
-	
+
 		public int getInputKind() {
 			return fInputKind;
 		}
-		
+
 		@Override
 		public void run() {
 			setASTInputType(fInputKind);
 		}
 	}
-	
-	
+
+
 	private static class ListenerMix implements ISelectionListener, IFileBufferListener, IDocumentListener, ISelectionChangedListener, IDoubleClickListener, IPartListener2 {
-		
+
 		private boolean fASTViewVisible= true;
 		private ASTView fView;
-		
+
 		public ListenerMix(ASTView view) {
 			fView= view;
 		}
-		
+
 		public void dispose() {
 			fView= null;
 		}
@@ -365,7 +365,7 @@
 		public void doubleClick(DoubleClickEvent event) {
 			fView.handleDoubleClick();
 		}
-		
+
 		@Override
 		public void partHidden(IWorkbenchPartReference partRef) {
 			IWorkbenchPart part= partRef.getPart(false);
@@ -476,7 +476,7 @@
 	private TreeViewer fViewer;
 	private ASTViewLabelProvider fASTLabelProvider;
 	private TreeViewer fTray;
-	
+
 	private DrillDownAdapter fDrillDownAdapter;
 	private Action fFocusAction;
 	private Action fRefreshAction;
@@ -496,34 +496,34 @@
 	private Action fLinkWithEditor;
 	private Action fAddToTrayAction;
 	private Action fDeleteAction;
-	
+
 	private ASTLevelToggle[] fASTVersionToggleActions;
 	private int fCurrentASTLevel;
-	
+
 	private ASTInputKindAction[] fASTInputKindActions;
 	private int fCurrentInputKind;
-	
+
 	private ITextEditor fEditor;
 	private ITypeRoot fTypeRoot;
 	private CompilationUnit fRoot;
 	private IDocument fCurrentDocument;
 	private ArrayList<Object> fTrayRoots;
-	
+
 	private boolean fDoLinkWithEditor;
 	private boolean fCreateBindings;
 	private NonRelevantFilter fNonRelevantFilter;
 	private boolean fStatementsRecovery;
 	private boolean fBindingsRecovery;
 	private boolean fIgnoreMethodBodies;
-	
+
 	private Object fPreviousDouble;
-	
+
 	private ListenerMix fSuperListener;
 	private ISelectionChangedListener fTrayUpdater;
 
 	private IDialogSettings fDialogSettings;
 
-	
+
 	public ASTView() {
 		fSuperListener= null;
 		fDialogSettings= ASTViewPlugin.getDefault().getDialogSettings();
@@ -559,7 +559,7 @@
 		fNonRelevantFilter= new NonRelevantFilter();
 		fNonRelevantFilter.setShowNonRelevant(fDialogSettings.getBoolean(SETTINGS_SHOW_NON_RELEVANT));
 	}
-	
+
 	final void notifyWorkbenchPartClosed(IWorkbenchPartReference partRef) {
 		if (fEditor != null && fEditor.equals(partRef.getPart(false))) {
 			try {
@@ -575,18 +575,18 @@
 		super.setSite(site);
 		if (fSuperListener == null) {
 			fSuperListener= new ListenerMix(this);
-			
+
 			ISelectionService service= site.getWorkbenchWindow().getSelectionService();
 			service.addPostSelectionListener(fSuperListener);
 			site.getPage().addPartListener(fSuperListener);
 			FileBuffers.getTextFileBufferManager().addFileBufferListener(fSuperListener);
 		}
 	}
-	
+
 	public int getCurrentASTLevel() {
 		return fCurrentASTLevel;
 	}
-	
+
 	public int getCurrentInputKind() {
 		return fCurrentInputKind;
 	}
@@ -595,17 +595,17 @@
 		if (fEditor != null) {
 			uninstallModificationListener();
 		}
-		
+
 		fEditor= null;
 		fRoot= null;
-		
+
 		if (editor != null) {
 			ITypeRoot typeRoot= EditorUtility.getJavaInput(editor);
 			if (typeRoot == null) {
 				throw new CoreException(getErrorStatus("Editor not showing a CU or class file", null)); //$NON-NLS-1$
 			}
 			fTypeRoot= typeRoot;
-			
+
 			ISelection selection= editor.getSelectionProvider().getSelection();
 			if (selection instanceof ITextSelection) {
 				ITextSelection textSelection= (ITextSelection) selection;
@@ -616,12 +616,12 @@
 		}
 
 	}
-	
+
 	private CompilationUnit internalSetInput(ITypeRoot input, int offset, int length) throws CoreException {
 		if (input.getBuffer() == null) {
 			throw new CoreException(getErrorStatus("Input has no buffer", null)); //$NON-NLS-1$
 		}
-		
+
 		CompilationUnit root;
 		try {
 			root= createAST(input, offset);
@@ -633,7 +633,7 @@
 		} catch (RuntimeException e) {
 			throw new CoreException(getErrorStatus("Could not create AST:\n" + e.getMessage(), e)); //$NON-NLS-1$
 		}
-		
+
 		try {
 			ASTNode node= NodeFinder.perform(root, offset, length);
 			if (node != null) {
@@ -648,15 +648,15 @@
 		} catch (RuntimeException e) {
 			showAndLogError("Could not select node for editor selection", e); //$NON-NLS-1$
 		}
-		
+
 		return root;
 	}
-	
+
 	private void clearView() {
 		resetView(null);
 		setContentDescription("Open a Java editor and press the 'Show AST of active editor' toolbar button"); //$NON-NLS-1$
 	}
-	
+
 
 	private void resetView(CompilationUnit root) {
 		fViewer.setInput(root);
@@ -670,12 +670,12 @@
 		fFindDeclaringNodeAction.setEnabled(root != null);
 		fPreviousDouble= null; // avoid leaking AST
 	}
-	
+
 	private CompilationUnit createAST(ITypeRoot input, int offset) throws JavaModelException, CoreException {
 		long startTime;
 		long endTime;
 		CompilationUnit root;
-		
+
 		if ((getCurrentInputKind() == ASTInputKindAction.USE_RECONCILE)) {
 			final IProblemRequestor problemRequestor= new IProblemRequestor() { //strange: don't get bindings when supplying null as problemRequestor
 				@Override
@@ -710,13 +710,13 @@
 			} finally {
 				wc.discardWorkingCopy();
 			}
-			
+
 		} else if (input instanceof ICompilationUnit && (getCurrentInputKind() == ASTInputKindAction.USE_CACHE)) {
 			ICompilationUnit cu= (ICompilationUnit) input;
 			startTime= System.currentTimeMillis();
 			root= SharedASTProviderCore.getAST(cu, SharedASTProviderCore.WAIT_NO, null);
 			endTime= System.currentTimeMillis();
-			
+
 		} else {
 			ASTParser parser= ASTParser.newParser(fCurrentASTLevel);
 			parser.setResolveBindings(fCreateBindings);
@@ -732,8 +732,8 @@
 			endTime= System.currentTimeMillis();
 		}
 		if (root != null) {
-			root.accept(new StatementChecker());	
-			updateContentDescription(input, root, endTime - startTime);			
+			root.accept(new StatementChecker());
+			updateContentDescription(input, root, endTime - startTime);
 		}
 		return root;
 	}
@@ -752,8 +752,8 @@
 		fStatementsRecoveryAction.setEnabled(enabled);
 		fBindingsRecoveryAction.setEnabled(enabled);
 		fIgnoreMethodBodiesAction.setEnabled(enabled);
-		for (int i= 0; i < fASTVersionToggleActions.length; i++) {
-			fASTVersionToggleActions[i].setEnabled(enabled);
+		for (ASTView.ASTLevelToggle action : fASTVersionToggleActions) {
+			action.setEnabled(enabled);
 		}
 	}
 
@@ -800,11 +800,11 @@
 		}
 		super.dispose();
 	}
-	
+
 	private IStatus getErrorStatus(String message, Throwable th) {
 		return new Status(IStatus.ERROR, ASTViewPlugin.getPluginId(), IStatus.ERROR, message, th);
 	}
-	
+
 	@Override
 	public void createPartControl(Composite parent) {
 		fSash= new SashForm(parent, SWT.VERTICAL | SWT.SMOOTH);
@@ -824,16 +824,16 @@
 			}
 		});
 		fViewer.addFilter(fNonRelevantFilter);
-		
-		
+
+
 		ViewForm trayForm= new ViewForm(fSash, SWT.NONE);
 		Label label= new Label(trayForm, SWT.NONE);
 		label.setText(" Comparison Tray (* = selection in the upper tree):"); //$NON-NLS-1$
 		trayForm.setTopLeft(label);
-		
+
 		fTray= new TreeViewer(trayForm, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
 		trayForm.setContent(fTray.getTree());
-		
+
 		fTrayRoots= new ArrayList<>();
 		fTray.setContentProvider(new TrayContentProvider());
 		final TrayLabelProvider trayLabelProvider= new TrayLabelProvider();
@@ -879,13 +879,13 @@
 				fDeleteAction.setEnabled(false);
 			}
 		});
-		
+
 		makeActions();
 		hookContextMenu();
 		hookTrayContextMenu();
 		contributeToActionBars();
 		getSite().setSelectionProvider(new ASTViewSelectionProvider());
-		
+
 		try {
 			IEditorPart part= EditorUtility.getActiveEditor();
 			if (part instanceof ITextEditor) {
@@ -932,7 +932,7 @@
 		fTray.getControl().setMenu(menu);
 		getSite().registerContextMenu("#TrayPopupMenu", menuMgr, fTray); //$NON-NLS-1$
 	}
-	
+
 	private void contributeToActionBars() {
 		IActionBars bars = getViewSite().getActionBars();
 		fillLocalPullDown(bars.getMenuManager());
@@ -940,14 +940,14 @@
 		bars.setGlobalActionHandler(ActionFactory.COPY.getId(), fCopyAction);
 		bars.setGlobalActionHandler(ActionFactory.REFRESH.getId(), fFocusAction);
 		bars.setGlobalActionHandler(ActionFactory.DELETE.getId(), fDeleteAction);
-		
+
 		IHandlerService handlerService= getViewSite().getService(IHandlerService.class);
 		handlerService.activateHandler(IWorkbenchCommandConstants.NAVIGATE_TOGGLE_LINK_WITH_EDITOR, new ActionHandler(fLinkWithEditor));
 	}
 
 	private void fillLocalPullDown(IMenuManager manager) {
-		for (int i= 0; i < fASTVersionToggleActions.length; i++) {
-			manager.add(fASTVersionToggleActions[i]);
+		for (ASTView.ASTLevelToggle action : fASTVersionToggleActions) {
+			manager.add(action);
 		}
 		manager.add(new Separator());
 		manager.add(fCreateBindingsAction);
@@ -955,8 +955,8 @@
 		manager.add(fBindingsRecoveryAction);
 		manager.add(fIgnoreMethodBodiesAction);
 		manager.add(new Separator());
-		for (int i= 0; i < fASTInputKindActions.length; i++) {
-			manager.add(fASTInputKindActions[i]);
+		for (ASTView.ASTInputKindAction action : fASTInputKindActions) {
+			manager.add(action);
 		}
 		manager.add(new Separator());
 		manager.add(fFindDeclaringNodeAction);
@@ -1016,11 +1016,11 @@
 		manager.add(fCollapseAction);
 		manager.add(fLinkWithEditor);
 	}
-	
+
 	private void setASTUptoDate(boolean isuptoDate) {
 		fRefreshAction.setEnabled(!isuptoDate && fTypeRoot != null);
 	}
-	
+
 	private void makeActions() {
 		fRefreshAction = new Action() {
 			@Override
@@ -1043,14 +1043,14 @@
 		fClearAction.setToolTipText("Clear AST and release memory"); //$NON-NLS-1$
 		fClearAction.setEnabled(false);
 		ASTViewImages.setImageDescriptors(fClearAction, ASTViewImages.CLEAR);
-				
+
 		fASTInputKindActions= new ASTInputKindAction[] {
 				new ASTInputKindAction("Use ASTParser.&createAST", ASTInputKindAction.USE_PARSER), //$NON-NLS-1$
 				new ASTInputKindAction("Use ASTParser with &focal position", ASTInputKindAction.USE_FOCAL), //$NON-NLS-1$
 				new ASTInputKindAction("Use ICompilationUnit.&reconcile", ASTInputKindAction.USE_RECONCILE), //$NON-NLS-1$
 				new ASTInputKindAction("Use SharedASTProvider.&getAST", ASTInputKindAction.USE_CACHE) //$NON-NLS-1$
 		};
-		
+
 		fCreateBindingsAction = new Action("&Create Bindings", IAction.AS_CHECK_BOX) { //$NON-NLS-1$
 			@Override
 			public void run() {
@@ -1060,7 +1060,7 @@
 		fCreateBindingsAction.setChecked(fCreateBindings);
 		fCreateBindingsAction.setToolTipText("Create Bindings"); //$NON-NLS-1$
 		fCreateBindingsAction.setEnabled(true);
-		
+
 		fStatementsRecoveryAction = new Action("&Statements Recovery", IAction.AS_CHECK_BOX) { //$NON-NLS-1$
 			@Override
 			public void run() {
@@ -1069,7 +1069,7 @@
 		};
 		fStatementsRecoveryAction.setChecked(fStatementsRecovery);
 		fStatementsRecoveryAction.setEnabled(true);
-		
+
 		fBindingsRecoveryAction = new Action("&Bindings Recovery", IAction.AS_CHECK_BOX) { //$NON-NLS-1$
 			@Override
 			public void run() {
@@ -1078,7 +1078,7 @@
 		};
 		fBindingsRecoveryAction.setChecked(fBindingsRecovery);
 		fBindingsRecoveryAction.setEnabled(true);
-		
+
 		fIgnoreMethodBodiesAction = new Action("&Ignore Method Bodies", IAction.AS_CHECK_BOX) { //$NON-NLS-1$
 			@Override
 			public void run() {
@@ -1087,7 +1087,7 @@
 		};
 		fIgnoreMethodBodiesAction.setChecked(fIgnoreMethodBodies);
 		fIgnoreMethodBodiesAction.setEnabled(true);
-		
+
 		fFilterNonRelevantAction = new Action("&Hide Non-Relevant Attributes", IAction.AS_CHECK_BOX) { //$NON-NLS-1$
 			@Override
 			public void run() {
@@ -1106,7 +1106,7 @@
 		};
 		fFindDeclaringNodeAction.setToolTipText("Find Declaring Node..."); //$NON-NLS-1$
 		fFindDeclaringNodeAction.setEnabled(false);
-		
+
 		fParseBindingFromElementAction= new Action("&Parse Binding from &Element Handle...", IAction.AS_PUSH_BUTTON) { //$NON-NLS-1$
 			@Override
 			public void run() {
@@ -1115,7 +1115,7 @@
 		};
 		fParseBindingFromElementAction.setToolTipText("Parse Binding from Element Handle..."); //$NON-NLS-1$
 		fParseBindingFromElementAction.setEnabled(true);
-		
+
 		fParseBindingFromKeyAction= new Action("Parse Binding from &Key...", IAction.AS_PUSH_BUTTON) { //$NON-NLS-1$
 			@Override
 			public void run() {
@@ -1124,7 +1124,7 @@
 		};
 		fParseBindingFromKeyAction.setToolTipText("Parse Binding from Key..."); //$NON-NLS-1$
 		fParseBindingFromKeyAction.setEnabled(true);
-		
+
 		fFocusAction = new Action() {
 			@Override
 			public void run() {
@@ -1146,7 +1146,7 @@
 		fCollapseAction.setToolTipText("Collapse Selected Node"); //$NON-NLS-1$
 		fCollapseAction.setEnabled(false);
 		ASTViewImages.setImageDescriptors(fCollapseAction, ASTViewImages.COLLAPSE);
-		
+
 		fExpandAction = new Action() {
 			@Override
 			public void run() {
@@ -1157,16 +1157,16 @@
 		fExpandAction.setToolTipText("Expand Selected Node"); //$NON-NLS-1$
 		fExpandAction.setEnabled(false);
 		ASTViewImages.setImageDescriptors(fExpandAction, ASTViewImages.EXPAND);
-		
+
 		fCopyAction= new TreeCopyAction(new Tree[] {fViewer.getTree(), fTray.getTree()});
-		
+
 		fDoubleClickAction = new Action() {
 			@Override
 			public void run() {
 				performDoubleClick();
 			}
 		};
-		
+
 		fLinkWithEditor = new Action() {
 			@Override
 			public void run() {
@@ -1178,7 +1178,7 @@
 		fLinkWithEditor.setToolTipText("Link With Editor"); //$NON-NLS-1$
 		fLinkWithEditor.setActionDefinitionId(IWorkbenchCommandConstants.NAVIGATE_TOGGLE_LINK_WITH_EDITOR);
 		ASTViewImages.setImageDescriptors(fLinkWithEditor, ASTViewImages.LINK_WITH_EDITOR);
-			
+
 		fASTVersionToggleActions= new ASTLevelToggle[] {
 				new ASTLevelToggle("AST Level &2 (1.2)", JLS2), //$NON-NLS-1$
 				new ASTLevelToggle("AST Level &3 (1.5)", JLS3), //$NON-NLS-1$
@@ -1191,7 +1191,7 @@
 				new ASTLevelToggle("AST Level 1&3 (13)", JLS13), //$NON-NLS-1$
 				new ASTLevelToggle("AST Level 1&4 (14)", JLS14), //$NON-NLS-1$
 		};
-		
+
 		fAddToTrayAction= new Action() {
 			@Override
 			public void run() {
@@ -1202,7 +1202,7 @@
 		fAddToTrayAction.setToolTipText("Add Selected Node to Comparison Tray"); //$NON-NLS-1$
 		fAddToTrayAction.setEnabled(false);
 		ASTViewImages.setImageDescriptors(fAddToTrayAction, ASTViewImages.ADD_TO_TRAY);
-		
+
 		fDeleteAction= new Action() {
 			@Override
 			public void run() {
@@ -1215,10 +1215,10 @@
 		fDeleteAction.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_TOOL_DELETE));
 		fDeleteAction.setId(ActionFactory.DELETE.getId());
 		fDeleteAction.setActionDefinitionId(IWorkbenchCommandConstants.EDIT_DELETE);
-		
+
 		refreshASTSettingsActions();
 	}
-	
+
 
 	private void refreshAST() throws CoreException {
 		ASTNode node= getASTNodeNearSelection((IStructuredSelection) fViewer.getSelection());
@@ -1231,13 +1231,13 @@
 
 		internalSetInput(fTypeRoot, offset, length);
 	}
-		
+
 	protected void setASTLevel(int level, boolean doRefresh) {
 		int oldLevel= fCurrentASTLevel;
 		fCurrentASTLevel= level;
 
 		fDialogSettings.put(SETTINGS_JLS, fCurrentASTLevel);
-		
+
 		if (doRefresh && fTypeRoot != null && oldLevel != fCurrentASTLevel) {
 			try {
 				refreshAST();
@@ -1248,25 +1248,23 @@
 			}
 		}
 		// update action state
-		for (int i= 0; i < fASTVersionToggleActions.length; i++) {
-			ASTLevelToggle curr= fASTVersionToggleActions[i];
-			curr.setChecked(curr.getLevel() == fCurrentASTLevel);
+		for (ASTView.ASTLevelToggle action : fASTVersionToggleActions) {
+			action.setChecked(action.getLevel() == fCurrentASTLevel);
 		}
 	}
-	
+
 	protected void setASTInputType(int inputKind) {
 		if (inputKind != fCurrentInputKind) {
 			fCurrentInputKind= inputKind;
 			fDialogSettings.put(SETTINGS_INPUT_KIND, inputKind);
-			for (int i= 0; i < fASTInputKindActions.length; i++) {
-				ASTInputKindAction curr= fASTInputKindActions[i];
-				curr.setChecked(curr.getInputKind() == inputKind);
+			for (ASTView.ASTInputKindAction action : fASTInputKindActions) {
+				action.setChecked(action.getInputKind() == inputKind);
 			}
 			refreshASTSettingsActions();
 			performRefresh();
 		}
 	}
-	
+
 	private ASTNode getASTNodeNearSelection(IStructuredSelection selection) {
 		Object elem= selection.getFirstElement();
 		if (elem instanceof ASTAttribute) {
@@ -1276,32 +1274,32 @@
 		}
 		return null;
 	}
-	
+
 	private void installModificationListener() {
 		fCurrentDocument= fEditor.getDocumentProvider().getDocument(fEditor.getEditorInput());
 		fCurrentDocument.addDocumentListener(fSuperListener);
 	}
-	
+
 	private void uninstallModificationListener() {
 		if (fCurrentDocument != null) {
 			fCurrentDocument.removeDocumentListener(fSuperListener);
 			fCurrentDocument= null;
 		}
 	}
-		
+
 	protected void handleDocumentDisposed() {
 		uninstallModificationListener();
 	}
-	
+
 	protected void handleDocumentChanged() {
 		setASTUptoDate(false);
 	}
-	
+
 	protected void handleSelectionChanged(ISelection selection) {
 		fExpandAction.setEnabled(!selection.isEmpty());
 		fCollapseAction.setEnabled(!selection.isEmpty());
 		fCopyAction.setEnabled(!selection.isEmpty());
-		
+
 		boolean addEnabled= false;
 		IStructuredSelection structuredSelection= (IStructuredSelection) selection;
 		if (structuredSelection.size() == 1 && fViewer.getTree().isFocusControl()) {
@@ -1336,17 +1334,17 @@
 					setContentDescription(e.getStatus().getMessage());
 				}
 			}
-			
+
 		} else { // fRoot != null && part == fEditor
 			doLinkWithEditor(selection);
 		}
 	}
-	
+
 	private void doLinkWithEditor(ISelection selection) {
 		ITextSelection textSelection= (ITextSelection) selection;
 		int offset= textSelection.getOffset();
 		int length= textSelection.getLength();
-		
+
 		ASTNode covering= NodeFinder.perform(fRoot, offset, length);
 		if (covering != null) {
 			fViewer.reveal(covering);
@@ -1361,7 +1359,7 @@
 	protected void performLinkWithEditor() {
 		fDoLinkWithEditor= fLinkWithEditor.isChecked();
 		fDialogSettings.put(SETTINGS_LINK_WITH_EDITOR, fDoLinkWithEditor);
-		
+
 
 		if (fDoLinkWithEditor && fEditor != null) {
 			ISelectionProvider selectionProvider= fEditor.getSelectionProvider();
@@ -1376,10 +1374,9 @@
 		if (selection.isEmpty()) {
 			fViewer.collapseAll();
 		} else {
-			Object[] selected= selection.toArray();
 			fViewer.getTree().setRedraw(false);
-			for (int i= 0; i < selected.length; i++) {
-				fViewer.collapseToLevel(selected[i], AbstractTreeViewer.ALL_LEVELS);
+			for (Object s : selection.toArray()) {
+				fViewer.collapseToLevel(s, AbstractTreeViewer.ALL_LEVELS);
 			}
 			fViewer.getTree().setRedraw(true);
 		}
@@ -1390,10 +1387,9 @@
 		if (selection.isEmpty()) {
 			fViewer.expandToLevel(3);
 		} else {
-			Object[] selected= selection.toArray();
 			fViewer.getTree().setRedraw(false);
-			for (int i= 0; i < selected.length; i++) {
-				fViewer.expandToLevel(selected[i], 3);
+			for (Object s : selection.toArray()) {
+				fViewer.expandToLevel(s, 3);
 			}
 			fViewer.getTree().setRedraw(true);
 		}
@@ -1409,7 +1405,7 @@
 			}
 		}
 	}
-	
+
 	protected void performRefresh() {
 		if (fTypeRoot != null) {
 			try {
@@ -1434,44 +1430,44 @@
 		ASTViewPlugin.log(message, e);
 		ErrorDialog.openError(getSite().getShell(), "AST View", message, e.getStatus()); //$NON-NLS-1$
 	}
-	
+
 	private void showAndLogError(String message, Throwable e) {
 		IStatus status= new Status(IStatus.ERROR, ASTViewPlugin.getPluginId(), 0, message, e);
 		ASTViewPlugin.log(status);
 		ErrorDialog.openError(getSite().getShell(), "AST View", null, status); //$NON-NLS-1$
 	}
-		
+
 	protected void performCreateBindings() {
 		fCreateBindings= fCreateBindingsAction.isChecked();
 		fDialogSettings.put(SETTINGS_NO_BINDINGS, !fCreateBindings);
 		performRefresh();
 	}
-	
+
 	protected void performStatementsRecovery() {
 		fStatementsRecovery= fStatementsRecoveryAction.isChecked();
 		fDialogSettings.put(SETTINGS_NO_STATEMENTS_RECOVERY, !fStatementsRecovery);
 		performRefresh();
 	}
-	
+
 	protected void performBindingsRecovery() {
 		fBindingsRecovery= fBindingsRecoveryAction.isChecked();
 		fDialogSettings.put(SETTINGS_NO_BINDINGS_RECOVERY, !fBindingsRecovery);
 		performRefresh();
 	}
-	
+
 	protected void performIgnoreMethodBodies() {
 		fIgnoreMethodBodies= fIgnoreMethodBodiesAction.isChecked();
 		fDialogSettings.put(SETTINGS_IGNORE_METHOD_BODIES, fIgnoreMethodBodies);
 		performRefresh();
 	}
-	
+
 	protected void performFilterNonRelevant() {
 		boolean showNonRelevant= !fFilterNonRelevantAction.isChecked();
 		fNonRelevantFilter.setShowNonRelevant(showNonRelevant);
 		fDialogSettings.put(SETTINGS_SHOW_NON_RELEVANT, showNonRelevant);
 		fViewer.refresh();
 	}
-	
+
 	protected void performFindDeclaringNode() {
 		String msg= "Find Declaring Node from Key";
 		String key= askForKey(msg);
@@ -1492,13 +1488,13 @@
 		InputDialog dialog= new InputDialog(getSite().getShell(), dialogTitle, "Key: (optionally surrounded by <KEY: \"> and <\">)", "", null);
 		if (dialog.open() != Window.OK)
 			return null;
-		
+
 		String key= dialog.getValue();
 		if (key.startsWith("KEY: \"") && key.endsWith("\""))
 			key= key.substring(6, key.length() - 1);
 		return key;
 	}
-	
+
 	protected void performParseBindingFromKey() {
 		String msg= "Parse Binding from Key";
 		String key= askForKey(msg);
@@ -1533,15 +1529,15 @@
 		fViewer.add(viewerInput, item);
 		fViewer.setSelection(new StructuredSelection(item), true);
 	}
-	
+
 	protected void performParseBindingFromElement() {
 		InputDialog dialog= new InputDialog(getSite().getShell(), "Parse Binding from Java Element", "IJavaElement#getHandleIdentifier():", "", null);
 		if (dialog.open() != Window.OK)
 			return;
-		
+
 		String handleIdentifier= dialog.getValue();
 		IJavaElement handle= JavaCore.create(handleIdentifier);
-		
+
 		Object viewerInput= fViewer.getInput();
 		ASTAttribute item;
 		if (handle == null) {
@@ -1561,18 +1557,18 @@
 		fViewer.add(viewerInput, item);
 		fViewer.setSelection(new StructuredSelection(item), true);
 	}
-	
+
 	protected void performDoubleClick() {
 		if (fEditor == null) {
 			return;
 		}
-		
+
 		ISelection selection = fViewer.getSelection();
 		Object obj = ((IStructuredSelection) selection).getFirstElement();
 
 		boolean isTripleClick= (obj == fPreviousDouble);
 		fPreviousDouble= isTripleClick ? null : obj;
-		
+
 		if (obj instanceof ExceptionAttribute) {
 			Throwable exception= ((ExceptionAttribute) obj).getException();
 			if (exception != null) {
@@ -1581,11 +1577,11 @@
 				return;
 			}
 		}
-		
+
 		ASTNode node= null, nodeEnd= null;
 		if (obj instanceof ASTNode) {
 			node= (ASTNode) obj;
-			
+
 		} else if (obj instanceof NodeProperty) {
 			Object val= ((NodeProperty) obj).getNode();
 			if (val instanceof ASTNode) {
@@ -1599,7 +1595,7 @@
 					fViewer.getTree().getDisplay().beep();
 				}
 			}
-			
+
 		} else if (obj instanceof Binding) {
 			IBinding binding= ((Binding) obj).getBinding();
 			ASTNode declaring= fRoot.findDeclaringNode(binding);
@@ -1610,12 +1606,12 @@
 				fViewer.getTree().getDisplay().beep();
 			}
 			return;
-			
+
 		} else if (obj instanceof ProblemNode) {
 			ProblemNode problemNode= (ProblemNode) obj;
 			EditorUtility.selectInEditor(fEditor, problemNode.getOffset(), problemNode.getLength());
 			return;
-			
+
 		} else if (obj instanceof JavaElement) {
 			IJavaElement javaElement= ((JavaElement) obj).getJavaElement();
 			if (javaElement instanceof IPackageFragment) {
@@ -1641,7 +1637,7 @@
 			}
 			return;
 		}
-		
+
 		if (node != null) {
 			int offset= isTripleClick ? fRoot.getExtendedStartPosition(node) : node.getStartPosition();
 			int length;
@@ -1671,7 +1667,7 @@
 		}
 		setTraySelection(selection);
 	}
-	
+
 	private void setTraySelection(IStructuredSelection selection) {
 		fTray.setSelection(selection, true);
 		TreeItem[] itemSelection= fTray.getTree().getSelection();
@@ -1697,7 +1693,7 @@
 			fViewer.setSelection(new StructuredSelection(binding), true);
 		}
 	}
-		
+
 	protected void performDelete() {
 		boolean removed= false;
 		IStructuredSelection selection= (IStructuredSelection) fTray.getSelection();
@@ -1707,13 +1703,13 @@
 				obj= ((DynamicAttributeProperty) obj).getParent();
 			if (obj instanceof DynamicBindingProperty)
 				obj= ((DynamicBindingProperty) obj).getParent();
-			
+
 			removed|= fTrayRoots.remove(obj);
 		}
 		if (removed)
 			fTray.setInput(fTrayRoots);
 	}
-	
+
 	@Override
 	public void setFocus() {
 		fViewer.getControl().setFocus();
diff --git a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/ASTViewContentProvider.java b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/ASTViewContentProvider.java
index db17579..4190bfa 100644
--- a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/ASTViewContentProvider.java
+++ b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/ASTViewContentProvider.java
@@ -1,7 +1,7 @@
 /*******************************************************************************
  * Copyright (c) 2000, 2017 IBM Corporation and others.
  *
- * This program and the accompanying materials 
+ * 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/
@@ -62,16 +62,16 @@
 	@Override
 	public void inputChanged(Viewer v, Object oldInput, Object newInput) {
 	}
-	
+
 	@Override
 	public void dispose() {
 	}
-	
+
 	@Override
 	public Object[] getElements(Object parent) {
 		return getChildren(parent);
 	}
-	
+
 	@Override
 	public Object getParent(Object child) {
 		if (child instanceof ASTNode) {
@@ -96,7 +96,7 @@
 		}
 		return new Object[0];
 	}
-	
+
 	private Object[] getNodeChildren(ASTNode node) {
 		ArrayList<Object> res= new ArrayList<>();
 
@@ -104,7 +104,7 @@
 			Expression expression= (Expression) node;
 			ITypeBinding expressionTypeBinding= expression.resolveTypeBinding();
 			res.add(createExpressionTypeBinding(node, expressionTypeBinding));
-			
+
 			// expressions:
 			if (expression instanceof Name) {
 				IBinding binding= ((Name) expression).resolveBinding();
@@ -154,7 +154,7 @@
 			// Expression attributes:
 			res.add(new GeneralAttribute(expression, "Boxing: " + expression.resolveBoxing() + "; Unboxing: " + expression.resolveUnboxing())); //$NON-NLS-1$ //$NON-NLS-2$
 			res.add(new GeneralAttribute(expression, "ConstantExpressionValue", expression.resolveConstantExpressionValue())); //$NON-NLS-1$
-		
+
 		// references:
 		} else if (node instanceof ConstructorInvocation) {
 			IMethodBinding binding= ((ConstructorInvocation) node).resolveConstructorBinding();
@@ -171,7 +171,7 @@
 		} else if (node instanceof Type) {
 			IBinding binding= ((Type) node).resolveBinding();
 			res.add(createBinding(node, binding));
-			
+
 		// declarations:
 		} else if (node instanceof AbstractTypeDeclaration) {
 			IBinding binding= ((AbstractTypeDeclaration) node).resolveBinding();
@@ -209,15 +209,15 @@
 			IBinding binding= ((ModuleDeclaration) node).resolveBinding();
 			res.add(createBinding(node, binding));
 		}
- 		
-		
-		
+
+
+
 		List<StructuralPropertyDescriptor> list= node.structuralPropertiesForType();
 		for (int i= 0; i < list.size(); i++) {
 			StructuralPropertyDescriptor curr= list.get(i);
 			res.add(new NodeProperty(node, curr));
 		}
-		
+
 		if (node instanceof CompilationUnit) {
 			CompilationUnit root= (CompilationUnit) node;
 			res.add(new JavaElement(root, root.getJavaElement()));
@@ -226,10 +226,10 @@
 			res.add(new SettingsProperty(root));
 			res.add(new WellKnownTypesProperty(root));
 		}
-		
+
 		return res.toArray();
 	}
-	
+
 	private Binding createBinding(ASTNode parent, IBinding binding) {
 		String label= Binding.getBindingLabel(binding);
 		return new Binding(parent, label, binding, true);
@@ -239,7 +239,7 @@
 		String label= "> (Expression) type binding"; //$NON-NLS-1$
 		return new Binding(parent, label, binding, true);
 	}
-	
+
 	@Override
 	public boolean hasChildren(Object parent) {
 		return getChildren(parent).length > 0;
diff --git a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/ASTViewLabelProvider.java b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/ASTViewLabelProvider.java
index 4608996..03f18a8 100644
--- a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/ASTViewLabelProvider.java
+++ b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/ASTViewLabelProvider.java
@@ -1,20 +1,19 @@
 /*******************************************************************************
  * Copyright (c) 2000, 2018 IBM Corporation and others.
  *
- * This program and the accompanying materials 
+ * 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:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
 
 package org.eclipse.jdt.astview.views;
 
-import java.util.Iterator;
 import java.util.List;
 
 import org.eclipse.swt.SWT;
@@ -42,21 +41,21 @@
 public class ASTViewLabelProvider extends LabelProvider implements IColorProvider, IFontProvider {
 	private int fSelectionStart;
 	private int fSelectionLength;
-	
+
 	private final Color fBlue, fRed, fDarkGray, fDarkGreen, fDarkRed;
 	private final Font fBold;
-	
+
 	//to dispose:
 	private final Font fAllocatedBoldItalic;
 	private final Color fLightRed;
 	private Color fSelectedElemBGColor;
-	
+
 	public ASTViewLabelProvider() {
 		fSelectionStart= -1;
 		fSelectionLength= -1;
-		
+
 		Display display= Display.getCurrent();
-		
+
 		fRed= display.getSystemColor(SWT.COLOR_RED);
 		fDarkGray= display.getSystemColor(SWT.COLOR_DARK_GRAY);
 		fBlue= display.getSystemColor(SWT.COLOR_DARK_BLUE);
@@ -74,15 +73,15 @@
 			}
 		}
 		fLightRed= new Color(display, 255, 190, 190);
-		
+
 		fBold= PlatformUI.getWorkbench().getThemeManager().getCurrentTheme().getFontRegistry().getBold(JFaceResources.DEFAULT_FONT);
 		FontData[] fontData= fBold.getFontData();
-		for (int i= 0; i < fontData.length; i++) {
-			fontData[i].setStyle(fontData[i].getStyle() | SWT.ITALIC);
+		for (FontData fd : fontData) {
+			fd.setStyle(fd.getStyle() | SWT.ITALIC);
 		}
 		fAllocatedBoldItalic= new Font(display, fontData);
 	}
-	
+
 	public void setSelectedRange(int start, int length) {
 		fSelectionStart= start;
 		fSelectionLength= length;
@@ -98,9 +97,9 @@
 		} else if (obj instanceof ASTAttribute) {
 			buf.append(((ASTAttribute) obj).getLabel());
 		}
-		return buf.toString(); 
+		return buf.toString();
 	}
-	
+
 	private void getNodeType(ASTNode node, StringBuffer buf) {
 		buf.append(Signature.getSimpleName(node.getClass().getName()));
 		buf.append(" ["); //$NON-NLS-1$
@@ -115,8 +114,8 @@
 			buf.append(" (recovered)"); //$NON-NLS-1$
 		}
 	}
-	
-	
+
+
 	@Override
 	public Image getImage(Object obj) {
 		if (obj instanceof ASTNode) {
@@ -124,7 +123,7 @@
 		} else if (obj instanceof ASTAttribute) {
 			return ((ASTAttribute) obj).getImage();
 		}
-		
+
 		return null;
 //		String imageKey = ISharedImages.IMG_OBJ_ELEMENT;
 //		if (obj instanceof ASTNode) {
@@ -139,7 +138,7 @@
 			return fRed;
 		if ((element instanceof ExceptionAttribute) && ((ExceptionAttribute) element).getException() != null)
 			return fRed;
-		
+
 		if (element instanceof ASTNode) {
 			ASTNode node= (ASTNode) element;
 			if ((node.getFlags() & ASTNode.MALFORMED) != 0) {
@@ -178,18 +177,18 @@
 		}
 		return null;
 	}
-	
+
 	private boolean isNotProperlyNested(Object element) {
 		if (element instanceof ASTNode) {
 			ASTNode node= (ASTNode) element;
 			int start= node.getStartPosition();
 			int end= start + node.getLength();
-			
+
 			ASTNode parent= node.getParent();
 			if (parent != null) {
 				int parentstart= parent.getStartPosition();
 				int parentend= parentstart + parent.getLength();
-				
+
 				if (start < parentstart || end > parentend) {
 					return true;
 				}
@@ -197,7 +196,7 @@
 		}
 		return false;
 	}
-	
+
 	private boolean isInsideNode(ASTNode node) {
 		int start= node.getStartPosition();
 		int end= start + node.getLength();
@@ -206,7 +205,7 @@
 		}
 		return false;
 	}
-	
+
 	private boolean isInside(Object element) {
 		if (element instanceof ASTNode) {
 			return isInsideNode((ASTNode) element);
@@ -216,8 +215,7 @@
 			if (object instanceof ASTNode) {
 				return isInsideNode((ASTNode) object);
 			} else if (object instanceof List) {
-				for (Iterator<?> iter= ((List<?>) object).iterator(); iter.hasNext(); ) {
-					Object child= iter.next();
+				for (Object child : (List<?>) object) {
 					if (isInside(child)) {
 						return true;
 					}
@@ -238,7 +236,7 @@
 		}
 		return null;
 	}
-	
+
 	@Override
 	public void dispose() {
 		super.dispose();
@@ -246,5 +244,5 @@
 		fLightRed.dispose();
 		fAllocatedBoldItalic.dispose();
 	}
-	
+
 }
diff --git a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/Binding.java b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/Binding.java
index 6d28aa7..cb0477d 100644
--- a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/Binding.java
+++ b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/Binding.java
@@ -39,28 +39,28 @@
  *
  */
 public class Binding extends ASTAttribute {
-	
+
 	private final IBinding fBinding;
 	private final String fLabel;
 	private final Object fParent;
 	private final boolean fIsRelevant;
-	
+
 	public Binding(Object parent, String label, IBinding binding, boolean isRelevant) {
 		fParent= parent;
 		fBinding= binding;
 		fLabel= label;
 		fIsRelevant= isRelevant;
 	}
-	
+
 	@Override
 	public Object getParent() {
 		return fParent;
 	}
-	
+
 	public IBinding getBinding() {
 		return fBinding;
 	}
-	
+
 
 	public boolean hasBindingProperties() {
 		return fBinding != null;
@@ -69,12 +69,12 @@
 	public boolean isRelevant() {
 		return fIsRelevant;
 	}
-	
-	
+
+
 	private static boolean isType(int typeKinds, int kind) {
 		return (typeKinds & kind) != 0;
 	}
-	
+
 	@Override
 	public Object[] getChildren() {
 		try {
@@ -107,22 +107,22 @@
 					res.add(new BindingProperty(this, "CONSTANT VALUE", variableBinding.getConstantValue(), true)); //$NON-NLS-1$ //$NON-NLS-2$
 					res.add(new BindingProperty(this, "IS EFFECTIVELY FINAL", variableBinding.isEffectivelyFinal(), true)); //$NON-NLS-1$
 					break;
-					
+
 				case IBinding.PACKAGE:
 					IPackageBinding packageBinding= (IPackageBinding) fBinding;
 					res.add(new BindingProperty(this, "IS UNNAMED", packageBinding.isUnnamed(), true)); //$NON-NLS-1$
 					res.add(new BindingProperty(this, "IS SYNTHETIC", fBinding.isSynthetic(), true)); //$NON-NLS-1$
 					res.add(new BindingProperty(this, "IS DEPRECATED", fBinding.isDeprecated(), true)); //$NON-NLS-1$
 					break;
-					
+
 				case IBinding.TYPE:
 					ITypeBinding typeBinding= (ITypeBinding) fBinding;
 					res.add(new BindingProperty(this, "QUALIFIED NAME", typeBinding.getQualifiedName(), true)); //$NON-NLS-1$
-					
+
 					int typeKind= getTypeKind(typeBinding);
 					boolean isRefType= isType(typeKind, REF_TYPE);
 					final boolean isNonPrimitive= ! isType(typeKind, PRIMITIVE_TYPE);
-					
+
 					StringBuffer kinds= new StringBuffer("KIND:"); //$NON-NLS-1$
 					if (typeBinding.isArray()) kinds.append(" isArray"); //$NON-NLS-1$
 					if (typeBinding.isCapture()) kinds.append(" isCapture"); //$NON-NLS-1$
@@ -136,7 +136,7 @@
 					if (typeBinding.isInterface()) kinds.append(" isInterface"); //$NON-NLS-1$
 					if (typeBinding.isEnum()) kinds.append(" isEnum"); //$NON-NLS-1$
 					res.add(new BindingProperty(this, kinds, true)); //$NON-NLS-1$
-					
+
 					StringBuffer generics= new StringBuffer("GENERICS:"); //$NON-NLS-1$
 					if (typeBinding.isRawType()) generics.append(" isRawType"); //$NON-NLS-1$
 					if (typeBinding.isGenericType()) generics.append(" isGenericType"); //$NON-NLS-1$
@@ -162,7 +162,7 @@
 							res.add(new BindingProperty(this, createArrayTypeLabel, msg, false));
 						}
 					}
-					
+
 					StringBuffer origin= new StringBuffer("ORIGIN:"); //$NON-NLS-1$
 					if (typeBinding.isTopLevel()) origin.append(" isTopLevel"); //$NON-NLS-1$
 					if (typeBinding.isNested()) origin.append(" isNested"); //$NON-NLS-1$
@@ -170,7 +170,7 @@
 					if (typeBinding.isMember()) origin.append(" isMember"); //$NON-NLS-1$
 					if (typeBinding.isAnonymous()) origin.append(" isAnonymous"); //$NON-NLS-1$
 					res.add(new BindingProperty(this, origin, isRefType));
-					
+
 					res.add(new BindingProperty(this, "IS FROM SOURCE", typeBinding.isFromSource(), isType(typeKind, REF_TYPE | VARIABLE_TYPE | CAPTURE_TYPE))); //$NON-NLS-1$
 
 					res.add(new Binding(this, "PACKAGE", typeBinding.getPackage(), isRefType)); //$NON-NLS-1$
@@ -179,7 +179,7 @@
 					res.add(new Binding(this, "DECLARING MEMBER", typeBinding.getDeclaringMember(), typeBinding.isLocal())); //$NON-NLS-1$
 					res.add(new BindingProperty(this, "MODIFIERS", getModifiersString(fBinding.getModifiers(), false), isRefType)); //$NON-NLS-1$
 					res.add(new BindingProperty(this, "BINARY NAME", typeBinding.getBinaryName(), true)); //$NON-NLS-1$
-					
+
 					String isTypeDeclaration= typeBinding == typeBinding.getTypeDeclaration() ? " ( == this)" : " ( != this)";
 					res.add(new Binding(this, "TYPE DECLARATION" + isTypeDeclaration, typeBinding.getTypeDeclaration(), true)); //$NON-NLS-1$
 					String isErasure= typeBinding == typeBinding.getErasure() ? " ( == this)" : " ( != this)";
@@ -203,7 +203,7 @@
 					res.add(new BindingProperty(this, "IS DEPRECATED", fBinding.isDeprecated(), isRefType)); //$NON-NLS-1$
 					res.add(new BindingProperty(this, "TYPE ANNOTATIONS", typeBinding.getTypeAnnotations(), true)); //$NON-NLS-1$
 					break;
-					
+
 				case IBinding.METHOD:
 					IMethodBinding methodBinding= (IMethodBinding) fBinding;
 					res.add(new BindingProperty(this, "IS CONSTRUCTOR", methodBinding.isConstructor(), true)); //$NON-NLS-1$
@@ -215,23 +215,23 @@
 					res.add(new BindingProperty(this, "PARAMETER TYPES", methodBinding.getParameterTypes(), true)); //$NON-NLS-1$
 					res.add(new BindingProperty(this, "IS VARARGS", methodBinding.isVarargs(), true)); //$NON-NLS-1$
 					res.add(new BindingProperty(this, "EXCEPTION TYPES", methodBinding.getExceptionTypes(), true)); //$NON-NLS-1$
-					
+
 					StringBuffer genericsM= new StringBuffer("GENERICS:"); //$NON-NLS-1$
 					if (methodBinding.isRawMethod()) genericsM.append(" isRawMethod"); //$NON-NLS-1$
 					if (methodBinding.isGenericMethod()) genericsM.append(" isGenericMethod"); //$NON-NLS-1$
 					if (methodBinding.isParameterizedMethod()) genericsM.append(" isParameterizedMethod"); //$NON-NLS-1$
 					res.add(new BindingProperty(this, genericsM, true));
-					
+
 					String isMethodDeclaration= methodBinding == methodBinding.getMethodDeclaration() ? " ( == this)" : " ( != this)";
 					res.add(new Binding(this, "METHOD DECLARATION" + isMethodDeclaration, methodBinding.getMethodDeclaration(), true)); //$NON-NLS-1$
 					res.add(new BindingProperty(this, "TYPE PARAMETERS", methodBinding.getTypeParameters(), true)); //$NON-NLS-1$
 					res.add(new BindingProperty(this, "TYPE ARGUMENTS", methodBinding.getTypeArguments(), true)); //$NON-NLS-1$
 					res.add(new BindingProperty(this, "IS SYNTHETIC", fBinding.isSynthetic(), true)); //$NON-NLS-1$
 					res.add(new BindingProperty(this, "IS DEPRECATED", fBinding.isDeprecated(), true)); //$NON-NLS-1$
-					
+
 					res.add(new BindingProperty(this, "IS ANNOTATION MEMBER", methodBinding.isAnnotationMember(), true)); //$NON-NLS-1$
 					res.add(Binding.createValueAttribute(this, "DEFAULT VALUE", methodBinding.getDefaultValue()));
-					
+
 					int parameterCount= methodBinding.getParameterTypes().length;
 					BindingProperty[] parametersAnnotations= new BindingProperty[parameterCount];
 					for (int i= 0; i < parameterCount; i++) {
@@ -239,21 +239,21 @@
 					}
 					res.add(new BindingProperty(this, "PARAMETER ANNOTATIONS", parametersAnnotations, true));
 					break;
-					
+
 				case IBinding.ANNOTATION:
 					IAnnotationBinding annotationBinding= (IAnnotationBinding) fBinding;
 					res.add(new Binding(this, "ANNOTATION TYPE", annotationBinding.getAnnotationType(), true));
 					res.add(new BindingProperty(this, "DECLARED MEMBER VALUE PAIRS", annotationBinding.getDeclaredMemberValuePairs(), true));
 					res.add(new BindingProperty(this, "ALL MEMBER VALUE PAIRS", annotationBinding.getAllMemberValuePairs(), true));
 					break;
-					
+
 				case IBinding.MEMBER_VALUE_PAIR:
 					IMemberValuePairBinding memberValuePairBinding= (IMemberValuePairBinding) fBinding;
 					res.add(new Binding(this, "METHOD BINDING", memberValuePairBinding.getMethodBinding(), true));
 					res.add(new BindingProperty(this, "IS DEFAULT", memberValuePairBinding.isDefault(), true));
 					res.add(Binding.createValueAttribute(this, "VALUE", memberValuePairBinding.getValue()));
 					break;
-				
+
 				case IBinding.MODULE:
 					IModuleBinding moduleBinding= (IModuleBinding) fBinding;
 					res.add(new BindingProperty(this, "REQUIRED MODULES", moduleBinding.getRequiredModules(), true));
@@ -265,7 +265,7 @@
 					res.add(createPropertiesWithSecondary(moduleBinding.getServices(), "SERVICES", "PROVIDES", "WITH",
 							moduleBinding::getImplementations));
 					break;
-					
+
 				default:
 					break;
 			}
@@ -327,7 +327,7 @@
 
 	private final static int GENERIC= 1 << 8;
 	private final static int PARAMETRIZED= 1 << 9;
-	
+
 	private int getTypeKind(ITypeBinding typeBinding) {
 		if (typeBinding.isArray()) return ARRAY_TYPE;
 		if (typeBinding.isCapture()) return CAPTURE_TYPE;
@@ -335,10 +335,10 @@
 		if (typeBinding.isPrimitive()) return PRIMITIVE_TYPE;
 		if (typeBinding.isTypeVariable()) return VARIABLE_TYPE;
 		if (typeBinding.isWildcardType()) return WILDCARD_TYPE;
-		
+
 		if (typeBinding.isGenericType())  return REF_TYPE | GENERIC;
 		if (typeBinding.isParameterizedType() || typeBinding.isRawType()) return REF_TYPE | PARAMETRIZED;
-		
+
 		return REF_TYPE;
 	}
 
@@ -393,7 +393,7 @@
 				case IBinding.MODULE:
 					buf.append(fBinding.getName());
 			}
-			
+
 		} else {
 			buf.append("null"); //$NON-NLS-1$
 		}
@@ -403,7 +403,7 @@
 
 	public static void appendAnnotatedQualifiedName(StringBuffer buf, ITypeBinding typeBinding) {
 		String debugString= typeBinding.toString(); // XXX: hack, but that's OK for a debugging tool...
-		if (debugString.indexOf('\n') == -1 || typeBinding.getTypeAnnotations().length != 0) {			
+		if (debugString.indexOf('\n') == -1 || typeBinding.getTypeAnnotations().length != 0) {
 			// one-liner || outermost type has type annotations
 			buf.append(debugString);
 		} else {
@@ -420,7 +420,7 @@
 	public String toString() {
 		return getLabel();
 	}
-	
+
 	/*
 	 * @see java.lang.Object#equals(java.lang.Object)
 	 */
@@ -431,7 +431,7 @@
 		if (obj == null || !obj.getClass().equals(getClass())) {
 			return false;
 		}
-		
+
 		Binding other= (Binding) obj;
 		if (fParent == null) {
 			if (other.fParent != null)
@@ -439,24 +439,24 @@
 		} else if (! fParent.equals(other.fParent)) {
 			return false;
 		}
-		
+
 		if (fBinding == null) {
 			if (other.fBinding != null)
 				return false;
 		} else if (! fBinding.equals(other.fBinding)) {
 			return false;
 		}
-		
+
 		if (fLabel == null) {
 			if (other.fLabel != null)
 				return false;
 		} else if (! fLabel.equals(other.fLabel)) {
 			return false;
 		}
-		
+
 		return true;
 	}
-	
+
 	/*
 	 * @see java.lang.Object#hashCode()
 	 */
@@ -506,7 +506,7 @@
 	 * Creates an {@link ASTAttribute} for a value from
 	 * {@link IMemberValuePairBinding#getValue()} or from
 	 * {@link IMethodBinding#getDefaultValue()}.
-	 * 
+	 *
 	 * @param parent the parent node
 	 * @param name the attribute name
 	 * @param value the attribute value
@@ -517,39 +517,39 @@
 		if (value instanceof IBinding) {
 			IBinding binding= (IBinding) value;
 			res= new Binding(parent, name + ": " + getBindingLabel(binding), binding, true);
-			
+
 		} else if (value instanceof String) {
 			res= new GeneralAttribute(parent, name, getEscapedStringLiteral((String) value));
-			
+
 		} else if (value instanceof Object[]) {
 			res= new GeneralAttribute(parent, name, (Object[]) value);
-			
+
 		} else if (value instanceof ASTAttribute) {
 			res= (ASTAttribute) value;
-			
+
 		} else {
 			res= new GeneralAttribute(parent, name, value);
 		}
 		return res;
 	}
-	
+
 	public static String getEscapedStringLiteral(String stringValue) {
 		StringLiteral stringLiteral= AST.newAST(ASTView.JLS_LATEST, false).newStringLiteral();
 		stringLiteral.setLiteralValue(stringValue);
 		return stringLiteral.getEscapedValue();
 	}
-	
+
 	public static String getEscapedCharLiteral(char charValue) {
 		CharacterLiteral charLiteral= AST.newAST(ASTView.JLS_LATEST, false).newCharacterLiteral();
 		charLiteral.setCharValue(charValue);
 		return charLiteral.getEscapedValue();
 	}
-	
+
 	private static StringBuffer getModifiersString(int flags, boolean isMethod) {
 		StringBuffer sb = new StringBuffer().append("0x").append(Integer.toHexString(flags)).append(" (");
 		int prologLen= sb.length();
 		int rest= flags;
-		
+
 		rest&= ~ appendFlag(sb, flags, Modifier.PUBLIC, "public ");
 		rest&= ~ appendFlag(sb, flags, Modifier.PRIVATE, "private ");
 		rest&= ~ appendFlag(sb, flags, Modifier.PROTECTED, "protected ");
@@ -565,7 +565,7 @@
 		rest&= ~ appendFlag(sb, flags, Modifier.NATIVE, "native ");
 		rest&= ~ appendFlag(sb, flags, Modifier.ABSTRACT, "abstract ");
 		rest&= ~ appendFlag(sb, flags, Modifier.STRICTFP, "strictfp ");
-		
+
 		if (rest != 0)
 			sb.append("unknown:0x").append(Integer.toHexString(rest)).append(" ");
 		int len = sb.length();
@@ -574,7 +574,7 @@
 		sb.append(")");
 		return sb;
 	}
-	
+
 	private static int appendFlag(StringBuffer sb, int flags, int flag, String name) {
 		if ((flags & flag) != 0) {
 			sb.append(name);
diff --git a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/BindingProperty.java b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/BindingProperty.java
index 7d31f33..7976808 100644
--- a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/BindingProperty.java
+++ b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/BindingProperty.java
@@ -1,13 +1,13 @@
 /*******************************************************************************
  * Copyright (c) 2000, 2017 IBM Corporation and others.
  *
- * This program and the accompanying materials 
+ * 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:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -44,21 +44,21 @@
 		fValues= null;
 		fIsRelevant= isRelevant;
 	}
-	
+
 	public BindingProperty(Binding parent, String name, boolean value, boolean isRelevant) {
 		fParent= parent;
 		fName= name + ": " + String.valueOf(value); //$NON-NLS-1$
 		fValues= null;
 		fIsRelevant= isRelevant;
 	}
-	
+
 	public BindingProperty(Binding parent, String name, int value, boolean isRelevant) {
 		fParent= parent;
 		fName= name + ": " + String.valueOf(value); //$NON-NLS-1$
 		fValues= null;
 		fIsRelevant= isRelevant;
 	}
-	
+
 	public BindingProperty(Binding parent, String name, IBinding[] bindings, boolean isRelevant) {
 		fParent= parent;
 		if (bindings == null) {
@@ -70,7 +70,7 @@
 		}
 		fIsRelevant= isRelevant;
 	}
-	
+
 	public BindingProperty(Binding parent, String name, ASTAttribute[] children, boolean isRelevant) {
 		fParent= parent;
 		if (children == null) {
@@ -80,14 +80,14 @@
 		fName= name + " (" + fValues.length + ')'; //$NON-NLS-1$
 		fIsRelevant= isRelevant;
 	}
-	
+
 	public BindingProperty(Binding parent, StringBuffer label, boolean isRelevant) {
 		fParent= parent;
 		fName= label.toString();
 		fValues= null;
 		fIsRelevant= isRelevant;
 	}
-	
+
 	private Binding[] createBindings(IBinding[] bindings, boolean isRelevant) {
 		Binding[] res= new Binding[bindings.length];
 		for (int i= 0; i < res.length; i++) {
@@ -100,7 +100,7 @@
 	public Object getParent() {
 		return fParent;
 	}
-	
+
 	@Override
 	public Object[] getChildren() {
 		if (fValues != null) {
@@ -108,7 +108,7 @@
 		}
 		return EMPTY;
 	}
-	
+
 	@Override
 	public String getLabel() {
 		return fName;
@@ -118,12 +118,12 @@
 	public Image getImage() {
 		return null;
 	}
-	
+
 	@Override
 	public String toString() {
 		return getLabel();
 	}
-	
+
 	public boolean isRelevant() {
 		return fIsRelevant;
 	}
@@ -138,7 +138,7 @@
 		if (obj == null || !obj.getClass().equals(getClass())) {
 			return false;
 		}
-		
+
 		BindingProperty other= (BindingProperty) obj;
 		if (fParent == null) {
 			if (other.fParent != null)
@@ -146,17 +146,17 @@
 		} else if (! fParent.equals(other.fParent)) {
 			return false;
 		}
-		
+
 		if (fName == null) {
 			if (other.fName != null)
 				return false;
 		} else if (! fName.equals(other.fName)) {
 			return false;
 		}
-		
+
 		return true;
 	}
-	
+
 	/*
 	 * @see java.lang.Object#hashCode()
 	 */
diff --git a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/CommentsProperty.java b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/CommentsProperty.java
index 803b363..134eb0d 100644
--- a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/CommentsProperty.java
+++ b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/CommentsProperty.java
@@ -1,13 +1,13 @@
 /*******************************************************************************
  * Copyright (c) 2000, 2015 IBM Corporation and others.
  *
- * This program and the accompanying materials 
+ * 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:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -24,7 +24,7 @@
  *
  */
 public class CommentsProperty extends ASTAttribute {
-	
+
 	private final CompilationUnit fRoot;
 
 	public CommentsProperty(CompilationUnit root) {
@@ -65,7 +65,7 @@
 		}
 		return true;
 	}
-	
+
 	/*
 	 * @see java.lang.Object#hashCode()
 	 */
diff --git a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/DynamicAttributeProperty.java b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/DynamicAttributeProperty.java
index dc58901..4cc8bff 100644
--- a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/DynamicAttributeProperty.java
+++ b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/DynamicAttributeProperty.java
@@ -1,13 +1,13 @@
 /*******************************************************************************
  * Copyright (c) 2000, 2006 IBM Corporation and others.
  *
- * This program and the accompanying materials 
+ * 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:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -24,10 +24,10 @@
 	protected static final String N_A= "N/A"; //$NON-NLS-1$
 	private final Object fParent;
 	private final String fName;
-	
+
 	private Object fViewerElement;
 	private String fLabel= "<unknown>";
-	
+
 	public DynamicAttributeProperty(Object parentAttribute, String name) {
 		fParent= parentAttribute;
 		fName= name;
@@ -42,11 +42,11 @@
 	public Object[] getChildren() {
 		return EMPTY;
 	}
-	
+
 	public void setViewerElement(Object viewerAttribute) {
 		if (fViewerElement == viewerAttribute)
 			return;
-		
+
 		fViewerElement= viewerAttribute;
 		fException= null;
 		Object trayObject= ASTView.unwrapAttribute(fParent);
@@ -84,8 +84,8 @@
 	/**
 	 * Executes this dynamic attribute property's query in a protected environment.
 	 * A {@link RuntimeException} thrown by this method is made available via
-	 * {@link #getException()}. 
-	 * 
+	 * {@link #getException()}.
+	 *
 	 * @param viewerObject the object of the element selected in the AST viewer, or <code>null</code> iff none
 	 * @param trayObject the object of the element selected in the comparison tray, or <code>null</code> iff none
 	 * @return this property's result
diff --git a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/DynamicBindingProperty.java b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/DynamicBindingProperty.java
index 90cde84..3c22714 100644
--- a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/DynamicBindingProperty.java
+++ b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/DynamicBindingProperty.java
@@ -1,13 +1,13 @@
 /*******************************************************************************
  * Copyright (c) 2000, 2006 IBM Corporation and others.
  *
- * This program and the accompanying materials 
+ * 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:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -23,10 +23,10 @@
 
 	protected static final String N_A= "N/A"; //$NON-NLS-1$
 	private final Binding fParent;
-	
+
 	private Binding fViewerElement;
 	private String fLabel= "<unknown>";
-	
+
 	public DynamicBindingProperty(Binding parent) {
 		fParent= parent;
 	}
@@ -40,11 +40,11 @@
 	public Object[] getChildren() {
 		return EMPTY;
 	}
-	
+
 	public void setViewerElement(Binding viewerElement) {
 		if (fViewerElement == viewerElement)
 			return;
-		
+
 		fViewerElement= viewerElement;
 		fException= null;
 		IBinding trayBinding= fParent.getBinding();
@@ -70,12 +70,12 @@
 		}
 		fLabel= buf.toString();
 	}
-	
+
 	/**
 	 * Executes this dynamic binding property's query in a protected environment.
 	 * A {@link RuntimeException} thrown by this method is made available via
-	 * {@link #getException()}. 
-	 * 
+	 * {@link #getException()}.
+	 *
 	 * @param viewerBinding the binding of the element selected in the AST viewer, or <code>null</code> iff none
 	 * @param trayBinding the binding of the element selected in the comparison tray, or <code>null</code> iff none
 	 * @return this property's result
diff --git a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/Error.java b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/Error.java
index f460abb..b380ab1 100644
--- a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/Error.java
+++ b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/Error.java
@@ -1,13 +1,13 @@
 /*******************************************************************************
  * Copyright (c) 2000, 2007 IBM Corporation and others.
  *
- * This program and the accompanying materials 
+ * 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:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -18,10 +18,10 @@
 
 
 public class Error extends ExceptionAttribute {
-	
+
 	private final Object fParent;
 	private final String fLabel;
-	
+
 	public Error(Object parent, String label, Throwable thrownException) {
 		fParent= parent;
 		fLabel= label;
@@ -47,7 +47,7 @@
 	public Object getParent() {
 		return fParent;
 	}
-	
+
 	/*
 	 * @see java.lang.Object#equals(java.lang.Object)
 	 */
@@ -58,7 +58,7 @@
 		if (obj == null || !obj.getClass().equals(getClass())) {
 			return false;
 		}
-		
+
 		Error other= (Error) obj;
 		if (fParent == null) {
 			if (other.fParent != null)
@@ -66,17 +66,17 @@
 		} else if (! fParent.equals(other.fParent)) {
 			return false;
 		}
-		
+
 		if (fLabel == null) {
 			if (other.fLabel != null)
 				return false;
 		} else if (! fLabel.equals(other.fLabel)) {
 			return false;
 		}
-		
+
 		return true;
 	}
-	
+
 	/*
 	 * @see java.lang.Object#hashCode()
 	 */
diff --git a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/ExceptionAttribute.java b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/ExceptionAttribute.java
index 495f8b7..06d7031 100644
--- a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/ExceptionAttribute.java
+++ b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/ExceptionAttribute.java
@@ -1,13 +1,13 @@
 /*******************************************************************************
  * Copyright (c) 2000, 2007 IBM Corporation and others.
  *
- * This program and the accompanying materials 
+ * 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:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/GeneralAttribute.java b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/GeneralAttribute.java
index 0b6bc62..883cffd 100644
--- a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/GeneralAttribute.java
+++ b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/GeneralAttribute.java
@@ -1,13 +1,13 @@
 /*******************************************************************************
  * Copyright (c) 2000, 2006 IBM Corporation and others.
  *
- * This program and the accompanying materials 
+ * 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:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -18,23 +18,23 @@
 
 
 public class GeneralAttribute extends ASTAttribute {
-	
+
 	private final Object fParent;
 	private final String fLabel;
 	private final Object[] fChildren;
-	
+
 	public GeneralAttribute(Object parent, String name, Object value) {
 		fParent= parent;
 		fLabel= name + ": " + String.valueOf(value);
 		fChildren= EMPTY;
 	}
-	
+
 	public GeneralAttribute(Object parent, String label) {
 		fParent= parent;
 		fLabel= label;
 		fChildren= EMPTY;
 	}
-	
+
 	public GeneralAttribute(Object parent, String name, Object[] children) {
 		fParent= parent;
 		if (children == null) {
@@ -48,7 +48,7 @@
 			fLabel= name + " (" + String.valueOf(fChildren.length) + ')';
 		}
 	}
-	
+
 	private Object[] createChildren(Object[] children) {
 		ASTAttribute[] res= new ASTAttribute[children.length];
 		for (int i= 0; i < res.length; i++) {
@@ -73,12 +73,12 @@
 	public String getLabel() {
 		return fLabel;
 	}
-	
+
 	@Override
 	public Image getImage() {
 		return null;
 	}
-	
+
 	/*
 	 * @see java.lang.Object#equals(java.lang.Object)
 	 */
@@ -89,7 +89,7 @@
 		if (obj == null || !obj.getClass().equals(getClass())) {
 			return false;
 		}
-		
+
 		GeneralAttribute other= (GeneralAttribute) obj;
 		if (fParent == null) {
 			if (other.fParent != null)
@@ -97,17 +97,17 @@
 		} else if (! fParent.equals(other.fParent)) {
 			return false;
 		}
-		
+
 		if (fLabel == null) {
 			if (other.fLabel != null)
 				return false;
 		} else if (! fLabel.equals(other.fLabel)) {
 			return false;
 		}
-		
+
 		return true;
 	}
-	
+
 	/*
 	 * @see java.lang.Object#hashCode()
 	 */
diff --git a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/JavaElement.java b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/JavaElement.java
index ae43d9a..73a2ffb 100644
--- a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/JavaElement.java
+++ b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/JavaElement.java
@@ -1,13 +1,13 @@
 /*******************************************************************************
  * Copyright (c) 2000, 2005 IBM Corporation and others.
  *
- * This program and the accompanying materials 
+ * 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:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -25,10 +25,10 @@
 public class JavaElement extends ASTAttribute {
 
 	private static final long LABEL_OPTIONS=
-		JavaElementLabels.F_APP_TYPE_SIGNATURE | JavaElementLabels.M_PARAMETER_TYPES | 
+		JavaElementLabels.F_APP_TYPE_SIGNATURE | JavaElementLabels.M_PARAMETER_TYPES |
 		JavaElementLabels.M_APP_RETURNTYPE | JavaElementLabels.ALL_FULLY_QUALIFIED |
 		JavaElementLabels.T_TYPE_PARAMETERS |JavaElementLabels.USE_RESOLVED;
-	
+
 	private final IJavaElement fJavaElement;
 	private final Object fParent;
 
@@ -36,11 +36,11 @@
 		fParent= parent;
 		fJavaElement= javaElement;
 	}
-	
+
 	public IJavaElement getJavaElement() {
 		return fJavaElement;
 	}
-	
+
 	@Override
 	public Object getParent() {
 		return fParent;
@@ -62,7 +62,7 @@
 					+ (fJavaElement.exists() ? "" : " (does not exist)");  //$NON-NLS-1$//$NON-NLS-2$
 		}
 	}
-	
+
 	@Override
 	public Image getImage() {
 		return null;
@@ -80,7 +80,7 @@
 		if (obj == null || !obj.getClass().equals(getClass())) {
 			return false;
 		}
-		
+
 		JavaElement other= (JavaElement) obj;
 		if (fParent == null) {
 			if (other.fParent != null)
@@ -88,17 +88,17 @@
 		} else if (! fParent.equals(other.fParent)) {
 			return false;
 		}
-		
+
 		if (fJavaElement == null) {
 			if (other.fJavaElement != null)
 				return false;
 		} else if (! fJavaElement.equals(other.fJavaElement)) {
 			return false;
 		}
-		
+
 		return true;
 	}
-	
+
 	/*
 	 * @see java.lang.Object#hashCode()
 	 */
diff --git a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/NodeProperty.java b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/NodeProperty.java
index 83bca9b..42b7200 100644
--- a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/NodeProperty.java
+++ b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/NodeProperty.java
@@ -1,13 +1,13 @@
 /*******************************************************************************
  * Copyright (c) 2000, 2015 IBM Corporation and others.
  *
- * This program and the accompanying materials 
+ * 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:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -21,20 +21,20 @@
 import org.eclipse.jdt.core.dom.StructuralPropertyDescriptor;
 
 public class NodeProperty extends ASTAttribute {
-	
+
 	private ASTNode fParent;
 	private StructuralPropertyDescriptor fProperty;
-	
+
 	public NodeProperty(ASTNode parent, StructuralPropertyDescriptor property) {
 		fParent= parent;
 		fProperty= property;
 	}
-	
+
 	@Override
 	public Object getParent() {
 		return fParent;
 	}
-	
+
 	@Override
 	public Object[] getChildren() {
 		Object child= getNode();
@@ -50,7 +50,7 @@
 	public String getLabel() {
 		StringBuilder buf= new StringBuilder();
 		buf.append(getPropertyName());
-		
+
 		if (fProperty.isSimpleProperty()) {
 			buf.append(": "); //$NON-NLS-1$
 			Object node= getNode();
@@ -76,15 +76,15 @@
 	public Image getImage() {
 		return null;
 	}
-	
+
 	public Object getNode() {
 		return fParent.getStructuralProperty(fProperty);
 	}
-	
+
 	public String getPropertyName() {
 		return toConstantName(fProperty.getId());
 	}
-	
+
 	private static String toConstantName(String string) {
 		StringBuilder buf= new StringBuilder();
 		for (int i= 0; i < string.length(); i++) {
@@ -96,7 +96,7 @@
 		}
 		return buf.toString();
 	}
-	
+
 	@Override
 	public boolean equals(Object o) {
 		if (this == o) {
@@ -113,7 +113,7 @@
 	public int hashCode() {
 		return fParent.hashCode() * 31 + fProperty.hashCode();
 	}
-	
+
 	@Override
 	public String toString() {
 		return getLabel();
diff --git a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/NonRelevantFilter.java b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/NonRelevantFilter.java
index 384a92b..eaf5058 100644
--- a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/NonRelevantFilter.java
+++ b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/NonRelevantFilter.java
@@ -1,13 +1,13 @@
 /*******************************************************************************
  * Copyright (c) 2000, 2005 IBM Corporation and others.
  *
- * This program and the accompanying materials 
+ * 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:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -18,13 +18,13 @@
 import org.eclipse.jface.viewers.ViewerFilter;
 
 public class NonRelevantFilter extends ViewerFilter {
-	
+
 	private boolean fShowNonRelevant;
-	
+
 	public boolean isShowNonRelevant() {
 		return fShowNonRelevant;
 	}
-	
+
 	public void setShowNonRelevant(boolean showNonRelevant) {
 		fShowNonRelevant= showNonRelevant;
 	}
@@ -33,7 +33,7 @@
 	public boolean select(Viewer viewer, Object parentElement, Object element) {
 		if (fShowNonRelevant)
 			return true;
-		
+
 		if (element instanceof Binding) {
 			return ((Binding) element).isRelevant();
 		}
@@ -42,6 +42,6 @@
 		}
 		return true;
 	}
-	
+
 
 }
diff --git a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/ProblemNode.java b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/ProblemNode.java
index fd7db5d..a704a8b 100644
--- a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/ProblemNode.java
+++ b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/ProblemNode.java
@@ -1,13 +1,13 @@
 /*******************************************************************************
  * Copyright (c) 2000, 2015 IBM Corporation and others.
  *
- * This program and the accompanying materials 
+ * 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:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -34,7 +34,7 @@
 		fParent= parent;
 		fProblem= problem;
 	}
-	
+
 	@Override
 	public Object getParent() {
 		return fParent;
@@ -44,7 +44,7 @@
 	public Object[] getChildren() {
 		String[] arguments= fProblem.getArguments();
 		ArrayList<GeneralAttribute> children= new ArrayList<>();
-		
+
 		children.add(new GeneralAttribute(this, "CONSTANT NAME", getConstantName()));
 		children.add(new GeneralAttribute(this, "ID", getErrorLabel()));
 		children.add(new GeneralAttribute(this, "OPTION FOR CONFIGURABLE SEVERITY", JavaCore.getOptionForConfigurableSeverity(fProblem.getID())));
@@ -63,7 +63,7 @@
 		StringBuilder buf= new StringBuilder();
 		int offset= fProblem.getSourceStart();
 		int length= fProblem.getSourceEnd() + 1 - offset;
-		
+
 		if (fProblem.isError())
 			buf.append("E");
 		if (fProblem.isWarning())
@@ -72,14 +72,14 @@
 			buf.append("I");
 		buf.append('[').append(offset).append(", ").append(length).append(']').append(' ');
 		buf.append(fProblem.getMessage());
-		
+
 		return buf.toString();
 	}
-	
+
 	private String getErrorLabel() {
 		int id= fProblem.getID();
 		StringBuilder buf= new StringBuilder();
-			
+
 		if ((id & IProblem.TypeRelated) != 0) {
 			buf.append("TypeRelated + "); //$NON-NLS-1$
 		}
@@ -105,17 +105,15 @@
 			buf.append("Javadoc + "); //$NON-NLS-1$
 		}
 		buf.append(id & IProblem.IgnoreCategoriesMask);
-		
+
 		buf.append(" = 0x").append(Integer.toHexString(id)).append(" = ").append(id);
-		
+
 		return buf.toString();
 	}
-	
+
 	private String getConstantName() {
 		int id= fProblem.getID();
-		Field[] fields= IProblem.class.getFields();
-		for (int i= 0; i < fields.length; i++) {
-			Field f= fields[i];
+		for (Field f : IProblem.class.getFields()) {
 			try {
 				if (f.getType() == int.class && f.getInt(f) == id) {
 					return "IProblem." + f.getName();
@@ -126,17 +124,17 @@
 		}
 		return "<UNKNOWN CONSTANT>";
 	}
-	
+
 	private String getCategoryCode() {
 		CategorizedProblem categorized= (CategorizedProblem) fProblem;
 		int categoryID= categorized.getCategoryID();
 		StringBuilder buf= new StringBuilder();
-		
+
 		switch (categoryID) {
 			case CategorizedProblem.CAT_UNSPECIFIED:
 				buf.append("Unspecified");
 				break;
-				
+
 			case CategorizedProblem.CAT_BUILDPATH:
 				buf.append("Buildpath");
 				break;
@@ -189,12 +187,12 @@
 				buf.append("<UNKNOWN CATEGORY>");
 				break;
 		}
-		
+
 		buf.append(" = ").append(categoryID);
 
 		return buf.toString();
 	}
-	
+
 	@Override
 	public Image getImage() {
 		return null;
@@ -206,7 +204,7 @@
 	public int getOffset() {
 		return fProblem.getSourceStart();
 	}
-	
+
 	/**
 	 * @return Returns the length of the problem
 	 */
@@ -224,7 +222,7 @@
 		if (obj == null || !obj.getClass().equals(getClass())) {
 			return false;
 		}
-		
+
 		ProblemNode other= (ProblemNode) obj;
 		if (fParent == null) {
 			if (other.fParent != null)
@@ -232,17 +230,17 @@
 		} else if (! fParent.equals(other.fParent)) {
 			return false;
 		}
-		
+
 		if (fProblem== null) {
 			if (other.fProblem != null)
 				return false;
 		} else if (! fProblem.equals(other.fProblem)) {
 			return false;
 		}
-		
+
 		return true;
 	}
-	
+
 	/*
 	 * @see java.lang.Object#hashCode()
 	 */
diff --git a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/ProblemsProperty.java b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/ProblemsProperty.java
index 2727539..a38ae56 100644
--- a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/ProblemsProperty.java
+++ b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/ProblemsProperty.java
@@ -1,13 +1,13 @@
 /*******************************************************************************
  * Copyright (c) 2000, 2005 IBM Corporation and others.
  *
- * This program and the accompanying materials 
+ * 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:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -23,7 +23,7 @@
  *
  */
 public class ProblemsProperty extends ASTAttribute {
-	
+
 	private final CompilationUnit fRoot;
 
 	public ProblemsProperty(CompilationUnit root) {
@@ -67,7 +67,7 @@
 		}
 		return true;
 	}
-	
+
 	/*
 	 * @see java.lang.Object#hashCode()
 	 */
diff --git a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/SettingsProperty.java b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/SettingsProperty.java
index 7c15206..e2378c5 100644
--- a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/SettingsProperty.java
+++ b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/SettingsProperty.java
@@ -1,13 +1,13 @@
 /*******************************************************************************
  * Copyright (c) 2007 IBM Corporation and others.
  *
- * This program and the accompanying materials 
+ * 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:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -19,7 +19,7 @@
 import org.eclipse.jdt.core.dom.CompilationUnit;
 
 public class SettingsProperty extends ASTAttribute {
-	
+
 	private final CompilationUnit fRoot;
 
 	public SettingsProperty(CompilationUnit root) {
@@ -65,7 +65,7 @@
 		}
 		return true;
 	}
-	
+
 	/*
 	 * @see java.lang.Object#hashCode()
 	 */
diff --git a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/TrayContentProvider.java b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/TrayContentProvider.java
index 2259bb6..59ee6a3 100644
--- a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/TrayContentProvider.java
+++ b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/TrayContentProvider.java
@@ -1,13 +1,13 @@
 /*******************************************************************************
  * Copyright (c) 2000, 2015 IBM Corporation and others.
  *
- * This program and the accompanying materials 
+ * 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:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -25,12 +25,12 @@
 
 
 public class TrayContentProvider implements ITreeContentProvider {
-	
+
 	public static final int DEFAULT_CHILDREN_COUNT= 7;
-	
+
 	protected static final String N_A= "N/A"; //$NON-NLS-1$
 	protected static final Object[] EMPTY= new Object[0];
-	
+
 	/*
 	 * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
 	 */
@@ -39,25 +39,25 @@
 		ArrayList<ExceptionAttribute> result= new ArrayList<>();
 		if (parentElement instanceof ExceptionAttribute)
 			return EMPTY;
-		
+
 		addObjectComparisons(result, parentElement);
-		
+
 		if (parentElement instanceof Binding) {
 			Binding trayElement= (Binding) parentElement;
 			IBinding trayBinding= trayElement.getBinding();
-			
+
 			addBindingComparisons(result, trayElement);
 			if (trayBinding instanceof ITypeBinding)
 				addTypeBindingComparions(result, trayElement);
 			if (trayBinding instanceof IMethodBinding)
 				addMethodBindingComparions(result, trayElement);
-			
+
 		} else {
 		}
-		
+
 		return result.toArray();
 	}
-	
+
 	private void addObjectComparisons(ArrayList<ExceptionAttribute> result, Object trayElement) {
 		class IdentityProperty extends DynamicAttributeProperty {
 			public IdentityProperty(Object parent) {
@@ -67,9 +67,9 @@
 			protected String executeQuery(Object viewerObject, Object trayObject) {
 				return Boolean.toString(viewerObject == trayObject);
 			}
-		} 
+		}
 		result.add(new IdentityProperty(trayElement));
-		
+
 		class EqualsProperty extends DynamicAttributeProperty {
 			public EqualsProperty(Object parent) {
 				super(parent, "*.equals(this): ");
@@ -81,7 +81,7 @@
 				else
 					return "* is null";
 			}
-		} 
+		}
 		result.add(new EqualsProperty(trayElement));
 	}
 
@@ -101,9 +101,9 @@
 				else
 					return "* is null"; //$NON-NLS-1$
 			}
-		} 
+		}
 		result.add(new IsEqualToProperty(trayElement));
-		
+
 		class KeysEqualProperty extends DynamicBindingProperty {
 			public KeysEqualProperty(Binding parent) {
 				super(parent);
@@ -123,7 +123,7 @@
 				else
 					return Boolean.toString(viewerBinding.getKey().equals(trayBinding.getKey()));
 			}
-		} 
+		}
 		result.add(new KeysEqualProperty(trayElement));
 	}
 
@@ -146,9 +146,9 @@
 					return "* not an ITypeBinding"; //$NON-NLS-1$
 				}
 			}
-		} 
+		}
 		result.add(new IsSubTypeCompatibleProperty(trayElement));
-		
+
 		class IsCastCompatibleProperty extends DynamicBindingProperty {
 			public IsCastCompatibleProperty(Binding parent) {
 				super(parent);
@@ -167,9 +167,9 @@
 					return "* not an ITypeBinding"; //$NON-NLS-1$
 				}
 			}
-		} 
+		}
 		result.add(new IsCastCompatibleProperty(trayElement));
-		
+
 		class IsAssignmentCompatibleProperty extends DynamicBindingProperty {
 			public IsAssignmentCompatibleProperty(Binding parent) {
 				super(parent);
@@ -188,7 +188,7 @@
 					return "* not an ITypeBinding"; //$NON-NLS-1$
 				}
 			}
-		} 
+		}
 		result.add(new IsAssignmentCompatibleProperty(trayElement));
 	}
 
@@ -211,9 +211,9 @@
 					return "* not an IMethodBinding"; //$NON-NLS-1$
 				}
 			}
-		} 
+		}
 		result.add(new OverridesProperty(trayElement));
-		
+
 		class IsSubsignatureProperty extends DynamicBindingProperty {
 			public IsSubsignatureProperty(Binding parent) {
 				super(parent);
@@ -232,7 +232,7 @@
 					return "* not an IMethodBinding"; //$NON-NLS-1$
 				}
 			}
-		} 
+		}
 		result.add(new IsSubsignatureProperty(trayElement));
 	}
 
@@ -247,7 +247,7 @@
 			return null;
 		}
 	}
-	
+
 	/*
 	 * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
 	 */
@@ -255,7 +255,7 @@
 	public boolean hasChildren(Object element) {
 		return ! (element instanceof DynamicAttributeProperty || element instanceof DynamicBindingProperty);
 	}
-	
+
 	/*
 	 * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
 	 */
@@ -265,7 +265,7 @@
 			return ((ArrayList<?>) inputElement).toArray();
 		return EMPTY;
 	}
-	
+
 	/*
 	 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
 	 */
@@ -273,7 +273,7 @@
 	public void dispose() {
 		// do nothing
 	}
-	
+
 	/*
 	 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
 	 */
diff --git a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/TrayLabelProvider.java b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/TrayLabelProvider.java
index d896015..77896c7 100644
--- a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/TrayLabelProvider.java
+++ b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/TrayLabelProvider.java
@@ -1,13 +1,13 @@
 /*******************************************************************************
  * Copyright (c) 2000, 2006 IBM Corporation and others.
  *
- * This program and the accompanying materials 
+ * 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:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -27,27 +27,27 @@
 import org.eclipse.jdt.core.dom.ASTNode;
 
 public class TrayLabelProvider extends LabelProvider implements IColorProvider {
-	
+
 	private Color fBlue, fRed;
 	private Color fWidgetForeground;
-	
+
 	private Object fViewerElement;
-	
+
 	public TrayLabelProvider() {
 		Display display= Display.getCurrent();
-		
+
 		fRed= display.getSystemColor(SWT.COLOR_RED);
 		fBlue= display.getSystemColor(SWT.COLOR_DARK_BLUE);
 		fWidgetForeground= display.getSystemColor(SWT.COLOR_WIDGET_FOREGROUND);
 	}
-	
+
 	public void setViewerElement(Object viewerElement) {
 		if (fViewerElement != viewerElement) {
 			fViewerElement= viewerElement;
 			fireLabelProviderChanged(new LabelProviderChangedEvent(this));
 		}
 	}
-	
+
 	@Override
 	public String getText(Object obj) {
 		if (obj instanceof DynamicBindingProperty) {
@@ -66,7 +66,7 @@
 			return ""; // https://bugs.eclipse.org/bugs/show_bug.cgi?id=126017
 		}
 	}
-	
+
 	@Override
 	public Image getImage(Object obj) {
 		if (obj instanceof DynamicBindingProperty) {
@@ -83,7 +83,7 @@
 			return null;
 		}
 	}
-	
+
 	/*
 	 * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
 	 */
@@ -92,31 +92,31 @@
 		super.dispose();
 		fViewerElement= null;
 	}
-	
+
 	@Override
 	public Color getForeground(Object element) {
 		if (element instanceof Binding) {
 			return fBlue;
-			
+
 		} else if (element instanceof ExceptionAttribute) {
 			if (element instanceof DynamicBindingProperty) {
 				((DynamicBindingProperty) element).setViewerElement(fViewerElement instanceof Binding ? (Binding) fViewerElement : null);
 			} else if (element instanceof DynamicAttributeProperty) {
 				((DynamicAttributeProperty) element).setViewerElement(fViewerElement);
 			}
-			
+
 			if (((ExceptionAttribute) element).getException() == null)
 //				return null; //Bug 75022: Does not work when label is updated (retains old color, doesn't get default)
 				//TODO remove hackaround when bug 75022 is fixed
 				return fWidgetForeground;
 			else
 				return fRed;
-			
+
 		} else {
 			return null; // normal color
 		}
 	}
-	
+
 	/*
 	 * @see org.eclipse.jface.viewers.IColorProvider#getBackground(java.lang.Object)
 	 */
@@ -124,5 +124,5 @@
 	public Color getBackground(Object element) {
 		return null;
 	}
-	
+
 }
diff --git a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/TreeCopyAction.java b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/TreeCopyAction.java
index 99b6b59..ce22af3 100644
--- a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/TreeCopyAction.java
+++ b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/TreeCopyAction.java
@@ -1,13 +1,13 @@
 /*******************************************************************************
  * Copyright (c) 2000, 2015 IBM Corporation and others.
  *
- * This program and the accompanying materials 
+ * 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:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -15,7 +15,6 @@
 
 import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 
 import org.eclipse.swt.dnd.Clipboard;
@@ -79,9 +78,9 @@
 				return string;
 		}
 	}
-	
+
 	private final Tree[] fTrees;
-	
+
 	public TreeCopyAction(Tree[] trees) {
 		fTrees= trees;
 		setText("&Copy"); //$NON-NLS-1$
@@ -95,19 +94,19 @@
 	@Override
 	public void run() {
 		Tree tree= null;
-		for (int i= 0; i < fTrees.length; i++) {
-			if (fTrees[i].isFocusControl()) {
-				tree= fTrees[i];
+		for (Tree t : fTrees) {
+			if (t.isFocusControl()) {
+				tree= t;
 				break;
 			}
 		}
 		if (tree == null)
 			return;
-		
+
 		TreeItem[] selection= tree.getSelection();
 		if (selection.length == 0)
 			return;
-		
+
 		Clipboard clipboard= null;
 		try {
 			clipboard= new Clipboard(tree.getDisplay());
@@ -126,9 +125,8 @@
 		HashMap<TreeItem, TreeObject> elementToTreeObj= new HashMap<>();
 		List<TreeObject> roots= new ArrayList<>();
 		int indent= Integer.MIN_VALUE;
-		
-		for (int i= 0; i < selection.length; i++) {
-			TreeItem item= selection[i];
+
+		for (TreeItem item : selection) {
 			TreeObject treeObj= elementToTreeObj.get(item);
 			if (treeObj == null) {
 				treeObj= new TreeObject(item, true);
@@ -168,8 +166,7 @@
 	}
 
 	private void appendSelectionObjects(StringBuffer buffer, int indent, List<TreeObject> selObjs) {
-		for (Iterator<TreeObject> iter= selObjs.iterator(); iter.hasNext();) {
-			TreeObject selObj= iter.next();
+		for (TreeObject selObj : selObjs) {
 			if (selObj.isSelected()) {
 				buffer.append('\n');
 				for (int d= 0; d < indent; d++)
diff --git a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/WellKnownTypesProperty.java b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/WellKnownTypesProperty.java
index 82bad75..96e63d4 100644
--- a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/WellKnownTypesProperty.java
+++ b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/WellKnownTypesProperty.java
@@ -1,13 +1,13 @@
 /*******************************************************************************
  * Copyright (c) 2007 IBM Corporation and others.
  *
- * This program and the accompanying materials 
+ * 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:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -19,7 +19,7 @@
 import org.eclipse.jdt.core.dom.CompilationUnit;
 
 public class WellKnownTypesProperty extends ASTAttribute {
-	
+
 	public static final String[] WELL_KNOWN_TYPES = {
 		"boolean",
 		"byte",
@@ -52,7 +52,7 @@
 
 		"_.$UnknownType$"
 	};
-	
+
 	private final CompilationUnit fRoot;
 
 	public WellKnownTypesProperty(CompilationUnit root) {
@@ -67,7 +67,7 @@
 	@Override
 	public Object[] getChildren() {
 		AST ast= fRoot.getAST();
-		
+
 		Binding[] res= new Binding[WELL_KNOWN_TYPES.length];
 		for (int i= 0; i < WELL_KNOWN_TYPES.length; i++) {
 			String type= WELL_KNOWN_TYPES[i];
@@ -98,7 +98,7 @@
 		}
 		return true;
 	}
-	
+
 	/*
 	 * @see java.lang.Object#hashCode()
 	 */
diff --git a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/fix/MultiFixMessages.java b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/fix/MultiFixMessages.java
index 9a87c6f..08b903d 100644
--- a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/fix/MultiFixMessages.java
+++ b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/fix/MultiFixMessages.java
@@ -68,6 +68,8 @@
 	public static String CodeStyleMultiFix_ChangeIndirectAccessToStaticToDirect;
 	public static String CodeStyleMultiFix_ConvertSingleStatementInControlBodeyToBlock_description;
 	public static String CodeStyleCleanUp_addDefaultSerialVersionId_description;
+
+	public static String CodeStyleCleanUp_numberSuffix_description;
 	public static String CodeStyleCleanUp_QualifyNonStaticMethod_description;
 	public static String CodeStyleCleanUp_QualifyStaticMethod_description;
 	public static String CodeStyleCleanUp_removeFieldThis_description;
diff --git a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/fix/MultiFixMessages.properties b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/fix/MultiFixMessages.properties
index ae7d278..48e2b0c 100644
--- a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/fix/MultiFixMessages.properties
+++ b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/fix/MultiFixMessages.properties
@@ -32,6 +32,7 @@
 
 CodeStyleMultiFix_ChangeIndirectAccessToStaticToDirect=Change indirect accesses to static members to direct accesses (accesses through subtypes)
 CodeStyleCleanUp_addDefaultSerialVersionId_description=Add missing serial version ID (default 1L)
+CodeStyleCleanUp_numberSuffix_description=Use uppercase for long literal suffix
 CodeFormatFix_RemoveTrailingWhitespace_changeDescription=Remove trailing whitespace
 CodeFormatCleanUp_RemoveTrailingNoEmpty_description=Remove trailing white spaces on non empty lines
 CodeStyleCleanUp_QualifyNonStaticMethod_description=Add 'this' qualifier to unqualified method accesses
diff --git a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/text/JavaBreakIterator.java b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/text/JavaBreakIterator.java
index 398c2b4..c9e5718 100644
--- a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/text/JavaBreakIterator.java
+++ b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/text/JavaBreakIterator.java
@@ -422,6 +422,7 @@
 	 * Creates a break iterator given a char sequence.
 	 * @param newText the new text
 	 */
+	@Override
 	public void setText(CharSequence newText) {
 		fText= newText;
 		fIterator.setText(new SequenceCharacterIterator(newText));
diff --git a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/text/JavaWordIterator.java b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/text/JavaWordIterator.java
index 4cb95bd..4e2ca38 100644
--- a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/text/JavaWordIterator.java
+++ b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/text/JavaWordIterator.java
@@ -212,6 +212,7 @@
 	 * Sets the text as <code>CharSequence</code>.
 	 * @param newText the new text
 	 */
+	@Override
 	public void setText(CharSequence newText) {
 		fIterator.setText(newText);
 		first();
diff --git a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/text/correction/CorrectionMessages.java b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/text/correction/CorrectionMessages.java
index 9723a40..919be8e 100644
--- a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/text/correction/CorrectionMessages.java
+++ b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/text/correction/CorrectionMessages.java
@@ -144,6 +144,9 @@
 	public static String TypeMismatchSubProcessor_addexceptions_description;
 	public static String TypeMismatchSubProcessor_incompatible_for_each_type_description;
 	public static String TypeMismatchSubProcessor_insertnullcheck_description;
+	public static String TypeMismatchSubProcessor_changetooptionalempty_description;
+	public static String TypeMismatchSubProcessor_changetooptionalof_description;
+	public static String TypeMismatchSubProcessor_changetooptionalofnullable_description;
 	public static String RemoveDeclarationCorrectionProposal_removeunusedfield_description;
 	public static String RemoveDeclarationCorrectionProposal_removeunusedmethod_description;
 	public static String RemoveDeclarationCorrectionProposal_removeunusedconstructor_description;
diff --git a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/text/correction/CorrectionMessages.properties b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/text/correction/CorrectionMessages.properties
index d85c2a4..81c679b 100644
--- a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/text/correction/CorrectionMessages.properties
+++ b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/text/correction/CorrectionMessages.properties
@@ -147,6 +147,9 @@
 TypeMismatchSubProcessor_addexceptions_description=Add exceptions to ''{0}.{1}(..)''
 TypeMismatchSubProcessor_incompatible_for_each_type_description=Change type of ''{0}'' to ''{1}''
 TypeMismatchSubProcessor_insertnullcheck_description=Insert '!= null' check
+TypeMismatchSubProcessor_changetooptionalempty_description=Change to empty Optional
+TypeMismatchSubProcessor_changetooptionalof_description=Wrap with Optional
+TypeMismatchSubProcessor_changetooptionalofnullable_description=Wrap with nullable Optional
 
 RemoveDeclarationCorrectionProposal_removeunusedfield_description=Remove declaration of ''{0}'' and assignments without possible side effects
 RemoveDeclarationCorrectionProposal_removeunusedmethod_description=Remove method ''{0}''
diff --git a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/text/correction/SerialVersionHashOperationCore.java b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/text/correction/SerialVersionHashOperationCore.java
index 78cd81c..b7b73df 100644
--- a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/text/correction/SerialVersionHashOperationCore.java
+++ b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/text/correction/SerialVersionHashOperationCore.java
@@ -81,14 +81,11 @@
 			if (classfileResource == null)
 				return null;
 
-			InputStream contents= classfileResource.getContents();
-			try {
+			try (InputStream contents= classfileResource.getContents()) {
 				IClassFileReader cfReader= ToolFactory.createDefaultClassFileReader(contents, IClassFileReader.ALL);
 				if (cfReader != null) {
 					return calculateSerialVersionId(cfReader);
 				}
-			} finally {
-				contents.close();
 			}
 			return null;
 		} finally {
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpConstants.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpConstants.java
index 51c5ed2..cdea264 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpConstants.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpConstants.java
@@ -35,7 +35,7 @@
 	 * <br>
 	 * Possible values: {TRUE, FALSE}<br>
 	 * <br>
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.3
@@ -48,9 +48,9 @@
 	 * <br>
 	 * <br>
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.4
@@ -62,9 +62,9 @@
 	 * {@link #FORMAT_MULTI_LINE_COMMENT}<br> {@link #FORMAT_SINGLE_LINE_COMMENT} <br>
 	 * <br>
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.3
@@ -77,9 +77,9 @@
 	 * Format single line comments. Only has an effect if {@link #FORMAT_COMMENT} is TRUE <br>
 	 * <br>
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.3
@@ -93,9 +93,9 @@
 	 * Format multi line comments. Only has an effect if {@link #FORMAT_COMMENT} is TRUE <br>
 	 * <br>
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.3
@@ -109,9 +109,9 @@
 	 * Format javadoc comments. Only has an effect if {@link #FORMAT_COMMENT} is TRUE <br>
 	 * <br>
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.3
@@ -125,9 +125,9 @@
 	 * Removes trailing whitespace in compilation units<br>
 	 * <br>
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.3
@@ -139,9 +139,9 @@
 	 * Only has an effect if {@link #FORMAT_REMOVE_TRAILING_WHITESPACES} is TRUE <br>
 	 * <br>
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.3
@@ -154,9 +154,9 @@
 	 * Only has an effect if {@link #FORMAT_REMOVE_TRAILING_WHITESPACES} is TRUE <br>
 	 * <br>
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.3
@@ -167,9 +167,9 @@
 	 * Correct indentation in compilation units on all lines <br>
 	 * <br>
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.4
@@ -182,9 +182,9 @@
 	 * {@link #MEMBER_ACCESSES_NON_STATIC_FIELD_USE_THIS_IF_NECESSARY} <br>
 	 * <br>
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.3
@@ -195,18 +195,18 @@
 	 * Adds a 'this' qualifier to field accesses.
 	 * <p>
 	 * Example:
-	 * 
+	 *
 	 * <pre>
 	 *                     int fField;
 	 *                     void foo() {fField= 10;} -&gt; void foo() {this.fField= 10;}
 	 * </pre>
-	 * 
+	 *
 	 * Only has an effect if {@link #MEMBER_ACCESSES_NON_STATIC_FIELD_USE_THIS} is TRUE <br>
 	 * <br>
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.3
@@ -217,18 +217,18 @@
 	 * Removes 'this' qualifier to field accesses.
 	 * <p>
 	 * Example:
-	 * 
+	 *
 	 * <pre>
 	 *                     int fField;
 	 *                     void foo() {this.fField= 10;} -&gt; void foo() {fField= 10;}
 	 * </pre>
-	 * 
+	 *
 	 * Only has an effect if {@link #MEMBER_ACCESSES_NON_STATIC_FIELD_USE_THIS} is TRUE <br>
 	 * <br>
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.3
@@ -241,9 +241,9 @@
 	 * {@link #MEMBER_ACCESSES_NON_STATIC_METHOD_USE_THIS_IF_NECESSARY} <br>
 	 * <br>
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.3
@@ -254,18 +254,18 @@
 	 * Adds a 'this' qualifier to method accesses.
 	 * <p>
 	 * Example:
-	 * 
+	 *
 	 * <pre>
 	 *                     int method(){};
 	 *                     void foo() {method()} -&gt; void foo() {this.method();}
 	 * </pre>
-	 * 
+	 *
 	 * Only has an effect if {@link #MEMBER_ACCESSES_NON_STATIC_METHOD_USE_THIS} is TRUE <br>
 	 * <br>
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.3
@@ -276,18 +276,18 @@
 	 * Removes 'this' qualifier from field accesses.
 	 * <p>
 	 * Example:
-	 * 
+	 *
 	 * <pre>
 	 *                     int fField;
 	 *                     void foo() {this.fField= 10;} -&gt; void foo() {fField= 10;}
 	 * </pre>
-	 * 
+	 *
 	 * Only has an effect if {@link #MEMBER_ACCESSES_NON_STATIC_METHOD_USE_THIS} is TRUE <br>
 	 * <br>
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.3
@@ -302,9 +302,9 @@
 	 * {@link #MEMBER_ACCESSES_STATIC_QUALIFY_WITH_DECLARING_CLASS_SUBTYPE_ACCESS} <br>
 	 * <br>
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.3
@@ -315,21 +315,21 @@
 	 * Qualify static field accesses with declaring type.
 	 * <p>
 	 * Example:
-	 * 
+	 *
 	 * <pre>
 	 *                   class E {
 	 *                     public static int i;
 	 *                     void foo() {i= 10;} -&gt; void foo() {E.i= 10;}
 	 *                   }
 	 * </pre>
-	 * 
+	 *
 	 * <br>
 	 * Only has an effect if {@link #MEMBER_ACCESSES_STATIC_QUALIFY_WITH_DECLARING_CLASS} is TRUE <br>
 	 * <br>
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.3
@@ -340,20 +340,20 @@
 	 * Qualifies static method accesses with declaring type.
 	 * <p>
 	 * Example:
-	 * 
+	 *
 	 * <pre>
 	 *                   class E {
 	 *                     public static int m();
 	 *                     void foo() {m();} -&gt; void foo() {E.m();}
 	 *                   }
 	 * </pre>
-	 * 
+	 *
 	 * Only has an effect if {@link #MEMBER_ACCESSES_STATIC_QUALIFY_WITH_DECLARING_CLASS} is TRUE <br>
 	 * <br>
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.3
@@ -364,20 +364,20 @@
 	 * Changes indirect accesses to static members to direct ones.
 	 * <p>
 	 * Example:
-	 * 
+	 *
 	 * <pre>
 	 *                   class E {public static int i;}
 	 *                   class ESub extends E {
 	 *                     void foo() {ESub.i= 10;} -&gt; void foo() {E.i= 10;}
 	 *                   }
 	 * </pre>
-	 * 
+	 *
 	 * Only has an effect if {@link #MEMBER_ACCESSES_STATIC_QUALIFY_WITH_DECLARING_CLASS} is TRUE <br>
 	 * <br>
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.3
@@ -388,20 +388,20 @@
 	 * Changes non static accesses to static members to static accesses.
 	 * <p>
 	 * Example:
-	 * 
+	 *
 	 * <pre>
 	 *                   class E {
 	 *                     public static int i;
 	 *                     void foo() {(new E()).i= 10;} -&gt; void foo() {E.i= 10;}
 	 *                   }
 	 * </pre>
-	 * 
+	 *
 	 * Only has an effect if {@link #MEMBER_ACCESSES_STATIC_QUALIFY_WITH_DECLARING_CLASS} is TRUE <br>
 	 * <br>
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.3
@@ -414,9 +414,9 @@
 	 * {@link #CONTROL_STATMENTS_USE_BLOCKS_NO_FOR_RETURN_AND_THROW} <br>
 	 * <br>
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.3
@@ -427,17 +427,17 @@
 	 * Adds block to control statement body if the body is not a block.
 	 * <p>
 	 * Example:
-	 * 
+	 *
 	 * <pre>
 	 *                   	 if (b) foo(); -&gt; if (b) {foo();}
 	 * </pre>
-	 * 
+	 *
 	 * Only has an effect if {@link #CONTROL_STATEMENTS_USE_BLOCKS} is TRUE <br>
 	 * <br>
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.3
@@ -449,17 +449,17 @@
 	 * throw statement.
 	 * <p>
 	 * Example:
-	 * 
+	 *
 	 * <pre>
 	 *                     if (b) {return;} -&gt; if (b) return;
 	 * </pre>
-	 * 
+	 *
 	 * Only has an effect if {@link #CONTROL_STATEMENTS_USE_BLOCKS} is TRUE <br>
 	 * <br>
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.3
@@ -470,17 +470,17 @@
 	 * Remove unnecessary blocks in control statement bodies.
 	 * <p>
 	 * Example:
-	 * 
+	 *
 	 * <pre>
 	 *                     if (b) {foo();} -&gt; if (b) foo();
 	 * </pre>
-	 * 
+	 *
 	 * Only has an effect if {@link #CONTROL_STATEMENTS_USE_BLOCKS} is TRUE <br>
 	 * <br>
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.3
@@ -491,15 +491,15 @@
 	 * Convert for loops to enhanced for loops.
 	 * <p>
 	 * Example:
-	 * 
+	 *
 	 * <pre>
 	 *                   for (int i = 0; i &lt; array.length; i++) {} -&gt; for (int element : array) {}
 	 * </pre>
-	 * 
+	 *
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.3
@@ -512,9 +512,9 @@
 	 * <br>
 	 * <br>
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.3
@@ -525,19 +525,19 @@
 	 * Add paranoiac parentheses around conditional expressions.
 	 * <p>
 	 * Example:
-	 * 
+	 *
 	 * <pre>
 	 *                   boolean b= i &gt; 10 &amp;&amp; i &lt; 100 || i &gt; 20;
 	 *                   -&gt;
 	 *                   boolean b= ((i &gt; 10) &amp;&amp; (i &lt; 100)) || (i &gt; 20);
 	 * </pre>
-	 * 
+	 *
 	 * Only has an effect if {@link #EXPRESSIONS_USE_PARENTHESES} is TRUE <br>
 	 * <br>
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.3
@@ -548,19 +548,19 @@
 	 * Remove unnecessary parenthesis around conditional expressions.
 	 * <p>
 	 * Example:
-	 * 
+	 *
 	 * <pre>
 	 *                   boolean b= ((i &gt; 10) &amp;&amp; (i &lt; 100)) || (i &gt; 20);
 	 *                   -&gt;
 	 *                   boolean b= i &gt; 10 &amp;&amp; i &lt; 100 || i &gt; 20;
 	 * </pre>
-	 * 
+	 *
 	 * Only has an effect if {@link #EXPRESSIONS_USE_PARENTHESES} is TRUE <br>
 	 * <br>
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.3
@@ -574,9 +574,9 @@
 	 * {@link #VARIABLE_DECLARATIONS_USE_FINAL_PRIVATE_FIELDS} <br>
 	 * <br>
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.3
@@ -585,17 +585,17 @@
 
 	/**
 	 * Add a final modifier to private fields where possible i.e.:
-	 * 
+	 *
 	 * <pre>
 	 *                   private int field= 0; -&gt; private final int field= 0;
 	 * </pre>
-	 * 
+	 *
 	 * Only has an effect if {@link #VARIABLE_DECLARATIONS_USE_FINAL} is TRUE <br>
 	 * <br>
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.3
@@ -604,17 +604,17 @@
 
 	/**
 	 * Add a final modifier to method parameters where possible i.e.:
-	 * 
+	 *
 	 * <pre>
 	 *                   void foo(int i) {} -&gt; void foo(final int i) {}
 	 * </pre>
-	 * 
+	 *
 	 * Only has an effect if {@link #VARIABLE_DECLARATIONS_USE_FINAL} is TRUE <br>
 	 * <br>
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.3
@@ -623,17 +623,17 @@
 
 	/**
 	 * Add a final modifier to local variables where possible i.e.:
-	 * 
+	 *
 	 * <pre>
 	 *                   int i= 0; -&gt; final int i= 0;
 	 * </pre>
-	 * 
+	 *
 	 * Only has an effect if {@link #VARIABLE_DECLARATIONS_USE_FINAL} is TRUE <br>
 	 * <br>
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.3
@@ -645,7 +645,7 @@
 	 * For detailed settings, use {@link #USE_LAMBDA} or {@link #USE_ANONYMOUS_CLASS_CREATION}
 	 * <p>
 	 * Possible values: {TRUE, FALSE}
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.3
@@ -658,7 +658,7 @@
 	 * Possible values: {TRUE, FALSE}
 	 * <p>
 	 * Only has an effect if {@link #CONVERT_FUNCTIONAL_INTERFACES} is TRUE.
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.10
@@ -671,7 +671,7 @@
 	 * Possible values: {TRUE, FALSE}
 	 * <p>
 	 * Only has an effect if {@link #CONVERT_FUNCTIONAL_INTERFACES} is TRUE.
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.10
@@ -682,13 +682,13 @@
 	 * Adds type parameters to raw type references.
 	 * <p>
 	 * Example:
-	 * 
+	 *
 	 * <pre>
 	 *                   List l; -&gt; List&lt;Object&gt; l;
 	 * </pre>
-	 * 
+	 *
 	 * Possible values: {TRUE, FALSE}
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.3
@@ -699,9 +699,9 @@
 	 * Removes unused imports. <br>
 	 * <br>
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.3
@@ -714,9 +714,9 @@
 	 * {@link #REMOVE_UNUSED_CODE_PRIVATE_METHODS}<br> {@link #REMOVE_UNUSED_CODE_PRIVATE_TYPES} <br>
 	 * <br>
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.3
@@ -728,9 +728,9 @@
 	 * Only has an effect if {@link #REMOVE_UNUSED_CODE_PRIVATE_MEMBERS} is TRUE <br>
 	 * <br>
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.3
@@ -742,9 +742,9 @@
 	 * Only has an effect if {@link #REMOVE_UNUSED_CODE_PRIVATE_MEMBERS} is TRUE <br>
 	 * <br>
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.3
@@ -756,9 +756,9 @@
 	 * Only has an effect if {@link #REMOVE_UNUSED_CODE_PRIVATE_MEMBERS} is TRUE <br>
 	 * <br>
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.3
@@ -770,9 +770,9 @@
 	 * Only has an effect if {@link #REMOVE_UNUSED_CODE_PRIVATE_MEMBERS} is TRUE <br>
 	 * <br>
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.3
@@ -783,9 +783,9 @@
 	 * Removes unused local variables. <br>
 	 * <br>
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.3
@@ -796,9 +796,9 @@
 	 * Removes unused casts. <br>
 	 * <br>
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.3
@@ -809,17 +809,17 @@
 	 * Remove unnecessary '$NON-NLS$' tags.
 	 * <p>
 	 * Example:
-	 * 
+	 *
 	 * <pre>
 	 * String s; //$NON-NLS-1$ -&gt; String s;
 	 * </pre>
-	 * 
+	 *
 	 * <br>
 	 * <br>
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.3
@@ -928,33 +928,33 @@
 	 * {@link #ADD_MISSING_ANNOTATIONS_DEPRECATED}<br> {@value #ADD_MISSING_ANNOTATIONS_OVERRIDE} <br>
 	 * <br>
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.3
 	 */
 	public static final String ADD_MISSING_ANNOTATIONS= "cleanup.add_missing_annotations"; //$NON-NLS-1$
-	
+
 	/**
 	 * Add '@Override' annotation in front of overriding methods.
 	 * <p>
 	 * Example:
-	 * 
+	 *
 	 * <pre>
 	 *                   class E1 {void foo();}
 	 *                   class E2 extends E1 {
 	 *                   	 void foo(); -&gt;  @Override void foo();
 	 *                   }
 	 * </pre>
-	 * 
+	 *
 	 * Only has an effect if {@link #ADD_MISSING_ANNOTATIONS} is TRUE <br>
 	 * <br>
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.3
@@ -965,21 +965,21 @@
 	 * Add '@Override' annotation in front of methods that override or implement a superinterface method.
 	 * <p>
 	 * Example:
-	 * 
+	 *
 	 * <pre>
 	 *                   interface I {void foo();}
 	 *                   class E implements I {
 	 *                   	 void foo(); -&gt;  @Override void foo();
 	 *                   }
 	 * </pre>
-	 * 
+	 *
 	 * Only has an effect if {@link #ADD_MISSING_ANNOTATIONS} and {@link #ADD_MISSING_ANNOTATIONS_OVERRIDE} are TRUE and
 	 * the compiler compliance is 1.6 or higher.<br>
 	 * <br>
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.6
@@ -990,7 +990,7 @@
 	 * Add '@Deprecated' annotation in front of deprecated members.
 	 * <p>
 	 * Example:
-	 * 
+	 *
 	 * <pre>
 	 *                         /**@deprecated* /
 	 *                        int i;
@@ -999,13 +999,13 @@
 	 *                         &#064;Deprecated
 	 *                        int i;
 	 * </pre>
-	 * 
+	 *
 	 * Only has an effect if {@link #ADD_MISSING_ANNOTATIONS} is TRUE <br>
 	 * <br>
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.3
@@ -1018,9 +1018,9 @@
 	 * {@link #ADD_MISSING_SERIAL_VERSION_ID_GENERATED} <br>
 	 * <br>
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.3
@@ -1030,15 +1030,15 @@
 	/**
 	 * Adds a generated serial version id to subtypes of java.io.Serializable and
 	 * java.io.Externalizable
-	 * 
+	 *
 	 * public class E implements Serializable {} -> public class E implements Serializable { private
 	 * static final long serialVersionUID = 4381024239L; } <br>
 	 * Only has an effect if {@link #ADD_MISSING_SERIAL_VERSION_ID} is TRUE <br>
 	 * <br>
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.3
@@ -1048,15 +1048,15 @@
 	/**
 	 * Adds a default serial version it to subtypes of java.io.Serializable and
 	 * java.io.Externalizable
-	 * 
+	 *
 	 * public class E implements Serializable {} -> public class E implements Serializable { private
 	 * static final long serialVersionUID = 1L; } <br>
 	 * Only has an effect if {@link #ADD_MISSING_SERIAL_VERSION_ID} is TRUE <br>
 	 * <br>
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.3
@@ -1064,20 +1064,33 @@
 	public static final String ADD_MISSING_SERIAL_VERSION_ID_DEFAULT= "cleanup.add_default_serial_version_id"; //$NON-NLS-1$
 
 	/**
+	 * Controls whether long literal suffix should be rewritten in uppercase.<br>
+	 * <br>
+	 * Possible values: {TRUE, FALSE}<br>
+	 *
+	 * <br>
+	 *
+	 * @see CleanUpOptionsCore#TRUE
+	 * @see CleanUpOptionsCore#FALSE
+	 * @since 4.13
+	 */
+	public static final String NUMBER_SUFFIX= "cleanup.number_suffix"; //$NON-NLS-1$
+
+	/**
 	 * Add '$NON-NLS$' tags to non externalized strings.
 	 * <p>
 	 * Example:
-	 * 
+	 *
 	 * <pre>
 	 *                   	 String s= &quot;&quot;; -&gt; String s= &quot;&quot;; //$NON-NLS-1$
 	 * </pre>
-	 * 
+	 *
 	 * <br>
 	 * <br>
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.3
@@ -1086,11 +1099,11 @@
 
 	/**
 	 * If true the imports are organized while cleaning up code.
-	 * 
+	 *
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.3
@@ -1101,9 +1114,9 @@
 	 * Should members be sorted? <br>
 	 * <br>
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see #SORT_MEMBERS_ALL
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
@@ -1116,9 +1129,9 @@
 	 * This has only an effect if {@link #SORT_MEMBERS} is also enabled. <br>
 	 * <br>
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see #SORT_MEMBERS
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
@@ -1130,9 +1143,9 @@
 	 * If enabled method stubs are added to all non abstract classes which require to implement some
 	 * methods. <br>
 	 * Possible values: {TRUE, FALSE}<br>
-	 * 
+	 *
 	 * <br>
-	 * 
+	 *
 	 * @see CleanUpOptionsCore#TRUE
 	 * @see CleanUpOptionsCore#FALSE
 	 * @since 3.4
@@ -1145,7 +1158,7 @@
 	 * Possible values: {<code><b>true</b></code>, <code><b>false</b></code>} <br>
 	 * Default value: <code><b>true</b></code><br>
 	 * <br>
-	 * 
+	 *
 	 * @since 3.3
 	 */
 	public static final String SHOW_CLEAN_UP_WIZARD= "cleanup.showwizard"; //$NON-NLS-1$
@@ -1153,11 +1166,11 @@
 	/**
 	 * A key to a serialized string in the <code>InstanceScope</code> containing all the profiles.<br>
 	 * Following code snippet can load the profiles:
-	 * 
+	 *
 	 * <pre>
 	 * List profiles= new ProfileStore(CLEANUP_PROFILES, new CleanUpVersioner()).readProfiles(InstanceScope.INSTANCE);
 	 * </pre>
-	 * 
+	 *
 	 * @since 3.3
 	 */
 	public static final String CLEANUP_PROFILES= "org.eclipse.jdt.ui.cleanupprofiles"; //$NON-NLS-1$
@@ -1167,7 +1180,7 @@
 	 * <br>
 	 * Possible values: String value<br>
 	 * Default value: {@link #DEFAULT_PROFILE} <br>
-	 * 
+	 *
 	 * @since 3.3
 	 */
 	public final static String CLEANUP_PROFILE= "cleanup_profile"; //$NON-NLS-1$$
@@ -1177,7 +1190,7 @@
 	 * <br>
 	 * Possible values: String value<br>
 	 * Default value: {@link #DEFAULT_SAVE_PARTICIPANT_PROFILE} <br>
-	 * 
+	 *
 	 * @since 3.3
 	 */
 	public static final String CLEANUP_ON_SAVE_PROFILE= "cleanup.on_save_profile_id"; //$NON-NLS-1$
@@ -1187,7 +1200,7 @@
 	 * <br>
 	 * Possible values: Integer value<br>
 	 * Default value: CleanUpProfileVersioner#CURRENT_VERSION <br>
-	 * 
+	 *
 	 * @since 3.3
 	 */
 	public final static String CLEANUP_SETTINGS_VERSION_KEY= "cleanup_settings_version"; //$NON-NLS-1$
@@ -1195,7 +1208,7 @@
 	/**
 	 * Id of the 'Eclipse [built-in]' profile.<br>
 	 * <br>
-	 * 
+	 *
 	 * @since 3.3
 	 */
 	public final static String ECLIPSE_PROFILE= "org.eclipse.jdt.ui.default.eclipse_clean_up_profile"; //$NON-NLS-1$
@@ -1203,7 +1216,7 @@
 	/**
 	 * Id of the 'Save Participant [built-in]' profile.<br>
 	 * <br>
-	 * 
+	 *
 	 * @since 3.3
 	 */
 	public final static String SAVE_PARTICIPANT_PROFILE= "org.eclipse.jdt.ui.default.save_participant_clean_up_profile"; //$NON-NLS-1$
@@ -1215,7 +1228,7 @@
 	 * <br>
 	 * Possible values: String value<br>
 	 * Default value: {@link #ECLIPSE_PROFILE} <br>
-	 * 
+	 *
 	 * @since 3.3
 	 */
 	public final static String DEFAULT_PROFILE= ECLIPSE_PROFILE;
@@ -1225,7 +1238,7 @@
 	 * <br>
 	 * Possible values: String value<br>
 	 * Default value: {@link #SAVE_PARTICIPANT_PROFILE} <br>
-	 * 
+	 *
 	 * @since 3.3
 	 */
 	public final static String DEFAULT_SAVE_PARTICIPANT_PROFILE= SAVE_PARTICIPANT_PROFILE;
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/fix/FixMessages.properties b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/fix/FixMessages.properties
index bdeeed5..3a6d496 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/fix/FixMessages.properties
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/fix/FixMessages.properties
@@ -105,7 +105,7 @@
 
 CleanUpPostSaveListener_name=Code Clean Up
 CleanUpPostSaveListener_SaveAction_ChangeName=Save Actions
-CleanUpPostSaveListener_SlowCleanUpDialog_link=If this happens again we recommend to disabled the corresponding save actions on the <a>'Save Actions'</a> preference page.
+CleanUpPostSaveListener_SlowCleanUpDialog_link=If this happens again we recommend to disable the corresponding save actions on the <a>'Save Actions'</a> preference page.
 CleanUpPostSaveListener_SlowCleanUpDialog_title=Slow Save Actions
 CleanUpPostSaveListener_SlowCleanUpWarningDialog_explain=Some of the following save actions are very slow:
 CleanUpPostSaveListener_unknown_profile_error_message=Clean Up save participant could not retrieve profile with id ''{0}''
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/code/ConvertAnonymousToNestedRefactoring.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/code/ConvertAnonymousToNestedRefactoring.java
index 30b139a..f5e37fd 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/code/ConvertAnonymousToNestedRefactoring.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/code/ConvertAnonymousToNestedRefactoring.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2019 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
@@ -577,11 +577,11 @@
 		return new RefactoringChangeDescriptor(descriptor);
 	}
 
-    private void modifyConstructorCall(CompilationUnitRewrite rewrite, ITypeBinding[] parameters) {
-        rewrite.getASTRewrite().replace(fAnonymousInnerClassNode.getParent(), createNewClassInstanceCreation(rewrite, parameters), null);
-    }
+	private void modifyConstructorCall(CompilationUnitRewrite rewrite, ITypeBinding[] parameters) {
+		rewrite.getASTRewrite().replace(fAnonymousInnerClassNode.getParent(), createNewClassInstanceCreation(rewrite, parameters), null);
+	}
 
-    private ASTNode createNewClassInstanceCreation(CompilationUnitRewrite rewrite, ITypeBinding[] parameters) {
+	private ASTNode createNewClassInstanceCreation(CompilationUnitRewrite rewrite, ITypeBinding[] parameters) {
 		AST ast= fAnonymousInnerClassNode.getAST();
 		ClassInstanceCreation newClassCreation= ast.newClassInstanceCreation();
 		newClassCreation.setAnonymousClassDeclaration(null);
@@ -600,10 +600,17 @@
 
 		addLinkedPosition(KEY_TYPE_NAME, newNameNode, rewrite.getASTRewrite(), true);
 
+		ClassInstanceCreation classInstanceCreation= (ClassInstanceCreation) fAnonymousInnerClassNode.getParent();
+		if (classInstanceCreation.getExpression() instanceof SimpleName) {
+			String name= ((SimpleName) classInstanceCreation.getExpression()).getIdentifier();
+			if (name != null && !name.isEmpty()) {
+				newClassCreation.setExpression(ast.newSimpleName(name));
+			}
+		}
 		return newClassCreation;
 	}
 
-    private void addArgumentsForLocalsUsedInInnerClass(ClassInstanceCreation newClassCreation) {
+	private void addArgumentsForLocalsUsedInInnerClass(ClassInstanceCreation newClassCreation) {
         IVariableBinding[] usedLocals= getUsedLocalVariables();
         for (int i= 0; i < usedLocals.length; i++) {
             final AST ast= fAnonymousInnerClassNode.getAST();
@@ -1134,6 +1141,13 @@
                 {
                     return ans;
                 }
+                case ASTNode.CLASS_INSTANCE_CREATION:
+                {
+                	if(((ClassInstanceCreation)current).getExpression() != null) {
+                		// class creation is part of an expression, then we don't want static
+                		return false;
+                	}
+                }
             }
             current = current.getParent();
         }
@@ -1190,7 +1204,7 @@
 			return RefactoringStatus.createFatalErrorStatus(Messages.format(RefactoringCoreMessages.InitializableRefactoring_argument_not_exist, ATTRIBUTE_STATIC));
 		final String declareFinal= arguments.getAttribute(ATTRIBUTE_FINAL);
 		if (declareFinal != null) {
-			fDeclareFinal= Boolean.valueOf(declareStatic).booleanValue();
+			fDeclareFinal= Boolean.valueOf(declareFinal).booleanValue();
 		} else
 			return RefactoringStatus.createFatalErrorStatus(Messages.format(RefactoringCoreMessages.InitializableRefactoring_argument_not_exist, ATTRIBUTE_FINAL));
 		return new RefactoringStatus();
diff --git a/org.eclipse.jdt.junit5.runtime/META-INF/MANIFEST.MF b/org.eclipse.jdt.junit5.runtime/META-INF/MANIFEST.MF
index 19aca54..b0f62c8 100644
--- a/org.eclipse.jdt.junit5.runtime/META-INF/MANIFEST.MF
+++ b/org.eclipse.jdt.junit5.runtime/META-INF/MANIFEST.MF
@@ -4,7 +4,7 @@
 Bundle-Name: %pluginName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.jdt.junit5.runtime;singleton:=true
-Bundle-Version: 1.0.700.qualifier
+Bundle-Version: 1.0.800.qualifier
 Bundle-Localization: plugin
 Export-Package: org.eclipse.jdt.internal.junit5.runner;x-internal:=true
 Require-Bundle: org.eclipse.jdt.junit.runtime;bundle-version="[3.5.0,4.0.0)",
diff --git a/org.eclipse.jdt.junit5.runtime/pom.xml b/org.eclipse.jdt.junit5.runtime/pom.xml
index 9333954..0c1e907 100644
--- a/org.eclipse.jdt.junit5.runtime/pom.xml
+++ b/org.eclipse.jdt.junit5.runtime/pom.xml
@@ -18,6 +18,6 @@
   </parent>
   <groupId>org.eclipse.jdt</groupId>
   <artifactId>org.eclipse.jdt.junit5.runtime</artifactId>
-  <version>1.0.700-SNAPSHOT</version>
+  <version>1.0.800-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/org.eclipse.jdt.junit5.runtime/src/org/eclipse/jdt/internal/junit5/runner/JUnit5TestReference.java b/org.eclipse.jdt.junit5.runtime/src/org/eclipse/jdt/internal/junit5/runner/JUnit5TestReference.java
index e5e40a8..f73da34 100644
--- a/org.eclipse.jdt.junit5.runtime/src/org/eclipse/jdt/internal/junit5/runner/JUnit5TestReference.java
+++ b/org.eclipse.jdt.junit5.runtime/src/org/eclipse/jdt/internal/junit5/runner/JUnit5TestReference.java
@@ -18,6 +18,7 @@
 
 import org.junit.platform.launcher.Launcher;
 import org.junit.platform.launcher.LauncherDiscoveryRequest;
+import org.junit.platform.launcher.TestExecutionListener;
 import org.junit.platform.launcher.TestIdentifier;
 import org.junit.platform.launcher.TestPlan;
 
@@ -86,7 +87,18 @@
 
 	@Override
 	public void run(TestExecution execution) {
-		fLauncher.execute(fTestPlan, new JUnit5TestListener(execution.getListener(), fRemoteTestRunner));
+		boolean foundMethodThatAvoidsRedundantDiscovery;
+		try {
+			fLauncher.getClass().getMethod("execute", TestPlan.class, TestExecutionListener[].class); //$NON-NLS-1$
+			foundMethodThatAvoidsRedundantDiscovery= true;
+		} catch (NoSuchMethodException e) {
+			foundMethodThatAvoidsRedundantDiscovery= false;
+		}
+		if (foundMethodThatAvoidsRedundantDiscovery) {
+			fLauncher.execute(fTestPlan, new JUnit5TestListener(execution.getListener(), fRemoteTestRunner));
+		} else {
+			fLauncher.execute(fRequest, new JUnit5TestListener(execution.getListener(), fRemoteTestRunner));
+		}
 	}
 
 	@Override
diff --git a/org.eclipse.jdt.text.tests/META-INF/MANIFEST.MF b/org.eclipse.jdt.text.tests/META-INF/MANIFEST.MF
index efc6a2e..1da9f7f 100644
--- a/org.eclipse.jdt.text.tests/META-INF/MANIFEST.MF
+++ b/org.eclipse.jdt.text.tests/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %Plugin.name
 Bundle-SymbolicName: org.eclipse.jdt.text.tests;singleton:=true
-Bundle-Version: 3.13.700.qualifier
+Bundle-Version: 3.13.800.qualifier
 Bundle-Activator: org.eclipse.jdt.text.tests.JdtTextTestPlugin
 Bundle-ActivationPolicy: lazy
 Bundle-Vendor: %Plugin.providerName
diff --git a/org.eclipse.jdt.text.tests/plugin.xml b/org.eclipse.jdt.text.tests/plugin.xml
index 8931f92..49a78dc 100644
--- a/org.eclipse.jdt.text.tests/plugin.xml
+++ b/org.eclipse.jdt.text.tests/plugin.xml
@@ -36,5 +36,15 @@
             type="java.lang.Object">
       </propertyTester>
    </extension>
-
+	<extension
+		point="org.eclipse.jdt.ui.javaCompletionProposalComputer"
+		id="LongCompletionProposalComputer">
+		<javaCompletionProposalComputer
+			class="org.eclipse.jdt.text.tests.contentassist.LongCompletionProposalComputer"
+			categoryId="org.eclipse.jdt.ui.javaAllProposalCategory"
+			requiresUIThread="false">
+			<partition type="__dftl_partition_content_type"/>
+			<partition type="__java_string"/>
+		</javaCompletionProposalComputer>
+	</extension>
 </plugin>
diff --git a/org.eclipse.jdt.text.tests/pom.xml b/org.eclipse.jdt.text.tests/pom.xml
index e7bd4e4..0703bd0 100644
--- a/org.eclipse.jdt.text.tests/pom.xml
+++ b/org.eclipse.jdt.text.tests/pom.xml
@@ -20,7 +20,7 @@
   </parent>
   <groupId>org.eclipse.jdt</groupId>
   <artifactId>org.eclipse.jdt.text.tests</artifactId>
-  <version>3.13.700-SNAPSHOT</version>
+  <version>3.13.800-SNAPSHOT</version>
   <packaging>eclipse-test-plugin</packaging>
 
   <properties>
diff --git a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/JavaPartitionerTest.java b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/JavaPartitionerTest.java
index 5cbb063..30db9a8 100644
--- a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/JavaPartitionerTest.java
+++ b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/JavaPartitionerTest.java
@@ -588,10 +588,7 @@
 	public void testPartitionFinder() {
 		try {
 
-			ITypedRegion[] partitioning= fDocument.computePartitioning(0, fDocument.getLength());
-
-			for (int i= 0; i < partitioning.length; i++) {
-				ITypedRegion expected= partitioning[i];
+			for (ITypedRegion expected : fDocument.computePartitioning(0, fDocument.getLength())) {
 				for (int j= 0; j < expected.getLength(); j++) {
 					ITypedRegion result= fDocument.getPartition(expected.getOffset() + j);
 					assertTrue(expected.equals(result));
diff --git a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/MarkOccurrenceTest.java b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/MarkOccurrenceTest.java
index 8521a54..2e7a7c5 100644
--- a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/MarkOccurrenceTest.java
+++ b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/MarkOccurrenceTest.java
@@ -376,10 +376,9 @@
 	}
 
 	private void assertOccurrenceInWidget(Position position) {
-		StyleRange[] styleRanges= fTextWidget.getStyleRanges(position.offset, position.length);
-		for (int i= 0; i < styleRanges.length; i++) {
-			if (styleRanges[i].background != null) {
-				RGB rgb= styleRanges[i].background.getRGB();
+		for (StyleRange styleRange : fTextWidget.getStyleRanges(position.offset, position.length)) {
+			if (styleRange.background != null) {
+				RGB rgb= styleRange.background.getRGB();
 				if (fgHighlightRGB.equals(rgb))
 					return;
 			}
diff --git a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/OverrideIndicatorTest.java b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/OverrideIndicatorTest.java
index 0b29559..7d10a67 100644
--- a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/OverrideIndicatorTest.java
+++ b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/OverrideIndicatorTest.java
@@ -122,8 +122,8 @@
 	public void testOverrideIndicatorState() {
 		testCountOverrideIndicators();
 		int count= 0;
-		for (int i= 0; i < fOverrideAnnotations.length; i++) {
-			Accessor indicator= new Accessor(fOverrideAnnotations[i], "org.eclipse.jdt.internal.ui.javaeditor.OverrideIndicatorManager$OverrideIndicator", getClass().getClassLoader());
+		for (Annotation overrideAnnotation : fOverrideAnnotations) {
+			Accessor indicator= new Accessor(overrideAnnotation, "org.eclipse.jdt.internal.ui.javaeditor.OverrideIndicatorManager$OverrideIndicator", getClass().getClassLoader());
 			if (indicator.getBoolean("fIsOverwriteIndicator"))
 				count++;
 		}
@@ -132,12 +132,12 @@
 
 	public void testOverrideIndicatorText() {
 		testCountOverrideIndicators();
-		for (int i= 0; i < fOverrideAnnotations.length; i++) {
-			String text= fOverrideAnnotations[i].getText();
+		for (Annotation overrideAnnotation : fOverrideAnnotations) {
+			String text= overrideAnnotation.getText();
 			assertTrue(text != null
-					&& (text.equals("overrides java.lang.Object.toString")
-							|| text.equals("implements junit.framework.Test.run")
-							|| text.equals("implements junit.framework.Test.countTestCases")
+				&& (text.equals("overrides java.lang.Object.toString")
+					|| text.equals("implements junit.framework.Test.run")
+					|| text.equals("implements junit.framework.Test.countTestCases")
 					));
 		}
 	}
diff --git a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/PluginsNotLoadedTest.java b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/PluginsNotLoadedTest.java
index 065974e..afce930 100644
--- a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/PluginsNotLoadedTest.java
+++ b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/PluginsNotLoadedTest.java
@@ -74,7 +74,6 @@
 			"org.eclipse.core.filesystem.win32.x86",
 			"org.eclipse.core.resources.compatibility",
 			"org.eclipse.core.resources.win32",
-			"org.eclipse.core.runtime.compatibility.registry",
 			"org.eclipse.debug.ui",
 			"org.eclipse.equinox.http.jetty",
 			"org.eclipse.equinox.http.registry",
diff --git a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/PropertiesFilePartitionerTest.java b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/PropertiesFilePartitionerTest.java
index a493e7d..482cf3e 100644
--- a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/PropertiesFilePartitionerTest.java
+++ b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/PropertiesFilePartitionerTest.java
@@ -396,10 +396,7 @@
 	public void testPartitionFinder() {
 		try {
 
-			ITypedRegion[] partitioning= fDocument.computePartitioning(IPropertiesFilePartitions.PROPERTIES_FILE_PARTITIONING, 0, fDocument.getLength(), false);
-
-			for (int i= 0; i < partitioning.length; i++) {
-				ITypedRegion expected= partitioning[i];
+			for (ITypedRegion expected : fDocument.computePartitioning(IPropertiesFilePartitions.PROPERTIES_FILE_PARTITIONING, 0, fDocument.getLength(), false)) {
 				for (int j= 0; j < expected.getLength(); j++) {
 					ITypedRegion result= fDocument.getPartition(IPropertiesFilePartitions.PROPERTIES_FILE_PARTITIONING, expected.getOffset() + j, false);
 					assertTrue(expected.equals(result));
diff --git a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/AbstractCompletionTest.java b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/AbstractCompletionTest.java
index d771afe..2175fbc 100644
--- a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/AbstractCompletionTest.java
+++ b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/AbstractCompletionTest.java
@@ -498,14 +498,13 @@
 	}
 
 	private ICompletionProposal findNamedProposal(String prefix, IRegion selection) {
-		ICompletionProposal[] proposals= collectProposals(selection);
-
 		ICompletionProposal found= null;
-		for (int i= 0; i < proposals.length; i++) {
-			String displayString= proposals[i].getDisplayString();
+		for (ICompletionProposal proposal : collectProposals(selection)) {
+			String displayString= proposal.getDisplayString();
 			if (displayString.startsWith(prefix)) {
-				if (found == null || displayString.equals(prefix))
-					found= proposals[i];
+				if (found == null || displayString.equals(prefix)) {
+					found= proposal;
+				}
 			}
 		}
 		return found;
diff --git a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/CheckUIThreadReactivityThread.java b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/CheckUIThreadReactivityThread.java
new file mode 100644
index 0000000..cc14e27
--- /dev/null
+++ b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/CheckUIThreadReactivityThread.java
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Red Hat Inc., 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
+ *******************************************************************************/
+package org.eclipse.jdt.text.tests.contentassist;
+
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * This thread polls the display every 50milliseconds with a null UI operation
+ * request and computes how long it take for display to process the request.
+ * The time to handle request is time when display is busy doing other work, so
+ * it's actually a UI Freeze.
+ * 
+ * This could be moved to SWT or other common place where we need to check
+ * UI Freezes and reused form there,
+ */
+public class CheckUIThreadReactivityThread extends Thread {
+
+	long pauseBetweenEachPing = 50;
+	final private Display fDisplay;
+
+	private long maxDuration;
+
+	public CheckUIThreadReactivityThread(Display display) {
+		fDisplay= display;
+	}
+
+	@Override
+	public void run() {
+		while (!isInterrupted()) {
+			long duration = System.currentTimeMillis();
+			fDisplay.syncExec(() -> {}); // do nothing, but in UI Thread
+			duration = System.currentTimeMillis() - duration;
+			maxDuration = Math.max(duration, maxDuration);
+			try {
+				sleep(pauseBetweenEachPing);
+			} catch (InterruptedException e) {
+				// nothing
+			}
+		}
+	}
+
+	public long getMaxDuration() {
+		return maxDuration;
+	}
+}
diff --git a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/CodeCompletionTest.java b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/CodeCompletionTest.java
index 08ef58a..4af16e9 100644
--- a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/CodeCompletionTest.java
+++ b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/CodeCompletionTest.java
@@ -138,13 +138,13 @@
 		System.out.print("file contents: |");
 		File file= cu.getResource().getLocation().toFile();
 		try {
-			BufferedReader reader= new BufferedReader(new FileReader(file));
-			String line;
-			while ((line= reader.readLine()) != null) {
-				System.out.println(line);
+			try (BufferedReader reader= new BufferedReader(new FileReader(file))) {
+				String line;
+				while ((line= reader.readLine()) != null) {
+					System.out.println(line);
+				}
+				System.out.println("|");
 			}
-			System.out.println("|");
-			reader.close();
 		} catch (FileNotFoundException e1) {
 			e1.printStackTrace();
 		} catch (IOException e1) {
@@ -213,12 +213,9 @@
 	}
 
 	public static void closeAllEditors() {
-		IWorkbenchWindow[] windows= PlatformUI.getWorkbench().getWorkbenchWindows();
-		for (IWorkbenchWindow window : windows) {
-			IWorkbenchPage[] pages= window.getPages();
-			for (IWorkbenchPage page : pages) {
-				IEditorReference[] editorReferences= page.getEditorReferences();
-				for (IEditorReference editorReference : editorReferences) {
+		for (IWorkbenchWindow window : PlatformUI.getWorkbench().getWorkbenchWindows()) {
+			for (IWorkbenchPage page : window.getPages()) {
+				for (IEditorReference editorReference : page.getEditorReferences()) {
 					closeEditor(editorReference.getEditor(false));
 				}
 			}
@@ -994,13 +991,11 @@
 
 			codeComplete(cu, offset, collector);
 
-			IJavaCompletionProposal[] proposals= collector.getJavaCompletionProposals();
-
 			IJavaCompletionProposal proposal= null;
 
-			for (IJavaCompletionProposal proposal2 : proposals) {
-				if (proposal2.getDisplayString().startsWith("MyClass")) {
-					proposal= proposal2;
+			for (IJavaCompletionProposal p : collector.getJavaCompletionProposals()) {
+				if (p.getDisplayString().startsWith("MyClass")) {
+					proposal= p;
 				}
 			}
 			assertNotNull("no proposal for MyClass()", proposal);
@@ -1059,12 +1054,10 @@
 
 		codeComplete(cu, offset, collector);
 
-		IJavaCompletionProposal[] proposals= collector.getJavaCompletionProposals();
-
 		IJavaCompletionProposal proposal= null;
-		for (IJavaCompletionProposal proposal2 : proposals) {
-			if (proposal2.getDisplayString().startsWith("Natural")) {
-				proposal= proposal2;
+		for (IJavaCompletionProposal p : collector.getJavaCompletionProposals()) {
+			if (p.getDisplayString().startsWith("Natural")) {
+				proposal= p;
 			}
 		}
 		assertNotNull("no proposal for enum Natural()", proposal);
@@ -1130,13 +1123,11 @@
 
 			codeComplete(cu, offset, collector);
 
-			IJavaCompletionProposal[] proposals= collector.getJavaCompletionProposals();
-
 			IJavaCompletionProposal proposal= null;
 
-			for (IJavaCompletionProposal proposal2 : proposals) {
-				if (proposal2.getDisplayString().startsWith("getWriter")) {
-					proposal= proposal2;
+			for (IJavaCompletionProposal p : collector.getJavaCompletionProposals()) {
+				if (p.getDisplayString().startsWith("getWriter")) {
+					proposal= p;
 				}
 			}
 			assertNotNull("no proposal for getWriter()", proposal);
@@ -1192,12 +1183,11 @@
 
 			codeComplete(cu, offset, collector);
 
-			IJavaCompletionProposal[] proposals= collector.getJavaCompletionProposals();
 			IJavaCompletionProposal proposal= null;
 
-			for (IJavaCompletionProposal proposal2 : proposals) {
-				if (proposal2.getDisplayString().startsWith("foo")) {
-					proposal= proposal2;
+			for (IJavaCompletionProposal p : collector.getJavaCompletionProposals()) {
+				if (p.getDisplayString().startsWith("foo")) {
+					proposal= p;
 				}
 			}
 			assertNotNull("no proposal for foo()", proposal);
@@ -1398,12 +1388,11 @@
 
 		codeComplete(cu, offset, collector);
 
-		IJavaCompletionProposal[] proposals= collector.getJavaCompletionProposals();
 		IJavaCompletionProposal proposal= null;
 
-		for (IJavaCompletionProposal proposal2 : proposals) {
-			if (proposal2.getDisplayString().startsWith("foo")) {
-				proposal= proposal2;
+		for (IJavaCompletionProposal p : collector.getJavaCompletionProposals()) {
+			if (p.getDisplayString().startsWith("foo")) {
+				proposal= p;
 			}
 		}
 		assertNotNull("no proposal for foomethod()", proposal);
@@ -2034,11 +2023,8 @@
 
 		codeComplete(cu, offset, collector);
 
-		IJavaCompletionProposal[] proposals= collector.getJavaCompletionProposals();
-
 		IJavaCompletionProposal toStringProposal= null;
-
-		for (IJavaCompletionProposal proposal : proposals) {
+		for (IJavaCompletionProposal proposal : collector.getJavaCompletionProposals()) {
 			if (proposal.getDisplayString().startsWith("foo")) {
 				toStringProposal= proposal;
 			}
@@ -2094,11 +2080,8 @@
 
 		codeComplete(cu, offset, collector);
 
-		IJavaCompletionProposal[] proposals= collector.getJavaCompletionProposals();
-
 		IJavaCompletionProposal toStringProposal= null;
-
-		for (IJavaCompletionProposal proposal : proposals) {
+		for (IJavaCompletionProposal proposal : collector.getJavaCompletionProposals()) {
 			if (proposal.getDisplayString().startsWith("foo")) {
 				toStringProposal= proposal;
 			}
@@ -2155,13 +2138,11 @@
 
 			codeComplete(cu, offset, collector);
 
-			IJavaCompletionProposal[] proposals= collector.getJavaCompletionProposals();
-
 			IJavaCompletionProposal proposal= null;
 
-			for (IJavaCompletionProposal proposal2 : proposals) {
-				if (proposal2.getDisplayString().startsWith("setWriter")) {
-					proposal= proposal2;
+			for (IJavaCompletionProposal p : collector.getJavaCompletionProposals()) {
+				if (p.getDisplayString().startsWith("setWriter")) {
+					proposal= p;
 				}
 			}
 			assertNotNull("no proposal for setWriter()", proposal);
diff --git a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/CodeCompletionTest18.java b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/CodeCompletionTest18.java
index ee545c9..59bb236 100644
--- a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/CodeCompletionTest18.java
+++ b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/CodeCompletionTest18.java
@@ -121,13 +121,11 @@
 	}
 
 	public static void closeAllEditors() {
-		IWorkbenchWindow[] windows= PlatformUI.getWorkbench().getWorkbenchWindows();
-		for (int i= 0; i < windows.length; i++) {
-			IWorkbenchPage[] pages= windows[i].getPages();
-			for (int j= 0; j < pages.length; j++) {
-				IEditorReference[] editorReferences= pages[j].getEditorReferences();
-				for (int k= 0; k < editorReferences.length; k++)
-					closeEditor(editorReferences[k].getEditor(false));
+		for (IWorkbenchWindow window : PlatformUI.getWorkbench().getWorkbenchWindows()) {
+			for (IWorkbenchPage page : window.getPages()) {
+				for (IEditorReference editorReference : page.getEditorReferences()) {
+					closeEditor(editorReference.getEditor(false));
+				}
 			}
 		}
 	}
@@ -172,11 +170,9 @@
 
 		codeComplete(cu, offset, collector);
 
-		IJavaCompletionProposal[] proposals= collector.getJavaCompletionProposals();
 		ICompletionProposal proposal= null;
 
-		for (int i= 0; i < proposals.length; i++) {
-			IJavaCompletionProposal curr= proposals[i];
+		for (IJavaCompletionProposal curr : collector.getJavaCompletionProposals()) {
 			if (curr.getDisplayString().startsWith("thenComparingLong")) {
 				assertNull("more than one proposal for thenComparingLong()", proposal);
 				proposal= curr;
diff --git a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/ContentAssistAndThreadsTest.java b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/ContentAssistAndThreadsTest.java
new file mode 100644
index 0000000..2fc1067
--- /dev/null
+++ b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/ContentAssistAndThreadsTest.java
@@ -0,0 +1,144 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Red Hat Inc., 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
+ *******************************************************************************/
+package org.eclipse.jdt.text.tests.contentassist;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicReference;
+import java.util.stream.Collectors;
+
+import org.junit.After;
+import org.junit.Test;
+
+import org.eclipse.jdt.testplugin.JavaProjectHelper;
+
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableItem;
+import org.eclipse.swt.widgets.Widget;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.NullProgressMonitor;
+
+import org.eclipse.jface.text.contentassist.ContentAssistant;
+
+import org.eclipse.ui.texteditor.ContentAssistAction;
+import org.eclipse.ui.texteditor.ITextEditorActionConstants;
+
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.IPackageFragment;
+import org.eclipse.jdt.core.IPackageFragmentRoot;
+
+import org.eclipse.jdt.ui.JavaUI;
+import org.eclipse.jdt.ui.PreferenceConstants;
+import org.eclipse.jdt.ui.text.IJavaPartitions;
+
+import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.javaeditor.JavaEditor;
+import org.eclipse.jdt.internal.ui.text.java.JavaCompletionProcessor;
+
+public class ContentAssistAndThreadsTest extends AbstractCompletionTest {
+
+	@After
+	public void resetPreference() {
+		JavaPlugin.getDefault().getPreferenceStore().setToDefault(PreferenceConstants.CODEASSIST_NONUITHREAD_COMPUTATION);
+	}
+
+	@Test
+	public void testComputeCompletionInNonUIThread() throws Exception {
+		IJavaProject fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
+		JavaProjectHelper.addRTJar(fJProject1);
+		IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
+		IPackageFragment pack1= sourceFolder.createPackageFragment("test1", false, null);
+		ICompilationUnit cu= pack1.createCompilationUnit("Blah.java", "", true, new NullProgressMonitor());
+		JavaEditor part= (JavaEditor) JavaUI.openInEditor(cu);
+		ContentAssistant assistant= new ContentAssistant();
+		assistant.setDocumentPartitioning(IJavaPartitions.JAVA_PARTITIONING);
+		JavaCompletionProcessor javaProcessor= new JavaCompletionProcessor(part, assistant, getContentType());
+		AtomicReference<Throwable> exception = new AtomicReference<>();
+		List<IStatus> errors = new ArrayList<>();
+		JavaPlugin.getDefault().getLog().addLogListener((status, plugin) -> {
+			if (status.getSeverity() >= IStatus.WARNING) {
+				errors.add(status);
+			}
+		});
+		Thread thread = new Thread(() -> {
+			try {
+				javaProcessor.computeCompletionProposals(part.getViewer(), 0);
+				// a popup can be shown and block the thread in case of error
+			} catch (Exception e) {
+				exception.set(e);
+			}
+		});
+		thread.start();
+		thread.join();
+		if (exception.get() != null) {
+			exception.get().printStackTrace();
+		}
+		assertNull(exception.get());
+		assertEquals(Collections.emptyList(), errors);
+	}
+
+	@Test
+	public void testLongNonUIThreadContentAssistDoesntFreezeUI() throws Exception {
+		JavaPlugin.getDefault().getPreferenceStore().setValue(PreferenceConstants.CODEASSIST_NONUITHREAD_COMPUTATION, true);
+		IJavaProject fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
+		JavaProjectHelper.addRTJar(fJProject1);
+		IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
+		IPackageFragment pack1= sourceFolder.createPackageFragment("test1", false, null);
+		ICompilationUnit cu= pack1.createCompilationUnit("Blah.java", LongCompletionProposalComputer.CONTENT_TRIGGER_STRING, true, new NullProgressMonitor());
+		JavaEditor part= (JavaEditor) JavaUI.openInEditor(cu);
+		final Set<Shell> beforeShells = Arrays.stream(part.getSite().getShell().getDisplay().getShells()).filter(Shell::isVisible).collect(Collectors.toSet());
+		Display display= part.getViewer().getTextWidget().getDisplay();
+		ContentAssistAction action = (ContentAssistAction) part.getAction(ITextEditorActionConstants.CONTENT_ASSIST);
+		action.update();
+		CheckUIThreadReactivityThread thread = new CheckUIThreadReactivityThread(display);
+		thread.start();
+		display.asyncExec(() -> action.run()); // mustn't be synchronous or CheckUIThreadReactivityTest can miss it.
+		try {
+			assertTrue("Missing completion proposal", new org.eclipse.jdt.text.tests.performance.DisplayHelper() {
+				@Override
+				protected boolean condition() {
+					Set<Shell> newShells = Arrays.stream(part.getSite().getShell().getDisplay().getShells()).filter(Shell::isVisible).collect(Collectors.toSet());
+					newShells.removeAll(beforeShells);
+					if (!newShells.isEmpty()) {
+						Table completionTable = findCompletionSelectionControl(newShells.iterator().next());
+						return Arrays.stream(completionTable.getItems()).map(TableItem::getText).anyMatch(LongCompletionProposalComputer.CONTENT_TRIGGER_STRING::equals);
+					}
+					return false;
+				}
+			}.waitForCondition(display, 3000));
+		} finally {
+			thread.interrupt();
+		}
+		assertTrue("UI was frozen for " + thread.getMaxDuration(), thread.getMaxDuration() < 1000);
+	}
+
+	private Table findCompletionSelectionControl(Widget control) {
+		if (control instanceof Table) {
+			return (Table)control;
+		} else if (control instanceof Composite) {
+			for (Widget child : ((Composite)control).getChildren()) {
+				Table res = findCompletionSelectionControl(child);
+				if (res != null) {
+					return res;
+				}
+			}
+		}
+		return null;
+	}
+}
diff --git a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/ContentAssistHistoryTest.java b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/ContentAssistHistoryTest.java
index cc7bdc9..52c2575 100644
--- a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/ContentAssistHistoryTest.java
+++ b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/ContentAssistHistoryTest.java
@@ -15,7 +15,6 @@
 
 import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
@@ -249,8 +248,7 @@
 
 	private static void assertEqualMap(String message, Map<String, List<String>> expected, Map<String, RHSHistory> actual) {
 		assertEquals(message, expected.size(), actual.size());
-		for (Iterator<String> it= expected.keySet().iterator(); it.hasNext();) {
-			String type= it.next();
+		for (String type : expected.keySet()) {
 			assertEquals(message, expected.get(type), actual.get(type).getTypes());
 		}
 	}
diff --git a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/JavadocCompletionTest.java b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/JavadocCompletionTest.java
index e40c0b7..7d43cd9 100644
--- a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/JavadocCompletionTest.java
+++ b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/JavadocCompletionTest.java
@@ -312,9 +312,9 @@
 
 	public void testTypeBlockTags() throws Exception {
 		tearDown();
-		for (int i= 0; i < TYPE_BLOCK_TAGS.length; i++) {
+		for (String t : TYPE_BLOCK_TAGS) {
 			setUp();
-			String tag= TYPE_BLOCK_TAGS[i];
+			String tag= t;
 			assertTypeJavadocProposal(" * @|", tag, " * " + tag);
 			tearDown();
 		}
@@ -323,10 +323,10 @@
 
 	public void testMethodBlockTags() throws Exception {
 		tearDown();
-		for (int i= 0; i < METHOD_BLOCK_TAGS.length; i++) {
+		for (String t : METHOD_BLOCK_TAGS) {
 			setUp();
 			addMembers(METHOD);
-			String tag= METHOD_BLOCK_TAGS[i];
+			String tag= t;
 			assertMemberJavadocProposal(" * @|", tag, " * " + tag);
 			tearDown();
 		}
@@ -335,10 +335,10 @@
 
 	public void testFieldBlockTags() throws Exception {
 		tearDown();
-		for (int i= 0; i < FIELD_BLOCK_TAGS.length; i++) {
+		for (String t : FIELD_BLOCK_TAGS) {
 			setUp();
 			addMembers(FIELD);
-			String tag= FIELD_BLOCK_TAGS[i];
+			String tag= t;
 			assertMemberJavadocProposal(" * @|", tag, " * " + tag);
 			tearDown();
 		}
@@ -347,9 +347,9 @@
 
  	public void testNoInlineAsBlockTags() throws Exception {
  		tearDown();
- 		for (int i= 0; i < TYPE_INLINE_TAGS.length; i++) {
- 			setUp();
-			String tag= TYPE_INLINE_TAGS[i];
+		for (String t : TYPE_INLINE_TAGS) {
+			setUp();
+			String tag= t;
 			assertNoMethodBodyProposals(" * @|", tag);
 			tearDown();
 		}
@@ -358,9 +358,9 @@
 
 	public void testTypeInlineTags() throws Exception {
  		tearDown();
-		for (int i= 0; i < TYPE_INLINE_TAGS.length; i++) {
+		for (String t : TYPE_INLINE_TAGS) {
 			setUp();
-			String tag= TYPE_INLINE_TAGS[i];
+			String tag= t;
 			assertTypeJavadocProposal(" * {@|", "{" + tag + "}", " * {" + tag + "|}");
 			tearDown();
 		}
@@ -369,10 +369,10 @@
 
 	public void testMethodInlineTags() throws Exception {
 		tearDown();
-		for (int i= 0; i < METHOD_INLINE_TAGS.length; i++) {
+		for (String t : METHOD_INLINE_TAGS) {
 			setUp();
 			addMembers(METHOD);
-			String tag= METHOD_INLINE_TAGS[i];
+			String tag= t;
 			assertMemberJavadocProposal(" * {@|", "{" + tag + "}", " * {" + tag + "|}");
 			tearDown();
 		}
@@ -381,10 +381,10 @@
 
 	public void testFieldInlineTags() throws Exception {
 		tearDown();
-		for (int i= 0; i < FIELD_INLINE_TAGS.length; i++) {
+		for (String t : FIELD_INLINE_TAGS) {
 			setUp();
 			addMembers(FIELD);
-			String tag= FIELD_INLINE_TAGS[i];
+			String tag= t;
 			assertMemberJavadocProposal(" * {@|", "{" + tag + "}", " * {" + tag + "|}");
 			tearDown();
 		}
@@ -393,8 +393,7 @@
 
 	public void testNoBlockAsInlineTags() throws Exception {
 		tearDown();
-		for (int i= 0; i < TYPE_BLOCK_TAGS.length; i++) {
-			String tag= TYPE_BLOCK_TAGS[i];
+		for (String tag : TYPE_BLOCK_TAGS) {
 			setUp();
 			assertNoMethodBodyProposals(" * {@|", tag);
 			tearDown();
@@ -408,9 +407,9 @@
  			return;
  		}
 		tearDown();
-		for (int i= 0; i < HTML_TAGS.length; i++) {
+		for (String t : HTML_TAGS) {
 			setUp();
-			String tag= HTML_TAGS[i];
+			String tag= t;
 			assertTypeJavadocProposal(" * Prefix <" + tag.charAt(0) + "| postfix", "<" + tag, " * Prefix <" + tag + ">| postfix");
 			tearDown();
 		}
diff --git a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/LongCompletionProposalComputer.java b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/LongCompletionProposalComputer.java
new file mode 100644
index 0000000..1dacabe
--- /dev/null
+++ b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/LongCompletionProposalComputer.java
@@ -0,0 +1,62 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Red Hat Inc., 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
+ *******************************************************************************/
+package org.eclipse.jdt.text.tests.contentassist;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+
+import org.eclipse.jface.text.contentassist.CompletionProposal;
+import org.eclipse.jface.text.contentassist.ICompletionProposal;
+import org.eclipse.jface.text.contentassist.IContextInformation;
+
+import org.eclipse.jdt.ui.text.java.ContentAssistInvocationContext;
+import org.eclipse.jdt.ui.text.java.IJavaCompletionProposalComputer;
+
+import org.eclipse.jdt.internal.ui.JavaPlugin;
+
+public class LongCompletionProposalComputer implements IJavaCompletionProposalComputer {
+
+	public static final String CONTENT_TRIGGER_STRING = "longCompletion";
+
+	@Override
+	public void sessionStarted() {
+	}
+
+	@Override
+	public List<ICompletionProposal> computeCompletionProposals(ContentAssistInvocationContext context, IProgressMonitor monitor) {
+		if (context.getDocument().get().contains(CONTENT_TRIGGER_STRING)) {
+			try {
+				Thread.sleep(1000);
+			} catch (InterruptedException e) {
+				JavaPlugin.log(e);
+			}
+			return Collections.singletonList(new CompletionProposal(CONTENT_TRIGGER_STRING, 0, 0, 0, null, CONTENT_TRIGGER_STRING, null, null));
+		}
+		return Collections.emptyList();
+	}
+
+	@Override
+	public List<IContextInformation> computeContextInformation(ContentAssistInvocationContext context, IProgressMonitor monitor) {
+		return Collections.emptyList();
+	}
+
+	@Override
+	public String getErrorMessage() {
+		return null;
+	}
+
+	@Override
+	public void sessionEnded() {
+	}
+
+}
diff --git a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/performance/AbstractScrollAnnotatedJavaEditorTest.java b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/performance/AbstractScrollAnnotatedJavaEditorTest.java
index 2a6d2dd..0a175e5 100644
--- a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/performance/AbstractScrollAnnotatedJavaEditorTest.java
+++ b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/performance/AbstractScrollAnnotatedJavaEditorTest.java
@@ -50,8 +50,7 @@
 	}
 
 	private void renameMemberDecls(IDocument document, IMember[] members) throws JavaModelException, BadLocationException {
-		for (int j= 0; j < members.length; j++) {
-			IMember member= members[j];
+		for (IMember member : members) {
 			ISourceRange range= member.getNameRange();
 			if (range != null)
 				document.replace(range.getOffset(), 2, "XX");
@@ -70,9 +69,7 @@
 		try {
 			IDocument document= EditorTestHelper.getDocument((ITextEditor) editor);
 			ICompilationUnit unit= JavaPlugin.getDefault().getWorkingCopyManager().getWorkingCopy(javaEditor.getEditorInput());
-			IType[] allTypes= unit.getAllTypes();
-			for (int i= 0; i < allTypes.length; i++) {
-				IType type= allTypes[i];
+			for (IType type : unit.getAllTypes()) {
 				renameMemberDecls(document, type.getMethods());
 				renameMemberDecls(document, type.getFields());
 			}
diff --git a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/performance/EditorTestHelper.java b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/performance/EditorTestHelper.java
index d1b35c7..7227d32 100644
--- a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/performance/EditorTestHelper.java
+++ b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/performance/EditorTestHelper.java
@@ -168,13 +168,11 @@
 	}
 
 	public static void closeAllEditors() {
-		IWorkbenchWindow[] windows= PlatformUI.getWorkbench().getWorkbenchWindows();
-		for (int i= 0; i < windows.length; i++) {
-			IWorkbenchPage[] pages= windows[i].getPages();
-			for (int j= 0; j < pages.length; j++) {
-				IEditorReference[] editorReferences= pages[j].getEditorReferences();
-				for (int k= 0; k < editorReferences.length; k++)
-					closeEditor(editorReferences[k].getEditor(false));
+		for (IWorkbenchWindow window : PlatformUI.getWorkbench().getWorkbenchWindows()) {
+			for (IWorkbenchPage page : window.getPages()) {
+				for (IEditorReference editorReference : page.getEditorReferences()) {
+					closeEditor(editorReference.getEditor(false));
+				}
 			}
 		}
 	}
@@ -321,9 +319,7 @@
 
 	public static boolean allJobsQuiet() {
 		IJobManager jobManager= Job.getJobManager();
-		Job[] jobs= jobManager.find(null);
-		for (int i= 0; i < jobs.length; i++) {
-			Job job= jobs[i];
+		for (Job job : jobManager.find(null)) {
 			int state= job.getState();
 			if (state == Job.RUNNING || state == Job.WAITING) {
 				Logger.getGlobal().finest(job.toString());
@@ -478,9 +474,9 @@
 			return;
 		}
 		if (resource instanceof IContainer) {
-			IResource[] resources= ((IContainer) resource).members();
-			for (int i= 0; i < resources.length; i++)
-				findFiles(resources[i], files);
+			for (IResource res : ((IContainer) resource).members()) {
+				findFiles(res, files);
+			}
 		}
 	}
 
@@ -509,13 +505,12 @@
 	}
 
 	private static void addJavaFiles(File dir, List<File> collection) throws IOException {
-		File[] files= dir.listFiles();
 		List<File> subDirs= new ArrayList<>(2);
-		for (int i= 0; i < files.length; i++) {
-			if (files[i].isFile()) {
-				collection.add(files[i]);
-			} else if (files[i].isDirectory()) {
-				subDirs.add(files[i]);
+		for (File file : dir.listFiles()) {
+			if (file.isFile()) {
+				collection.add(file);
+			} else if (file.isDirectory()) {
+				subDirs.add(file);
 			}
 		}
 		Iterator<File> iter= subDirs.iterator();
diff --git a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/performance/InvocationCountPerformanceMeter.java b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/performance/InvocationCountPerformanceMeter.java
index f6925b3..54e413c 100644
--- a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/performance/InvocationCountPerformanceMeter.java
+++ b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/performance/InvocationCountPerformanceMeter.java
@@ -180,16 +180,18 @@
 		 * Enables all breakpoint request.
 		 */
 		private void enableBreakpoints() {
-			for (int i= 0; i < fBreakpointRequests.length; i++)
-				fBreakpointRequests[i].enable();
+			for (BreakpointRequest breakpointRequest : fBreakpointRequests) {
+				breakpointRequest.enable();
+			}
 		}
 
 		/**
 		 * Disables all breakpoint request.
 		 */
 		private void disableBreakpoints() {
-			for (int i= 0; i < fBreakpointRequests.length; i++)
-				fBreakpointRequests[i].disable();
+			for (BreakpointRequest breakpointRequest : fBreakpointRequests) {
+				breakpointRequest.disable();
+			}
 		}
 
 		/**
@@ -266,9 +268,8 @@
 		public void print(Object key1) {
 			System.out.println(key1.toString() + ":"); //$NON-NLS-1$
 			Map<Object, Integer> results= fResultsMap.get(key1);
-			for (Iterator<Object> iter= results.keySet().iterator(); iter.hasNext();) {
-				Object key2= iter.next();
-				System.out.println("\t" + key2 + ": " + results.get(key2).intValue()); //$NON-NLS-1$ //$NON-NLS-2$
+			for (Object key : results.keySet()) {
+				System.out.println("\t" + key + ": " + results.get(key).intValue()); //$NON-NLS-1$ //$NON-NLS-2$
 			}
 		}
 	}
@@ -381,10 +382,12 @@
 			attach(localhost, PORT);
 
 			List<BreakpointRequest> requests= new ArrayList<>();
-			for (int i= 0; i < fMethods.length; i++)
-				requests.add(createBreakpointRequest(fMethods[i]));
-			for (int i= 0; i < fConstructors.length; i++)
-				requests.add(createBreakpointRequest(fConstructors[i]));
+			for (java.lang.reflect.Method method : fMethods) {
+				requests.add(createBreakpointRequest(method));
+			}
+			for (Constructor<?> constructor : fConstructors) {
+				requests.add(createBreakpointRequest(constructor));
+			}
 			fBreakpointRequests= requests.toArray(new BreakpointRequest[requests.size()]);
 
 			fEventReader= new EventReader(fVM.eventQueue());
diff --git a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/performance/OpenPreferencePageTest.java b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/performance/OpenPreferencePageTest.java
index 5e9cb15..e1ca413 100644
--- a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/performance/OpenPreferencePageTest.java
+++ b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/performance/OpenPreferencePageTest.java
@@ -109,12 +109,11 @@
 	}
 
 	private Tree findTree(Composite composite) {
-		Control[] children= composite.getChildren();
-		for (int i= 0; i < children.length; i++) {
-			if (children[i] instanceof Tree)
-				return (Tree)children[i];
-			else if (children[i] instanceof Composite) {
-				Tree tree= findTree((Composite)children[i]);
+		for (Control child : composite.getChildren()) {
+			if (child instanceof Tree) {
+				return (Tree) child;
+			} else if (child instanceof Composite) {
+				Tree tree= findTree((Composite) child);
 				if (tree != null)
 					return tree;
 			}
@@ -138,9 +137,10 @@
 
 	private TreeItem findTreeItem(TreeItem[] items, String string) {
 		// depth first
-		for (int i= 0; i < items.length; i++) {
-			if (string.equals(items[i].getText()))
-				return items[i];
+		for (TreeItem item : items) {
+			if (string.equals(item.getText())) {
+				return item;
+			}
 		}
 		return null;
 	}
diff --git a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/performance/PerfTestSuite.java b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/performance/PerfTestSuite.java
index ec2148c..4962abd 100644
--- a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/performance/PerfTestSuite.java
+++ b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/performance/PerfTestSuite.java
@@ -53,9 +53,8 @@
 		Class<?> superClass= theClass;
 		Vector<String> names= new Vector<>();
 		while (Test.class.isAssignableFrom(superClass)) {
-			Method[] methods= superClass.getDeclaredMethods();
-			for (int i= 0; i < methods.length; i++) {
-				addPerformanceTestMethod(methods[i], names, theClass);
+			for (Method method : superClass.getDeclaredMethods()) {
+				addPerformanceTestMethod(method, names, theClass);
 			}
 			superClass= superClass.getSuperclass();
 		}
diff --git a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/templates/TemplateContributionTest.java b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/templates/TemplateContributionTest.java
index 9e16eaa..8a5f591 100644
--- a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/templates/TemplateContributionTest.java
+++ b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/templates/TemplateContributionTest.java
@@ -17,14 +17,11 @@
 
 import org.eclipse.jface.text.templates.ContextTypeRegistry;
 import org.eclipse.jface.text.templates.Template;
-import org.eclipse.jface.text.templates.TemplateBuffer;
 import org.eclipse.jface.text.templates.TemplateContextType;
 import org.eclipse.jface.text.templates.TemplateException;
 import org.eclipse.jface.text.templates.TemplateTranslator;
 import org.eclipse.jface.text.templates.TemplateVariable;
 import org.eclipse.jface.text.templates.TemplateVariableResolver;
-import org.eclipse.jface.text.templates.persistence.TemplateStore;
-
 import org.eclipse.jdt.internal.corext.template.java.JavaContextType;
 import org.eclipse.jdt.internal.corext.template.java.JavaDocContextType;
 import org.eclipse.jdt.internal.corext.template.java.SWTContextType;
@@ -51,16 +48,9 @@
 		ContextTypeRegistry registry= JavaPlugin.getDefault().getTemplateContextRegistry();
 		TemplateContextType context= registry.getContextType(resolverContextTypeId);
 
-		TemplateStore templateStore= JavaPlugin.getDefault().getTemplateStore();
-		Template[] templates= templateStore.getTemplates(contextTypeId);
-
-		for (int i= 0; i < templates.length; i++) {
-			Template template= templates[i];
+		for (Template template : JavaPlugin.getDefault().getTemplateStore().getTemplates(contextTypeId)) {
 			TemplateTranslator translator= new TemplateTranslator();
-			TemplateBuffer buffer= translator.translate(template);
-			TemplateVariable[] variables= buffer.getVariables();
-			for (int j= 0; j < variables.length; j++) {
-				TemplateVariable variable= variables[j];
+			for (TemplateVariable variable : translator.translate(template).getVariables()) {
 				if (!variable.getType().equals(variable.getName())) {
 					assertTrue("No resolver found for variable '" + variable.getType() + "' in template '" + template.getName() + "'\n\n" + template.getPattern(), canHandle(context, variable));
 				}
diff --git a/org.eclipse.jdt.ui.examples.javafamily/src/org/eclipse/core/indexsearch/SearchEngine.java b/org.eclipse.jdt.ui.examples.javafamily/src/org/eclipse/core/indexsearch/SearchEngine.java
index acd9ad4..587caab 100644
--- a/org.eclipse.jdt.ui.examples.javafamily/src/org/eclipse/core/indexsearch/SearchEngine.java
+++ b/org.eclipse.jdt.ui.examples.javafamily/src/org/eclipse/core/indexsearch/SearchEngine.java
@@ -143,9 +143,7 @@
 		execute(search, pathCollector, pm);
 		
 		/* TODO_SEARCH */
-		IFile[] files= getFiles(pathCollector, ResourcesPlugin.getWorkspace());
-		for (int i= 0; i < files.length; i++) {
-			IFile file= files[i];
+		for (IFile file : getFiles(pathCollector, ResourcesPlugin.getWorkspace())) {
 			search.locateMatches(file, resultCollector);
 		}
 	}
diff --git a/org.eclipse.jdt.ui.examples.javafamily/src/org/eclipse/jdt/internal/ui/examples/jspeditor/Jsp2JavaReconcileStep.java b/org.eclipse.jdt.ui.examples.javafamily/src/org/eclipse/jdt/internal/ui/examples/jspeditor/Jsp2JavaReconcileStep.java
index 66a3725..b3e7d86 100644
--- a/org.eclipse.jdt.ui.examples.javafamily/src/org/eclipse/jdt/internal/ui/examples/jspeditor/Jsp2JavaReconcileStep.java
+++ b/org.eclipse.jdt.ui.examples.javafamily/src/org/eclipse/jdt/internal/ui/examples/jspeditor/Jsp2JavaReconcileStep.java
@@ -108,15 +108,13 @@
 		// the "only" thing we need to do is to adapt the positions
 		int[] smap= fJspTranslator.getLineMapping();
 
-		for (int i= 0; i < inputResults.length; i++) {				
-		
+		for (IReconcileResult inputResult : inputResults) {
 			if (isCanceled())
 				return null;
-
-			if (!(inputResults[i] instanceof AnnotationAdapter))
+			if (!(inputResult instanceof AnnotationAdapter)) {
 				continue;
-				
-			AnnotationAdapter result= (AnnotationAdapter)inputResults[i];
+			}
+			AnnotationAdapter result= (AnnotationAdapter) inputResult;
 			Position pos= result.getPosition();
 			int javaLine;
 			try {
diff --git a/org.eclipse.jdt.ui.examples.javafamily/src/org/eclipse/jdt/internal/ui/examples/jspeditor/JspReconcilingStrategy.java b/org.eclipse.jdt.ui.examples.javafamily/src/org/eclipse/jdt/internal/ui/examples/jspeditor/JspReconcilingStrategy.java
index 4bd091f..2ee77c2 100644
--- a/org.eclipse.jdt.ui.examples.javafamily/src/org/eclipse/jdt/internal/ui/examples/jspeditor/JspReconcilingStrategy.java
+++ b/org.eclipse.jdt.ui.examples.javafamily/src/org/eclipse/jdt/internal/ui/examples/jspeditor/JspReconcilingStrategy.java
@@ -113,17 +113,14 @@
 			 */
 			@Override
 			protected void execute(IProgressMonitor monitor) throws CoreException, InvocationTargetException, InterruptedException {
-				for (int i= 0; i < results.length; i++) {				
-
+				for (IReconcileResult r : results) {
 					if (fProgressMonitor != null && fProgressMonitor.isCanceled())
 						return;
-		
-					if (!(results[i] instanceof AnnotationAdapter))
+					if (!(r instanceof AnnotationAdapter)) {
 						continue;
-				
-					AnnotationAdapter result= (AnnotationAdapter)results[i];
+					}
+					AnnotationAdapter result= (AnnotationAdapter) r;
 					Position pos= result.getPosition();
-					
 					Annotation annotation= result.createAnnotation();
 					getAnnotationModel().addAnnotation(annotation, pos);
 				}
diff --git a/org.eclipse.jdt.ui.examples.javafamily/src/org/eclipse/jsp/JspTypeQuery.java b/org.eclipse.jdt.ui.examples.javafamily/src/org/eclipse/jsp/JspTypeQuery.java
index d228968..aaa83cc 100644
--- a/org.eclipse.jdt.ui.examples.javafamily/src/org/eclipse/jsp/JspTypeQuery.java
+++ b/org.eclipse.jdt.ui.examples.javafamily/src/org/eclipse/jsp/JspTypeQuery.java
@@ -44,10 +44,8 @@
 	@Override
 	public void computePathsKeyingIndexFiles(ArrayList requiredIndexKeys) {
 		IWorkspace workspace= ResourcesPlugin.getWorkspace();
-		IProject[] projects= workspace.getRoot().getProjects();
 		try {
-			for (int i= 0; i < projects.length; i++) {
-				IProject project= projects[i];
+			for (IProject project : workspace.getRoot().getProjects()) {
 				if (!project.isAccessible() || !project.hasNature(JavaCore.NATURE_ID))
 					continue;
 				IPath path= project.getFullPath();
diff --git a/org.eclipse.jdt.ui.examples.javafamily/src/org/eclipse/jsp/launching/ToggleJspBreakpointAction.java b/org.eclipse.jdt.ui.examples.javafamily/src/org/eclipse/jsp/launching/ToggleJspBreakpointAction.java
index d177a64..ef9f227 100644
--- a/org.eclipse.jdt.ui.examples.javafamily/src/org/eclipse/jsp/launching/ToggleJspBreakpointAction.java
+++ b/org.eclipse.jdt.ui.examples.javafamily/src/org/eclipse/jsp/launching/ToggleJspBreakpointAction.java
@@ -44,11 +44,9 @@
 	@Override
 	public void run() {
 		IBreakpointManager manager = DebugPlugin.getDefault().getBreakpointManager();
-		IBreakpoint[] breakpoints = manager.getBreakpoints();
 		IResource resource = getResource();
 		int lineNumber = fRulerInfo.getLineOfLastMouseButtonActivity() + 1;
-		for (int i = 0; i < breakpoints.length; i++) {
-			IBreakpoint bp = breakpoints[i];
+		for (IBreakpoint bp : manager.getBreakpoints()) {
 			if (bp instanceof IJavaStratumLineBreakpoint) {
 				IJavaStratumLineBreakpoint breakpoint = (IJavaStratumLineBreakpoint)bp;
 				if (breakpoint.getMarker().getResource().equals(resource)) {
diff --git a/org.eclipse.jdt.ui.examples.javafamily/src/org/eclipse/jsp/launching/TomcatClasspathProvider.java b/org.eclipse.jdt.ui.examples.javafamily/src/org/eclipse/jsp/launching/TomcatClasspathProvider.java
index 786c89e..7aeba73 100644
--- a/org.eclipse.jdt.ui.examples.javafamily/src/org/eclipse/jsp/launching/TomcatClasspathProvider.java
+++ b/org.eclipse.jdt.ui.examples.javafamily/src/org/eclipse/jsp/launching/TomcatClasspathProvider.java
@@ -45,7 +45,6 @@
 		if (useDefault) {
 			IRuntimeClasspathEntry[] defaults = super.computeUnresolvedClasspath(configuration);
 			IVMInstall vm = JavaRuntime.computeVMInstall(configuration);
-			LibraryLocation[] libs = JavaRuntime.getLibraryLocations(vm);
 			List rtes = new ArrayList();
 			rtes.addAll(Arrays.asList(defaults));
 			// add bootstrap.jar
@@ -56,8 +55,7 @@
 			rtes.add(r);
 			// add class libraries to bootpath			
 			boolean tools = false; // keeps track of whether a tools.jar was found	
-			for (int i = 0; i < libs.length; i++) {
-				LibraryLocation lib = libs[i];
+			for (LibraryLocation lib : JavaRuntime.getLibraryLocations(vm)) {
 				if (lib.getSystemLibraryPath().toString().endsWith("tools.jar")) { //$NON-NLS-1$
 					tools = true;
 				}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/META-INF/MANIFEST.MF b/org.eclipse.jdt.ui.tests.refactoring/META-INF/MANIFEST.MF
index 2e3a3ef..d4e03e2 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/META-INF/MANIFEST.MF
+++ b/org.eclipse.jdt.ui.tests.refactoring/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %Plugin.name
 Bundle-SymbolicName: org.eclipse.jdt.ui.tests.refactoring; singleton:=true
-Bundle-Version: 3.13.700.qualifier
+Bundle-Version: 3.13.800.qualifier
 Bundle-Activator: org.eclipse.jdt.ui.tests.refactoring.infra.RefactoringTestPlugin
 Bundle-ActivationPolicy: lazy
 Bundle-Vendor: %Plugin.providerName
diff --git a/org.eclipse.jdt.ui.tests.refactoring/pom.xml b/org.eclipse.jdt.ui.tests.refactoring/pom.xml
index 5c2c19d..d51bb43 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/pom.xml
+++ b/org.eclipse.jdt.ui.tests.refactoring/pom.xml
@@ -19,7 +19,7 @@
   </parent>
   <groupId>org.eclipse.jdt</groupId>
   <artifactId>org.eclipse.jdt.ui.tests.refactoring</artifactId>
-  <version>3.13.700-SNAPSHOT</version>
+  <version>3.13.800-SNAPSHOT</version>
   <packaging>eclipse-test-plugin</packaging>
   <properties>
     <testSuite>${project.artifactId}</testSuite>
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test36_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test36_in.java
new file mode 100644
index 0000000..85161d7
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test36_in.java
@@ -0,0 +1,12 @@
+package p;
+
+public class E {
+
+	public abstract class Foo {
+	}
+
+	public static void main(String[] args) {
+		final E e= new E();
+		e.new Foo() {};
+	}
+}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test36_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test36_out.java
new file mode 100644
index 0000000..c90521f
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/ConvertAnonymousToNested/canConvert/A_test36_out.java
@@ -0,0 +1,15 @@
+package p;
+
+public class E {
+
+	private final class Bar extends Foo {
+	}
+
+	public abstract class Foo {
+	}
+
+	public static void main(String[] args) {
+		final E e= new E();
+		e.new Bar();
+	}
+}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/BinaryReferencesTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/BinaryReferencesTests.java
index 25c621d..d00f37f 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/BinaryReferencesTests.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/BinaryReferencesTests.java
@@ -109,10 +109,9 @@
 	private static IMethod findMethod(IType type, String methodName) throws JavaModelException {
 		IMethod method= type.getMethod(methodName, new String[0]);
 		if (! method.exists()) {
-			IMethod[] methods= type.getMethods();
-			for (int i= 0; i < methods.length; i++) {
-				if (methods[i].getElementName().equals(methodName)) {
-					method= methods[i];
+			for (IMethod m : type.getMethods()) {
+				if (m.getElementName().equals(methodName)) {
+					method= m;
 					break;
 				}
 			}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ConvertAnonymousToNestedTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ConvertAnonymousToNestedTests.java
index a16bbbc..241f519 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ConvertAnonymousToNestedTests.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ConvertAnonymousToNestedTests.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
@@ -405,4 +405,8 @@
 	public void test35() throws Exception { // for bug 159917
 		helper1(16, 26, 22, 9, false, false, "Nested", Modifier.PRIVATE);
     }
+
+	public void test36() throws Exception { // https://bugs.eclipse.org/bugs/show_bug.cgi?id=487016
+		helper1(10, 11, 10, 23, true, false, "Bar", Modifier.PRIVATE);
+    }
 }
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ExtractClassTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ExtractClassTests.java
index 66b6344..e0b72a4 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ExtractClassTests.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ExtractClassTests.java
@@ -237,8 +237,7 @@
 		RefactoringStatusEntry[] entries= status.getEntries();
 		//Warning for no IFields moved
 		assertEquals(1, entries.length);
-		for (int i= 0; i < entries.length; i++) {
-			RefactoringStatusEntry refactoringStatusEntry= entries[i];
+		for (RefactoringStatusEntry refactoringStatusEntry : entries) {
 			assertEquals("Status was:" + refactoringStatusEntry, true, refactoringStatusEntry.isFatalError());
 		}
 	}
@@ -256,8 +255,7 @@
 		RefactoringStatusEntry[] entries= status.getEntries();
 		//Error for usage in Switch case
 		assertEquals(1, entries.length);
-		for (int i= 0; i < entries.length; i++) {
-			RefactoringStatusEntry refactoringStatusEntry= entries[i];
+		for (RefactoringStatusEntry refactoringStatusEntry : entries) {
 			assertEquals(true, refactoringStatusEntry.isError());
 		}
 	}
@@ -270,8 +268,7 @@
 		//Warning for transient
 		//Warning for volatile
 		assertEquals(2, entries.length);
-		for (int i= 0; i < entries.length; i++) {
-			RefactoringStatusEntry refactoringStatusEntry= entries[i];
+		for (RefactoringStatusEntry refactoringStatusEntry : entries) {
 			assertEquals(true, refactoringStatusEntry.isWarning());
 		}
 	}
@@ -279,8 +276,7 @@
 	public void testUFOGetter() throws Exception {
 		fDescriptor.setType(setupType());
 		Field[] fields= ExtractClassDescriptor.getFields(fDescriptor.getType());
-		for (int i= 0; i < fields.length; i++) {
-			Field field= fields[i];
+		for (Field field : fields) {
 			if ("homePlanet".equals(field.getFieldName()))
 				field.setCreateField(false);
 		}
@@ -355,8 +351,7 @@
 		//Error for privateInner reference
 		//Error for OtherPackageProteced reference
 		assertEquals(2, entries.length);
-		for (int i= 0; i < entries.length; i++) {
-			RefactoringStatusEntry refactoringStatusEntry= entries[i];
+		for (RefactoringStatusEntry refactoringStatusEntry : entries) {
 			assertEquals(true, refactoringStatusEntry.isError());
 		}
 	}
@@ -406,8 +401,7 @@
 		RefactoringStatusEntry[] entries= status.getEntries();
 		//3*Warning for semantic change
 		assertEquals(3, entries.length);
-		for (int i= 0; i < entries.length; i++) {
-			RefactoringStatusEntry refactoringStatusEntry= entries[i];
+		for (RefactoringStatusEntry refactoringStatusEntry : entries) {
 			assertEquals(true, refactoringStatusEntry.isWarning());
 		}
 	}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/InlineMethodTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/InlineMethodTests.java
index f780174..9805674 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/InlineMethodTests.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/InlineMethodTests.java
@@ -106,10 +106,10 @@
 	}
 
 	private IMethod getMethodToInline(IType type) throws CoreException {
-		IMethod[] methods= type.getMethods();
-		for (int i= 0; i < methods.length; i++) {
-			if ("toInline".equals(methods[i].getElementName()))
-				return methods[i];
+		for (IMethod method : type.getMethods()) {
+			if ("toInline".equals(method.getElementName())) {
+				return method;
+			}
 		}
 		return null;
 	}
@@ -128,10 +128,10 @@
 	}
 
 	private IMethod getFirstConstructor(IType type) throws CoreException {
-		IMethod[] methods= type.getMethods();
-		for (int i= 0; i < methods.length; i++) {
-			if (methods[i].isConstructor())
-				return methods[i];
+		for (IMethod method : type.getMethods()) {
+			if (method.isConstructor()) {
+				return method;
+			}
 		}
 		return null;
 	}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/IntroduceFactoryTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/IntroduceFactoryTests.java
index ded9af7..5df89ba 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/IntroduceFactoryTests.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/IntroduceFactoryTests.java
@@ -475,37 +475,26 @@
 	}
 
 	private void addProjectDependencies(String[] dependencies, Map<String, IJavaProject> projName2Project) throws JavaModelException {
-		for(int i= 0; i < dependencies.length; i++) {
+		for (String dependency : dependencies) {
 			// dependent:provider
-			String dependency= dependencies[i];
 			int colonIdx= dependency.indexOf(':');
 			String depName= dependency.substring(0, colonIdx);
 			String provName= dependency.substring(colonIdx+1);
-
 			IJavaProject depProj= projName2Project.get(depName);
 			IJavaProject provProj= projName2Project.get(provName);
-
 			JavaProjectHelper.addRequiredProject(depProj, provProj);
 		}
 	}
 
 	private void createProjectPackageStructure(Map<String, Set<String>> projName2PkgNames, Map<String, IJavaProject> projName2Project, Map<IJavaProject, IPackageFragmentRoot> proj2PkgRoot) throws CoreException, JavaModelException {
-		for(Iterator<String> iter= projName2PkgNames.keySet().iterator(); iter.hasNext(); ) {
-			String projName= iter.next();
-			Set<String> projPkgNames= projName2PkgNames.get(projName);
-
+		for (String projName : projName2PkgNames.keySet()) {
 			IJavaProject project= JavaProjectHelper.createJavaProject(projName, "bin");
 			IPackageFragmentRoot root= JavaProjectHelper.addSourceContainer(project, CONTAINER);
-
 			JavaProjectHelper.addRTJar(project);
-
 			Set<IPackageFragment> pkgs= new HashSet<>();
-
 			projName2Project.put(projName, project);
 			proj2PkgRoot.put(project, root);
-			for(Iterator<String> pkgIter= projPkgNames.iterator(); pkgIter.hasNext(); ) {
-				String pkgName= pkgIter.next();
-
+			for (String pkgName : projName2PkgNames.get(projName)) {
 				pkgs.add(root.createPackageFragment(pkgName, true, null));
 			}
 		}
@@ -514,8 +503,7 @@
 	private Map<String, Set<String>> collectProjectPackages(String[] inputFileBaseNames) {
 		Map<String, Set<String>> proj2Pkgs= new HashMap<>();
 
-		for(int i= 0; i < inputFileBaseNames.length; i++) {
-			String filePath= inputFileBaseNames[i];
+		for (String filePath : inputFileBaseNames) {
 			int projEnd= filePath.indexOf('/');
 			String projName= filePath.substring(0, projEnd);
 			String pkgName= filePath.substring(projEnd+1, filePath.lastIndexOf('/'));
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/IntroduceParameterObjectTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/IntroduceParameterObjectTests.java
index 546d1ad..e59c986 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/IntroduceParameterObjectTests.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/IntroduceParameterObjectTests.java
@@ -187,9 +187,7 @@
 		assertNotNull(type);
 		assertTrue(type.exists());
 		IMethod fooMethod= null;
-		IMethod[] methods= type.getMethods();
-		for (int i= 0; i < methods.length; i++) {
-			IMethod method= methods[i];
+		for (IMethod method : type.getMethods()) {
 			if ("foo".equals(method.getElementName())) {
 				fooMethod= method;
 			}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/MoveInstanceMethodTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/MoveInstanceMethodTests.java
index 0cf858c..0539469 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/MoveInstanceMethodTests.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/MoveInstanceMethodTests.java
@@ -52,9 +52,7 @@
 
 	public static void chooseNewTarget(MoveInstanceMethodProcessor processor, int newTargetType, String newTargetName) {
 		IVariableBinding target= null;
-		IVariableBinding[] targets= processor.getPossibleTargets();
-		for (int i= 0; i < targets.length; i++) {
-			IVariableBinding candidate= targets[i];
+		for (IVariableBinding candidate : processor.getPossibleTargets()) {
 			if (candidate.getName().equals(newTargetName) && typeMatches(newTargetType, candidate)) {
 				target= candidate;
 				break;
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ParticipantTesting.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ParticipantTesting.java
index 9c41140..db859ec 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ParticipantTesting.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ParticipantTesting.java
@@ -63,8 +63,7 @@
 
 	public static String[] createHandles(Object[] elements) {
 		List<String> result= new ArrayList<>();
-		for (int i= 0; i < elements.length; i++) {
-			Object element= elements[i];
+		for (Object element : elements) {
 			if (element instanceof IJavaElement) {
 				result.add(((IJavaElement)element).getHandleIdentifier());
 			} else if (element instanceof IResource) {
@@ -156,8 +155,7 @@
 	}
 
 	private static void testElementsShared(String[] expected, List<String> actual) {
-		for (int i= 0; i < expected.length; i++) {
-			String handle= expected[i];
+		for (String handle : expected) {
 			Assert.assertTrue("Expected handle not found: " + handle, actual.contains(handle));
 		}
 		testNumberOfElements(expected.length, actual);
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/PushDownTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/PushDownTests.java
index 4456025..2671c30 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/PushDownTests.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/PushDownTests.java
@@ -91,15 +91,14 @@
 		List<IMember> membersToPushDown= Arrays.asList(merge(methodsToPushDown, fieldsToPushDown));
 		List<IMethod> methodsToDeclareAbstract= Arrays.asList(findMethods(selectedMethods, namesOfMethodsToDeclareAbstract, signaturesOfMethodsToDeclareAbstract));
 
-		MemberActionInfo[] infos= processor.getMemberActionInfos();
-		for (int i= 0; i < infos.length; i++) {
-			if (membersToPushDown.contains(infos[i].getMember())){
-				infos[i].setAction(MemberActionInfo.PUSH_DOWN_ACTION);
-				assertTrue(! methodsToDeclareAbstract.contains(infos[i].getMember()));
+		for (MemberActionInfo info : processor.getMemberActionInfos()) {
+			if (membersToPushDown.contains(info.getMember())) {
+				info.setAction(MemberActionInfo.PUSH_DOWN_ACTION);
+				assertTrue(!methodsToDeclareAbstract.contains(info.getMember()));
 			}
-			if (methodsToDeclareAbstract.contains(infos[i].getMember())){
-				infos[i].setAction(MemberActionInfo.PUSH_ABSTRACT_ACTION);
-				assertTrue(! membersToPushDown.contains(infos[i].getMember()));
+			if (methodsToDeclareAbstract.contains(info.getMember())) {
+				info.setAction(MemberActionInfo.PUSH_ABSTRACT_ACTION);
+				assertTrue(!membersToPushDown.contains(info.getMember()));
 			}
 		}
 	}
@@ -221,9 +220,10 @@
 	private static List<IMember> getMembersToPushDown(PushDownRefactoringProcessor processor) {
 		MemberActionInfo[] infos= processor.getMemberActionInfos();
 		List<IMember> result= new ArrayList<>(infos.length);
-		for (int i= 0; i < infos.length; i++) {
-			if (infos[i].isToBePushedDown())
-				result.add(infos[i].getMember());
+		for (MemberActionInfo info : infos) {
+			if (info.isToBePushedDown()) {
+				result.add(info.getMember());
+			}
 		}
 		return result;
 	}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RefactoringScannerTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RefactoringScannerTests.java
index 1364fb3..c13b7ab 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RefactoringScannerTests.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RefactoringScannerTests.java
@@ -76,8 +76,9 @@
 		fScanner.scan(text);
 
 		ArrayList<Integer> expectedMatchesList= new ArrayList<>(expectedMatches.length);
-		for (int i= 0; i < expectedMatches.length; i++)
-			expectedMatchesList.add(Integer.valueOf(TextRangeUtil.getOffset(text, expectedMatches[i].fLine, expectedMatches[i].fColumn)));
+		for (Position expectedMatch : expectedMatches) {
+			expectedMatchesList.add(Integer.valueOf(TextRangeUtil.getOffset(text, expectedMatch.fLine, expectedMatch.fColumn)));
+		}
 		ArrayList<Integer> matchesList= new ArrayList<>();
 		Set<TextMatch> matches= fScanner.getMatches();
 		for (Iterator<TextMatch> iter= matches.iterator(); iter.hasNext();) {
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RefactoringTest.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RefactoringTest.java
index 10bf8fb..9cd7f1f 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RefactoringTest.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RefactoringTest.java
@@ -146,9 +146,8 @@
 		}
 
 		if (getRoot().exists()){
-			IJavaElement[] packages= getRoot().getChildren();
-			for (int i= 0; i < packages.length; i++){
-				IPackageFragment pack= (IPackageFragment)packages[i];
+			for (IJavaElement p : getRoot().getChildren()) {
+				IPackageFragment pack= (IPackageFragment) p;
 				if (!pack.equals(getPackageP()) && !pack.equals(getPackageQ()) && pack.exists() && !pack.isReadOnly())
 					if (pack.isDefaultPackage())
 						JavaProjectHelper.deletePackage(pack); // also delete packages with subpackages
@@ -173,11 +172,9 @@
 		if (javaProject.exists()) {
 			IClasspathEntry srcEntry= getRoot().getRawClasspathEntry();
 			IClasspathEntry jreEntry= RefactoringTestSetup.getJRELibrary().getRawClasspathEntry();
-			IClasspathEntry[] cpes= javaProject.getRawClasspath();
 			ArrayList<IClasspathEntry> newCPEs= new ArrayList<>();
 			boolean cpChanged= false;
-			for (int i= 0; i < cpes.length; i++) {
-				IClasspathEntry cpe= cpes[i];
+			for (IClasspathEntry cpe : javaProject.getRawClasspath()) {
 				if (cpe.equals(srcEntry) || cpe.equals(jreEntry)) {
 					newCPEs.add(cpe);
 				} else {
@@ -189,9 +186,7 @@
 				javaProject.setRawClasspath(newCPEsArray, null);
 			}
 
-			Object[] nonJavaResources= javaProject.getNonJavaResources();
-			for (int i= 0; i < nonJavaResources.length; i++) {
-				Object kid= nonJavaResources[i];
+			for (Object kid : javaProject.getNonJavaResources()) {
 				if (kid instanceof IResource) {
 					IResource resource= (IResource) kid;
 					if (! PROJECT_RESOURCE_CHILDREN.contains(resource.getName())) {
@@ -210,31 +205,29 @@
 	}
 
 	private static void tryDeletingAllNonJavaChildResources(IPackageFragment pack) throws CoreException {
-		Object[] nonJavaKids= pack.getNonJavaResources();
-		for (int i= 0; i < nonJavaKids.length; i++) {
-			if (nonJavaKids[i] instanceof IResource) {
-				IResource resource= (IResource)nonJavaKids[i];
+		for (Object nonJavaKid : pack.getNonJavaResources()) {
+			if (nonJavaKid instanceof IResource) {
+				IResource resource= (IResource) nonJavaKid;
 				JavaProjectHelper.delete(resource);
 			}
 		}
 	}
 
 	private static void tryDeletingAllNonJavaChildResources(IPackageFragmentRoot root) throws CoreException {
-		Object[] nonJavaKids= root.getNonJavaResources();
-		for (int i= 0; i < nonJavaKids.length; i++) {
-			if (nonJavaKids[i] instanceof IResource) {
-				IResource resource= (IResource)nonJavaKids[i];
+		for (Object nonJavaKid : root.getNonJavaResources()) {
+			if (nonJavaKid instanceof IResource) {
+				IResource resource= (IResource) nonJavaKid;
 				JavaProjectHelper.delete(resource);
 			}
 		}
 	}
 
 	private static void tryDeletingAllJavaChildren(IPackageFragment pack) throws CoreException {
-		IJavaElement[] kids= pack.getChildren();
-		for (int i= 0; i < kids.length; i++){
-			if (kids[i] instanceof ISourceManipulation){
-				if (kids[i].exists() && !kids[i].isReadOnly())
-					JavaProjectHelper.delete(kids[i]);
+		for (IJavaElement kid : pack.getChildren()) {
+			if (kid instanceof ISourceManipulation) {
+				if (kid.exists() && !kid.isReadOnly()) {
+					JavaProjectHelper.delete(kid);
+				}
 			}
 		}
 	}
@@ -385,11 +378,11 @@
 
 	/* ===================  helpers  ================= */
 	protected IType getType(ICompilationUnit cu, String name) throws JavaModelException {
-		IType[] types= cu.getAllTypes();
-		for (int i= 0; i < types.length; i++)
-			if (types[i].getTypeQualifiedName('.').equals(name) ||
-			    types[i].getElementName().equals(name))
-				return types[i];
+		for (IType type : cu.getAllTypes()) {
+			if (type.getTypeQualifiedName('.').equals(name) || type.getElementName().equals(name)) {
+				return type;
+			}
+		}
 		return null;
 	}
 
@@ -466,10 +459,10 @@
 	}
 
 	public static IPackageFragmentRoot getSourceFolder(IJavaProject javaProject, String name) throws JavaModelException{
-		IPackageFragmentRoot[] roots= javaProject.getPackageFragmentRoots();
-		for (int i= 0; i < roots.length; i++) {
-			if (! roots[i].isArchive() && roots[i].getElementName().equals(name))
-				return roots[i];
+		for (IPackageFragmentRoot root : javaProject.getPackageFragmentRoots()) {
+			if (!root.isArchive() && root.getElementName().equals(name)) {
+				return root;
+			}
 		}
 		return null;
 	}
@@ -523,8 +516,8 @@
 		if (names == null )
 			return new IField[0];
 		Set<IField> fields= new HashSet<>();
-		for (int i = 0; i < names.length; i++) {
-			IField field= type.getField(names[i]);
+		for (String name : names) {
+			IField field= type.getField(name);
 			assertTrue("field " + field.getElementName() + " does not exist", field.exists());
 			fields.add(field);
 		}
@@ -535,16 +528,17 @@
 		if (names == null )
 			return new IType[0];
 		Set<IType> memberTypes= new HashSet<>();
-		for (int i = 0; i < names.length; i++) {
+		for (String name : names) {
 			IType memberType;
-			if (names[i].indexOf('.') != -1) {
-				String[] path= names[i].split("\\.");
+			if (name.indexOf('.') != -1) {
+				String[] path= name.split("\\.");
 				memberType= type.getType(path[0]);
 				for (int j= 1; j < path.length; j++) {
 					memberType= memberType.getType(path[j]);
 				}
-			} else
-				memberType= type.getType(names[i]);
+			} else {
+				memberType= type.getType(name);
+			}
 			assertTrue("member type " + memberType.getElementName() + " does not exist", memberType.exists());
 			memberTypes.add(memberType);
 		}
@@ -566,10 +560,8 @@
 
 	public static IType[] findTypes(IType[] types, String[] namesOfTypesToPullUp) {
 		List<IType> found= new ArrayList<>(types.length);
-		for (int i= 0; i < types.length; i++) {
-			IType type= types[i];
-			for (int j= 0; j < namesOfTypesToPullUp.length; j++) {
-				String name= namesOfTypesToPullUp[j];
+		for (IType type : types) {
+			for (String name : namesOfTypesToPullUp) {
 				if (type.getElementName().equals(name))
 					found.add(type);
 			}
@@ -579,10 +571,8 @@
 
 	public static IField[] findFields(IField[] fields, String[] namesOfFieldsToPullUp) {
 		List<IField> found= new ArrayList<>(fields.length);
-		for (int i= 0; i < fields.length; i++) {
-			IField field= fields[i];
-			for (int j= 0; j < namesOfFieldsToPullUp.length; j++) {
-				String name= namesOfFieldsToPullUp[j];
+		for (IField field : fields) {
+			for (String name : namesOfFieldsToPullUp) {
 				if (field.getElementName().equals(name))
 					found.add(field);
 			}
@@ -592,8 +582,7 @@
 
 	public static IMethod[] findMethods(IMethod[] selectedMethods, String[] namesOfMethods, String[][] signaturesOfMethods){
 		List<IMethod> found= new ArrayList<>(selectedMethods.length);
-		for (int i= 0; i < selectedMethods.length; i++) {
-			IMethod method= selectedMethods[i];
+		for (IMethod method : selectedMethods) {
 			String[] paramTypes= method.getParameterTypes();
 			for (int j= 0; j < namesOfMethods.length; j++) {
 				String methodName= namesOfMethods[j];
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenamePackageTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenamePackageTests.java
index c5073c8..99a5d0a 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenamePackageTests.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenamePackageTests.java
@@ -151,8 +151,8 @@
 		IPackageFragment[] packages= new IPackageFragment[packageNames.length];
 		for (int i= 0; i < packageFiles.length; i++){
 			packages[i]= getRoot().createPackageFragment(packageNames[i], true, null);
-			for (int j= 0; j < packageFiles[i].length; j++){
-				createCUfromTestFile(packages[i], packageFiles[i][j], packageNames[i].replace('.', '/') + "/");
+			for (String packageFile : packageFiles[i]) {
+				createCUfromTestFile(packages[i], packageFile, packageNames[i].replace('.', '/') + "/");
 				//DebugUtils.dump(cu.getElementName() + "\n" + cu.getSource());
 			}
 		}
@@ -205,13 +205,12 @@
 				createHandles= handles.toArray(new String[handles.size()]);
 				IFolder source= (IFolder)thisPackage.getResource();
 				deleteHandles= ParticipantTesting.createHandles(source);
-				IResource members[]= source.members();
 				List<IResource> movedObjects= new ArrayList<>();
-				for (int i= 0; i < members.length; i++) {
-					if (members[i] instanceof IFolder) {
+				for (IResource member : source.members()) {
+					if (member instanceof IFolder) {
 						doDelete= false;
 					} else {
-						movedObjects.add(members[i]);
+						movedObjects.add(member);
 					}
 				}
 				moveHandles= ParticipantTesting.createHandles(movedObjects.toArray());
@@ -360,14 +359,14 @@
 				String packageName= getNewPackageName(fPackageNames[i]);
 				String packagePath= packageName.replace('.', '/') + "/";
 
-				for (int j= 0; j < fPackageFileNames[i].length; j++){
+				for (String packageFileName : fPackageFileNames[i]) {
 					String expected;
 					if (fTestWithDummyFiles) {
-						expected= getDummyContents(packageName, fPackageFileNames[i][j]);
+						expected= getDummyContents(packageName, packageFileName);
 					} else {
-						expected= getFileContents(getOutputTestFileName(fPackageFileNames[i][j], packagePath));
+						expected= getFileContents(getOutputTestFileName(packageFileName, packagePath));
 					}
-					ICompilationUnit cu= getRoot().getPackageFragment(packageName).getCompilationUnit(fPackageFileNames[i][j] + ".java");
+					ICompilationUnit cu= getRoot().getPackageFragment(packageName).getCompilationUnit(packageFileName + ".java");
 					String actual= cu.getSource();
 					assertEqualLines("invalid update in file " + cu.getElementName(), expected,	actual);
 				}
@@ -385,10 +384,9 @@
 		}
 
 		public void checkOriginalState() throws Exception {
-			IJavaElement[] rootChildren= getRoot().getChildren();
 			ArrayList<String> existingPacks= new ArrayList<>();
-			for (int i= 0; i < rootChildren.length; i++) {
-				existingPacks.add(rootChildren[i].getElementName());
+			for (IJavaElement javaelement : getRoot().getChildren()) {
+				existingPacks.add(javaelement.getElementName());
 			}
 			assertEqualSets(Arrays.asList(fPackageNames), existingPacks);
 
@@ -397,22 +395,21 @@
 				String packagePath= packageName.replace('.', '/') + "/";
 				IPackageFragment pack= getRoot().getPackageFragment(packageName);
 
-				IJavaElement[] packChildren= pack.getChildren();
 				ArrayList<String> existingCUs= new ArrayList<>();
-				for (int j= 0; j < packChildren.length; j++) {
-					String cuName= packChildren[j].getElementName();
+				for (IJavaElement javaelement : pack.getChildren()) {
+					String cuName= javaelement.getElementName();
 					existingCUs.add(cuName.substring(0, cuName.length() - 5));
 				}
 				assertEqualSets(Arrays.asList(fPackageFileNames[i]), existingCUs);
 
-				for (int j= 0; j < fPackageFileNames[i].length; j++){
+				for (String packageFileName : fPackageFileNames[i]) {
 					String expected;
 					if (fTestWithDummyFiles) {
-						expected= getDummyContents(packageName, fPackageFileNames[i][j]);
+						expected= getDummyContents(packageName, packageFileName);
 					} else {
-						expected= getFileContents(getInputTestFileName(fPackageFileNames[i][j], packagePath));
+						expected= getFileContents(getInputTestFileName(packageFileName, packagePath));
 					}
-					ICompilationUnit cu= pack.getCompilationUnit(fPackageFileNames[i][j] + ".java");
+					ICompilationUnit cu= pack.getCompilationUnit(packageFileName + ".java");
 					String actual= cu.getSource();
 					assertEqualLines("invalid undo in file " + cu.getElementName(), expected,	actual);
 				}
@@ -558,8 +555,7 @@
 	}
 
 	private void checkMappingUnchanged(IJavaElementMapper jm, IResourceMapper rm, Object[] resOrJEs) {
-		for (int i= 0; i < resOrJEs.length; i++) {
-			Object resOrJE= resOrJEs[i];
+		for (Object resOrJE : resOrJEs) {
 			if (resOrJE instanceof IJavaElement) {
 				IJavaElement javaElement= (IJavaElement) resOrJE;
 				resOrJE= javaElement.getResource();
@@ -573,8 +569,7 @@
 	}
 
 	private void checkMappingChanged(IJavaElementMapper jm, IResourceMapper rm, Object[][] resOrJeToChangeds) {
-		for (int i= 0; i < resOrJeToChangeds.length; i++) {
-			Object[] resOrJeToChanged= resOrJeToChangeds[i];
+		for (Object[] resOrJeToChanged : resOrJeToChangeds) {
 			Object resOrJE= resOrJeToChanged[0];
 			Object changed= resOrJeToChanged[1];
 			if (resOrJE instanceof IJavaElement) {
@@ -1001,9 +996,7 @@
 
 		assertFalse(status.hasError());
 		assertTrue(status.hasWarning());
-		RefactoringStatusEntry[] statusEntries= status.getEntries();
-		for (int i= 0; i < statusEntries.length; i++) {
-			RefactoringStatusEntry entry= statusEntries[i];
+		for (RefactoringStatusEntry entry : status.getEntries()) {
 			assertTrue(entry.isWarning());
 			assertTrue(entry.getCode() == RefactoringStatusCodes.MAIN_METHOD);
 		}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenameTypeTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenameTypeTests.java
index bd6b3bc..6c0e92d 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenameTypeTests.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenameTypeTests.java
@@ -186,8 +186,7 @@
 		IJavaElement[] similarElements= rtp.getSimilarElements();
 		if (similarElements == null)
 			return;
-		for (int i= 0; i < similarElements.length; i++) {
-			IJavaElement element= similarElements[i];
+		for (IJavaElement element : similarElements) {
 			if (! (element instanceof ILocalVariable)) {
 				IJavaElement newElement= mapper.getRefactoredJavaElement(element);
 				assertTrue(newElement.exists());
@@ -1647,8 +1646,8 @@
 		IPackageFragment newPackage= (IPackageFragment)rtp.getRefactoredJavaElement(oldPackage);
 		assertEquals(oldPackage, newPackage);
 
-		for (int i= 0; i < someClassMembers.length; i++) {
-			IMember member= (IMember) someClassMembers[i];
+		for (IJavaElement someClassMember : someClassMembers) {
+			IMember member= (IMember) someClassMember;
 			IJavaElement refactoredMember= rtp.getRefactoredJavaElement(member);
 			if (member instanceof IMethod && member.getElementName().equals(type.getElementName()))
 				continue; // constructor
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RippleMethodFinderTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RippleMethodFinderTests.java
index 7dd4835..5ec9309 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RippleMethodFinderTests.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RippleMethodFinderTests.java
@@ -88,9 +88,7 @@
 			start++;
 		}
 
-		IMethod[] result= RippleMethodFinder2.getRelatedMethods(target, new NullProgressMonitor(), null);
-		for (int i= 0; i < result.length; i++) {
-			IMethod method= result[i];
+		for (IMethod method : RippleMethodFinder2.getRelatedMethods(target, new NullProgressMonitor(), null)) {
 			assertTrue("method not found: " + method, rippleMethods.remove(method));
 		}
 		assertEquals("found wrong ripple methods: " + rippleMethods, 0, rippleMethods.size());
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/SefTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/SefTests.java
index 0ebef7a..0e51ed4 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/SefTests.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/SefTests.java
@@ -107,9 +107,7 @@
 
 	private static IField getField(ICompilationUnit unit, String fieldName) throws Exception {
 		IField result= null;
-		IType[] types= unit.getAllTypes();
-		for (int i= 0; i < types.length; i++) {
-			IType type= types[i];
+		for (IType type : unit.getAllTypes()) {
 			result= type.getField(fieldName);
 			if (result != null && result.exists())
 				break;
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/TestModelProvider.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/TestModelProvider.java
index c2be577..738d559 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/TestModelProvider.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/TestModelProvider.java
@@ -124,8 +124,8 @@
 		IResourceDelta[] affectedChildren= delta.getAffectedChildren();
 		Arrays.sort(affectedChildren, COMPARATOR);
 
-		for (int i= 0; i < affectedChildren.length; i++) {
-			appendDelta(affectedChildren[i], indent + 1, buf);
+		for (IResourceDelta resourcedelta : affectedChildren) {
+			appendDelta(resourcedelta, indent + 1, buf);
 		}
 		return buf;
 	}
@@ -196,9 +196,7 @@
 
 	private static IResourceDelta[] getExpectedChildren(IResourceDelta delta) {
 		List<IResourceDelta> result= new ArrayList<>();
-		IResourceDelta[] children= delta.getAffectedChildren();
-		for (int i= 0; i < children.length; i++) {
-			IResourceDelta child= children[i];
+		for (IResourceDelta child : delta.getAffectedChildren()) {
 			IResource resource= child.getResource();
 			if (resource != null && isIgnorable(resource))
 				continue;
@@ -224,25 +222,21 @@
 	private static IResourceDelta[] getActualChildren(IResourceDelta delta, IResourceDelta[] expectedChildren) {
 		List<IResourceDelta> result= new ArrayList<>();
 		if (!IS_COPY_TEST) {
-			IResourceDelta[] children= delta.getAffectedChildren();
-			for (int i= 0; i < children.length; i++) {
-				IResourceDelta child= children[i];
-				IResource resource= child.getResource();
+			for (IResourceDelta resourcedelta : delta.getAffectedChildren()) {
+				IResource resource= resourcedelta.getResource();
 				if (resource != null && isIgnorable(resource))
 					continue;
-				result.add(child);
+				result.add(resourcedelta);
 			}
 		} else {
-			IResourceDelta[] candidates= delta.getAffectedChildren();
-			for (int i= 0; i < candidates.length; i++) {
-				IResourceDelta candidate= candidates[i];
-				IResource resource= candidate.getResource();
+			for (IResourceDelta resourcedelta : delta.getAffectedChildren()) {
+				IResource resource= resourcedelta.getResource();
 				if (resource != null && isIgnorable(resource))
 					continue;
-				if (contains(expectedChildren, candidate)) {
-					result.add(candidate);
+				if (contains(expectedChildren, resourcedelta)) {
+					result.add(resourcedelta);
 				} else {
-					assertCopySource(candidate);
+					assertCopySource(resourcedelta);
 				}
 			}
 		}
@@ -251,9 +245,10 @@
 
 	private static boolean contains(IResourceDelta[] expectedChildren, IResourceDelta actualDelta) {
 		IResource actualResource= actualDelta.getResource();
-		for (int i= 0; i < expectedChildren.length; i++) {
-			if (isSameResourceInCopy(expectedChildren[i].getResource(), actualResource))
+		for (IResourceDelta resourcedelta : expectedChildren) {
+			if (isSameResourceInCopy(resourcedelta.getResource(), actualResource)) {
 				return true;
+			}
 		}
 		return false;
 	}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/TestRenameParticipantShared.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/TestRenameParticipantShared.java
index 5ffd47c..839de04 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/TestRenameParticipantShared.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/TestRenameParticipantShared.java
@@ -63,12 +63,11 @@
 		if ((updating != null) && getArguments() instanceof RenameTypeArguments) {
 			RenameTypeArguments arguments= (RenameTypeArguments)getArguments();
 			if (arguments.getUpdateSimilarDeclarations()) {
-				IJavaElement[] elements= arguments.getSimilarDeclarations();
-				for (int i= 0; i < elements.length; i++) {
-					IJavaElement updated= updating.getRefactoredJavaElement(elements[i]);
+				for (IJavaElement e : arguments.getSimilarDeclarations()) {
+					IJavaElement updated= updating.getRefactoredJavaElement(e);
 					if (updated!=null) {
-						fSimilarToHandle.put(elements[i].getHandleIdentifier(), getKey(updated));
-						fSimilarToNewName.put(elements[i].getHandleIdentifier(), updated.getElementName());
+						fSimilarToHandle.put(e.getHandleIdentifier(), getKey(updated));
+						fSimilarToNewName.put(e.getHandleIdentifier(), updated.getElementName());
 					}
 				}
 			}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ccp/CopyTest.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ccp/CopyTest.java
index e8248b7..7de95c5 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ccp/CopyTest.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ccp/CopyTest.java
@@ -163,8 +163,8 @@
 		verifyValidDestination(processor, destination, location);
 		RefactoringStatus status= performRefactoring(new CopyRefactoring(processor), false);
 		assertNull("failed precondition", status);
-		for (int i= 0; i < cus.length; i++) {
-			assertEqualLines("different source in " + cus[i].getElementName(), getFileContents(getOutputTestFileName(removeExtension(cus[i].getElementName()))), cus[i].getSource());
+		for (ICompilationUnit cu : cus) {
+			assertEqualLines("different source in " + cu.getElementName(), getFileContents(getOutputTestFileName(removeExtension(cu.getElementName()))), cu.getSource());
 		}
 	}
 
@@ -2359,10 +2359,9 @@
 			assertTrue("source package does not exist after copying", getPackageP().exists());
 
 			IPackageFragment newPackage= null;
-			IPackageFragmentRoot[] roots= otherProject.getAllPackageFragmentRoots();
-			for (int i= 0; i < roots.length; i++) {
-				if (ReorgUtils.isSourceFolder(roots[i])){
-					newPackage= roots[i].getPackageFragment(getPackageP().getElementName());
+			for (IPackageFragmentRoot root : otherProject.getAllPackageFragmentRoots()) {
+				if (ReorgUtils.isSourceFolder(root)) {
+					newPackage= root.getPackageFragment(getPackageP().getElementName());
 					assertTrue("new package does not exist after copying", newPackage.exists());
 				}
 			}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ccp/CopyToClipboardActionTest.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ccp/CopyToClipboardActionTest.java
index 02bfd42..01cd914 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ccp/CopyToClipboardActionTest.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ccp/CopyToClipboardActionTest.java
@@ -247,12 +247,11 @@
 	private void checkNames(IResource[] resourcesCopied, IJavaElement[] javaElementsCopied, String clipboardText){
 		List<String> stringLines= Arrays.asList(Strings.convertIntoLines(clipboardText));
 		assertEquals("different number of names", resourcesCopied.length + javaElementsCopied.length, stringLines.size());
-		for (int i= 0; i < resourcesCopied.length; i++) {
-			String name= getName(resourcesCopied[i]);
+		for (IResource resource : resourcesCopied) {
+			String name= getName(resource);
 			assertTrue("name not in set:" + name, stringLines.contains(name));
 		}
-		for (int i= 0; i < javaElementsCopied.length; i++) {
-			IJavaElement element= javaElementsCopied[i];
+		for (IJavaElement element : javaElementsCopied) {
 			if (! ReorgUtils.isInsideCompilationUnit(element)){
 				String name= getName(element);
 				assertTrue("name not in set:" + name, stringLines.contains(name));
@@ -272,8 +271,7 @@
 
 	private static int countResources(IJavaElement[] javaElementsCopied) {
 		int count= 0;
-		for (int i= 0; i < javaElementsCopied.length; i++) {
-			IJavaElement element= javaElementsCopied[i];
+		for (IJavaElement element : javaElementsCopied) {
 			switch (element.getElementType()) {
 				case IJavaElement.JAVA_PROJECT :
 				case IJavaElement.PACKAGE_FRAGMENT_ROOT :
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ccp/DeleteTest.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ccp/DeleteTest.java
index a91042d..c6bf227 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ccp/DeleteTest.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ccp/DeleteTest.java
@@ -123,10 +123,8 @@
 	}
 
 	private IPackageFragmentRoot getArchiveRoot() throws JavaModelException, Exception {
-		IPackageFragmentRoot[] roots= RefactoringTestSetup.getProject().getPackageFragmentRoots();
 		IPackageFragmentRoot archive= null;
-		for (int i= 0; i < roots.length; i++) {
-			IPackageFragmentRoot root= roots[i];
+		for (IPackageFragmentRoot root : RefactoringTestSetup.getProject().getPackageFragmentRoots()) {
 			if (root.isArchive() && root.isExternal())
 				archive= root;
 		}
@@ -232,8 +230,8 @@
 
 	private void assertExist(Object[] resourceOrElements, boolean exists) {
 		if (resourceOrElements != null) {
-			for (int i= 0; i < resourceOrElements.length; i++) {
-				assertExists(resourceOrElements[i], exists);
+			for (Object resourceOrElement : resourceOrElements) {
+				assertExists(resourceOrElement, exists);
 			}
 		}
 	}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ccp/MoveTest.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ccp/MoveTest.java
index 1f96a2f..c77c94f 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ccp/MoveTest.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ccp/MoveTest.java
@@ -1856,8 +1856,8 @@
 		} else {
 			assertTrue(destination.exists());
 		}
-		for (int i= 0; i < resources.length; i++) {
-			assertTrue(resources[i].exists());
+		for (IResource resource : resources) {
+			assertTrue(resource.exists());
 		}
 
 		IMovePolicy policy= ReorgPolicyFactory.createMovePolicy(resources, javaElements);
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/infra/DebugUtils.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/infra/DebugUtils.java
index 473abd6..f04554f 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/infra/DebugUtils.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/infra/DebugUtils.java
@@ -34,8 +34,8 @@
 
 	public static void dumpCharCharArray(String msg, char[][] o){
 		dump("DUMPING char[][]:" + msg); //$NON-NLS-1$
-		for (int i= 0; i < o.length; i++){
-			dump(new String(o[i]));
+		for (char[] o1 : o) {
+			dump(new String(o1));
 		}
 	}
 
@@ -45,8 +45,9 @@
 			System.out.println("null"); //$NON-NLS-1$
 			return;
 		}
-		for (int i= 0; i < refs.length; i++)
-			System.out.println(refs[i].toString());
+		for (Object ref : refs) {
+			System.out.println(ref.toString());
+		}
 	}
 
 	public static void dumpCollectionCollection(Collection<?> c) {
@@ -130,8 +131,8 @@
 		if (imports == null)
 			return;
 		DebugUtils.dump("Compilation Unit: " + cu.getElementName());	 //$NON-NLS-1$
-		for (int k= 0; k < imports.length; k ++){
-			DebugUtils.dump("import " + imports[k].getElementName() + " on demand: " + imports[k].isOnDemand()); //$NON-NLS-2$ //$NON-NLS-1$
+		for (IImportDeclaration i : imports) {
+			DebugUtils.dump("import " + i.getElementName() + " on demand: " + i.isOnDemand()); //$NON-NLS-2$ //$NON-NLS-1$
 		}
 	}
 
@@ -140,8 +141,8 @@
 		if (cus == null)
 			return;
 		//DebugUtils.dump("Package " + pack.getElementName());
-		for (int j= 0; j < cus.length; j++){
-			dumpImports(cus[j]);
+		for (ICompilationUnit cu : cus) {
+			dumpImports(cu);
 		}
 	}
 
@@ -150,8 +151,8 @@
 		if (packages == null)
 			return;
 		//DebugUtils.dump("Project " + project.getElementName());
-		for (int i= 0; i < packages.length; i++){
-			dumpImports(packages[i]);
+		for (IPackageFragment p : packages) {
+			dumpImports(p);
 		}
 	}
 }
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/infra/RefactoringTestRepositoryProvider.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/infra/RefactoringTestRepositoryProvider.java
index da3a24c..cbd67bc 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/infra/RefactoringTestRepositoryProvider.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/infra/RefactoringTestRepositoryProvider.java
@@ -75,8 +75,8 @@
 
 		@Override
 		public IStatus validateEdit(IFile[] files, FileModificationValidationContext context) {
-			for (int i= 0; i < files.length; i++) {
-				fValidatedEditPaths.add(files[i].getFullPath());
+			for (IFile file : files) {
+				fValidatedEditPaths.add(file.getFullPath());
 			}
 			return makeWritable(files);
 		}
@@ -93,8 +93,7 @@
 					new IWorkspaceRunnable() {
 						@Override
 						public void run(IProgressMonitor monitor) throws CoreException	{
-							for (int i= 0; i < resources.length; i++) {
-								IFile resource= resources[i];
+							for (IFile resource : resources) {
 								ResourceAttributes resourceAttributes = resource.getResourceAttributes();
 								if (resourceAttributes != null) {
 									resourceAttributes.setReadOnly(false);
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/infra/ZipTools.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/infra/ZipTools.java
index 125148d..dbbde2e 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/infra/ZipTools.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/infra/ZipTools.java
@@ -79,12 +79,9 @@
 				}
 			}
 
-			IJavaElement[] packageFragments= src.getChildren();
-			for (int i= 0; i < packageFragments.length; i++) {
-				IPackageFragment packageFragment= (IPackageFragment) packageFragments[i];
-				ICompilationUnit[] cus= packageFragment.getCompilationUnits();
-				for (int j= 0; j < cus.length; j++) {
-					ICompilationUnit cu= cus[j];
+			for (IJavaElement javaelement : src.getChildren()) {
+				IPackageFragment packageFragment= (IPackageFragment) javaelement;
+				for (ICompilationUnit cu : packageFragment.getCompilationUnits()) {
 					String cuDescr= packageFragment.getElementName() + "/" + cu.getElementName();
 					Assert.assertTrue(cuDescr, zipCus.remove(cuDescr));
 				}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/nls/NLSHintTest.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/nls/NLSHintTest.java
index eb43569..6706188 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/nls/NLSHintTest.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/nls/NLSHintTest.java
@@ -295,9 +295,9 @@
     private IFile createResource(IPackageFragment pack, String resourceName, String content) throws Exception {
 	    IPath path = pack.getPath().append(resourceName);
 	    IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
-	    InputStream is = new ByteArrayInputStream(content.getBytes());
-	    file.create(is, true, new NullProgressMonitor());
-	    is.close();
+		try (InputStream is = new ByteArrayInputStream(content.getBytes())) {
+			file.create(is, true, new NullProgressMonitor());
+		}
         return file;
 	}
 
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/nls/NLSSubstitutionTest.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/nls/NLSSubstitutionTest.java
index 718d0d7..235772a 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/nls/NLSSubstitutionTest.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/nls/NLSSubstitutionTest.java
@@ -87,8 +87,9 @@
 	}
 
 	private void setPrefix(String prefix, NLSSubstitution[] subs) {
-		for (int i= 0; i < subs.length; i++)
-			subs[i].setPrefix(prefix);
+		for (NLSSubstitution sub : subs) {
+			sub.setPrefix(prefix);
+		}
 	}
 
 }
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/nls/NlsRefactoringCheckFinalConditionsTest.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/nls/NlsRefactoringCheckFinalConditionsTest.java
index a7422b0..3f333c8 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/nls/NlsRefactoringCheckFinalConditionsTest.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/nls/NlsRefactoringCheckFinalConditionsTest.java
@@ -167,9 +167,9 @@
 		NLSRefactoring refac= NLSRefactoring.create(cu);
 		NLSSubstitution[] subs= refac.getSubstitutions();
 		refac.setPrefix("");
-		for (int i= 0; i < subs.length; i++) {
-			subs[i].setState(NLSSubstitution.EXTERNALIZED);
-			subs[i].generateKey(subs, new Properties());
+		for (NLSSubstitution sub : subs) {
+			sub.setState(NLSSubstitution.EXTERNALIZED);
+			sub.generateKey(subs, new Properties());
 		}
 		fillInValues(refac);
 		return refac;
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/nls/NlsRefactoringCreateChangeTest.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/nls/NlsRefactoringCreateChangeTest.java
index 328564e..f24ac8d 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/nls/NlsRefactoringCreateChangeTest.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/nls/NlsRefactoringCreateChangeTest.java
@@ -773,12 +773,9 @@
 	}
 
 	private void checkContentOfFile(String message, IFile file, String content) throws Exception {
-		InputStream in= file.getContents();
-		try {
+		try (InputStream in= file.getContents()) {
 			String realContent= copyToString(in);
 			RefactoringTest.assertEqualLines(message, content, realContent);
-		} finally {
-			in.close();
 		}
 	}
 
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/nls/NlsRefactoringTestHelper.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/nls/NlsRefactoringTestHelper.java
index 74852df..ddc5190 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/nls/NlsRefactoringTestHelper.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/nls/NlsRefactoringTestHelper.java
@@ -87,9 +87,9 @@
 
     private IFile createFile(IPath path, String content) throws Exception {
         IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
-        InputStream iS = getInputStream(content);
-        file.create(iS, true, fNpm);
-        iS.close();
+		try (InputStream iS = getInputStream(content)) {
+			file.create(iS, true, fNpm);
+		}
         return file;
     }
 
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/nls/PropertyFileDocumentModellTest.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/nls/PropertyFileDocumentModellTest.java
index cb45700..a9d7533 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/nls/PropertyFileDocumentModellTest.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/nls/PropertyFileDocumentModellTest.java
@@ -49,8 +49,7 @@
 	private static void insert(IDocument document, KeyValuePair[] pairs) throws CoreException {
 		PropertyFileDocumentModel model= new PropertyFileDocumentModel(document);
 
-		for (int i= 0; i < pairs.length; i++) {
-			KeyValuePair pair= pairs[i];
+		for (KeyValuePair pair : pairs) {
 			pair.setValue(PropertyFileDocumentModel.escape(pair.getValue(), true) + model.getLineDelimiter());
 			pair.setKey(PropertyFileDocumentModel.escape(pair.getKey(), false));
 		}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/type/ExtractInterfaceHeapAcceptanceTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/type/ExtractInterfaceHeapAcceptanceTests.java
index 3c608f2..2de5c0d 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/type/ExtractInterfaceHeapAcceptanceTests.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/type/ExtractInterfaceHeapAcceptanceTests.java
@@ -66,10 +66,8 @@
 		ExtractInterfaceProcessor processor= new ExtractInterfaceProcessor(control, JavaPreferencesSettings.getCodeGenerationSettings(fProject.getProject()));
 		fRefactoring= new ProcessorBasedRefactoring(processor);
 
-		IMethod[] methods= control.getMethods();
 		List<IMethod> extractedMembers= new ArrayList<>();
-		for (int i= 0; i < methods.length; i++) {
-			IMethod method= methods[i];
+		for (IMethod method : control.getMethods()) {
 			int flags= method.getFlags();
 			if (Flags.isPublic(flags) && !Flags.isStatic(flags) && !method.isConstructor()) {
 				extractedMembers.add(method);
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/type/ExtractInterfacePerfAcceptanceTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/type/ExtractInterfacePerfAcceptanceTests.java
index e6bcfd5..db96865 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/type/ExtractInterfacePerfAcceptanceTests.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/type/ExtractInterfacePerfAcceptanceTests.java
@@ -67,10 +67,8 @@
 		ExtractInterfaceProcessor processor= new ExtractInterfaceProcessor(control, JavaPreferencesSettings.getCodeGenerationSettings(fProject.getProject()));
 		fRefactoring= new ProcessorBasedRefactoring(processor);
 
-		IMethod[] methods= control.getMethods();
 		List<IMethod> extractedMembers= new ArrayList<>();
-		for (int i= 0; i < methods.length; i++) {
-			IMethod method= methods[i];
+		for (IMethod method : control.getMethods()) {
 			int flags= method.getFlags();
 			if (Flags.isPublic(flags) && !Flags.isStatic(flags) && !method.isConstructor()) {
 				extractedMembers.add(method);
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/typeconstraints/TypeConstraintTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/typeconstraints/TypeConstraintTests.java
index 8f00b470..d92c774 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/typeconstraints/TypeConstraintTests.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/typeconstraints/TypeConstraintTests.java
@@ -122,8 +122,8 @@
 
 		List<String> externals= allToStrings(constraints);
 		assertEquals("length", constraintStrings.length, constraints.length);
-		for (int i= 0; i < constraintStrings.length; i++) {
-			assertTrue("missing constraint:" + constraintStrings[i], externals.remove(constraintStrings[i]));
+		for (String constraintString : constraintStrings) {
+			assertTrue("missing constraint:" + constraintString, externals.remove(constraintString));
 		}
 	}
 
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/typeconstraints/TypeEnvironmentTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/typeconstraints/TypeEnvironmentTests.java
index b7916c9..d68dfcb 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/typeconstraints/TypeEnvironmentTests.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/typeconstraints/TypeEnvironmentTests.java
@@ -16,7 +16,6 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
-import java.util.Iterator;
 import java.util.List;
 
 import org.eclipse.jdt.core.ICompilationUnit;
@@ -35,6 +34,7 @@
 import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
 
 import org.eclipse.jdt.internal.corext.dom.HierarchicalASTVisitor;
+import org.eclipse.jdt.internal.corext.dom.IASTSharedValues;
 import org.eclipse.jdt.internal.corext.refactoring.typeconstraints.types.TType;
 import org.eclipse.jdt.internal.corext.refactoring.typeconstraints.types.TypeEnvironment;
 
@@ -42,8 +42,6 @@
 import org.eclipse.jdt.ui.tests.refactoring.infra.AbstractCUTestCase;
 import org.eclipse.jdt.ui.tests.refactoring.infra.RefactoringTestPlugin;
 
-import org.eclipse.jdt.internal.corext.dom.IASTSharedValues;
-
 import junit.framework.Test;
 import junit.framework.TestSuite;
 
@@ -117,13 +115,11 @@
 		}
 		@Override
 		public void endVisit(CompilationUnit node) {
-			for (Iterator<ITypeBinding> iter= fResult.iterator(); iter.hasNext();) {
-				ITypeBinding binding= iter.next();
+			for (ITypeBinding binding : fResult) {
 				if (binding.isParameterizedType()) {
-					ITypeBinding[] args= binding.getTypeArguments();
-					for (int i= 0; i < args.length; i++) {
-						if (args[i].isWildcardType()) {
-							fWildcards.add(args[i]);
+					for (ITypeBinding arg : binding.getTypeArguments()) {
+						if (arg.isWildcardType()) {
+							fWildcards.add(arg);
 						}
 					}
 				}
@@ -150,9 +146,7 @@
 		private void collectTypeArgumentBindings(ITypeBinding typeBinding, List<ITypeBinding> result) {
 			if (! typeBinding.isParameterizedType())
 				return;
-			ITypeBinding[] typeArguments= typeBinding.getTypeArguments();
-			for (int i= 0; i < typeArguments.length; i++) {
-				ITypeBinding typeArgument= typeArguments[i];
+			for (ITypeBinding typeArgument : typeBinding.getTypeArguments()) {
 				if (BUG_83616_core_wildcard_assignments && typeArgument.isParameterizedType() && typeArgument.getTypeArguments()[0].isWildcardType())
 					continue;
 				result.add(typeArgument);
diff --git a/org.eclipse.jdt.ui.tests/chkpii/org/eclipse/jdt/ui/tests/chkpii/HTMLTidyTest.java b/org.eclipse.jdt.ui.tests/chkpii/org/eclipse/jdt/ui/tests/chkpii/HTMLTidyTest.java
index 18640f6..53c4bc4 100644
--- a/org.eclipse.jdt.ui.tests/chkpii/org/eclipse/jdt/ui/tests/chkpii/HTMLTidyTest.java
+++ b/org.eclipse.jdt.ui.tests/chkpii/org/eclipse/jdt/ui/tests/chkpii/HTMLTidyTest.java
@@ -134,8 +134,7 @@
 	private boolean isIgnored(File file) {
 		String relativePath= file.getAbsolutePath().substring(fworkspacePathLength);
 		relativePath= relativePath.replace('\\', '/');
-		for (int i= 0; i < fIgnores.length; i++) {
-			StringMatcher matcher= fIgnores[i];
+		for (StringMatcher matcher : fIgnores) {
 			if (matcher.match(relativePath))
 				return true;
 		}
@@ -144,10 +143,8 @@
 
 	private boolean checkFolder(File folder) throws Exception {
 
-		File[] files= folder.listFiles();
 		boolean success= true;
-		for (int i= 0; i < files.length; i++) {
-			File file= files[i];
+		for (File file : folder.listFiles()) {
 			if (isIgnored(file)) {
 //				System.out.println("Ignored: " + file.getAbsolutePath() + (file.isDirectory() ? "/*" : ""));
 				continue;
diff --git a/org.eclipse.jdt.ui.tests/examples/org/eclipse/jdt/ui/examples/MultiElementListSelectorExample.java b/org.eclipse.jdt.ui.tests/examples/org/eclipse/jdt/ui/examples/MultiElementListSelectorExample.java
index 9af2420..e7e36f1 100644
--- a/org.eclipse.jdt.ui.tests/examples/org/eclipse/jdt/ui/examples/MultiElementListSelectorExample.java
+++ b/org.eclipse.jdt.ui.tests/examples/org/eclipse/jdt/ui/examples/MultiElementListSelectorExample.java
@@ -86,8 +86,9 @@
 
 		Object[] res= d.getResult();
 		if (res != null) {
-			for (int i= 0; i < res.length; i++)
-				System.out.println(res[i]);
+			for (Object obj : res) {
+				System.out.println(obj);
+			}
 		}
 	}
 }
diff --git a/org.eclipse.jdt.ui.tests/examples/org/eclipse/jdt/ui/examples/MyQuickFixProcessor.java b/org.eclipse.jdt.ui.tests/examples/org/eclipse/jdt/ui/examples/MyQuickFixProcessor.java
index fc1c82b..62d4aea 100644
--- a/org.eclipse.jdt.ui.tests/examples/org/eclipse/jdt/ui/examples/MyQuickFixProcessor.java
+++ b/org.eclipse.jdt.ui.tests/examples/org/eclipse/jdt/ui/examples/MyQuickFixProcessor.java
@@ -53,9 +53,9 @@
 
 	@Override
 	public IJavaCompletionProposal[] getCorrections(IInvocationContext context, IProblemLocation[] locations) throws CoreException {
-		for (int i= 0; i < locations.length; i++) {
-			if (locations[i].getProblemId() == IProblem.NumericValueOutOfRange) {
-				return getNumericValueOutOfRangeCorrection(context, locations[i]);
+		for (IProblemLocation location : locations) {
+			if (location.getProblemId() == IProblem.NumericValueOutOfRange) {
+				return getNumericValueOutOfRangeCorrection(context, location);
 			}
 		}
 		return null;
diff --git a/org.eclipse.jdt.ui.tests/leaks/org/eclipse/jdt/ui/leaktest/InstancesOfTypeCollector.java b/org.eclipse.jdt.ui.tests/leaks/org/eclipse/jdt/ui/leaktest/InstancesOfTypeCollector.java
index fa50c64..e845f5d 100644
--- a/org.eclipse.jdt.ui.tests/leaks/org/eclipse/jdt/ui/leaktest/InstancesOfTypeCollector.java
+++ b/org.eclipse.jdt.ui.tests/leaks/org/eclipse/jdt/ui/leaktest/InstancesOfTypeCollector.java
@@ -15,7 +15,6 @@
 package org.eclipse.jdt.ui.leaktest;
 
 import java.util.ArrayList;
-import java.util.Iterator;
 
 import org.eclipse.jdt.ui.leaktest.reftracker.ReferenceVisitor;
 import org.eclipse.jdt.ui.leaktest.reftracker.ReferencedObject;
@@ -43,8 +42,7 @@
 	public String getResultString() {
 		int i= 0;
 		StringBuilder buf= new StringBuilder();
-		for (Iterator<ReferenceInfo> iterator= fResults.iterator(); iterator.hasNext();) {
-			ReferenceInfo element= iterator.next();
+		for (ReferenceInfo element : fResults) {
 			buf.append("Element ").append(i++).append('\n');
 			buf.append(element.toString()).append('\n');
 		}
@@ -74,9 +72,8 @@
 			if (superclass != null && isMatchingType(superclass)) {
 				return true;
 			}
-			Class<?>[] interfaces= clazz.getInterfaces();
-			for (int i= 0; i < interfaces.length; i++) {
-				if (isMatchingType(interfaces[i])) {
+			for (Class<?> intf : clazz.getInterfaces()) {
+				if (isMatchingType(intf)) {
 					return true;
 				}
 			}
diff --git a/org.eclipse.jdt.ui.tests/leaks/org/eclipse/jdt/ui/leaktest/LeakTestCase.java b/org.eclipse.jdt.ui.tests/leaks/org/eclipse/jdt/ui/leaktest/LeakTestCase.java
index 059ff90..13ee13f 100644
--- a/org.eclipse.jdt.ui.tests/leaks/org/eclipse/jdt/ui/leaktest/LeakTestCase.java
+++ b/org.eclipse.jdt.ui.tests/leaks/org/eclipse/jdt/ui/leaktest/LeakTestCase.java
@@ -42,8 +42,8 @@
 		@Override
 		public boolean visit(ReferencedObject object, Class<?> clazz, boolean firstVisit) {
 			boolean visitChildren= false;
-			for (int i= 0; i < fVisitors.length; i++) {
-				boolean res= fVisitors[i].visit(object, clazz, firstVisit);
+			for (ReferenceVisitor visitor : fVisitors) {
+				boolean res= visitor.visit(object, clazz, firstVisit);
 				visitChildren |= res;
 			}
 			return visitChildren;
@@ -71,8 +71,8 @@
 		ReferenceVisitor visitor= new ReferenceVisitor() {
 			@Override
 			public boolean visit(ReferencedObject object, Class<?> clazz, boolean firstVisit) {
-				for (int i= 0; i < requestors.length; i++) {
-					requestors[i].visit(object, clazz, firstVisit);
+				for (InstancesOfTypeCollector requestor : requestors) {
+					requestor.visit(object, clazz, firstVisit);
 				}
 				return true;
 			}
diff --git a/org.eclipse.jdt.ui.tests/leaks/org/eclipse/jdt/ui/leaktest/ReferenceInfo.java b/org.eclipse.jdt.ui.tests/leaks/org/eclipse/jdt/ui/leaktest/ReferenceInfo.java
index 31f87eb..ce0a110 100644
--- a/org.eclipse.jdt.ui.tests/leaks/org/eclipse/jdt/ui/leaktest/ReferenceInfo.java
+++ b/org.eclipse.jdt.ui.tests/leaks/org/eclipse/jdt/ui/leaktest/ReferenceInfo.java
@@ -78,10 +78,9 @@
 	public String toString() {
 		StringBuilder buf= new StringBuilder();
 		buf.append(getReference().getClass().getName()).append('\n');
-		BacklinkNode[] backlinkNodes= getBacklinkNodes();
-		for (int i= 0; i < backlinkNodes.length; i++) {
-			buf.append("  ").append(backlinkNodes[i].getBackLinkString());
-			String value= backlinkNodes[i].getValue().toString();
+		for (BacklinkNode backlinkNode : getBacklinkNodes()) {
+			buf.append("  ").append(backlinkNode.getBackLinkString());
+			String value= backlinkNode.getValue().toString();
 			if (value.length() > 100)
 				value= value.substring(0, 99);
 			buf.append(" -> ").append(value).append('\n');
diff --git a/org.eclipse.jdt.ui.tests/leaks/org/eclipse/jdt/ui/leaktest/reftracker/ReferenceTracker.java b/org.eclipse.jdt.ui.tests/leaks/org/eclipse/jdt/ui/leaktest/reftracker/ReferenceTracker.java
index 62a6a91..38d4dda 100644
--- a/org.eclipse.jdt.ui.tests/leaks/org/eclipse/jdt/ui/leaktest/reftracker/ReferenceTracker.java
+++ b/org.eclipse.jdt.ui.tests/leaks/org/eclipse/jdt/ui/leaktest/reftracker/ReferenceTracker.java
@@ -99,9 +99,7 @@
 	}
 
 	private void followStaticReferences(Class<?> classInstance) {
-		Field[] declaredFields= classInstance.getDeclaredFields();
-		for (int i= 0; i < declaredFields.length; i++) {
-			Field fld= declaredFields[i];
+		for (Field fld : classInstance.getDeclaredFields()) {
 			if (isStatic(fld.getModifiers()) && !fld.getType().isPrimitive()) {
 				followFieldReference(new RootReference(classInstance), null, fld);
 			}
@@ -148,9 +146,7 @@
 				followStaticReferences((Class<?>) curr);
 			}
 			do {
-				Field[] declaredFields= currClass.getDeclaredFields();
-				for (int i= 0; i < declaredFields.length; i++) {
-					Field fld= declaredFields[i];
+				for (Field fld : currClass.getDeclaredFields()) {
 					if (!isStatic(fld.getModifiers()) && !fld.getType().isPrimitive()) {
 						followFieldReference(ref, curr, fld);
 					}
diff --git a/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/JdtPerformanceTestCase.java b/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/JdtPerformanceTestCase.java
index 06b0089..b5cbe58 100644
--- a/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/JdtPerformanceTestCase.java
+++ b/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/JdtPerformanceTestCase.java
@@ -84,9 +84,7 @@
 
 	private static boolean allJobsQuiet() {
 		IJobManager jobManager= Job.getJobManager();
-		Job[] jobs= jobManager.find(null);
-		for (int i= 0; i < jobs.length; i++) {
-			Job job= jobs[i];
+		for (Job job : jobManager.find(null)) {
 			int state= job.getState();
 			if (state == Job.RUNNING || state == Job.WAITING)
 				return false;
diff --git a/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/views/CleanUpPerfTest.java b/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/views/CleanUpPerfTest.java
index 4b25dc2..ac45322 100644
--- a/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/views/CleanUpPerfTest.java
+++ b/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/views/CleanUpPerfTest.java
@@ -15,9 +15,7 @@
 package org.eclipse.jdt.ui.tests.performance.views;
 
 import java.io.File;
-import java.util.Collection;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
@@ -125,8 +123,7 @@
 	}
 
 	private void addAllCUs(CleanUpRefactoring cleanUp, IJavaElement[] children) throws JavaModelException {
-		for (int i= 0; i < children.length; i++) {
-			IJavaElement element= children[i];
+		for (IJavaElement element : children) {
 			if (element instanceof ICompilationUnit) {
 				cleanUp.addCompilationUnit((ICompilationUnit)element);
 			} else if (element instanceof IPackageFragmentRoot) {
@@ -142,9 +139,7 @@
 	private static Map<String, String> getNullSettings() {
 		Map<String, String> result= new HashMap<>();
 
-		Collection<String> keys= JavaPlugin.getDefault().getCleanUpRegistry().getDefaultOptions(CleanUpConstants.DEFAULT_CLEAN_UP_OPTIONS).getKeys();
-		for (Iterator<String> iterator= keys.iterator(); iterator.hasNext();) {
-			String key= iterator.next();
+		for (String key : JavaPlugin.getDefault().getCleanUpRegistry().getDefaultOptions(CleanUpConstants.DEFAULT_CLEAN_UP_OPTIONS).getKeys()) {
 			result.put(key, CleanUpOptions.FALSE);
 		}
 
@@ -231,9 +226,8 @@
 
 		storeSettings(node);
 
-		ICleanUp[] cleanUps= JavaPlugin.getDefault().getCleanUpRegistry().createCleanUps();
-		for (int i= 0; i < cleanUps.length; i++) {
-			cleanUpRefactoring.addCleanUp(cleanUps[i]);
+		for (ICleanUp cleanUp : JavaPlugin.getDefault().getCleanUpRegistry().createCleanUps()) {
+			cleanUpRefactoring.addCleanUp(cleanUp);
 		}
 
 		//See https://bugs.eclipse.org/bugs/show_bug.cgi?id=135219
@@ -489,8 +483,7 @@
 	}
 
 	private void clearOptions(ICleanUp[] cleanUps) {
-		for (int i= 0; i < cleanUps.length; i++) {
-			ICleanUp cleanUp= cleanUps[i];
+		for (ICleanUp cleanUp : cleanUps) {
 			if (cleanUp instanceof AbstractCleanUp) {
 				Accessor<AbstractCleanUp> accessor= new Accessor<>(cleanUp, AbstractCleanUp.class);
 				accessor.set("fOptions", null);
diff --git a/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/views/OrganizeImportsPerfTest.java b/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/views/OrganizeImportsPerfTest.java
index 1007077..247fff0 100644
--- a/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/views/OrganizeImportsPerfTest.java
+++ b/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/views/OrganizeImportsPerfTest.java
@@ -77,8 +77,7 @@
 	}
 
 	private void addAllCUs(IJavaElement[] children, List<IJavaElement> result) throws JavaModelException {
-		for (int i= 0; i < children.length; i++) {
-			IJavaElement element= children[i];
+		for (IJavaElement element : children) {
 			if (element instanceof ICompilationUnit) {
 				result.add(element);
 			} else if (element instanceof IPackageFragmentRoot) {
diff --git a/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/views/PackageExplorerPerfTest.java b/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/views/PackageExplorerPerfTest.java
index 8cd316e..f463e17 100644
--- a/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/views/PackageExplorerPerfTest.java
+++ b/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/views/PackageExplorerPerfTest.java
@@ -129,8 +129,7 @@
 		IPackageFragmentRoot classFolder= JavaProjectHelper.addClassFolderWithImport(javaProject, "classes", null, null, jreArchive);
 		((IFolder) classFolder.getResource()).getFolder("META-INF").delete(true, null);
 		
-		ZipFile zipFile= new ZipFile(jreArchive);
-		try {
+		try (ZipFile zipFile= new ZipFile(jreArchive)) {
 			for (int i= 1; i <= 5; i++) {
 				String packName= "copy" + i;
 				classFolder.createPackageFragment(packName, true, null);
@@ -138,8 +137,6 @@
 				JavaProjectHelper.importFilesFromZip(zipFile, folder.getFullPath(), null);
 				folder.getFolder("META-INF").delete(true, null);
 			}
-		} finally {
-			zipFile.close();
 		}
 		
 		javaProject.getProject().getWorkspace().run(new IWorkspaceRunnable() {
diff --git a/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/JavaProjectHelper.java b/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/JavaProjectHelper.java
index 2e5aacc..0b5a3a93d 100644
--- a/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/JavaProjectHelper.java
+++ b/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/JavaProjectHelper.java
@@ -520,10 +520,9 @@
 			public void run(IProgressMonitor monitor) throws CoreException {
 				jproject.setRawClasspath(entries, null);
 
-				IResource[] resources= jproject.getProject().members();
-				for (int i= 0; i < resources.length; i++) {
-					if (!resources[i].getName().startsWith(".")) {
-						delete(resources[i]);
+				for (IResource resource : jproject.getProject().members()) {
+					if (!resource.getName().startsWith(".")) {
+						delete(resource);
 					}
 				}
 			}
@@ -697,14 +696,11 @@
 	 * @throws IOException Creation failed
 	 */
 	public static IPackageFragmentRoot addSourceContainerWithImport(IJavaProject jproject, String containerName, File zipFile, String containerEncoding, IPath[] exclusionFilters) throws InvocationTargetException, CoreException, IOException {
-		ZipFile file= new ZipFile(zipFile);
-		try {
+		try (ZipFile file= new ZipFile(zipFile)) {
 			IPackageFragmentRoot root= addSourceContainer(jproject, containerName, exclusionFilters);
 			((IContainer) root.getCorrespondingResource()).setDefaultCharset(containerEncoding, null);
 			importFilesFromZip(file, root.getPath(), null);
 			return root;
-		} finally {
-			file.close();
 		}
 	}
 
@@ -816,13 +812,10 @@
 	 * @throws InvocationTargetException
 	 */
 	public static IPackageFragmentRoot addClassFolderWithImport(IJavaProject jproject, String containerName, IPath sourceAttachPath, IPath sourceAttachRoot, File zipFile) throws IOException, CoreException, InvocationTargetException {
-		ZipFile file= new ZipFile(zipFile);
-		try {
+		try (ZipFile file= new ZipFile(zipFile)) {
 			IPackageFragmentRoot root= addClassFolder(jproject, containerName, sourceAttachPath, sourceAttachRoot);
 			importFilesFromZip(file, root.getPath(), null);
 			return root;
-		} finally {
-			file.close();
 		}
 	}
 
@@ -1009,8 +1002,8 @@
 
 	public static void addToClasspath(IJavaProject jproject, IClasspathEntry cpe) throws JavaModelException {
 		IClasspathEntry[] oldEntries= jproject.getRawClasspath();
-		for (int i= 0; i < oldEntries.length; i++) {
-			if (oldEntries[i].equals(cpe)) {
+		for (IClasspathEntry oldEntry : oldEntries) {
+			if (oldEntry.equals(cpe)) {
 				return;
 			}
 		}
diff --git a/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/test/HelloWorld.java b/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/test/HelloWorld.java
index ccb6e26..d6bb629 100644
--- a/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/test/HelloWorld.java
+++ b/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/test/HelloWorld.java
@@ -65,9 +65,8 @@
 
 		IType type= classfile.getType();
 		System.out.println("methods of Vector");
-		IMethod[] methods= type.getMethods();
-		for (int i= 0; i < methods.length; i++) {
-			System.out.println(methods[i].getElementName());
+		for (IMethod method : type.getMethods()) {
+			System.out.println(method.getElementName());
 		}
 	}
 
diff --git a/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/test/JavaTestCase.java b/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/test/JavaTestCase.java
index 4d8b715..536165e 100644
--- a/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/test/JavaTestCase.java
+++ b/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/test/JavaTestCase.java
@@ -84,8 +84,8 @@
 
 		System.out.println("methods of A");
 		IMethod[] methods= type.getMethods();
-		for (int i= 0; i < methods.length; i++) {
-			System.out.println(methods[i].getElementName());
+		for (IMethod method : methods) {
+			System.out.println(method.getElementName());
 		}
 		assertTrue("Should contain 2 methods", methods.length == 2);
 	}
diff --git a/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/util/DialogCheck.java b/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/util/DialogCheck.java
index 5435114..6cf49d5 100644
--- a/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/util/DialogCheck.java
+++ b/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/util/DialogCheck.java
@@ -109,19 +109,18 @@
 	 * @param composite The composite to look through
 	 */
 	private static void verifyCompositeText(Composite composite) {
-		Control children[] = composite.getChildren();
-		for (int i = 0; i < children.length; i++) {
+		for (Control child : composite.getChildren()) {
 			try {
 				//verify the text if the child is a button
-				verifyButtonText((Button) children[i]);
+				verifyButtonText((Button) child);
 			} catch (ClassCastException exNotButton) {
 				try {
 					//child is not a button, maybe a label
-					verifyLabelText((Label) children[i]);
+					verifyLabelText((Label) child);
 				} catch (ClassCastException exNotLabel) {
 					try {
 						//child is not a label, make a recursive call if it is a composite
-						verifyCompositeText((Composite) children[i]);
+						verifyCompositeText((Composite) child);
 					} catch (ClassCastException exNotComposite) {
 						//the child is not a button, label, or composite - ignore it.
 					}
diff --git a/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/util/VerifyDialog.java b/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/util/VerifyDialog.java
index d16ca4a..2b41382 100644
--- a/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/util/VerifyDialog.java
+++ b/org.eclipse.jdt.ui.tests/test plugin/org/eclipse/jdt/testplugin/util/VerifyDialog.java
@@ -134,10 +134,10 @@
 		GridData data = new GridData(GridData.FILL_HORIZONTAL);
 		group.setLayoutData(data);
 
-		for (int i = 0; i < _dialogTests.length; i++) {
+		for (IDialogTestPass dialogTest : _dialogTests) {
 			Button radio = new Button(group, SWT.RADIO);
-			radio.setText( _dialogTests[i].label() );
-			final int testID = _dialogTests[i].getID();
+			radio.setText(dialogTest.label());
+			final int testID = dialogTest.getID();
 			radio.addSelectionListener(new SelectionAdapter() {
 				@Override
 				public void widgetSelected(SelectionEvent e) {
@@ -146,7 +146,7 @@
 					_yesButton.setEnabled(true);
 				}
 			});
-			if ( TEST_TYPE == _dialogTests[i].getID() ) {
+			if (TEST_TYPE == dialogTest.getID()) {
 				radio.setSelection(true);
 			}
 		}
@@ -162,8 +162,8 @@
 		group.setLayoutData(data);
 
 		int checkListSize = 0;
-		for (int i = 0; i < _dialogTests.length; i++) {
-			int size = _dialogTests[i].checkListTexts().size();
+		for (IDialogTestPass dialogTest : _dialogTests) {
+			int size = dialogTest.checkListTexts().size();
 			if (size > checkListSize) {
 				checkListSize = size;
 			}
@@ -189,8 +189,8 @@
 	 */
 	private void checkYesEnable() {
 		boolean enable = true;
-		for (int i = 0; i < _checkList.length; i++) {
-			if ( !_checkList[i].getSelection() ) {
+		for (Button b : _checkList) {
+			if (!b.getSelection()) {
 				enable = false;
 			}
 		}
@@ -204,16 +204,16 @@
 		setTitle( test.title() );
 		setMessage( test.description() );
 		Iterator<String> iterator = test.checkListTexts().iterator();
-		for (int i = 0; i < _checkList.length; i++) {
-			if ( iterator.hasNext() ) {
-				_checkList[i].setText( iterator.next().toString() );
-				_checkList[i].setVisible(true);
-				_checkList[i].update();
+		for (Button b : _checkList) {
+			if (iterator.hasNext()) {
+				b.setText(iterator.next().toString());
+				b.setVisible(true);
+				b.update();
 			} else {
-				_checkList[i].setVisible(false);
-				_checkList[i].update();
+				b.setVisible(false);
+				b.update();
 			}
-			_checkList[i].setSelection(true);
+			b.setSelection(true);
 		}
 		_queryLabel.setText( test.queryText() );
 	}
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/junit/tests/AbstractTestRunListenerTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/junit/tests/AbstractTestRunListenerTest.java
index d4bb66b..bf285d0 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/junit/tests/AbstractTestRunListenerTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/junit/tests/AbstractTestRunListenerTest.java
@@ -131,29 +131,33 @@
 		ILaunchesListener2 launchesListener= new ILaunchesListener2() {
 			@Override
 			public void launchesTerminated(ILaunch[] launches) {
-				for (int i= 0; i < launches.length; i++) {
-					if (isJUnitLaunch(launches[i]))
+				for (ILaunch launch : launches) {
+					if (isJUnitLaunch(launch)) {
 						fLaunchHasTerminated= true;
-					logLaunch("terminated", launches[i]);
+					}
+					logLaunch("terminated", launch);
 				}
 			}
 			@Override
 			public void launchesRemoved(ILaunch[] launches) {
-				for (int i= 0; i < launches.length; i++) {
-					if (isJUnitLaunch(launches[i]))
+				for (ILaunch launch : launches) {
+					if (isJUnitLaunch(launch)) {
 						fLaunchHasTerminated= true;
-					logLaunch("removed   ", launches[i]);
+					}
+					logLaunch("removed   ", launch);
 				}
 			}
 			@Override
 			public void launchesAdded(ILaunch[] launches) {
-				for (int i= 0; i < launches.length; i++)
-					logLaunch("added     ", launches[i]);
+				for (ILaunch launch : launches) {
+					logLaunch("added     ", launch);
+				}
 			}
 			@Override
 			public void launchesChanged(ILaunch[] launches) {
-				for (int i= 0; i < launches.length; i++)
-					logLaunch("changed   ", launches[i]);
+				for (ILaunch launch : launches) {
+					logLaunch("changed   ", launch);
+				}
 			}
 			private void logLaunch(String action, ILaunch launch) {
 				StringBuffer buf= new StringBuffer();
@@ -230,12 +234,12 @@
 
 	public static void assertEqualLog(final String[] expectedSequence, String[] logMessages) {
 		StringBuilder actual= new StringBuilder();
-		for (int i= 0; i < logMessages.length; i++) {
-			actual.append(logMessages[i]).append('\n');
+		for (String logMessage : logMessages) {
+			actual.append(logMessage).append('\n');
 		}
 		StringBuilder expected= new StringBuilder();
-		for (int i= 0; i < expectedSequence.length; i++) {
-			expected.append(expectedSequence[i]).append('\n');
+		for (String sequence : expectedSequence) {
+			expected.append(sequence).append('\n');
 		}
 		assertEquals(expected.toString(), actual.toString());
 	}
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/junit/tests/JUnit3TestFinderTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/junit/tests/JUnit3TestFinderTest.java
index d0d6807..884d8fc 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/junit/tests/JUnit3TestFinderTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/junit/tests/JUnit3TestFinderTest.java
@@ -134,8 +134,8 @@
 		buf.append("    }\n");
 		buf.append("}\n");
 		IType[] invalidTests= p.createCompilationUnit("Outer2.java", buf.toString(), false, null).getAllTypes();
-		for (int i= 0; i < invalidTests.length; i++) {
-			assertTestFound(invalidTests[i], new String[] {});
+		for (IType invalidTest : invalidTests) {
+			assertTestFound(invalidTest, new String[] {});
 		}
 		assertTestFound(invalidTests[0].getCompilationUnit(), new String[] {});
 
@@ -254,8 +254,8 @@
 		buf.append("    }\n");
 		buf.append("}\n");
 		IType[] invalidTests= p.createCompilationUnit("Outer2.java", buf.toString(), false, null).getAllTypes();
-		for (int i= 0; i < invalidTests.length; i++) {
-			assertTestFound(invalidTests[i], new String[] {});
+		for (IType invalidTest : invalidTests) {
+			assertTestFound(invalidTest, new String[] {});
 		}
 		assertTestFound(invalidTests[0].getCompilationUnit(), new String[] {});
 
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/junit/tests/JUnit4TestFinderTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/junit/tests/JUnit4TestFinderTest.java
index ec9feda..2d7d89a 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/junit/tests/JUnit4TestFinderTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/junit/tests/JUnit4TestFinderTest.java
@@ -144,8 +144,8 @@
 		buf.append("    }\n");
 		buf.append("}\n");
 		IType[] invalidTests= p.createCompilationUnit("Outer2.java", buf.toString(), false, null).getAllTypes();
-		for (int i= 0; i < invalidTests.length; i++) {
-			assertTestFound(invalidTests[i], new String[] {});
+		for (IType invalidTest : invalidTests) {
+			assertTestFound(invalidTest, new String[] {});
 		}
 		assertTestFound(invalidTests[0].getCompilationUnit(), new String[] {});
 
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/junit/tests/TestPriorization.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/junit/tests/TestPriorization.java
index f5721ce..d41b235 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/junit/tests/TestPriorization.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/junit/tests/TestPriorization.java
@@ -17,7 +17,6 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Enumeration;
-import java.util.Iterator;
 import java.util.List;
 
 import org.eclipse.jdt.internal.junit.runner.FailuresFirstPrioritizer;
@@ -352,8 +351,7 @@
 
 	private static String enumerate(List<String> list) {
 		StringBuilder buf= new StringBuilder();
-		for (Iterator<String> iter= list.iterator(); iter.hasNext();) {
-			String s= iter.next();
+		for (String s : list) {
 			buf.append(s).append('\n');
 		}
 		return buf.toString();
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/junit/tests/TestRunListeners.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/junit/tests/TestRunListeners.java
index 67a5be0..8c77e33 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/junit/tests/TestRunListeners.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/junit/tests/TestRunListeners.java
@@ -68,9 +68,8 @@
 		private void logElement(ITestElement elem, int indent) {
 			fLog.add(asString(elem, indent));
 			if (elem instanceof ITestElementContainer) {
-				ITestElement[] children= ((ITestElementContainer) elem).getChildren();
-				for (int i= 0; i < children.length; i++) {
-					logElement(children[i], indent + 1);
+				for (ITestElement child : ((ITestElementContainer) elem).getChildren()) {
+					logElement(child, indent + 1);
 				}
 			}
 		}
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/junit/tests/TestTestSearchEngine.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/junit/tests/TestTestSearchEngine.java
index 5a4bdf5..843243a 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/junit/tests/TestTestSearchEngine.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/junit/tests/TestTestSearchEngine.java
@@ -213,8 +213,8 @@
 
 	private IType[] findTests(IJavaElement[] elements) throws InvocationTargetException, InterruptedException {
 		HashSet<IType> res= new HashSet<>();
-		for (int i= 0; i < elements.length; i++) {
-			IType[] types= findTests(elements[i]);
+		for (IJavaElement element : elements) {
+			IType[] types= findTests(element);
 			res.addAll(Arrays.asList(types));
 		}
 		return res.toArray(new IType[res.size()]);
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/activation/JavaActivationTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/activation/JavaActivationTest.java
index 169d2d0..c5991f9 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/activation/JavaActivationTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/activation/JavaActivationTest.java
@@ -66,7 +66,6 @@
 			"org.eclipse.core.filesystem.win32.x86",
 			"org.eclipse.core.resources.compatibility",
 			"org.eclipse.core.resources.win32",
-			"org.eclipse.core.runtime.compatibility.registry",
 			"org.eclipse.equinox.http.jetty",
 			"org.eclipse.equinox.http.registry",
 			"org.eclipse.equinox.http.servlet",
@@ -199,10 +198,9 @@
 
 	public void checkNotLoaded(Set<String> inactiveBundles) {
 		Bundle bundle= Platform.getBundle("org.eclipse.jdt.ui.tests");
-		Bundle[] bundles= bundle.getBundleContext().getBundles();
-		for (int i= 0; i < bundles.length; i++) {
-			if (bundles[i].getState() == Bundle.ACTIVE && inactiveBundles.contains(bundles[i].getSymbolicName())) {
-				Assert.fail ("plugin should not be activated: "+bundles[i].getSymbolicName()) ;
+		for (Bundle b : bundle.getBundleContext().getBundles()) {
+			if (b.getState() == Bundle.ACTIVE && inactiveBundles.contains(b.getSymbolicName())) {
+				Assert.fail("plugin should not be activated: " + b.getSymbolicName());
 			}
 		}
 	}
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/browsing/PackagesViewContentProviderTests.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/browsing/PackagesViewContentProviderTests.java
index d7d742a..3b35392 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/browsing/PackagesViewContentProviderTests.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/browsing/PackagesViewContentProviderTests.java
@@ -291,9 +291,7 @@
 //	}
 
 	public void testGetParentPFwithProjectFocus(){
-		Object[] children= fProvider.getChildren(fJProject2);
-		for (int i= 0; i < children.length; i++) {
-			Object object= children[i];
+		for (Object object : fProvider.getChildren(fJProject2)) {
 			fProvider.getChildren(object);
 		}
 
@@ -308,8 +306,7 @@
 	public void testGetParentWithRootFocusAfterProjectFocus(){
 		//set up map with project focus
 		Object[] children= fProvider.getChildren(fJProject2);
-		for (int i= 0; i < children.length; i++) {
-			Object object= children[i];
+		for (Object object : children) {
 			fProvider.getChildren(object);
 		}
 
@@ -327,13 +324,9 @@
 		assertTrue("expected children of project with focus", compareArrays(children, expectedChildren));//$NON-NLS-1$
 
 		//set up map with root focus
-		children= fProvider.getChildren(fRoot1);
-		for (int i= 0; i < children.length; i++) {
-			Object object= children[i];
+		for (Object object : fProvider.getChildren(fRoot1)) {
 			fProvider.getChildren(object);
-		}
-
-//		Object parent= fProvider.getParent(fPack41);
+		}//		Object parent= fProvider.getParent(fPack41);
 //		Object expectedParent= fPack31;
 //		assertTrue("Wrong parent found for a mid level Fragment with Project Focus", expectedParent.equals(parent));//$NON-NLS-1$
 	}
@@ -521,8 +514,7 @@
 	private boolean compareArrays(Object[] children, Object[] expectedChildren) {
 		if(children.length!=expectedChildren.length)
 			return false;
-		for (int i= 0; i < children.length; i++) {
-			Object child= children[i];
+		for (Object child : children) {
 			if (child instanceof IJavaElement) {
 				IJavaElement el= (IJavaElement) child;
 				if(!contains(el, expectedChildren))
@@ -541,8 +533,7 @@
 	}
 
 	private boolean contains(IResource res, Object[] expectedChildren) {
-		for (int i= 0; i < expectedChildren.length; i++) {
-			Object object= expectedChildren[i];
+		for (Object object : expectedChildren) {
 			if (object instanceof IResource) {
 				IResource expres= (IResource) object;
 				if(expres.equals(res))
@@ -553,8 +544,7 @@
 	}
 
 	private boolean contains(IJavaElement fragment, Object[] expectedChildren) {
-		for (int i= 0; i < expectedChildren.length; i++) {
-			Object object= expectedChildren[i];
+		for (Object object : expectedChildren) {
 			if (object instanceof IJavaElement) {
 				IJavaElement expfrag= (IJavaElement) object;
 				if(expfrag.equals(fragment))
@@ -565,8 +555,7 @@
 	}
 
 	private boolean contains(LogicalPackage lp, Object[] expectedChildren) {
-		for (int i= 0; i < expectedChildren.length; i++) {
-			Object object= expectedChildren[i];
+		for (Object object : expectedChildren) {
 			if (object instanceof LogicalPackage) {
 				LogicalPackage explp= (LogicalPackage) object;
 				if (explp.equals(lp))
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/browsing/PackagesViewContentProviderTests2.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/browsing/PackagesViewContentProviderTests2.java
index 610ec69..d129124 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/browsing/PackagesViewContentProviderTests2.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/browsing/PackagesViewContentProviderTests2.java
@@ -479,8 +479,7 @@
 	private boolean compareArrays(Object[] children, Object[] expectedChildren) {
 		if(children.length!=expectedChildren.length)
 			return false;
-		for (int i= 0; i < children.length; i++) {
-			Object child= children[i];
+		for (Object child : children) {
 			if (child instanceof IJavaElement) {
 				IJavaElement el= (IJavaElement) child;
 				if(!contains(el, expectedChildren))
@@ -499,8 +498,7 @@
 	}
 
 	private boolean canFindEqualCompoundElement(LogicalPackage compoundElement, Object[] expectedChildren) {
-		for (int i= 0; i < expectedChildren.length; i++) {
-			Object object= expectedChildren[i];
+		for (Object object : expectedChildren) {
 			if(object instanceof LogicalPackage){
 				LogicalPackage el= (LogicalPackage) object;
 				if(el.getElementName().equals(compoundElement.getElementName()) && (el.getJavaProject().equals(compoundElement.getJavaProject()))){
@@ -513,8 +511,7 @@
 	}
 
 	private boolean contains(IResource res, Object[] expectedChildren) {
-		for (int i= 0; i < expectedChildren.length; i++) {
-			Object object= expectedChildren[i];
+		for (Object object : expectedChildren) {
 			if (object instanceof IResource) {
 				IResource expres= (IResource) object;
 				if(expres.equals(res))
@@ -525,8 +522,7 @@
 	}
 
 	private boolean contains(IJavaElement fragment, Object[] expectedChildren) {
-		for (int i= 0; i < expectedChildren.length; i++) {
-			Object object= expectedChildren[i];
+		for (Object object : expectedChildren) {
 			if (object instanceof IJavaElement) {
 				IJavaElement expfrag= (IJavaElement) object;
 				if(expfrag.equals(fragment))
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/browsing/PackagesViewDeltaTests.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/browsing/PackagesViewDeltaTests.java
index 3d5e475..1aff527 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/browsing/PackagesViewDeltaTests.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/browsing/PackagesViewDeltaTests.java
@@ -146,9 +146,7 @@
 
 		//initialise the map
 		fMyPart.fViewer.setInput(fJProject);
-		Object[] children= fProvider.getChildren(fJProject);
-		for (int i= 0; i < children.length; i++) {
-			Object object= children[i];
+		for (Object object : fProvider.getChildren(fJProject)) {
 			fProvider.getChildren(object);
 		}
 
@@ -577,8 +575,7 @@
 	private boolean compareArrays(Object[] children, Object[] expectedChildren) {
 		if (children.length != expectedChildren.length)
 			return false;
-		for (int i= 0; i < children.length; i++) {
-			Object child= children[i];
+		for (Object child : children) {
 			if (child instanceof IJavaElement) {
 				IJavaElement el= (IJavaElement) child;
 				if (!contains(el, expectedChildren))
@@ -597,8 +594,7 @@
 	}
 
 	private boolean contains(IResource res, Object[] expectedChildren) {
-		for (int i= 0; i < expectedChildren.length; i++) {
-			Object object= expectedChildren[i];
+		for (Object object : expectedChildren) {
 			if (object instanceof IResource) {
 				IResource expres= (IResource) object;
 				if (expres.equals(res))
@@ -609,8 +605,7 @@
 	}
 
 	private boolean contains(IJavaElement fragment, Object[] expectedChildren) {
-		for (int i= 0; i < expectedChildren.length; i++) {
-			Object object= expectedChildren[i];
+		for (Object object : expectedChildren) {
 			if (object instanceof IJavaElement) {
 				IJavaElement expfrag= (IJavaElement) object;
 				if (expfrag.equals(fragment))
@@ -621,8 +616,7 @@
 	}
 
 	private boolean contains(LogicalPackage lp, Object[] expectedChildren) {
-		for (int i= 0; i < expectedChildren.length; i++) {
-			Object object= expectedChildren[i];
+		for (Object object : expectedChildren) {
 			if (object instanceof LogicalPackage) {
 				LogicalPackage explp= (LogicalPackage) object;
 				if (explp.equals(lp))
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/buildpath/BuildpathModifierActionEnablementTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/buildpath/BuildpathModifierActionEnablementTest.java
index 106e010..95c61b7 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/buildpath/BuildpathModifierActionEnablementTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/buildpath/BuildpathModifierActionEnablementTest.java
@@ -150,28 +150,30 @@
     }
 
     private void assertOnlyEnabled(IAction[] enabledActions) {
-    	for (int i= 0; i < fActions.length; i++) {
-	        if (fActions[i].isEnabled()) {
-	        	assertTrue(fActions[i].getText() + " is enabled but should not be.", contains(enabledActions, fActions[i]));
-	        } else {
-	        	assertTrue(fActions[i].getText() + " is disabled but should not be.", !contains(enabledActions, fActions[i]));
-	        }
-        }
+		for (BuildpathModifierAction action : fActions) {
+			if (action.isEnabled()) {
+				assertTrue(action.getText() + " is enabled but should not be.", contains(enabledActions, action));
+			} else {
+				assertTrue(action.getText() + " is disabled but should not be.", !contains(enabledActions, action));
+			}
+		}
     }
 
 	private boolean contains(IAction[] actions, IAction action) {
-    	for (int i= 0; i < actions.length; i++) {
-	        if (actions[i] == action)
-	        	return true;
-        }
+		for (IAction a : actions) {
+			if (a == action) {
+				return true;
+			}
+		}
 	    return false;
     }
 
 	private void assertAllDisabled() {
-		for (int i= 0; i < fActions.length; i++) {
-	        if (fActions[i].isEnabled())
-	        	assertTrue(fActions[i].getText() + " is enabled but should not be.", false);
-        }
+		for (BuildpathModifierAction action : fActions) {
+			if (action.isEnabled()) {
+				assertTrue(action.getText() + " is enabled but should not be.", false);
+			}
+		}
     }
 
     public void testProjectWithOthers() {
@@ -754,20 +756,20 @@
     }
 
 	private void select(final StructuredSelection selection) {
-	    for (int i= 0; i < fActions.length; i++) {
-	        fActions[i].selectionChanged(new SelectionChangedEvent(new ISelectionProvider(){
+		for (BuildpathModifierAction action : fActions) {
+			action.selectionChanged(new SelectionChangedEvent(new ISelectionProvider(){
 				@Override
 				public void addSelectionChangedListener(ISelectionChangedListener listener) {}
 				@Override
 				public ISelection getSelection() {
-	                return selection;
-                }
+					return selection;
+				}
 				@Override
 				public void removeSelectionChangedListener(ISelectionChangedListener listener) {}
 				@Override
 				public void setSelection(ISelection s) {}
-	        }, selection));
-        }
+			}, selection));
+		}
     }
 
 	private ICompilationUnit createICompilationUnit(String className, IPackageFragment fragment) throws JavaModelException {
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/buildpath/BuildpathModifierActionTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/buildpath/BuildpathModifierActionTest.java
index 28921f0..c91232f 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/buildpath/BuildpathModifierActionTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/buildpath/BuildpathModifierActionTest.java
@@ -77,10 +77,11 @@
     }
 
 	private static void assertIsOnBuildpath(IClasspathEntry[] entries, IPath path) {
-		for (int i= 0; i < entries.length; i++) {
-	        if (entries[i].getPath().equals(path))
-	        	return;
-        }
+		for (IClasspathEntry entry : entries) {
+			if (entry.getPath().equals(path)) {
+				return;
+			}
+		}
 		assertTrue("Element with location " + path + " is not on buildpath", false);
     }
 
@@ -101,12 +102,12 @@
 	        	assertTrue("Resource " + createdResources[i] + " is nor file nor folder.", false);
 	        }
         }
-    	for (int i= 0; i < createdFolders.length; i++) {
-	        assertTrue("Folder at " + createdFolders[i] + " was not created", contains(createdPaths, createdFolders[i]));
-        }
-    	for (int i= 0; i < createdFiles.length; i++) {
-    		assertTrue("File at " + createdFiles[i] + " was not created", contains(createdPaths, createdFiles[i]));
-        }
+		for (IPath createdFolder : createdFolders) {
+			assertTrue("Folder at " + createdFolder + " was not created", contains(createdPaths, createdFolder));
+		}
+		for (IPath createdFile : createdFiles) {
+			assertTrue("File at " + createdFile + " was not created", contains(createdPaths, createdFile));
+		}
 
     	IResource[] deletedResources= delta.getDeletedResources();
     	IPath[] deletedPaths= new IPath[deletedResources.length];
@@ -124,12 +125,12 @@
 	        	assertTrue("Resource " + deletedResources[i] + " is nor file nor folder.", false);
 	        }
         }
-    	for (int i= 0; i < removedFolders.length; i++) {
-	        assertTrue("Folder at " + removedFolders[i] + " was not removed", contains(deletedPaths, removedFolders[i]));
-        }
-    	for (int i= 0; i < removedFiles.length; i++) {
-    		assertTrue("File at " + removedFiles[i] + " was not removed", contains(deletedPaths, removedFiles[i]));
-        }
+		for (IPath removedFolder : removedFolders) {
+			assertTrue("Folder at " + removedFolder + " was not removed", contains(deletedPaths, removedFolder));
+		}
+		for (IPath removedFile : removedFiles) {
+			assertTrue("File at " + removedFile + " was not removed", contains(deletedPaths, removedFile));
+		}
     }
 
     private static void assertDeltaRemovedEntries(BuildpathDelta delta, IPath[] paths) {
@@ -142,12 +143,12 @@
 	        removed[i]= element.getPath();
 	        i++;
         }
-    	for (int j= 0; j < paths.length; j++) {
-	        assertTrue("Entry " + paths[j] + " was not removed", contains(removed, paths[j]));
-        }
-    	for (int j= 0; j < removed.length; j++) {
-	        assertTrue("Entry " + removed[j] + " was removed", contains(paths, removed[j]));
-        }
+		for (IPath path : paths) {
+			assertTrue("Entry " + path + " was not removed", contains(removed, path));
+		}
+		for (IPath removed1 : removed) {
+			assertTrue("Entry " + removed1 + " was removed", contains(paths, removed1));
+		}
     }
 
     private static void assertDeltaAddedEntries(BuildpathDelta delta, IPath[] paths) {
@@ -160,19 +161,20 @@
 	        added[i]= element.getPath();
 	        i++;
         }
-    	for (int j= 0; j < paths.length; j++) {
-	        assertTrue("Entry " + paths[j] + " was not added", contains(added, paths[j]));
-        }
-    	for (int j= 0; j < added.length; j++) {
-	        assertTrue("Entry " + added[j] + " was added", contains(paths, added[j]));
-        }
+		for (IPath path : paths) {
+			assertTrue("Entry " + path + " was not added", contains(added, path));
+		}
+		for (IPath add : added) {
+			assertTrue("Entry " + add + " was added", contains(paths, add));
+		}
     }
 
     private static boolean contains(IPath[] paths, IPath path) {
-    	for (int i= 0; i < paths.length; i++) {
-	        if (paths[i].equals(path))
-	        	return true;
-        }
+		for (IPath p : paths) {
+			if (p.equals(path)) {
+				return true;
+			}
+		}
 	    return false;
     }
 
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/callhierarchy/CallHierarchyContentProviderTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/callhierarchy/CallHierarchyContentProviderTest.java
index fb363cd..451fa40 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/callhierarchy/CallHierarchyContentProviderTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/callhierarchy/CallHierarchyContentProviderTest.java
@@ -260,15 +260,15 @@
     }
 
     private void assertCalleeMethodWrapperChildren(Object[] children) {
-        for (int i= 0; i < children.length; i++) {
-            assertTrue("Wrong class returned", children[i].getClass().getName().endsWith(".CalleeMethodWrapper"));
-        }
+    	for (Object child : children) {
+    		assertTrue("Wrong class returned", child.getClass().getName().endsWith(".CalleeMethodWrapper"));
+    	}
     }
 
     private void assertCallerMethodWrapperChildren(Object[] children) {
-        for (int i= 0; i < children.length; i++) {
-            assertTrue("Wrong class returned", children[i].getClass().getName().endsWith(".CallerMethodWrapper"));
-        }
+    	for (Object child : children) {
+    		assertTrue("Wrong class returned", child.getClass().getName().endsWith(".CallerMethodWrapper"));
+    	}
     }
 
     private TreeRoot wrapCalleeRoot(IMethod method) {
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/callhierarchy/CallHierarchyTestHelper.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/callhierarchy/CallHierarchyTestHelper.java
index 13a03b8..96d8839 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/callhierarchy/CallHierarchyTestHelper.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/callhierarchy/CallHierarchyTestHelper.java
@@ -17,7 +17,6 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
-import java.util.Iterator;
 
 import org.junit.Assert;
 
@@ -267,10 +266,9 @@
     public void assertCalls(Collection<IMember> expectedMembers, Collection<?> calls) {
         Collection<IMember> foundMembers= new ArrayList<>();
 
-        for (Iterator<?> iter= calls.iterator(); iter.hasNext();) {
-            MethodWrapper element= (MethodWrapper) iter.next();
-            foundMembers.add(element.getMember());
-        }
+		for (MethodWrapper element : (Collection<MethodWrapper>)calls) {
+			foundMembers.add(element.getMember());
+		}
 
         Assert.assertEquals("Wrong number of calls", expectedMembers.size(), calls.size());
         Assert.assertTrue("One or more members not found", foundMembers.containsAll(expectedMembers));
@@ -292,12 +290,12 @@
 
     public MethodWrapper findMethodWrapper(IMethod method, Object[] methodWrappers) {
         MethodWrapper thirdLevelMethodWrapper= null;
-        for (int i= 0; i < methodWrappers.length; i++) {
-            if (method.equals(((MethodWrapper) methodWrappers[i]).getMember())) {
-                thirdLevelMethodWrapper= (MethodWrapper) methodWrappers[i];
-                break;
-            }
-        }
+		for (Object methodWrapper : methodWrappers) {
+			if (method.equals(((MethodWrapper) methodWrapper).getMember())) {
+				thirdLevelMethodWrapper= (MethodWrapper) methodWrapper;
+				break;
+			}
+		}
         return thirdLevelMethodWrapper;
     }
 
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/CallHierarchyTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/CallHierarchyTest.java
index 9a4d625..6b240f0 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/CallHierarchyTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/CallHierarchyTest.java
@@ -456,11 +456,8 @@
     }
 
     private void assertRecursive(MethodWrapper[] callResults, boolean shouldBeRecursive) {
-        for (int i= 0; i < callResults.length; i++) {
-            assertEquals(
-                "Wrong recursive value: " + callResults[i].getName(),
-                shouldBeRecursive,
-                callResults[i].isRecursive());
-        }
+    	for (MethodWrapper callResult : callResults) {
+    		assertEquals("Wrong recursive value: " + callResult.getName(), shouldBeRecursive, callResult.isRecursive());
+    	}
     }
 }
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/ClassPathDetectorTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/ClassPathDetectorTest.java
index 575d33c..4f59e9f 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/ClassPathDetectorTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/ClassPathDetectorTest.java
@@ -106,8 +106,7 @@
 
 
 	private IClasspathEntry findEntry(IClasspathEntry entry, IClasspathEntry[] entries) {
-		for (int i= 0; i < entries.length; i++) {
-			IClasspathEntry curr= entries[i];
+		for (IClasspathEntry curr : entries) {
 			if (curr.getPath().equals(entry.getPath()) && curr.getEntryKind() == entry.getEntryKind()) {
 				if (curr.getEntryKind() == IClasspathEntry.CPE_SOURCE) {
 					if (hasSamePaths(curr.getExclusionPatterns(), entry.getExclusionPatterns())) {
@@ -126,8 +125,7 @@
 	private void assertSameClasspath(IClasspathEntry[] projectEntries, IClasspathEntry[] entries) throws Exception {
 		assertEquals("Number of classpath entries", projectEntries.length, entries.length);
 
-		for (int i= 0; i < projectEntries.length; i++) {
-			IClasspathEntry curr= projectEntries[i];
+		for (IClasspathEntry curr : projectEntries) {
 			assertTrue("entry not found: " + curr.getPath(), findEntry(curr, entries) != null);
 		}
 	}
@@ -158,9 +156,8 @@
 
 		JavaProjectHelper.addLibraryWithImport(fJProject1, Path.fromOSString(mylibJar.getPath()), null, null);
 
-		IClasspathEntry[] jreEntries= PreferenceConstants.getDefaultJRELibrary();
-		for (int i= 0; i < jreEntries.length; i++) {
-			JavaProjectHelper.addToClasspath(fJProject1, jreEntries[i]);
+		for (IClasspathEntry jreEntry : PreferenceConstants.getDefaultJRELibrary()) {
+			JavaProjectHelper.addToClasspath(fJProject1, jreEntry);
 		}
 		fJProject1.getProject().build(IncrementalProjectBuilder.FULL_BUILD, null);
 
@@ -200,9 +197,8 @@
 		buf.append("}\n");
 		pack1.createCompilationUnit("E.java", buf.toString(), false, null);
 
-		IClasspathEntry[] jreEntries= PreferenceConstants.getDefaultJRELibrary();
-		for (int i= 0; i < jreEntries.length; i++) {
-			JavaProjectHelper.addToClasspath(fJProject1, jreEntries[i]);
+		for (IClasspathEntry jreEntry : PreferenceConstants.getDefaultJRELibrary()) {
+			JavaProjectHelper.addToClasspath(fJProject1, jreEntry);
 		}
 		fJProject1.getProject().build(IncrementalProjectBuilder.FULL_BUILD, null);
 
@@ -243,9 +239,8 @@
 		buf.append("}\n");
 		pack1.createCompilationUnit("E.java", buf.toString(), false, null);
 
-		IClasspathEntry[] jreEntries= PreferenceConstants.getDefaultJRELibrary();
-		for (int i= 0; i < jreEntries.length; i++) {
-			JavaProjectHelper.addToClasspath(fJProject1, jreEntries[i]);
+		for (IClasspathEntry jreEntry : PreferenceConstants.getDefaultJRELibrary()) {
+			JavaProjectHelper.addToClasspath(fJProject1, jreEntry);
 		}
 		fJProject1.getProject().build(IncrementalProjectBuilder.FULL_BUILD, null);
 
@@ -274,9 +269,8 @@
 		assertTrue("junit src not found", junitSrcArchive != null && junitSrcArchive.exists());
 		JavaProjectHelper.addSourceContainerWithImport(fJProject1, "", junitSrcArchive, JavaProjectHelper.JUNIT_SRC_ENCODING);
 
-		IClasspathEntry[] jreEntries= PreferenceConstants.getDefaultJRELibrary();
-		for (int i= 0; i < jreEntries.length; i++) {
-			JavaProjectHelper.addToClasspath(fJProject1, jreEntries[i]);
+		for (IClasspathEntry jreEntry : PreferenceConstants.getDefaultJRELibrary()) {
+			JavaProjectHelper.addToClasspath(fJProject1, jreEntry);
 		}
 		fJProject1.getProject().build(IncrementalProjectBuilder.FULL_BUILD, null);
 
@@ -316,9 +310,8 @@
 
 		IPackageFragmentRoot cfroot= JavaProjectHelper.addClassFolderWithImport(fJProject1, "cf", null, null, lib);
 
-		IClasspathEntry[] jreEntries= PreferenceConstants.getDefaultJRELibrary();
-		for (int i= 0; i < jreEntries.length; i++) {
-			JavaProjectHelper.addToClasspath(fJProject1, jreEntries[i]);
+		for (IClasspathEntry jreEntry : PreferenceConstants.getDefaultJRELibrary()) {
+			JavaProjectHelper.addToClasspath(fJProject1, jreEntry);
 		}
 		fJProject1.getProject().build(IncrementalProjectBuilder.FULL_BUILD, null);
 
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/CodeFormatterUtilTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/CodeFormatterUtilTest.java
index a9d2466..ba07171 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/CodeFormatterUtilTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/CodeFormatterUtilTest.java
@@ -89,8 +89,8 @@
 			Document doc= createDocument(string, positions);
 			edit.apply(doc, 0);
 			if (positions != null) {
-				for (int i= 0; i < positions.length; i++) {
-					Assert.isTrue(!positions[i].isDeleted, "Position got deleted"); //$NON-NLS-1$
+				for (Position position : positions) {
+					Assert.isTrue(!position.isDeleted, "Position got deleted"); //$NON-NLS-1$
 				}
 			}
 			return doc.get();
@@ -118,11 +118,11 @@
 						return true;
 					}
 				});
-				for (int i= 0; i < positions.length; i++) {
+				for (Position position : positions) {
 					try {
-						doc.addPosition(POS_CATEGORY, positions[i]);
+						doc.addPosition(POS_CATEGORY, position);
 					} catch (BadLocationException e) {
-						throw new IllegalArgumentException("Position outside of string. offset: " + positions[i].offset + ", length: " + positions[i].length + ", string size: " + string.length());   //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
+						throw new IllegalArgumentException("Position outside of string. offset: " + position.offset + ", length: " + position.length + ", string size: " + string.length()); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
 					}
 				}
 			}
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/HierarchicalASTVisitorTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/HierarchicalASTVisitorTest.java
index 194993d..89a0032 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/HierarchicalASTVisitorTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/HierarchicalASTVisitorTest.java
@@ -563,12 +563,10 @@
 	 */
 	private static Set<Class<? extends ASTNode>> getLeafASTNodeDescendants() {
 		Set<Class<? extends ASTNode>> result= new HashSet<>();
-		Method[] methods= ASTVisitor.class.getMethods();
-		for (int i= 0; i < methods.length; i++) {
-			Method method= methods[i];
+		for (Method method : ASTVisitor.class.getMethods()) {
 			if (isVisitMethod(method)) {
 				@SuppressWarnings("unchecked")
-				Class<? extends ASTNode> nodeType= (Class<? extends ASTNode>) method.getParameterTypes()[0];
+					Class<? extends ASTNode> nodeType= (Class<? extends ASTNode>) method.getParameterTypes()[0];
 				result.add(nodeType);
 			}
 		}
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/ImportOrganizeTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/ImportOrganizeTest.java
index 9b9650e..799a8d9 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/ImportOrganizeTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/ImportOrganizeTest.java
@@ -97,9 +97,9 @@
 					assertNotNull(name + "-query-setset" + i, selection);
 					assertTrue(name + "-query-setlen" + i, selection.length > 0);
 					TypeNameMatch found= null;
-					for (int k= 0; k < selection.length; k++) {
-						if (selection[k].getFullyQualifiedName().equals(choices[i])) {
-							found= selection[k];
+					for (TypeNameMatch s : selection) {
+						if (s.getFullyQualifiedName().equals(choices[i])) {
+							found= s;
 						}
 					}
 					assertNotNull(name + "-query-notfound" + i, found);
@@ -1685,14 +1685,13 @@
 		String[] order= new String[] { "org.eclipse.jdt", "org.eclipse" };
 
 		IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
-		for (int i= 0; i < types.length; i++) {
-			String pack= Signature.getQualifier(types[i]);
-			String name= Signature.getSimpleName(types[i]);
-
+		for (String type : types) {
+			String pack= Signature.getQualifier(type);
+			String name= Signature.getSimpleName(type);
 			IPackageFragment pack2= sourceFolder.createPackageFragment(pack, false, null);
 			StringBuilder buf= new StringBuilder();
-			buf.append("package "); buf.append(pack); buf.append(";\n");
-			buf.append("public class "); buf.append(name); buf.append(" {\n");
+			buf.append("package ").append(pack).append(";\n");
+			buf.append("public class ").append(name).append(" {\n");
 			buf.append("}\n");
 			pack2.createCompilationUnit(name + ".java", buf.toString(), false, null);
 		}
@@ -1755,15 +1754,14 @@
 		int threshold= 3;
 
 		IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
-		for (int i= 0; i < types.length; i++) {
-			String pack= Signature.getQualifier(types[i]);
+		for (String type : types) {
+			String pack= Signature.getQualifier(type);
 			if (!pack.startsWith("java.")) {
-				String name= Signature.getSimpleName(types[i]);
-
+				String name= Signature.getSimpleName(type);
 				IPackageFragment pack2= sourceFolder.createPackageFragment(pack, false, null);
 				StringBuilder buf= new StringBuilder();
-				buf.append("package "); buf.append(pack); buf.append(";\n");
-				buf.append("public class "); buf.append(name); buf.append(" {\n");
+				buf.append("package ").append(pack).append(";\n");
+				buf.append("public class ").append(name).append(" {\n");
 				buf.append("}\n");
 				pack2.createCompilationUnit(name + ".java", buf.toString(), false, null);
 			}
@@ -1823,15 +1821,14 @@
 		int threshold= 99;
 
 		IPackageFragmentRoot sourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
-		for (int i= 0; i < types.length; i++) {
-			String pack= Signature.getQualifier(types[i]);
+		for (String type : types) {
+			String pack= Signature.getQualifier(type);
 			if (!pack.startsWith("java.")) {
-				String name= Signature.getSimpleName(types[i]);
-
+				String name= Signature.getSimpleName(type);
 				IPackageFragment pack2= sourceFolder.createPackageFragment(pack, false, null);
 				StringBuilder buf= new StringBuilder();
-				buf.append("package "); buf.append(pack); buf.append(";\n");
-				buf.append("public class "); buf.append(name); buf.append(" {\n");
+				buf.append("package ").append(pack).append(";\n");
+				buf.append("public class ").append(name).append(" {\n");
 				buf.append("}\n");
 				pack2.createCompilationUnit(name + ".java", buf.toString(), false, null);
 			}
@@ -3524,8 +3521,8 @@
 			scope.remove(PreferenceConstants.ORGIMPORTS_ONDEMANDTHRESHOLD);
 		} else {
 			StringBuilder buf= new StringBuilder();
-			for (int i= 0; i < order.length; i++) {
-				buf.append(order[i]);
+			for (String o : order) {
+				buf.append(o);
 				buf.append(';');
 			}
 			scope.put(PreferenceConstants.ORGIMPORTS_IMPORTORDER, buf.toString());
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/MethodOverrideTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/MethodOverrideTest.java
index 498a7e5..67f23ed 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/MethodOverrideTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/MethodOverrideTest.java
@@ -448,8 +448,7 @@
 		CompilationUnit root= (CompilationUnit) parser.createAST(null);
 		IProblem[] problems= root.getProblems();
 		boolean hasProblems= false;
-		for (int i= 0; i < problems.length; i++) {
-			IProblem prob= problems[i];
+		for (IProblem prob : problems) {
 			if (prob.isWarning() || prob.isInfo()) {
 				continue;
 			}
@@ -468,8 +467,8 @@
 		if (hasProblems) {
 			StringBuilder buf= new StringBuilder();
 			buf.append(cu.getElementName() + " has compilation problems: \n");
-			for (int i= 0; i < problems.length; i++) {
-				buf.append(problems[i].getMessage()).append('\n');
+			for (IProblem prob : problems) {
+				buf.append(prob.getMessage()).append('\n');
 			}
 			assertTrue(buf.toString(), false);
 		}
@@ -484,9 +483,7 @@
 			int start= node.getStartPosition();
 			int end= start + node.getLength();
 
-			IProblem[] problems= root.getProblems();
-			for (int i= 0; i < problems.length; i++) {
-				IProblem prob= problems[i];
+			for (IProblem prob : root.getProblems()) {
 				if (prob.getID() == IProblem.MethodMustOverride) {
 					int pos= prob.getSourceStart();
 					if (start <= pos && pos < end) {
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/PartialASTTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/PartialASTTest.java
index ff252a6..ba2eb22 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/PartialASTTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/PartialASTTest.java
@@ -164,9 +164,7 @@
 				assertTrue(interfaces.get(j).resolveBinding() != null);
 			}
 
-			MethodDeclaration[] declarations= decl.getMethods();
-			for (int k= 0; k < declarations.length; k++) {
-				MethodDeclaration meth= declarations[k];
+			for (MethodDeclaration meth : decl.getMethods()) {
 				assertTrue(meth.resolveBinding() != null);
 				List<SingleVariableDeclaration> params= meth.parameters();
 				for (int n= 0; n < params.size(); n++) {
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/ScopeAnalyzerTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/ScopeAnalyzerTest.java
index 8e43b89..d90dcc5 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/ScopeAnalyzerTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/ScopeAnalyzerTest.java
@@ -901,12 +901,10 @@
 			int offset= buf.toString().indexOf(str);
 
 			int flags= ScopeAnalyzer.METHODS;
-			IBinding[] res= new ScopeAnalyzer(astRoot).getDeclarationsInScope(offset, flags);
-			for (int i= 0; i < res.length; i++) {
-				if ("getDefaultValue".equals(res[i].getName())) {
+			for (IBinding binding : new ScopeAnalyzer(astRoot).getDeclarationsInScope(offset, flags)) {
+				if ("getDefaultValue".equals(binding.getName())) {
 					return;
 				}
-
 			}
 			assertFalse("getDefaultValue not found", true);
 		}
@@ -925,8 +923,8 @@
 		IProblem[] problems= astRoot.getProblems();
 		if (problems.length > 0) {
 			StringBuilder buf= new StringBuilder();
-			for (int i= 0; i < problems.length; i++) {
-				buf.append(problems[i].getMessage()).append('\n');
+			for (IProblem problem : problems) {
+				buf.append(problem.getMessage()).append('\n');
 			}
 			assertTrue(buf.toString(), false);
 		}
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/TemplateStoreTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/TemplateStoreTest.java
index ff65f75..31ccae4 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/TemplateStoreTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/TemplateStoreTest.java
@@ -79,9 +79,9 @@
 	};
 
 	private TemplatePersistenceData find(String id, TemplatePersistenceData[] templateData) {
-		for (int i= 0; i < templateData.length; i++) {
-			if (templateData[i].getId().equals(id)) {
-				return templateData[i];
+		for (TemplatePersistenceData t : templateData) {
+			if (t.getId().equals(id)) {
+				return t;
 			}
 		}
 		return null;
@@ -92,13 +92,12 @@
 		store.load();
 		TemplatePersistenceData[] allTemplateDatas= store.getTemplateData();
 		assertEquals(ALL_CODE_TEMPLATES.length, allTemplateDatas.length);
-		for (int i= 0; i < ALL_CODE_TEMPLATES.length; i++) {
+		for (String t : ALL_CODE_TEMPLATES) {
 			// get it from the array
-			TemplatePersistenceData fromArray=  find(ALL_CODE_TEMPLATES[i], allTemplateDatas);
+			TemplatePersistenceData fromArray= find(t, allTemplateDatas);
 			assertNotNull(fromArray);
-
 			// get it from the store by id
-			Template fromStore=  store.findTemplateById(ALL_CODE_TEMPLATES[i]);
+			Template fromStore= store.findTemplateById(t);
 			assertNotNull(fromStore);
 			assertEquals(fromArray.getTemplate().getPattern(), fromStore.getPattern());
 		}
@@ -129,17 +128,16 @@
 
 			TemplatePersistenceData[] allTemplateDatas= projectStore.getTemplateData();
 			assertEquals(ALL_CODE_TEMPLATES.length, allTemplateDatas.length);
-			for (int i= 0; i < ALL_CODE_TEMPLATES.length; i++) {
+			for (String t : ALL_CODE_TEMPLATES) {
 				// get it from the array
-				TemplatePersistenceData fromArray=  find(ALL_CODE_TEMPLATES[i], allTemplateDatas);
+				TemplatePersistenceData fromArray= find(t, allTemplateDatas);
 				assertNotNull(fromArray);
 				// get it from the store by id
-				Template fromStore=  projectStore.findTemplateById(ALL_CODE_TEMPLATES[i]);
+				Template fromStore= projectStore.findTemplateById(t);
 				assertNotNull(fromStore);
 				assertEquals(fromArray.getTemplate().getPattern(), fromStore.getPattern());
-
 				// equal to instance
-				Template fromInstance=  instanceStore.findTemplateById(ALL_CODE_TEMPLATES[i]);
+				Template fromInstance= instanceStore.findTemplateById(t);
 				assertNotNull(fromInstance);
 				assertEquals(fromInstance.getPattern(), fromStore.getPattern());
 			}
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/TypeRulesTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/TypeRulesTest.java
index f29524d..1665e3a 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/TypeRulesTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/TypeRulesTest.java
@@ -172,12 +172,9 @@
 		VariableDeclarationFragment[] targets= createVariables();
 
 		StringBuilder errors= new StringBuilder();
-		for (int k= 0; k < targets.length; k++) {
-			for (int n= 0; n < targets.length; n++) {
-				VariableDeclarationFragment f1= targets[k];
-				VariableDeclarationFragment f2= targets[n];
+		for (VariableDeclarationFragment f1 : targets) {
+			for (VariableDeclarationFragment f2 : targets) {
 				String line= f2.getName().getIdentifier() + "= " + f1.getName().getIdentifier();
-
 				StringBuilder buf= new StringBuilder();
 				buf.append("package test1;\n");
 				buf.append("public class F<T, U extends Number> extends E<T, U> {\n");
@@ -213,10 +210,8 @@
 		VariableDeclarationFragment[] targets= createVariables();
 
 		StringBuilder errors= new StringBuilder();
-		for (int k= 0; k < targets.length; k++) {
-			for (int n= 0; n < targets.length; n++) {
-				VariableDeclarationFragment f1= targets[k];
-				VariableDeclarationFragment f2= targets[n];
+		for (VariableDeclarationFragment f1 : targets) {
+			for (VariableDeclarationFragment f2 : targets) {
 				String line= f2.getName().getIdentifier() + "= " + f1.getName().getIdentifier();
 
 				StringBuilder buf= new StringBuilder();
@@ -254,11 +249,8 @@
 	public void testIsCastCompatible() throws Exception {
 		StringBuilder errors= new StringBuilder();
 		VariableDeclarationFragment[] targets= createVariables();
-		for (int k= 0; k < targets.length; k++) {
-			for (int n= 0; n < targets.length; n++) {
-				VariableDeclarationFragment f1= targets[k];
-				VariableDeclarationFragment f2= targets[n];
-
+		for (VariableDeclarationFragment f1 : targets) {
+			for (VariableDeclarationFragment f2 : targets) {
 				String castType= f2.resolveBinding().getType().getQualifiedName();
 				String line= castType + " x= (" + castType + ") " + f1.getName().getIdentifier();
 
@@ -297,11 +289,8 @@
 	public void testCanCast() throws Exception {
 		StringBuilder errors= new StringBuilder();
 		VariableDeclarationFragment[] targets= createVariables();
-		for (int k= 0; k < targets.length; k++) {
-			for (int n= 0; n < targets.length; n++) {
-				VariableDeclarationFragment f1= targets[k];
-				VariableDeclarationFragment f2= targets[n];
-
+		for (VariableDeclarationFragment f1 : targets) {
+			for (VariableDeclarationFragment f2 : targets) {
 				String castType= f2.resolveBinding().getType().getQualifiedName();
 				String line= castType + " x= (" + castType + ") " + f1.getName().getIdentifier();
 
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/source/AddUnimplementedConstructorsTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/source/AddUnimplementedConstructorsTest.java
index d9cd319..dfeeea7 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/source/AddUnimplementedConstructorsTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/source/AddUnimplementedConstructorsTest.java
@@ -141,8 +141,8 @@
 	}
 
 	private boolean nameContained(String methName, IJavaElement[] methods) {
-		for (int i= 0; i < methods.length; i++) {
-			if (methods[i].getElementName().equals(methName)) {
+		for (IJavaElement method : methods) {
+			if (method.getElementName().equals(methName)) {
 				return true;
 			}
 		}
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/source/AddUnimplementedMethodsTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/source/AddUnimplementedMethodsTest.java
index 699733c..3a43183 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/source/AddUnimplementedMethodsTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/source/AddUnimplementedMethodsTest.java
@@ -484,12 +484,12 @@
 			StringBuilder buf= new StringBuilder();
 			buf.append(nExpected).append(" imports expected, is ").append(nImports).append("\n");
 			buf.append("expected:\n");
-			for (int i= 0; i < expected.length; i++) {
-				buf.append(expected[i]).append("\n");
+			for (String e : expected) {
+				buf.append(e).append("\n");
 			}
 			buf.append("actual:\n");
-			for (int i= 0; i < imports.length; i++) {
-				buf.append(imports[i]).append("\n");
+			for (IImportDeclaration i : imports) {
+				buf.append(i).append("\n");
 			}
 			assertTrue(buf.toString(), false);
 		}
@@ -500,8 +500,8 @@
 	}
 
 	private boolean nameContained(String methName, IJavaElement[] methods) {
-		for (int i= 0; i < methods.length; i++) {
-			if (methods[i].getElementName().equals(methName)) {
+		for (IJavaElement method : methods) {
+			if (method.getElementName().equals(methName)) {
 				return true;
 			}
 		}
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/source/AddUnimplementedMethodsTest18.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/source/AddUnimplementedMethodsTest18.java
index 5d787d8..b48f048 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/source/AddUnimplementedMethodsTest18.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/source/AddUnimplementedMethodsTest18.java
@@ -119,8 +119,8 @@
 	}
 
 	private boolean nameContained(String methName, IJavaElement[] methods) {
-		for (int i= 0; i < methods.length; i++) {
-			if (methods[i].getElementName().equals(methName)) {
+		for (IJavaElement method : methods) {
+			if (method.getElementName().equals(methName)) {
 				return true;
 			}
 		}
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/source/GenerateToStringTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/source/GenerateToStringTest.java
index 12f1b3c..54513fb 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/source/GenerateToStringTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/source/GenerateToStringTest.java
@@ -119,10 +119,8 @@
 		fSettings2.is60orHigher= is60orHigher;
 		IJavaProject jp= fRoot.getJavaProject();
 		if (is60orHigher || ! is50orHigher) {
-			IClasspathEntry[] cp= jp.getRawClasspath();
 			ArrayList<IClasspathEntry> newCP= new ArrayList<>();
-			for (int i= 0; i < cp.length; i++) {
-				IClasspathEntry cpe= cp[i];
+			for (IClasspathEntry cpe : jp.getRawClasspath()) {
 				if (cpe.getEntryKind() != IClasspathEntry.CPE_LIBRARY) {
 					newCP.add(cpe);
 				}
@@ -189,9 +187,7 @@
 	private void compareSourceAssertCompilation(String expected, ICompilationUnit cu, CompilationUnit oldCUNode) throws Exception {
 		compareSource(expected, cu.getSource());
 		CompilationUnit newCUNode= getCUNode(cu);
-		IProblem[] problems= RefactoringAnalyzeUtil.getIntroducedCompileProblems(newCUNode, oldCUNode);
-		for (int i= 0; i < problems.length; i++) {
-			IProblem problem= problems[i];
+		for (IProblem problem : RefactoringAnalyzeUtil.getIntroducedCompileProblems(newCUNode, oldCUNode)) {
 			assertFalse(problem.toString(), problem.isError());
 		}
 	}
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/dialogs/DialogsTest2.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/dialogs/DialogsTest2.java
index d9875a2..871f3ae 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/dialogs/DialogsTest2.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/dialogs/DialogsTest2.java
@@ -83,9 +83,8 @@
 		DialogCheck.assertDialog(dialog);
 
 		System.out.println("Result:");
-		Object[] checkedElements= dialog.getResult();
-		for (int i= 0; i < checkedElements.length; i++) {
-			System.out.println(labelProvider.getText(checkedElements[i]));
+		for (Object checkedElement : dialog.getResult()) {
+			System.out.println(labelProvider.getText(checkedElement));
 		}
 
 
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/jarexport/FatJarExportTests.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/jarexport/FatJarExportTests.java
index 6428f2d..1c837bc 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/jarexport/FatJarExportTests.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/jarexport/FatJarExportTests.java
@@ -202,17 +202,16 @@
 		// set compression
 		data.setCompress(compressJar);
 
-		//create archive
-		ZipFile generatedArchive= createArchive(data);
-
 		//assert archive content as expected
-		assertNotNull(generatedArchive);
-		assertNotNull(generatedArchive.getEntry("org/eclipse/jdt/ui/test/Main.class")); //$NON-NLS-1$
-		assertNotNull(generatedArchive.getEntry("mylib/Foo.class")); //$NON-NLS-1$
-		assertNotNull(generatedArchive.getEntry("mylib/Foo$FooInner.class")); //$NON-NLS-1$
-		assertNotNull(generatedArchive.getEntry("mylib/Foo$FooInner$FooInnerInner.class")); //$NON-NLS-1$
-
-		generatedArchive.close();
+		try ( //create archive
+			ZipFile generatedArchive = createArchive(data)) {
+			//assert archive content as expected
+			assertNotNull(generatedArchive);
+			assertNotNull(generatedArchive.getEntry("org/eclipse/jdt/ui/test/Main.class")); //$NON-NLS-1$
+			assertNotNull(generatedArchive.getEntry("mylib/Foo.class")); //$NON-NLS-1$
+			assertNotNull(generatedArchive.getEntry("mylib/Foo$FooInner.class")); //$NON-NLS-1$
+			assertNotNull(generatedArchive.getEntry("mylib/Foo$FooInner$FooInnerInner.class")); //$NON-NLS-1$
+		}
 
 		MultiStatus status= new MultiStatus(JavaUI.ID_PLUGIN, 0, "", null); //$NON-NLS-1$
 
@@ -233,27 +232,26 @@
 		// set compression
 		data.setCompress(compressJar);
 
-		//create archive
-		ZipFile generatedArchive= createArchive(data);
-
 		//assert archive content as expected
-		assertNotNull(generatedArchive);
-		assertNotNull(generatedArchive.getEntry("org/eclipse/jdt/ui/test/Main.class")); //$NON-NLS-1$
-		// get loader entry
-		ZipEntry loaderClassEntry= generatedArchive.getEntry("org/eclipse/jdt/internal/jarinjarloader/JarRsrcLoader.class"); //$NON-NLS-1$
-		assertNotNull(loaderClassEntry);
-		// check version of class file JarRsrcLoader (jdk 1.6 = version 50.0)
-		InputStream in = generatedArchive.getInputStream(loaderClassEntry);
-		int magic = 0;
-		for (int i= 0; i < 4; i++)
-			magic = (magic << 8) + in.read();
-		int minorVersion = ((in.read() << 8) + in.read());
-		int majorVersion = ((in.read() << 8) + in.read());
-		in.close();
-		assertEquals("loader is a class file", 0xCAFEBABE, magic); //$NON-NLS-1$
-		assertEquals("loader compiled with JDK 1.6", "50.0", majorVersion + "." + minorVersion); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-
-		generatedArchive.close();
+		try ( //create archive
+			ZipFile generatedArchive = createArchive(data)) {
+			//assert archive content as expected
+			assertNotNull(generatedArchive);
+			assertNotNull(generatedArchive.getEntry("org/eclipse/jdt/ui/test/Main.class")); //$NON-NLS-1$
+			// get loader entry
+			ZipEntry loaderClassEntry= generatedArchive.getEntry("org/eclipse/jdt/internal/jarinjarloader/JarRsrcLoader.class"); //$NON-NLS-1$
+			assertNotNull(loaderClassEntry);
+			// check version of class file JarRsrcLoader (jdk 1.6 = version 50.0)
+			InputStream in = generatedArchive.getInputStream(loaderClassEntry);
+			int magic = 0;
+			for (int i= 0; i < 4; i++)
+				magic = (magic << 8) + in.read();
+			int minorVersion = ((in.read() << 8) + in.read());
+			int majorVersion = ((in.read() << 8) + in.read());
+			in.close();
+			assertEquals("loader is a class file", 0xCAFEBABE, magic); //$NON-NLS-1$
+			assertEquals("loader compiled with JDK 1.6", "50.0", majorVersion + "." + minorVersion); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		}
 
 		MultiStatus status= new MultiStatus(JavaUI.ID_PLUGIN, 0, "", null); //$NON-NLS-1$
 
@@ -278,20 +276,19 @@
 		// set compression
 		data.setCompress(compressJar);
 
-		//create archive
-		ZipFile generatedArchive= createArchive(data);
-
 		//assert archive content as expected
-		assertNotNull(generatedArchive);
-		assertNotNull(generatedArchive.getEntry("org/eclipse/jdt/ui/test/Main.class")); //$NON-NLS-1$
+		try ( //create archive
+			ZipFile generatedArchive = createArchive(data)) {
+			//assert archive content as expected
+			assertNotNull(generatedArchive);
+			assertNotNull(generatedArchive.getEntry("org/eclipse/jdt/ui/test/Main.class")); //$NON-NLS-1$
 
-		// check for libraries sub-folder
-		File jarFile= new File(generatedArchive.getName());
-		String subFolderName= jarFile.getName().replaceFirst("^(.*)[.]jar$", "$1_lib"); //$NON-NLS-1$//$NON-NLS-2$
-		File subFolderDir= new File(jarFile.getParentFile(), subFolderName);
-		assertTrue("actual: '" + subFolderDir.toString() + "'", subFolderDir.isDirectory()); //$NON-NLS-1$//$NON-NLS-2$
-
-		generatedArchive.close();
+			// check for libraries sub-folder
+			File jarFile= new File(generatedArchive.getName());
+			String subFolderName= jarFile.getName().replaceFirst("^(.*)[.]jar$", "$1_lib"); //$NON-NLS-1$//$NON-NLS-2$
+			File subFolderDir= new File(jarFile.getParentFile(), subFolderName);
+			assertTrue("actual: '" + subFolderDir.toString() + "'", subFolderDir.isDirectory()); //$NON-NLS-1$//$NON-NLS-2$
+		}
 
 		MultiStatus status= new MultiStatus(JavaUI.ID_PLUGIN, 0, "", null); //$NON-NLS-1$
 
@@ -305,9 +302,7 @@
 	private static void buildProject() throws CoreException {
 		ResourcesPlugin.getWorkspace().build(IncrementalProjectBuilder.FULL_BUILD, null);
 
-		IMarker[] markers= ResourcesPlugin.getWorkspace().getRoot().findMarkers(null, true, IResource.DEPTH_INFINITE);
-		for (int i= 0; i < markers.length; i++) {
-			IMarker marker= markers[i];
+		for (IMarker marker : ResourcesPlugin.getWorkspace().getRoot().findMarkers(null, true, IResource.DEPTH_INFINITE)) {
 			if (marker.getAttribute(IMarker.SEVERITY, IMarker.SEVERITY_INFO) == IMarker.SEVERITY_ERROR) {
 				assertTrue((String) marker.getAttribute(IMarker.MESSAGE), false);
 			}
@@ -342,9 +337,8 @@
 	private static String getProblems(MultiStatus status) {
 		StringBuilder result= new StringBuilder();
 
-		IStatus[] children= status.getChildren();
-		for (int i= 0; i < children.length; i++) {
-			result.append(children[i].getMessage()).append("\n"); //$NON-NLS-1$
+		for (IStatus child : status.getChildren()) {
+			result.append(child.getMessage()).append("\n"); //$NON-NLS-1$
 		}
 
 		return result.toString();
@@ -502,8 +496,8 @@
 		for (int i= 0; i < xmlFilesets.getLength(); i++) {
 			String dir= ((Element)xmlFilesets.item(i)).getAttribute("dir"); //$NON-NLS-1$
 			boolean found= false;
-			for (int j= 0; j < filesets.length; j++) {
-				if (dir.endsWith(filesets[j])) {
+			for (String fileset : filesets) {
+				if (dir.endsWith(fileset)) {
 					found= true;
 					break;
 				}
@@ -524,8 +518,8 @@
 			String absLibPath= ((Element)xmlCopies.item(i)).getAttribute("file"); //$NON-NLS-1$
 			String libName= new File(absLibPath).getName();
 			boolean found= false;
-			for (int j= 0; j < zipfilesets.length; j++) {
-				if (libName.equals(zipfilesets[j])) {
+			for (String zipfileset : zipfilesets) {
+				if (libName.equals(zipfileset)) {
 					found= true;
 					break;
 				}
@@ -577,8 +571,8 @@
 		for (int i= 0; i < xmlFilesets.getLength(); i++) {
 			String dir= ((Element)xmlFilesets.item(i)).getAttribute("dir"); //$NON-NLS-1$
 			boolean found= false;
-			for (int j= 0; j < filesets.length; j++) {
-				if (dir.endsWith(filesets[j])) {
+			for (String fileset : filesets) {
+				if (dir.endsWith(fileset)) {
 					found= true;
 					break;
 				}
@@ -593,8 +587,8 @@
 				libName= ((Element)xmlZipfilesets.item(i)).getAttribute("src"); //$NON-NLS-1$
 				found= libName.equals(FatJarRsrcUrlBuilder.JAR_RSRC_LOADER_ZIP); //$NON-NLS-1$
 			}
-			for (int j= 0; j < zipfilesets.length; j++) {
-				if (libName.equals(zipfilesets[j])) {
+			for (String zipfileset : zipfilesets) {
+				if (libName.equals(zipfileset)) {
 					found= true;
 					break;
 				}
@@ -637,8 +631,8 @@
 		for (int i= 0; i < xmlFilesets.getLength(); i++) {
 			String dir= ((Element)xmlFilesets.item(i)).getAttribute("dir"); //$NON-NLS-1$
 			boolean found= false;
-			for (int j= 0; j < filesets.length; j++) {
-				if (dir.endsWith(filesets[j])) {
+			for (String fileset : filesets) {
+				if (dir.endsWith(fileset)) {
 					found= true;
 					break;
 				}
@@ -651,8 +645,8 @@
 			assertEquals("META-INF/*.SF", excludes); //$NON-NLS-1$
 			String src= ((Element)xmlZipfilesets.item(i)).getAttribute("src"); //$NON-NLS-1$
 			boolean found= false;
-			for (int j= 0; j < zipfilesets.length; j++) {
-				if (src.endsWith(zipfilesets[j])) {
+			for (String zipfileset : zipfilesets) {
+				if (src.endsWith(zipfileset)) {
 					found= true;
 					break;
 				}
@@ -669,18 +663,13 @@
 	 * @throws Exception if anything went wrong
 	 */
 	private static Element readXML(IPath xmlFilePath) throws Exception {
-		InputStream in = null;
-		try {
-			in = new FileInputStream(xmlFilePath.toFile());
+		try (InputStream in = new FileInputStream(xmlFilePath.toFile())) {
 			DocumentBuilder parser= DocumentBuilderFactory.newInstance().newDocumentBuilder();
 			parser.setErrorHandler(new DefaultHandler());
 			Element root= parser.parse(new InputSource(in)).getDocumentElement();
 			in.close();
 
 			return root;
-		} finally {
-			if (in != null)
-				in.close();
 		}
 	}
 
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/jarexport/PlainJarExportTests.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/jarexport/PlainJarExportTests.java
index 52b1d73..8714248 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/jarexport/PlainJarExportTests.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/jarexport/PlainJarExportTests.java
@@ -109,9 +109,10 @@
 		data.setElements(new Object[] { fCU });
 		data.setExportClassFiles(true);
 		
-		ZipFile jar= createArchive(data);
-		ArrayList<String> entries= getSortedEntries(jar);
-		jar.close();
+		ArrayList<String> entries;
+		try (ZipFile jar= createArchive(data)) {
+			entries= getSortedEntries(jar);
+		}
 		List<String> expected= Arrays.asList(new String[] {
 				"META-INF/MANIFEST.MF\n",
 				"org/eclipse/jdt/ui/test/Main$1.class\n",
@@ -127,9 +128,10 @@
 		data.setElements(new Object[] { fCU.getResource() });
 		data.setExportClassFiles(true);
 		
-		ZipFile jar= createArchive(data);
-		ArrayList<String> entries= getSortedEntries(jar);
-		jar.close();
+		ArrayList<String> entries;
+		try (ZipFile jar= createArchive(data)) {
+			entries= getSortedEntries(jar);
+		}
 		List<String> expected= Arrays.asList(new String[] { "META-INF/MANIFEST.MF\n", "org/eclipse/jdt/ui/test/Main$1.class\n",
 				"org/eclipse/jdt/ui/test/Main$MainInner.class\n",
 				"org/eclipse/jdt/ui/test/Main.class\n", });
@@ -149,9 +151,10 @@
 		data.setElements(new Object[] { fCU.getResource(), externalRoot });
 		data.setExportClassFiles(true);
 
-		ZipFile jar= createArchive(data);
-		ArrayList<String> entries= getSortedEntries(jar);
-		jar.close();
+		ArrayList<String> entries;
+		try (ZipFile jar= createArchive(data)) {
+			entries= getSortedEntries(jar);
+		}
 		List<String> expected= Arrays.asList(new String[] {
 				"META-INF/MANIFEST.MF\n",
 				"org/eclipse/jdt/ui/test/Main$1.class\n",
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/packageview/ContentProviderTests1.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/packageview/ContentProviderTests1.java
index c4ac0e8..50fa4d3 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/packageview/ContentProviderTests1.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/packageview/ContentProviderTests1.java
@@ -342,9 +342,7 @@
 
 		fJProject1.setRawClasspath(new IClasspathEntry[0], null);
 
-		Object[] resource= fJProject2.getNonJavaResources();
-		for (int i = 0; i < resource.length; i++) {
-			Object object = resource[i];
+		for (Object object : fJProject2.getNonJavaResources()) {
 			if(object instanceof IFile){
 				IFile file = (IFile) object;
 				if(".classpath".equals(file.getName()))//$NON-NLS-1$
@@ -453,8 +451,7 @@
 	private boolean compareArrays(Object[] children, Object[] expectedChildren) {
 		if(children.length!=expectedChildren.length)
 			return false;
-		for (int i= 0; i < children.length; i++) {
-			Object child= children[i];
+		for (Object child : children) {
 			if (child instanceof IJavaElement) {
 				IJavaElement el= (IJavaElement) child;
 				if(!contains(el, expectedChildren))
@@ -475,8 +472,7 @@
 	 * @return boolean
 	 */
 	private boolean contains(IResource res, Object[] expectedChildren) {
-		for (int i= 0; i < expectedChildren.length; i++) {
-			Object object= expectedChildren[i];
+		for (Object object : expectedChildren) {
 			if (object instanceof IResource) {
 				IResource expres= (IResource) object;
 				if(expres.equals(res))
@@ -493,8 +489,7 @@
 	 * @return boolean
 	 */
 	private boolean contains(IJavaElement fragment, Object[] expectedChildren) {
-		for (int i= 0; i < expectedChildren.length; i++) {
-			Object object= expectedChildren[i];
+		for (Object object : expectedChildren) {
 			if (object instanceof IJavaElement) {
 				IJavaElement expfrag= (IJavaElement) object;
 				if(expfrag.equals(fragment))
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/packageview/ContentProviderTests2.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/packageview/ContentProviderTests2.java
index f852d86..b55a77b 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/packageview/ContentProviderTests2.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/packageview/ContentProviderTests2.java
@@ -205,9 +205,7 @@
 		fJProject3= JavaProjectHelper.createJavaProject("TestProject3", "bin"); //$NON-NLS-1$ //$NON-NLS-2$
 		assertNotNull("project3 null", fJProject3); //$NON-NLS-1$
 
-		Object[] resource= fJProject3.getNonJavaResources();
-		for (int i = 0; i < resource.length; i++) {
-			Object object = resource[i];
+		for (Object object : fJProject3.getNonJavaResources()) {
 			if(object instanceof IFile){
 				IFile file = (IFile) object;
 				if(".classpath".equals(file.getName())) //$NON-NLS-1$
@@ -310,8 +308,7 @@
 	private boolean compareArrays(Object[] children, Object[] expectedChildren) {
 		if(children.length!=expectedChildren.length)
 			return false;
-		for (int i= 0; i < children.length; i++) {
-			Object child= children[i];
+		for (Object child : children) {
 			if (child instanceof IJavaElement) {
 				IJavaElement el= (IJavaElement) child;
 				if(!contains(el, expectedChildren))
@@ -332,8 +329,7 @@
 	 * @return boolean
 	 */
 	private boolean contains(IResource res, Object[] expectedChildren) {
-		for (int i= 0; i < expectedChildren.length; i++) {
-			Object object= expectedChildren[i];
+		for (Object object : expectedChildren) {
 			if (object instanceof IResource) {
 				IResource expres= (IResource) object;
 				if(expres.equals(res))
@@ -350,8 +346,7 @@
 	 * @return boolean
 	 */
 	private boolean contains(IJavaElement fragment, Object[] expectedChildren) {
-		for (int i= 0; i < expectedChildren.length; i++) {
-			Object object= expectedChildren[i];
+		for (Object object : expectedChildren) {
 			if (object instanceof IJavaElement) {
 				IJavaElement expfrag= (IJavaElement) object;
 				if(expfrag.equals(fragment))
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/packageview/ContentProviderTests3.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/packageview/ContentProviderTests3.java
index c837c55..06e1aec 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/packageview/ContentProviderTests3.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/packageview/ContentProviderTests3.java
@@ -300,9 +300,7 @@
 		assertNotNull("project1 null", fJProject1);//$NON-NLS-1$
 		assertNotNull("project2 null", fJProject2);//$NON-NLS-1$
 
-		Object[] resource= fJProject2.getNonJavaResources();
-		for (int i = 0; i < resource.length; i++) {
-			Object object = resource[i];
+		for (Object object : fJProject2.getNonJavaResources()) {
 			if(object instanceof IFile){
 				IFile file = (IFile) object;
 				if(".classpath".equals(file.getName()))//$NON-NLS-1$
@@ -429,8 +427,7 @@
 	private boolean compareArrays(Object[] children, Object[] expectedChildren) {
 		if(children.length!=expectedChildren.length)
 			return false;
-		for (int i= 0; i < children.length; i++) {
-			Object child= children[i];
+		for (Object child : children) {
 			if (child instanceof IJavaElement) {
 				IJavaElement el= (IJavaElement) child;
 				if(!contains(el, expectedChildren))
@@ -451,8 +448,7 @@
 	 * @return boolean
 	 */
 	private boolean contains(IResource res, Object[] expectedChildren) {
-		for (int i= 0; i < expectedChildren.length; i++) {
-			Object object= expectedChildren[i];
+		for (Object object : expectedChildren) {
 			if (object instanceof IResource) {
 				IResource expres= (IResource) object;
 				if(expres.equals(res))
@@ -469,8 +465,7 @@
 	 * @return boolean
 	 */
 	private boolean contains(IJavaElement fragment, Object[] expectedChildren) {
-		for (int i= 0; i < expectedChildren.length; i++) {
-			Object object= expectedChildren[i];
+		for (Object object : expectedChildren) {
 			if (object instanceof IJavaElement) {
 				IJavaElement expfrag= (IJavaElement) object;
 				if(expfrag.equals(fragment))
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/packageview/ContentProviderTests4.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/packageview/ContentProviderTests4.java
index 689481d..731d54e 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/packageview/ContentProviderTests4.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/packageview/ContentProviderTests4.java
@@ -214,9 +214,7 @@
 		fJProject3 = JavaProjectHelper.createJavaProject("TestProject3", "bin");//$NON-NLS-1$//$NON-NLS-2$
 		assertNotNull("project3 null", fJProject3);//$NON-NLS-1$
 
-		Object[] resource = fJProject3.getNonJavaResources();
-		for (int i = 0; i < resource.length; i++) {
-			Object object = resource[i];
+		for (Object object : fJProject3.getNonJavaResources()) {
 			if (object instanceof IFile) {
 				IFile file = (IFile) object;
 				if (".classpath".equals(file.getName()))//$NON-NLS-1$
@@ -324,8 +322,7 @@
 	private boolean compareArrays(Object[] children, Object[] expectedChildren) {
 		if(children.length!=expectedChildren.length)
 			return false;
-		for (int i= 0; i < children.length; i++) {
-			Object child= children[i];
+		for (Object child : children) {
 			if (child instanceof IJavaElement) {
 				IJavaElement el= (IJavaElement) child;
 				if(!contains(el, expectedChildren))
@@ -346,8 +343,7 @@
 	 * @return boolean
 	 */
 	private boolean contains(IResource res, Object[] expectedChildren) {
-		for (int i= 0; i < expectedChildren.length; i++) {
-			Object object= expectedChildren[i];
+		for (Object object : expectedChildren) {
 			if (object instanceof IResource) {
 				IResource expres= (IResource) object;
 				if(expres.equals(res))
@@ -364,8 +360,7 @@
 	 * @return boolean
 	 */
 	private boolean contains(IJavaElement fragment, Object[] expectedChildren) {
-		for (int i= 0; i < expectedChildren.length; i++) {
-			Object object= expectedChildren[i];
+		for (Object object : expectedChildren) {
 			if (object instanceof IJavaElement) {
 				IJavaElement expfrag= (IJavaElement) object;
 				if(expfrag.equals(fragment))
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/packageview/ContentProviderTests5.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/packageview/ContentProviderTests5.java
index 49381d8..1fdad12 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/packageview/ContentProviderTests5.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/packageview/ContentProviderTests5.java
@@ -96,9 +96,7 @@
 		fJProject= JavaProjectHelper.createJavaProject("TestProject", "bin");
 		assertNotNull(fJProject);
 
-		Object[] resource = fJProject.getNonJavaResources();
-		for (int i = 0; i < resource.length; i++) {
-			Object object = resource[i];
+		for (Object object : fJProject.getNonJavaResources()) {
 			if (object instanceof IFile) {
 				IFile file = (IFile) object;
 				if (".classpath".equals(file.getName()))
@@ -265,8 +263,7 @@
 		assertEquals("array length", expected.length, actual.length);
 		exp: for (int i= 0; i < expected.length; i++) {
 			Object e= expected[i];
-			for (int j= 0; j < actual.length; j++) {
-				Object a= actual[j];
+			for (Object a : actual) {
 				if (e.equals(a))
 					continue exp;
 			}
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/packageview/ContentProviderTests7.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/packageview/ContentProviderTests7.java
index c556b7f..7d6d6ac 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/packageview/ContentProviderTests7.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/packageview/ContentProviderTests7.java
@@ -213,8 +213,7 @@
 	private boolean compareArrays(Object[] children, Object[] expectedChildren) {
 		if(children.length!=expectedChildren.length)
 			return false;
-		for (int i= 0; i < children.length; i++) {
-			Object child= children[i];
+		for (Object child : children) {
 			if (child instanceof IJavaElement) {
 				IJavaElement el= (IJavaElement) child;
 				if(!contains(el, expectedChildren))
@@ -229,8 +228,7 @@
 		return true;
 	}
 	private boolean contains(IResource res, Object[] expectedChildren) {
-		for (int i= 0; i < expectedChildren.length; i++) {
-			Object object= expectedChildren[i];
+		for (Object object : expectedChildren) {
 			if (object instanceof IResource) {
 				IResource expres= (IResource) object;
 				if(expres.equals(res))
@@ -240,8 +238,7 @@
 		return false;
 	}
 	private boolean contains(IJavaElement fragment, Object[] expectedChildren) {
-		for (int i= 0; i < expectedChildren.length; i++) {
-			Object object= expectedChildren[i];
+		for (Object object : expectedChildren) {
 			if (object instanceof IJavaElement) {
 				IJavaElement expfrag= (IJavaElement) object;
 				if(expfrag.equals(fragment))
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/packageview/HierarchicalContentProviderTests.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/packageview/HierarchicalContentProviderTests.java
index f7e2fc6..6c6ee16 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/packageview/HierarchicalContentProviderTests.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/packageview/HierarchicalContentProviderTests.java
@@ -74,11 +74,9 @@
 
 		private static List<String> getExpected(IPackageFragmentRoot root) throws JavaModelException {
 			ArrayList<String> res= new ArrayList<>();
-			IJavaElement[] packages= root.getChildren();
-			for (int i= 0; i < packages.length; i++) {
-				IJavaElement[] files= ((IPackageFragment) packages[i]).getChildren();
-				for (int j= 0; j < files.length; j++) {
-					testAndAdd(files[j], res);
+			for (IJavaElement p : root.getChildren()) {
+				for (IJavaElement file : ((IPackageFragment) p).getChildren()) {
+					testAndAdd(file, res);
 				}
 			}
 			return res;
@@ -177,9 +175,7 @@
 
 
 	private void collectChildren(PackageExplorerContentProvider provider, Object elem, List<String> result) {
-		Object[] children= provider.getChildren(elem);
-		for (int i= 0; i < children.length; i++) {
-			Object curr= children[i];
+		for (Object curr : provider.getChildren(elem)) {
 			testAndAdd(curr, result);
 			if (curr instanceof IPackageFragment) {
 				collectChildren(provider, curr, result);
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/packageview/WorkingSetDropAdapterTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/packageview/WorkingSetDropAdapterTest.java
index 89cb7b5..3522a9d 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/packageview/WorkingSetDropAdapterTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/packageview/WorkingSetDropAdapterTest.java
@@ -164,8 +164,8 @@
 
 	private static IWorkingSet[] createJavaWorkingSets(String[] names) {
 		IWorkingSetManager workingSetManager= PlatformUI.getWorkbench().getWorkingSetManager();
-		for (int i= 0; i < names.length; i++) {
-			IWorkingSet workingSet= workingSetManager.getWorkingSet(names[i]);
+		for (String name : names) {
+			IWorkingSet workingSet= workingSetManager.getWorkingSet(name);
 			if (workingSet != null)
 				workingSetManager.removeWorkingSet(workingSet);
 		}
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/preferences/OptionsConfigurationBlockTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/preferences/OptionsConfigurationBlockTest.java
index 4cefd16..9ab5420 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/preferences/OptionsConfigurationBlockTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/preferences/OptionsConfigurationBlockTest.java
@@ -50,16 +50,14 @@
 	 * @throws Exception should not
 	 */
 	public void testKeysForOptions() throws Exception {
-		Field[] coreFields= JavaCore.class.getDeclaredFields();
 		HashMap<String, String> coreFieldLookup= new HashMap<>();
-		for (int i= 0; i < coreFields.length; i++) {
-			Field field= coreFields[i];
+		for (Field field : JavaCore.class.getDeclaredFields()) {
 			String name= field.getName();
 			if (name.startsWith("COMPILER_")
-					|| name.startsWith("CORE_")
-					|| name.startsWith("CODEASSIST_")
-					|| name.startsWith("TIMEOUT_")
-					) {
+				|| name.startsWith("CORE_")
+				|| name.startsWith("CODEASSIST_")
+				|| name.startsWith("TIMEOUT_")
+				) {
 				field.setAccessible(true);
 				String value= (String) field.get(null);
 				if (value.startsWith(JavaCore.PLUGIN_ID))
@@ -132,9 +130,7 @@
 		Key[] keys= (Key[]) (keysMethod.getParameterTypes().length > 0 ? keysMethod.invoke(null, Boolean.FALSE) : keysMethod.invoke(null));
 		HashSet<Key> keySet= new HashSet<>(Arrays.asList(keys));
 		
-		Field[] prefFields= configurationBlock.getDeclaredFields();
-		for (int i= 0; i < prefFields.length; i++) {
-			Field field= prefFields[i];
+		for (Field field : configurationBlock.getDeclaredFields()) {
 			field.setAccessible(true);
 			if (field.getType() == Key.class) {
 				Key key= (Key)field.get(null);
@@ -142,8 +138,8 @@
 				if (JavaCore.PLUGIN_ID.equals(key.getQualifier())) {
 					Object fieldName= coreFieldLookup.remove(key.getName());
 					assertTrue(
-							"No core constant for key " + key.getName() + " in class " + configurationBlock.getName(),
-							fieldName != null);
+						"No core constant for key " + key.getName() + " in class " + configurationBlock.getName(),
+						fieldName != null);
 					assertTrue(configurationBlock.getName() + "#getKeys() is missing key '" + key.getName() + "'", keyWasInKeySet);
 				}
 			}
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AssistQuickFixTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AssistQuickFixTest.java
index 19a6752..3372e95 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AssistQuickFixTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AssistQuickFixTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2019 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
@@ -1162,7 +1162,52 @@
 			String expected2= buf.toString();
 	
 			assertExpectedExistInProposals(proposals, new String[] { expected1, expected2 });
-		}
+	}
+
+	public void testAssignToLocal18() throws Exception { // https://bugs.eclipse.org/bugs/show_bug.cgi?id=287377
+		IPackageFragment pack1= fSourceFolder.createPackageFragment("p", false, null);
+		StringBuffer buf= new StringBuffer();
+		buf.append("package p;\n");
+		buf.append("\n");
+		buf.append("public class E {\n");
+		buf.append("\n");
+		buf.append("    private E other;\n");
+		buf.append("    boolean b;\n");
+		buf.append("\n");
+		buf.append("    public void foo(boolean newB) {\n");
+		buf.append("        /*1*/other.b = newB;\n");
+		buf.append("        other.other.b = newB;\n");
+		buf.append("        other.other.other.b = newB;\n");
+		buf.append("    }\n");
+		buf.append("}\n");
+
+		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
+
+		String str= "/*1*/other";
+		AssistContext context= getCorrectionContext(cu, buf.toString().indexOf(str) + str.length(), 0);
+		List<IJavaCompletionProposal> proposals= collectAssists(context, false);
+		assertNumberOfProposals(proposals, 3);
+		assertCorrectLabels(proposals);
+
+		buf= new StringBuffer();
+		buf.append("package p;\n");
+		buf.append("\n");
+		buf.append("public class E {\n");
+		buf.append("\n");
+		buf.append("    private E other;\n");
+		buf.append("    boolean b;\n");
+		buf.append("\n");
+		buf.append("    public void foo(boolean newB) {\n");
+		buf.append("        /*1*/E other2 = other;\n");
+		buf.append("        other2.b = newB;\n");
+		buf.append("        other2.other.b = newB;\n");
+		buf.append("        other2.other.other.b = newB;\n");
+		buf.append("    }\n");
+		buf.append("}\n");
+		String expected1= buf.toString();
+
+		assertExpectedExistInProposals(proposals, new String[] { expected1 });
+	}
 
 	public void testAssignParamToField() throws Exception {
 		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
@@ -3314,7 +3359,230 @@
 		
 		assertExpectedExistInProposals(proposals, new String[] { ex1, ex2, ex3, ex4 });
 	}
-	
+
+	public void testJoinDeclaration6() throws Exception {
+		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
+		StringBuilder buf= new StringBuilder();
+		buf.append("package test1;\n");
+		buf.append("public class E {\n");
+		buf.append("    public void foo(int x) {\n");
+		buf.append("        String var;\n");
+		buf.append("        if (x == 1)\n");
+		buf.append("           var = \"abc\";\n");
+		buf.append("        else\n");
+		buf.append("           var = \"\";\n");
+		buf.append("    }\n");
+		buf.append("}\n");
+		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
+
+		String str= "var";
+		AssistContext context= getCorrectionContext(cu, buf.toString().indexOf(str), 0);
+		List<IJavaCompletionProposal> proposals= collectAssists(context, false);
+
+		assertNumberOfProposals(proposals, 2);
+		assertCorrectLabels(proposals);
+
+		buf= new StringBuilder();
+		buf.append("package test1;\n");
+		buf.append("public class E {\n");
+		buf.append("    public void foo(int x) {\n");
+		buf.append("        String var = x == 1 ? \"abc\" : \"\";\n");
+		buf.append("    }\n");
+		buf.append("}\n");
+		String ex1= buf.toString();
+
+		buf= new StringBuilder();
+		buf.append("package test1;\n");
+		buf.append("public class E {\n");
+		buf.append("    private String var;\n");
+		buf.append("\n");
+		buf.append("    public void foo(int x) {\n");
+		buf.append("        if (x == 1)\n");
+		buf.append("           var = \"abc\";\n");
+		buf.append("        else\n");
+		buf.append("           var = \"\";\n");
+		buf.append("    }\n");
+		buf.append("}\n");
+		String ex2= buf.toString();
+
+		assertExpectedExistInProposals(proposals, new String[] { ex1, ex2 });
+	}
+
+	public void testJoinDeclaration7() throws Exception {
+		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
+		StringBuilder buf= new StringBuilder();
+		buf.append("package test1;\n");
+		buf.append("public class E {\n");
+		buf.append("    public void foo(int x) {\n");
+		buf.append("        String var;\n");
+		buf.append("        if (x == 1)\n");
+		buf.append("           var = \"abc\";\n");
+		buf.append("    }\n");
+		buf.append("}\n");
+		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
+
+		String str= "var";
+		AssistContext context= getCorrectionContext(cu, buf.toString().indexOf(str), 0);
+		List<IJavaCompletionProposal> proposals= collectAssists(context, false);
+
+		assertNumberOfProposals(proposals, 1);
+		assertCorrectLabels(proposals);
+
+		buf= new StringBuilder();
+		buf.append("package test1;\n");
+		buf.append("public class E {\n");
+		buf.append("    private String var;\n");
+		buf.append("\n");
+		buf.append("    public void foo(int x) {\n");
+		buf.append("        if (x == 1)\n");
+		buf.append("           var = \"abc\";\n");
+		buf.append("    }\n");
+		buf.append("}\n");
+		String ex1= buf.toString();
+
+		assertExpectedExistInProposals(proposals, new String[] { ex1 });
+	}
+
+	public void testJoinDeclaration8() throws Exception {
+		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
+		StringBuilder buf= new StringBuilder();
+		buf.append("package test1;\n");
+		buf.append("public class E {\n");
+		buf.append("    public void foo(int x) {\n");
+		buf.append("        String var;\n");
+		buf.append("        if (x == 1) {\n");
+		buf.append("           var = \"abc\";\n");
+		buf.append("        } else {\n");
+		buf.append("           var = \"def\";\n");
+		buf.append("        }\n");
+		buf.append("    }\n");
+		buf.append("}\n");
+		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
+
+		String str= "var";
+		AssistContext context= getCorrectionContext(cu, buf.toString().indexOf(str), 0);
+		List<IJavaCompletionProposal> proposals= collectAssists(context, false);
+
+		assertNumberOfProposals(proposals, 2);
+		assertCorrectLabels(proposals);
+
+		buf= new StringBuilder();
+		buf.append("package test1;\n");
+		buf.append("public class E {\n");
+		buf.append("    public void foo(int x) {\n");
+		buf.append("        String var = x == 1 ? \"abc\" : \"def\";\n");
+		buf.append("    }\n");
+		buf.append("}\n");
+		String ex1= buf.toString();
+
+		buf= new StringBuilder();
+		buf.append("package test1;\n");
+		buf.append("public class E {\n");
+		buf.append("    private String var;\n");
+		buf.append("\n");
+		buf.append("    public void foo(int x) {\n");
+		buf.append("        if (x == 1) {\n");
+		buf.append("           var = \"abc\";\n");
+		buf.append("        } else {\n");
+		buf.append("           var = \"def\";\n");
+		buf.append("        }\n");
+		buf.append("    }\n");
+		buf.append("}\n");
+		String ex2= buf.toString();
+
+		assertExpectedExistInProposals(proposals, new String[] { ex1, ex2 });
+	}
+
+	public void testJoinDeclaration9() throws Exception {
+		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
+		StringBuilder buf= new StringBuilder();
+		buf.append("package test1;\n");
+		buf.append("public class E {\n");
+		buf.append("    public void foo(int x) {\n");
+		buf.append("        String var;\n");
+		buf.append("        if (x == 1) {\n");
+		buf.append("           var = \"abc\";\n");
+		buf.append("        } else {\n");
+		buf.append("           var = \"def\";\n");
+		buf.append("           foo(3);\n");
+		buf.append("        }\n");
+		buf.append("    }\n");
+		buf.append("}\n");
+		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
+
+		String str= "var";
+		AssistContext context= getCorrectionContext(cu, buf.toString().indexOf(str), 0);
+		List<IJavaCompletionProposal> proposals= collectAssists(context, false);
+
+		assertNumberOfProposals(proposals, 1);
+		assertCorrectLabels(proposals);
+
+		buf= new StringBuilder();
+		buf.append("package test1;\n");
+		buf.append("public class E {\n");
+		buf.append("    private String var;\n");
+		buf.append("\n");
+		buf.append("    public void foo(int x) {\n");
+		buf.append("        if (x == 1) {\n");
+		buf.append("           var = \"abc\";\n");
+		buf.append("        } else {\n");
+		buf.append("           var = \"def\";\n");
+		buf.append("           foo(3);\n");
+		buf.append("        }\n");
+		buf.append("    }\n");
+		buf.append("}\n");
+		String ex1= buf.toString();
+
+		assertExpectedExistInProposals(proposals, new String[] { ex1 });
+	}
+
+	public void testJoinDeclaration10() throws Exception {
+		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
+		StringBuilder buf= new StringBuilder();
+		buf.append("package test1;\n");
+		buf.append("public class E {\n");
+		buf.append("    public void foo(int x) {\n");
+		buf.append("        String var;\n");
+		buf.append("        switch (x) {\n");
+		buf.append("        case 1:\n");
+		buf.append("           var = \"abc\";\n");
+		buf.append("           break;\n");
+		buf.append("        default:\n");
+		buf.append("           var = \"def\";\n");
+		buf.append("           break;\n");
+		buf.append("        }\n");
+		buf.append("    }\n");
+		buf.append("}\n");
+		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
+
+		String str= "var";
+		AssistContext context= getCorrectionContext(cu, buf.toString().indexOf(str), 0);
+		List<IJavaCompletionProposal> proposals= collectAssists(context, false);
+
+		assertNumberOfProposals(proposals, 1);
+		assertCorrectLabels(proposals);
+
+		buf= new StringBuilder();
+		buf.append("package test1;\n");
+		buf.append("public class E {\n");
+		buf.append("    private String var;\n");
+		buf.append("\n");
+		buf.append("    public void foo(int x) {\n");
+		buf.append("        switch (x) {\n");
+		buf.append("        case 1:\n");
+		buf.append("           var = \"abc\";\n");
+		buf.append("           break;\n");
+		buf.append("        default:\n");
+		buf.append("           var = \"def\";\n");
+		buf.append("           break;\n");
+		buf.append("        }\n");
+		buf.append("    }\n");
+		buf.append("}\n");
+		String ex1= buf.toString();
+
+		assertExpectedExistInProposals(proposals, new String[] { ex1 });
+	}
+
 	private static final Class<?>[] FILTER_EQ= { LinkedNamesAssistProposal.class, RenameRefactoringProposal.class, AssignToVariableAssistProposal.class, NewJUnitTestCaseProposal.class };
 
 	public void testInvertEquals1() throws Exception {
@@ -4599,7 +4867,6 @@
 		}
 
 	public void testCreateInSuperInGeneric() throws Exception {
-
 			IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
 			StringBuffer buf= new StringBuffer();
 			buf.append("package test1;\n");
@@ -4618,6 +4885,12 @@
 			buf.append("import java.io.IOException;\n");
 			buf.append("import java.util.Vector;\n");
 			buf.append("public class E extends A<String> implements IB<String> {\n");
+			buf.append("	/**\n");
+			buf.append("	 * Always return NULL\n");
+			buf.append("	 * @param count\n");
+			buf.append("	 * @return NULL\n");
+			buf.append("	 * @throws IOException\n");
+			buf.append("	 */\n");
 			buf.append("    public Vector<String> foo(int count) throws IOException {\n");
 			buf.append("        return null;\n");
 			buf.append("    }\n");
@@ -4642,6 +4915,12 @@
 			buf.append("\n");
 			buf.append("public interface IB<T> {\n");
 			buf.append("\n");
+			buf.append("    /**\n");
+			buf.append("     * Always return NULL\n");
+			buf.append("     * @param count\n");
+			buf.append("     * @return NULL\n");
+			buf.append("     * @throws IOException\n");
+			buf.append("     */\n");
 			buf.append("    Vector<String> foo(int count) throws IOException;\n");
 			buf.append("}\n");
 			String expected1= buf.toString();
@@ -4657,6 +4936,12 @@
 			buf.append("\n");
 			buf.append("public class A<T> {\n");
 			buf.append("\n");
+			buf.append("    /**\n");
+			buf.append("     * Always return NULL\n");
+			buf.append("     * @param count\n");
+			buf.append("     * @return NULL\n");
+			buf.append("     * @throws IOException\n");
+			buf.append("     */\n");
 			buf.append("    public Vector<String> foo(int count) throws IOException {\n");
 			buf.append("        //TODO\n");
 			buf.append("        return null;\n");
@@ -4665,7 +4950,6 @@
 			String expected2= buf.toString();
 
 			assertEqualStringsIgnoreOrder(new String[] { preview1, preview2 }, new String[] { expected1, expected2 });
-
 		}
 
 	public void testChangeIfStatementToBlock() throws Exception {
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AssistQuickFixTest10.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AssistQuickFixTest10.java
index 1822da7..6fff182 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AssistQuickFixTest10.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AssistQuickFixTest10.java
@@ -454,8 +454,8 @@
 	}
 
 	private static boolean isexpected(Object curr, Class<?>[] expectedTypes) {
-		for (int k= 0; k < expectedTypes.length; k++) {
-			if (expectedTypes[k].isInstance(curr)) {
+		for (Class<?> expectedType : expectedTypes) {
+			if (expectedType.isInstance(curr)) {
 				return true;
 			}
 		}
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AssistQuickFixTest18.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AssistQuickFixTest18.java
index 0e332bb..6339213 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AssistQuickFixTest18.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AssistQuickFixTest18.java
@@ -32,6 +32,8 @@
 import org.eclipse.jdt.core.IPackageFragment;
 import org.eclipse.jdt.core.IPackageFragmentRoot;
 import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.compiler.IProblem;
+import org.eclipse.jdt.core.dom.CompilationUnit;
 import org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants;
 
 import org.eclipse.jdt.internal.core.manipulation.CodeTemplateContextType;
@@ -5485,4 +5487,129 @@
 		assertCorrectLabels(proposals);
 	}
 
+	public void testWrapInOptional_01() throws Exception {
+		IPackageFragment pack1= fSourceFolder.createPackageFragment("p", false, null);
+		StringBuffer buf= new StringBuffer();
+		buf.append("package p;\n");
+		buf.append("import java.util.Optional;\n");
+		buf.append("public class E {\n");
+		buf.append("	Optional<Integer> a = 1;\n");
+		buf.append("}\n");
+
+		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
+		CompilationUnit compilationUnit= getASTRoot(cu);
+		IProblem[] problems= compilationUnit.getProblems();
+		assertNumberOfProblems(1, problems);
+
+		List<IJavaCompletionProposal> proposals= collectCorrections(cu, problems[0], null);
+
+		assertNumberOfProposals(proposals, 3);
+
+		buf= new StringBuffer();
+		buf.append("package p;\n");
+		buf.append("import java.util.Optional;\n");
+		buf.append("public class E {\n");
+		buf.append("	Optional<Integer> a = Optional.of(1);\n");
+		buf.append("}\n");
+		assertExpectedExistInProposals(proposals, new String[] { buf.toString() });
+
+		buf= new StringBuffer();
+		buf.append("package p;\n");
+		buf.append("import java.util.Optional;\n");
+		buf.append("public class E {\n");
+		buf.append("	Optional<Integer> a = Optional.empty();\n");
+		buf.append("}\n");
+		assertExpectedExistInProposals(proposals, new String[] { buf.toString() });
+	}
+
+	public void testWrapInOptional_02() throws Exception {
+		IPackageFragment pack1= fSourceFolder.createPackageFragment("p", false, null);
+		StringBuffer buf= new StringBuffer();
+		buf.append("package p;\n");
+		buf.append("import java.util.Optional;\n");
+		buf.append("public class E {\n");
+		buf.append("	Optional<Object> foo(int x) {\n");
+		buf.append("		return bar();\n");
+		buf.append("	}\n");
+		buf.append("	Object bar() {\n");
+		buf.append("		return null;\n");
+		buf.append("	}\n");
+		buf.append("}\n");
+
+		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
+		CompilationUnit compilationUnit= getASTRoot(cu);
+		IProblem[] problems= compilationUnit.getProblems();
+		assertNumberOfProblems(1, problems);
+
+		List<IJavaCompletionProposal> proposals= collectCorrections(cu, problems[0], null);
+
+		assertNumberOfProposals(proposals, 6);
+
+		buf= new StringBuffer();
+		buf.append("package p;\n");
+		buf.append("import java.util.Optional;\n");
+		buf.append("public class E {\n");
+		buf.append("	Optional<Object> foo(int x) {\n");
+		buf.append("		return Optional.of(bar());\n");
+		buf.append("	}\n");
+		buf.append("	Object bar() {\n");
+		buf.append("		return null;\n");
+		buf.append("	}\n");
+		buf.append("}\n");
+		assertExpectedExistInProposals(proposals, new String[] { buf.toString() });
+
+		buf= new StringBuffer();
+		buf.append("package p;\n");
+		buf.append("import java.util.Optional;\n");
+		buf.append("public class E {\n");
+		buf.append("	Optional<Object> foo(int x) {\n");
+		buf.append("		return Optional.ofNullable(bar());\n");
+		buf.append("	}\n");
+		buf.append("	Object bar() {\n");
+		buf.append("		return null;\n");
+		buf.append("	}\n");
+		buf.append("}\n");
+		assertExpectedExistInProposals(proposals, new String[] { buf.toString() });
+
+		buf= new StringBuffer();
+		buf.append("package p;\n");
+		buf.append("import java.util.Optional;\n");
+		buf.append("public class E {\n");
+		buf.append("	Optional<Object> foo(int x) {\n");
+		buf.append("		return Optional.empty();\n");
+		buf.append("	}\n");
+		buf.append("	Object bar() {\n");
+		buf.append("		return null;\n");
+		buf.append("	}\n");
+		buf.append("}\n");
+		assertExpectedExistInProposals(proposals, new String[] { buf.toString() });
+	}
+
+	public void testWrapInOptional_03() throws Exception {
+		IPackageFragment pack1= fSourceFolder.createPackageFragment("p", false, null);
+		StringBuffer buf= new StringBuffer();
+		buf.append("package p;\n");
+		buf.append("import java.util.Optional;\n");
+		buf.append("public class E <T> {\n");
+		buf.append("	Optional<T> a = 1;\n");
+		buf.append("}\n");
+
+		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
+		CompilationUnit compilationUnit= getASTRoot(cu);
+		IProblem[] problems= compilationUnit.getProblems();
+		assertNumberOfProblems(1, problems);
+
+		List<IJavaCompletionProposal> proposals= collectCorrections(cu, problems[0], null);
+
+		assertNumberOfProposals(proposals, 2);
+
+		buf= new StringBuffer();
+		buf.append("package p;\n");
+		buf.append("import java.util.Optional;\n");
+		buf.append("public class E <T> {\n");
+		buf.append("	Optional<T> a = Optional.empty();\n");
+		buf.append("}\n");
+		assertExpectedExistInProposals(proposals, new String[] { buf.toString() });
+	}
+
 }
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpStressTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpStressTest.java
index b9153be..8076f34 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpStressTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpStressTest.java
@@ -72,8 +72,7 @@
 	}
 
 	private void addAllCUs(IJavaElement[] children, List<IJavaElement> result) throws JavaModelException {
-		for (int i= 0; i < children.length; i++) {
-			IJavaElement element= children[i];
+		for (IJavaElement element : children) {
 			if (element instanceof ICompilationUnit) {
 				result.add(element);
 			} else if (element instanceof IPackageFragmentRoot) {
@@ -5310,17 +5309,15 @@
 
 
 //		generateTable(units);
-
-		for (int i= 0; i < units.length; i++) {
-	        ICompilationUnit cu= units[i];
+		for (ICompilationUnit cu : units) {
 			String previewContent= getNormalizedContent(new Document(cu.getBuffer().getContents()));
-	       	String compilationUnitName= getCompilationUnitName(cu);
-
-	       	String expected= fExpectedChangesAllTests.get(compilationUnitName);
-
-	       	assertTrue("No expected value in table for " + compilationUnitName, expected != null);
-	       	assertEquals("Content not as expected for " + compilationUnitName, expected, previewContent);
-        }
+			String compilationUnitName= getCompilationUnitName(cu);
+			
+			String expected= fExpectedChangesAllTests.get(compilationUnitName);
+			
+			assertTrue("No expected value in table for " + compilationUnitName, expected != null);
+			assertEquals("Content not as expected for " + compilationUnitName, expected, previewContent);
+		}
 	}
 
 	private static String getCompilationUnitName(ICompilationUnit cu) {
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest.java
index e9f4077..b89c9d6 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest.java
@@ -24,6 +24,7 @@
 import org.eclipse.jdt.testplugin.JavaProjectHelper;
 import org.eclipse.jdt.testplugin.TestOptions;
 
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.NullProgressMonitor;
 
 import org.eclipse.core.resources.IncrementalProjectBuilder;
@@ -37,10 +38,12 @@
 import org.eclipse.jdt.core.IPackageFragmentRoot;
 import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jdt.core.compiler.IProblem;
+import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTParser;
 import org.eclipse.jdt.core.dom.ASTRequestor;
 import org.eclipse.jdt.core.dom.CompilationUnit;
 import org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants;
+import org.eclipse.jdt.core.manipulation.CleanUpOptionsCore;
 
 import org.eclipse.jdt.internal.corext.dom.IASTSharedValues;
 import org.eclipse.jdt.internal.corext.fix.CleanUpConstants;
@@ -48,10 +51,12 @@
 
 import org.eclipse.jdt.ui.PreferenceConstants;
 import org.eclipse.jdt.ui.cleanup.CleanUpOptions;
+import org.eclipse.jdt.ui.cleanup.ICleanUpFix;
 import org.eclipse.jdt.ui.tests.core.ProjectTestSetup;
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
 import org.eclipse.jdt.internal.ui.fix.Java50CleanUp;
+import org.eclipse.jdt.internal.ui.fix.RedundantModifiersCleanUp;
 import org.eclipse.jdt.internal.ui.fix.UnimplementedCodeCleanUp;
 import org.eclipse.jdt.internal.ui.text.correction.ProblemLocation;
 
@@ -59,6 +64,16 @@
 import junit.framework.TestSuite;
 
 public class CleanUpTest extends CleanUpTestCase {
+	private class NoChangeRedundantModifiersCleanUp extends RedundantModifiersCleanUp {
+		private NoChangeRedundantModifiersCleanUp(Map<String, String> options) {
+			super(options);
+		}
+
+		@Override
+		protected ICleanUpFix createFix(CompilationUnit unit) throws CoreException {
+			return super.createFix(unit);
+		}
+	}
 
 	private static final Class<CleanUpTest> THIS= CleanUpTest.class;
 
@@ -67,13 +82,7 @@
 	}
 
 	public static Test suite() {
-		return setUpTest(new TestSuite(THIS) {
-//			@Override
-//			public void addTest(Test test) {
-//				if (((TestCase) test).getName().startsWith("testJava50ForLoop"))
-//					super.addTest(test);
-//			}
-		});
+		return setUpTest(new TestSuite(THIS));
 	}
 
 	public static Test setUpTest(Test test) {
@@ -1439,8 +1448,8 @@
 
 		IProblem[] problems= roots[0].getProblems();
 		assertTrue(problems.length == 2);
-		for (int i= 0; i < problems.length; i++) {
-			ProblemLocation location= new ProblemLocation(problems[i]);
+		for (IProblem problem : problems) {
+			ProblemLocation location= new ProblemLocation(problem);
 			assertTrue(cleanUp.canFix(cu1, location));
 		}
 	}
@@ -6460,6 +6469,71 @@
 		assertRefactoringResultAsExpected(new ICompilationUnit[] {cu1}, new String[] {expected1});
 	}
 
+	public void testNumberSuffix() throws Exception {
+		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
+		String sample= "" //
+				+ "package test1;\n" //
+				+ "\n" //
+				+ "public class E1 {\n" //
+				+ "    private long usual = 101l;\n" //
+				+ "    private long octal = 0121l;\n" //
+				+ "    private long hex = 0xdafdafdafl;\n" //
+				+ "\n" //
+				+ "    private float usualFloat = 101f;\n" //
+				+ "    private float octalFloat = 0121f;\n" //
+				+ "\n" //
+				+ "    private double usualDouble = 101d;\n" //
+				+ "\n" //
+				+ "    public long refactorIt() {\n" //
+				+ "        long localVar = 11l;\n" //
+				+ "        return localVar + 333l;\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public double doNotRefactor() {\n" //
+				+ "        long l = 11L;\n" //
+				+ "        float f = 11F;\n" //
+				+ "        double d = 11D;\n" //
+				+ "        float localFloat = 11f;\n" //
+				+ "        double localDouble = 11d;\n" //
+				+ "        return l + 101L + f + 11F + d + 11D + localFloat + 11f + localDouble + 11d;\n" //
+				+ "    }\n" //
+				+ "}\n";
+		ICompilationUnit cu1= pack1.createCompilationUnit("E1.java", sample, false, null);
+
+		enable(CleanUpConstants.NUMBER_SUFFIX);
+
+		sample= "" //
+				+ "package test1;\n" //
+				+ "\n" //
+				+ "public class E1 {\n" //
+				+ "    private long usual = 101L;\n" //
+				+ "    private long octal = 0121L;\n" //
+				+ "    private long hex = 0xdafdafdafL;\n" //
+				+ "\n" //
+				+ "    private float usualFloat = 101f;\n" //
+				+ "    private float octalFloat = 0121f;\n" //
+				+ "\n" //
+				+ "    private double usualDouble = 101d;\n" //
+				+ "\n" //
+				+ "    public long refactorIt() {\n" //
+				+ "        long localVar = 11L;\n" //
+				+ "        return localVar + 333L;\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public double doNotRefactor() {\n" //
+				+ "        long l = 11L;\n" //
+				+ "        float f = 11F;\n" //
+				+ "        double d = 11D;\n" //
+				+ "        float localFloat = 11f;\n" //
+				+ "        double localDouble = 11d;\n" //
+				+ "        return l + 101L + f + 11F + d + 11D + localFloat + 11f + localDouble + 11d;\n" //
+				+ "    }\n" //
+				+ "}\n";
+		String expected1= sample;
+
+		assertRefactoringResultAsExpected(new ICompilationUnit[] { cu1 }, new String[] { expected1 });
+	}
+
 	public void testRemoveQualifier02() throws Exception {
 		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
 		StringBuffer buf= new StringBuffer();
@@ -8418,8 +8492,10 @@
 	}
 
 	public void testRemoveRedundantModifiers () throws Exception {
+		StringBuffer buf;
 		IPackageFragment pack1= fSourceFolder.createPackageFragment("test", false, null);
-		StringBuffer buf= new StringBuffer();
+
+		buf= new StringBuffer();
 		buf.append("package test;\n");
 		buf.append("public abstract interface IFoo {\n");
 		buf.append("  public static final int MAGIC_NUMBER = 646;\n");
@@ -8501,11 +8577,58 @@
 		String expected5 = buf.toString();
 		ICompilationUnit cu5= pack1.createCompilationUnit("SafeVarargsExample.java", buf.toString(), false, null);
 
+		// Bug#553608: modifiers public static final must not be removed from inner enum within interface
+		buf= new StringBuffer();
+		buf.append("package test;\n");
+		buf.append("public interface Foo {\n");
+		buf.append("  enum Bar {\n");
+		buf.append("    A;\n");
+		buf.append("    public static final int B = 0;\n");
+		buf.append("  }\n");
+		buf.append("}\n");
+		String expected6 = buf.toString();
+		ICompilationUnit cu6= pack1.createCompilationUnit("NestedEnumExample.java", buf.toString(), false, null);
+		
 		enable(CleanUpConstants.REMOVE_REDUNDANT_MODIFIERS);
-		assertRefactoringResultAsExpected(new ICompilationUnit[] { cu1, cu2, cu3, cu4, cu5 }, new String[] { expected1, expected2, expected3, expected4, expected5 });
+		assertRefactoringResultAsExpected(new ICompilationUnit[] { cu1, cu2, cu3, cu4, cu5, cu6 }, new String[] { expected1, expected2, expected3, expected4, expected5, expected6 });
 
 	}
 
+	public void testDoNotTouchCleanedModifiers() throws Exception {
+		// Given
+		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
+		String sample= "" //
+				+ "package test1;\n" //
+				+ "\n" //
+				+ "public interface ICleanInterface {\n" //
+				+ "  int MAGIC_NUMBER = 646;\n" //
+				+ "  int foo();\n" //
+				+ "  void func();\n" //
+				+ "  int bar(int bazz);\n" //
+				+ "}\n";
+		ICompilationUnit cu1= pack1.createCompilationUnit("ICleanInterface.java", sample, false, null);
+
+		// When
+		enable(CleanUpConstants.REMOVE_REDUNDANT_MODIFIERS);
+
+		// Then
+		assertRefactoringHasNoChange(new ICompilationUnit[] { cu1 });
+
+		// When
+		ASTParser parser= ASTParser.newParser(AST.JLS13);
+		parser.setKind(ASTParser.K_COMPILATION_UNIT);
+		parser.setSource(cu1);
+		parser.setResolveBindings(true);
+		CompilationUnit unit= (CompilationUnit) parser.createAST(null);
+		Map<String, String> options= new HashMap<>();
+		options.put(CleanUpConstants.REMOVE_REDUNDANT_MODIFIERS, CleanUpOptionsCore.TRUE);
+		NoChangeRedundantModifiersCleanUp cleanup= new NoChangeRedundantModifiersCleanUp(options);
+		ICleanUpFix fix= cleanup.createFix(unit);
+
+		// Then
+		assertNull("ICleanInterface should not be cleaned up", fix);
+	}
+
 	public void testRemoveRedundantSemicolons () throws Exception {
 		IPackageFragment pack1= fSourceFolder.createPackageFragment("test", false, null);
 		StringBuffer buf= new StringBuffer();
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTestCase.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTestCase.java
index 9a9c97d..3042a49 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTestCase.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTestCase.java
@@ -14,10 +14,8 @@
 package org.eclipse.jdt.ui.tests.quickfix;
 
 import java.util.Hashtable;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 import java.util.regex.Pattern;
 
 import org.eclipse.jdt.testplugin.JavaProjectHelper;
@@ -158,9 +156,7 @@
 	private void disableAll() throws CoreException {
 		Map<String, String> settings= fProfile.getSettings();
 		CleanUpOptions options= JavaPlugin.getDefault().getCleanUpRegistry().getDefaultOptions(CleanUpConstants.DEFAULT_CLEAN_UP_OPTIONS);
-		Set<String> keys= options.getKeys();
-		for (Iterator<String> iterator= keys.iterator(); iterator.hasNext();) {
-			String key= iterator.next();
+		for (String key : options.getKeys()) {
 			settings.put(key, CleanUpOptions.FALSE);
 		}
 		commitProfile();
@@ -232,12 +228,11 @@
 	}
 
 	protected RefactoringStatus performRefactoring(final CleanUpRefactoring ref, ICompilationUnit[] cus, ICleanUp[] cleanUps) throws CoreException {
-		for (int i= 0; i < cus.length; i++) {
-			ref.addCompilationUnit(cus[i]);
+		for (ICompilationUnit cu : cus) {
+			ref.addCompilationUnit(cu);
 		}
-
-		for (int i= 0; i < cleanUps.length; i++) {
-			ref.addCleanUp(cleanUps[i]);
+		for (ICleanUp cleanUp : cleanUps) {
+			ref.addCleanUp(cleanUp);
 		}
 
 		IUndoManager undoManager= getUndoManager();
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/JarUtil.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/JarUtil.java
index bc52f08..a05e684 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/JarUtil.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/JarUtil.java
@@ -258,11 +258,8 @@
 	        System.err.print(requestor.problemLog); // problem log empty if no problems
 }
 public static void createFile(String path, String contents) throws IOException {
-    FileOutputStream output = new FileOutputStream(path);
-    try {
+    try (FileOutputStream output = new FileOutputStream(path)) {
         output.write(contents.getBytes());
-    } finally {
-        output.close();
     }
 }
 public static void createJar(String[] pathsAndContents, String[] extraPathsAndContents, Map<String, String> options, ClassFileFilter classFileFilter, String[] classpath, String jarPath) throws IOException {
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/LocalCorrectionsQuickFixTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/LocalCorrectionsQuickFixTest.java
index 625d909..0fda6d9 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/LocalCorrectionsQuickFixTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/LocalCorrectionsQuickFixTest.java
@@ -2251,16 +2251,22 @@
 		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
 		StringBuffer buf= new StringBuffer();
 		buf.append("package test1;\n");
+		buf.append("import java.io.Serializable;\n");
+		buf.append("import java.util.List;\n");
 		buf.append("public class E {\n");
 		buf.append("    public final String foo1;\n");
 		buf.append("    public final int foo2;\n");
 		buf.append("    public final Object foo3;\n");
+		buf.append("    public final Serializable foo4;\n");
+		buf.append("    public final List<E> foo5;\n");
+		buf.append("    public final List<? super String> foo6;\n");
+		buf.append("    public final List<List<? extends String>> foo7;\n");
 		buf.append("}\n");
 		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
 
 		CompilationUnit astRoot= getASTRoot(cu);
 		IProblem[] problems= astRoot.getProblems();
-		assertNumberOfProblems(3, problems);
+		assertNumberOfProblems(7, problems);
 
 		ArrayList<IJavaCompletionProposal> proposals= collectCorrections(cu, problems[0], null);
 		assertNumberOfProposals(proposals, 1);
@@ -2271,10 +2277,16 @@
 
 		buf= new StringBuffer();
 		buf.append("package test1;\n");
+		buf.append("import java.io.Serializable;\n");
+		buf.append("import java.util.List;\n");
 		buf.append("public class E {\n");
 		buf.append("    public final String foo1 = \"\";\n");
 		buf.append("    public final int foo2;\n");
 		buf.append("    public final Object foo3;\n");
+		buf.append("    public final Serializable foo4;\n");
+		buf.append("    public final List<E> foo5;\n");
+		buf.append("    public final List<? super String> foo6;\n");
+		buf.append("    public final List<List<? extends String>> foo7;\n");
 		buf.append("}\n");
 		String expected1= buf.toString();
 
@@ -2286,10 +2298,16 @@
 
 		buf= new StringBuffer();
 		buf.append("package test1;\n");
+		buf.append("import java.io.Serializable;\n");
+		buf.append("import java.util.List;\n");
 		buf.append("public class E {\n");
 		buf.append("    public final String foo1;\n");
 		buf.append("    public final int foo2 = 0;\n");
 		buf.append("    public final Object foo3;\n");
+		buf.append("    public final Serializable foo4;\n");
+		buf.append("    public final List<E> foo5;\n");
+		buf.append("    public final List<? super String> foo6;\n");
+		buf.append("    public final List<List<? extends String>> foo7;\n");
 		buf.append("}\n");
 		String expected2= buf.toString();
 
@@ -2301,16 +2319,107 @@
 
 		buf= new StringBuffer();
 		buf.append("package test1;\n");
+		buf.append("import java.io.Serializable;\n");
+		buf.append("import java.util.List;\n");
 		buf.append("public class E {\n");
 		buf.append("    public final String foo1;\n");
 		buf.append("    public final int foo2;\n");
 		buf.append("    public final Object foo3 = new Object();\n");
+		buf.append("    public final Serializable foo4;\n");
+		buf.append("    public final List<E> foo5;\n");
+		buf.append("    public final List<? super String> foo6;\n");
+		buf.append("    public final List<List<? extends String>> foo7;\n");
 		buf.append("}\n");
 		String expected3= buf.toString();
 
-		assertEqualStringsIgnoreOrder(new String[] { preview1,preview2,preview3  }, new String[] { expected1,expected2,expected3 });
-	}
+		proposals= collectCorrections(cu, problems[3], null);
+		assertNumberOfProposals(proposals, 1);
+		assertCorrectLabels(proposals);
+		proposal= (CUCorrectionProposal) proposals.get(0);
+		String preview4= getPreviewContent(proposal);
 
+		buf= new StringBuffer();
+		buf.append("package test1;\n");
+		buf.append("import java.io.Serializable;\n");
+		buf.append("import java.util.List;\n");
+		buf.append("public class E {\n");
+		buf.append("    public final String foo1;\n");
+		buf.append("    public final int foo2;\n");
+		buf.append("    public final Object foo3;\n");
+		buf.append("    public final Serializable foo4 = null;\n");
+		buf.append("    public final List<E> foo5;\n");
+		buf.append("    public final List<? super String> foo6;\n");
+		buf.append("    public final List<List<? extends String>> foo7;\n");
+		buf.append("}\n");
+		String expected4= buf.toString();
+
+		proposals= collectCorrections(cu, problems[4], null);
+		assertNumberOfProposals(proposals, 1);
+		assertCorrectLabels(proposals);
+		proposal= (CUCorrectionProposal) proposals.get(0);
+		String preview5= getPreviewContent(proposal);
+
+		buf= new StringBuffer();
+		buf.append("package test1;\n");
+		buf.append("import java.io.Serializable;\n");
+		buf.append("import java.util.List;\n");
+		buf.append("public class E {\n");
+		buf.append("    public final String foo1;\n");
+		buf.append("    public final int foo2;\n");
+		buf.append("    public final Object foo3;\n");
+		buf.append("    public final Serializable foo4;\n");
+		buf.append("    public final List<E> foo5 = null;\n");
+		buf.append("    public final List<? super String> foo6;\n");
+		buf.append("    public final List<List<? extends String>> foo7;\n");
+		buf.append("}\n");
+		String expected5= buf.toString();
+
+		proposals= collectCorrections(cu, problems[5], null);
+		assertNumberOfProposals(proposals, 1);
+		assertCorrectLabels(proposals);
+		proposal= (CUCorrectionProposal) proposals.get(0);
+		String preview6= getPreviewContent(proposal);
+
+		buf= new StringBuffer();
+		buf.append("package test1;\n");
+		buf.append("import java.io.Serializable;\n");
+		buf.append("import java.util.List;\n");
+		buf.append("public class E {\n");
+		buf.append("    public final String foo1;\n");
+		buf.append("    public final int foo2;\n");
+		buf.append("    public final Object foo3;\n");
+		buf.append("    public final Serializable foo4;\n");
+		buf.append("    public final List<E> foo5;\n");
+		buf.append("    public final List<? super String> foo6 = null;\n");
+		buf.append("    public final List<List<? extends String>> foo7;\n");
+		buf.append("}\n");
+		String expected6= buf.toString();
+
+		proposals= collectCorrections(cu, problems[6], null);
+		assertNumberOfProposals(proposals, 1);
+		assertCorrectLabels(proposals);
+		proposal= (CUCorrectionProposal) proposals.get(0);
+		String preview7= getPreviewContent(proposal);
+
+		buf= new StringBuffer();
+		buf.append("package test1;\n");
+		buf.append("import java.io.Serializable;\n");
+		buf.append("import java.util.List;\n");
+		buf.append("public class E {\n");
+		buf.append("    public final String foo1;\n");
+		buf.append("    public final int foo2;\n");
+		buf.append("    public final Object foo3;\n");
+		buf.append("    public final Serializable foo4;\n");
+		buf.append("    public final List<E> foo5;\n");
+		buf.append("    public final List<? super String> foo6;\n");
+		buf.append("    public final List<List<? extends String>> foo7 = null;\n");
+		buf.append("}\n");
+		String expected7= buf.toString();
+
+		assertEqualStringsIgnoreOrder(
+				new String[] { preview1, preview2, preview3, preview4, preview5, preview6, preview7 },
+				new String[] { expected1, expected2, expected3, expected4, expected5, expected6, expected7 });
+	}
 
 	public void testUnimplementedMethods() throws Exception {
 		IPackageFragment pack2= fSourceFolder.createPackageFragment("test2", false, null);
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/ModifierCorrectionsQuickFixTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/ModifierCorrectionsQuickFixTest.java
index 691d531..38619da 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/ModifierCorrectionsQuickFixTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/ModifierCorrectionsQuickFixTest.java
@@ -19,6 +19,7 @@
 
 import java.util.ArrayList;
 import java.util.Hashtable;
+import java.util.List;
 
 import org.eclipse.jdt.testplugin.JavaProjectHelper;
 import org.eclipse.jdt.testplugin.TestOptions;
@@ -427,7 +428,7 @@
 		buf.append("    }\n");
 		buf.append("}\n");
 		pack1.createCompilationUnit("C.java", buf.toString(), false, null);
-		
+
 		IPackageFragment pack2= fSourceFolder.createPackageFragment("test2", false, null);
 		buf= new StringBuffer();
 		buf.append("package test2;\n");
@@ -435,15 +436,15 @@
 		buf.append("    Object o= new Inner();\n");
 		buf.append("}\n");
 		ICompilationUnit cu= pack2.createCompilationUnit("E.java", buf.toString(), false, null);
-		
+
 		CompilationUnit astRoot= getASTRoot(cu);
 		ArrayList<IJavaCompletionProposal> proposals= collectCorrections(cu, astRoot);
 		assertNumberOfProposals(proposals, 1);
 		assertCorrectLabels(proposals);
-		
+
 		CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
 		String preview= getPreviewContent(proposal);
-		
+
 		buf= new StringBuffer();
 		buf.append("package test1;\n");
 		buf.append("public class C {\n");
@@ -455,7 +456,7 @@
 		buf.append("}\n");
 		assertEqualString(preview, buf.toString());
 	}
-	
+
 	public void testInvisibleConstructorRequestedInSuperType() throws Exception {
 		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
 		StringBuffer buf= new StringBuffer();
@@ -948,27 +949,27 @@
 		CompilationUnit astRoot= getASTRoot(cu);
 		IProblem[] problems= astRoot.getProblems();
 		assertNumberOfProblems(2, problems);
-		
+
 		ArrayList<IJavaCompletionProposal> proposals= collectCorrections(cu, problems[0], null);
-		
+
 		assertNumberOfProposals(proposals, 1);
 		assertCorrectLabels(proposals);
 
 		CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
 		String preview1= getPreviewContent(proposal);
-		
+
 		buf= new StringBuffer();
 		buf.append("package test1;\n");
 		buf.append("public abstract class E {\n");
 		buf.append("    public abstract int foo();\n");
 		buf.append("}\n");
 		String expectedMakeClassAbstract= buf.toString();
-		
+
 		assertEquals(preview1, expectedMakeClassAbstract);
-		
-		
+
+
 		proposals= collectCorrections(cu, problems[1], null);
-		
+
 		assertNumberOfProposals(proposals, 2);
 		assertCorrectLabels(proposals);
 
@@ -2259,7 +2260,7 @@
 	}
 
 	public void testInvalidMultiVariableModifiers() throws Exception {
-		
+
 		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
 		StringBuffer buf= new StringBuffer();
 		buf.append("package test1;\n");
@@ -2271,15 +2272,15 @@
 		buf.append("    }\n");
 		buf.append("}\n");
 		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
+
 		CompilationUnit astRoot= getASTRoot(cu);
 		ArrayList<IJavaCompletionProposal> proposals= collectCorrections(cu, astRoot);
 		assertNumberOfProposals(proposals, 1);
 		assertCorrectLabels(proposals);
-		
+
 		CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
 		String preview= getPreviewContent(proposal);
-		
+
 		buf= new StringBuffer();
 		buf.append("package test1;\n");
 		buf.append("public class E  {\n");
@@ -2293,9 +2294,9 @@
 		buf.append("}\n");
 		assertEqualString(preview, buf.toString());
 	}
-	
+
 	public void testInvalidMultiFieldModifiers() throws Exception {
-		
+
 		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
 		StringBuffer buf= new StringBuffer();
 		buf.append("package test1;\n");
@@ -2307,15 +2308,15 @@
 		buf.append("    }\n");
 		buf.append("}\n");
 		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
+
 		CompilationUnit astRoot= getASTRoot(cu);
 		ArrayList<IJavaCompletionProposal> proposals= collectCorrections(cu, astRoot);
 		assertNumberOfProposals(proposals, 1);
 		assertCorrectLabels(proposals);
-		
+
 		CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
 		String preview= getPreviewContent(proposal);
-		
+
 		buf= new StringBuffer();
 		buf.append("package test1;\n");
 		buf.append("public class E  {\n");
@@ -2328,9 +2329,9 @@
 		buf.append("}\n");
 		assertEqualString(preview, buf.toString());
 	}
-	
+
 	public void testInvalidMultiFieldModifiers2() throws Exception {
-		
+
 		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
 		StringBuffer buf= new StringBuffer();
 		buf.append("package test1;\n");
@@ -2342,15 +2343,15 @@
 		buf.append("    }\n");
 		buf.append("}\n");
 		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
+
 		CompilationUnit astRoot= getASTRoot(cu);
 		ArrayList<IJavaCompletionProposal> proposals= collectCorrections(cu, astRoot);
 		assertNumberOfProposals(proposals, 1);
 		assertCorrectLabels(proposals);
-		
+
 		CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
 		String preview= getPreviewContent(proposal);
-		
+
 		buf= new StringBuffer();
 		buf.append("package test1;\n");
 		buf.append("public class E  {\n");
@@ -2363,7 +2364,7 @@
 		buf.append("}\n");
 		assertEqualString(preview, buf.toString());
 	}
-	
+
 	public void testExtendsFinalClass() throws Exception {
 		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
 
@@ -2988,7 +2989,7 @@
 		assertCorrectLabels(proposals);
 		assertNumberOfProposals(proposals, 6);
 		String[] expected= new String[3];
-		
+
 		buf= new StringBuffer();
 		buf.append("package test1; \n");
 		buf.append("import java.util.*;\n");
@@ -3027,7 +3028,7 @@
 		buf.append("    };\n");
 		buf.append("};\n");
 		expected[1]= buf.toString();
-		
+
 		buf= new StringBuffer();
 		buf.append("package test1; \n");
 		buf.append("import java.util.*;\n");
@@ -3139,7 +3140,7 @@
 		buf.append("    }\n");
 		buf.append("}\n");
 		expected[1]= buf.toString();
-		
+
 		assertExpectedExistInProposals(proposals, expected);
 	}
 
@@ -3968,7 +3969,7 @@
 		hashtable.put(JavaCore.COMPILER_PB_MISSING_STATIC_ON_METHOD, JavaCore.ERROR);
 		hashtable.put(JavaCore.COMPILER_PB_POTENTIALLY_MISSING_STATIC_ON_METHOD, JavaCore.WARNING);
 		JavaCore.setOptions(hashtable);
-		
+
 		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
 		StringBuffer buf= new StringBuffer();
 		buf.append("package test1;\n");
@@ -3996,13 +3997,13 @@
 		buf.append("}\n");
 		assertEqualString(preview, buf.toString());
 	}
-	
+
 	public void testMethodCanPotentiallyBeStatic() throws Exception {
 		Hashtable<String, String> hashtable= JavaCore.getOptions();
 		hashtable.put(JavaCore.COMPILER_PB_MISSING_STATIC_ON_METHOD, JavaCore.ERROR);
 		hashtable.put(JavaCore.COMPILER_PB_POTENTIALLY_MISSING_STATIC_ON_METHOD, JavaCore.WARNING);
 		JavaCore.setOptions(hashtable);
-		
+
 		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
 		StringBuffer buf= new StringBuffer();
 		buf.append("package test1;\n");
@@ -4012,12 +4013,12 @@
 		buf.append("    }\n");
 		buf.append("}\n");
 		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
-		
+
 		CompilationUnit astRoot= getASTRoot(cu);
 		ArrayList<IJavaCompletionProposal> proposals= collectCorrections(cu, astRoot);
 		assertNumberOfProposals(proposals, 3);
 		assertCorrectLabels(proposals);
-		
+
 		String[] expected= new String[2];
 		buf= new StringBuffer();
 		buf.append("package test1;\n");
@@ -4037,7 +4038,7 @@
 		buf.append("    }\n");
 		buf.append("}\n");
 		expected[1]= buf.toString();
-		
+
 		assertExpectedExistInProposals(proposals, expected);
 	}
 
@@ -4045,7 +4046,7 @@
 	/**
 	 * Quick Fix proposes wrong visibility for overriding/overridden method.
 	 * https://bugs.eclipse.org/bugs/show_bug.cgi?id=216898
-	 * 
+	 *
 	 * @throws Exception if anything goes wrong
 	 * @since 3.9
 	 */
@@ -4091,7 +4092,7 @@
 	/**
 	 * Quick Fix proposes wrong visibility for overriding/overridden method.
 	 * https://bugs.eclipse.org/bugs/show_bug.cgi?id=216898#c1
-	 * 
+	 *
 	 * @throws Exception if anything goes wrong
 	 * @since 3.9
 	 */
@@ -4126,9 +4127,177 @@
 	}
 
 	/**
+	 * Quick Fix proposes a visibility for method overriding/overridden from one interface.
+	 * https://bugs.eclipse.org/bugs/show_bug.cgi?id=551383
+	 *
+	 * @throws Exception if anything goes wrong
+	 * @since 4.15
+	 */
+	public void testProposesVisibilityFromOneInterfaceMethod() throws Exception {
+		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
+		IPackageFragment pack2= fSourceFolder.createPackageFragment("test2", false, null);
+
+		String sample= "" //
+				+ "package test1;\n" //
+				+ "\n" //
+				+ "public interface Interface1 {\n" //
+				+ "  String getName();\n" //
+				+ "}\n";
+		pack1.createCompilationUnit("Interface1.java", sample, false, null);
+
+		sample= "" //
+				+ "package test2;\n" //
+				+ "\n" //
+				+ "public class AbsImpl implements test1.Interface1 {\n" //
+				+ "  String getName() {\n" //
+				+ "    return \"name\";\n" //
+				+ "  }\n" //
+				+ "}\n";
+		ICompilationUnit cu= pack2.createCompilationUnit("AbsImpl.java", sample, false, null);
+
+		CompilationUnit astRoot= getASTRoot(cu);
+		List<IJavaCompletionProposal> proposals= collectCorrections(cu, astRoot, 1);
+
+		assertCorrectLabels(proposals);
+		assertNumberOfProposals(proposals, 2);
+	}
+
+	/**
+	 * Quick Fix does not propose a visibility for method overriding/overridden from conflicting
+	 * interfaces. https://bugs.eclipse.org/bugs/show_bug.cgi?id=551383
+	 *
+	 * @throws Exception if anything goes wrong
+	 * @since 4.15
+	 */
+	public void testDoNotProposeVisibilityFromDifferentInterfaceMethods() throws Exception {
+		IPackageFragment pack= fSourceFolder.createPackageFragment("test", false, null);
+
+		String sample= "" //
+				+ "package test;\n" //
+				+ "\n" //
+				+ "public interface Interface1 {\n" //
+				+ "  String getName();\n" //
+				+ "}\n";
+		pack.createCompilationUnit("Interface1.java", sample, false, null);
+
+		sample= "" //
+				+ "package test;\n" //
+				+ "\n" //
+				+ "protected interface Interface2 {\n" //
+				+ "  protected String getName();\n" //
+				+ "}\n";
+		pack.createCompilationUnit("Interface2.java", sample, false, null);
+
+		sample= "" //
+				+ "package test;\n" //
+				+ "\n" //
+				+ "public class AbsImpl implements Interface1, Interface2 {\n" //
+				+ "  String getName() {\n" //
+				+ "    return \"name\";\n" //
+				+ "  }\n" //
+				+ "}\n";
+		ICompilationUnit cu= pack.createCompilationUnit("AbsImpl.java", sample, false, null);
+
+		CompilationUnit astRoot= getASTRoot(cu);
+		List<IJavaCompletionProposal> proposals= collectCorrections(cu, astRoot, 2);
+
+		assertCorrectLabels(proposals);
+		assertNumberOfProposals(proposals, 1);
+	}
+
+	/**
+	 * Quick Fix does not propose a visibility for method overriding/overridden from conflicting
+	 * interfaces. https://bugs.eclipse.org/bugs/show_bug.cgi?id=551383
+	 *
+	 * @throws Exception if anything goes wrong
+	 * @since 4.15
+	 */
+	public void testProposeVisibilityFromIdenticalInterfaceMethods() throws Exception {
+		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
+		IPackageFragment pack2= fSourceFolder.createPackageFragment("test2", false, null);
+		IPackageFragment pack3= fSourceFolder.createPackageFragment("test3", false, null);
+
+		String sample= "" //
+				+ "package test1;\n" //
+				+ "\n" //
+				+ "public interface Interface1 {\n" //
+				+ "  String getName();\n" //
+				+ "}\n";
+		pack1.createCompilationUnit("Interface1.java", sample, false, null);
+
+		sample= "" //
+				+ "package test2;\n" //
+				+ "\n" //
+				+ "public interface Interface2 {\n" //
+				+ "  String getName();\n" //
+				+ "}\n";
+		pack2.createCompilationUnit("Interface2.java", sample, false, null);
+
+		sample= "" //
+				+ "package test3;\n" //
+				+ "\n" //
+				+ "public class AbsImpl implements test1.Interface1, test2.Interface2 {\n" //
+				+ "  String getName() {\n" //
+				+ "    return \"name\";\n" //
+				+ "  }\n" //
+				+ "}\n";
+		ICompilationUnit cu= pack3.createCompilationUnit("AbsImpl.java", sample, false, null);
+
+		CompilationUnit astRoot= getASTRoot(cu);
+		List<IJavaCompletionProposal> proposals= collectCorrections(cu, astRoot, 2);
+
+		assertCorrectLabels(proposals);
+		assertNumberOfProposals(proposals, 1);
+	}
+
+	/**
+	 * Quick Fix does not propose a visibility for method overriding/overridden from conflicting
+	 * interfaces. https://bugs.eclipse.org/bugs/show_bug.cgi?id=551383
+	 *
+	 * @throws Exception if anything goes wrong
+	 * @since 4.15
+	 */
+	public void testProposeVisibilityFromMotherInterfaceMethods() throws Exception {
+		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
+		IPackageFragment pack2= fSourceFolder.createPackageFragment("test2", false, null);
+		IPackageFragment pack3= fSourceFolder.createPackageFragment("test3", false, null);
+
+		String sample= "" //
+				+ "package test1;\n" //
+				+ "\n" //
+				+ "public interface Interface1 {\n" //
+				+ "  String getName();\n" //
+				+ "}\n";
+		pack1.createCompilationUnit("Interface1.java", sample, false, null);
+
+		sample= "" //
+				+ "package test2;\n" //
+				+ "\n" //
+				+ "public interface Interface2 extends test1.Interface1 {\n" //
+				+ "}\n";
+		pack2.createCompilationUnit("Interface2.java", sample, false, null);
+
+		sample= "" //
+				+ "package test3;\n" //
+				+ "\n" //
+				+ "public class AbsImpl implements test2.Interface2 {\n" //
+				+ "  String getName() {\n" //
+				+ "    return \"name\";\n" //
+				+ "  }\n" //
+				+ "}\n";
+		ICompilationUnit cu= pack3.createCompilationUnit("AbsImpl.java", sample, false, null);
+
+		CompilationUnit astRoot= getASTRoot(cu);
+		List<IJavaCompletionProposal> proposals= collectCorrections(cu, astRoot, 1);
+
+		assertCorrectLabels(proposals);
+		assertNumberOfProposals(proposals, 2);
+	}
+
+	/**
 	 * Quick Fix proposes wrong visibility for overriding/overridden method.
 	 * https://bugs.eclipse.org/bugs/show_bug.cgi?id=216898#c1
-	 * 
+	 *
 	 * @throws Exception if anything goes wrong
 	 * @since 3.9
 	 */
@@ -4173,11 +4342,11 @@
 
 		assertExpectedExistInProposals(proposals, expected);
 	}
-	
+
 	/**
 	 * Wrong visibility for overriding method in interface.
 	 * https://bugs.eclipse.org/bugs/show_bug.cgi?id=87239
-	 * 
+	 *
 	 * @throws Exception if anything goes wrong
 	 * @since 3.9
 	 */
@@ -4219,5 +4388,5 @@
 
 		assertExpectedExistInProposals(proposals, expected);
 	}
-	
+
 }
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/PropertiesFileQuickAssistTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/PropertiesFileQuickAssistTest.java
index 6742932..acf0915 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/PropertiesFileQuickAssistTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/PropertiesFileQuickAssistTest.java
@@ -130,11 +130,8 @@
 	}
 
 	private static void checkContentOfFile(String message, IFile file, String content) throws Exception {
-		InputStream in= file.getContents();
-		try {
+		try (InputStream in= file.getContents()) {
 			assertEqualLines(message, content, copyToString(in));
-		} finally {
-			in.close();
 		}
 	}
 
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/QuickFixTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/QuickFixTest.java
index 1e5a90f..656f763 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/QuickFixTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/QuickFixTest.java
@@ -214,19 +214,17 @@
 	}
 
 	public static MethodDeclaration findMethodDeclaration(TypeDeclaration typeDecl, String methodName) {
-		MethodDeclaration[] methods= typeDecl.getMethods();
-		for (int i= 0; i < methods.length; i++) {
-			if (methodName.equals(methods[i].getName().getIdentifier())) {
-				return methods[i];
+		for (MethodDeclaration method : typeDecl.getMethods()) {
+			if (methodName.equals(method.getName().getIdentifier())) {
+				return method;
 			}
 		}
 		return null;
 	}
 
 	public static VariableDeclarationFragment findFieldDeclaration(TypeDeclaration typeDecl, String fieldName) {
-		FieldDeclaration[] fields= typeDecl.getFields();
-		for (int i= 0; i < fields.length; i++) {
-			List<VariableDeclarationFragment> list= fields[i].fragments();
+		for (FieldDeclaration field : typeDecl.getFields()) {
+			List<VariableDeclarationFragment> list= field.fragments();
 			for (int k= 0; k < list.size(); k++) {
 				VariableDeclarationFragment fragment= list.get(k);
 				if (fieldName.equals(fragment.getName().getIdentifier())) {
@@ -299,9 +297,9 @@
 		if (problems.length != nProblems) {
 			StringBuilder buf= new StringBuilder("Wrong number of problems, is: ");
 			buf.append(problems.length).append(", expected: ").append(nProblems).append('\n');
-			for (int i= 0; i < problems.length; i++) {
-				buf.append(problems[i]);
-				buf.append('[').append(problems[i].getSourceStart()).append(" ,").append(problems[i].getSourceEnd()).append(']');
+			for (IProblem problem : problems) {
+				buf.append(problem);
+				buf.append('[').append(problem.getSourceStart()).append(" ,").append(problem.getSourceEnd()).append(']');
 				buf.append('\n');
 			}
 			assertTrue(buf.toString(), false);
@@ -378,9 +376,7 @@
 	public static void assertStatusOk(IStatus status) throws CoreException {
 		if (!status.isOK()) {
 			if (status.getException() == null) {  // find a status with an exception
-				IStatus[] children= status.getChildren();
-				for (int i= 0; i < children.length; i++) {
-					IStatus child= children[i];
+				for (IStatus child : status.getChildren()) {
 					if (child.getException() != null) {
 						throw new CoreException(child);
 					}
@@ -411,8 +407,8 @@
 	}
 
 	private static boolean isFiltered(Object curr, Class<?>[] filteredTypes) {
-		for (int k = 0; k < filteredTypes.length; k++) {
-			if (filteredTypes[k].isInstance(curr)) {
+		for (Class<?> filteredType : filteredTypes) {
+			if (filteredType.isInstance(curr)) {
 				return true;
 			}
 		}
@@ -568,10 +564,9 @@
 	}
 
 	protected static void assertNoErrors(IInvocationContext context) {
-		IProblem[] problems= context.getASTRoot().getProblems();
-		for (int i= 0; i < problems.length; i++) {
-			if (problems[i].isError()) {
-				assertTrue("source has error: " + problems[i].getMessage(), false);
+		for (IProblem problem : context.getASTRoot().getProblems()) {
+			if (problem.isError()) {
+				assertTrue("source has error: " + problem.getMessage(), false);
 			}
 		}
 	}
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/SurroundWithTemplateTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/SurroundWithTemplateTest.java
index d7843e3..d20f362 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/SurroundWithTemplateTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/SurroundWithTemplateTest.java
@@ -112,9 +112,8 @@
 		buf.append("};");
 
 		TemplateStore templateStore= JavaPlugin.getDefault().getTemplateStore();
-		TemplatePersistenceData[] templateData= templateStore.getTemplateData(false);
-		for (int i= 0; i < templateData.length; i++) {
-			templateStore.delete(templateData[i]);
+		for (TemplatePersistenceData t : templateStore.getTemplateData(false)) {
+			templateStore.delete(t);
 		}
 		TemplatePersistenceData surroundWithRunnableTemplate= new TemplatePersistenceData(new Template("runnable", "surround with runnable", "java", buf.toString(), false), true);
 		templateStore.add(surroundWithRunnableTemplate);
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/UnnecessaryArrayCreationQuickFixTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/UnnecessaryArrayCreationQuickFixTest.java
index 0123c3f..f03ab7c 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/UnnecessaryArrayCreationQuickFixTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/UnnecessaryArrayCreationQuickFixTest.java
@@ -246,6 +246,25 @@
 		assertNull(fRemoveArrayCreationProposal);
 	}
 
+	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=558614
+	public void testNoMethodProposalCase4() throws Exception {
+		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
+		StringBuilder buf= new StringBuilder();
+		buf.append("package test1;\n");
+		buf.append("import java.util.Arrays;\n");
+		buf.append("import java.util.List;\n");
+		buf.append("public class A {\n");
+		buf.append("    public void foo() {\n");
+		buf.append("		List<String> list = Arrays.asList(new String[0]);\n");
+		buf.append("    }\n");
+		buf.append("}\n");
+		ICompilationUnit cu= pack1.createCompilationUnit("A.java", buf.toString(), false, null);
+
+		fetchConvertingProposal(buf, cu, 0);
+
+		assertNull(fRemoveArrayCreationProposal);
+	}
+
 	public void testSuperCase1() throws Exception {
 		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
 		StringBuilder buf= new StringBuilder();
@@ -513,6 +532,32 @@
 		assertNull(fRemoveArrayCreationProposal);
 	}
 
+	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=558614
+	public void testNoSuperMethodProposalCase4() throws Exception {
+		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
+		StringBuilder buf= new StringBuilder();
+		buf.append("package test1;\n");
+		buf.append("import java.util.Arrays;\n");
+		buf.append("import java.util.List;\n");
+		buf.append("public class A {\n");
+		buf.append("    private class A1 {\n");
+		buf.append("        public String foo(int x, String ... b) {\n");
+		buf.append("            return b[0];\n");
+		buf.append("        }\n");
+		buf.append("    }\n");
+		buf.append("    private class A2 extends A1 {\n");
+		buf.append("        public String foo(int x) {\n");
+		buf.append("            return super.foo(x, new String[0]);\n");
+		buf.append("        }\n");
+		buf.append("    }\n");
+		buf.append("}\n");
+		ICompilationUnit cu= pack1.createCompilationUnit("A.java", buf.toString(), false, null);
+
+		fetchConvertingProposal2(buf, cu, 0);
+
+		assertNull(fRemoveArrayCreationProposal);
+	}
+
 	private List<IJavaCompletionProposal> fetchConvertingProposal(StringBuilder buf, ICompilationUnit cu, int offset) throws Exception {
 		int index= buf.toString().indexOf("asList") + offset;
 		AssistContext context= getCorrectionContext(cu, index, 0);
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/FileAdapterTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/FileAdapterTest.java
index 5c4f80f..01ff184 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/FileAdapterTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/FileAdapterTest.java
@@ -48,9 +48,8 @@
 		JavaSearchQuery query= SearchTestHelper.runTypeRefQuery("junit.framework.Test");
 		JavaSearchResult result= (JavaSearchResult) query.getSearchResult();
 		IFileMatchAdapter adapter= result.getFileMatchAdapter();
-		Object[] elements= result.getElements();
-		for (int i= 0; i < elements.length; i++) {
-			IJavaElement je= (IJavaElement) elements[i];
+		for (Object element : result.getElements()) {
+			IJavaElement je= (IJavaElement) element;
 			IResource underlying= je.getUnderlyingResource();
 			if (underlying != null && underlying.getName().endsWith(".java")) {
 				assertEquals(underlying, adapter.getFile(je));
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/NLSSearchTestHelper.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/NLSSearchTestHelper.java
index 04ecba3..f567ec7 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/NLSSearchTestHelper.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/NLSSearchTestHelper.java
@@ -67,10 +67,7 @@
 	}
 
 	private static void assertResultHasUndefinedKey(String key, IFile file, boolean isAccessor, NLSSearchResult result) throws CoreException {
-		Match[] matches= result.getFileMatchAdapter().computeContainedMatches(result, file);
-
-		for (int i= 0; i < matches.length; i++) {
-			Match match= matches[i];
+		for (Match match : result.getFileMatchAdapter().computeContainedMatches(result, file)) {
 			if (match.getElement() instanceof ICompilationUnit) {
 				ICompilationUnit unit= (ICompilationUnit)match.getElement();
 				String field= unit.getSource().substring(match.getOffset(), match.getOffset() + match.getLength());
@@ -83,10 +80,7 @@
 	}
 
 	private static void assertResultHasUnusedKey(String key, IFile file, boolean isAccessor, NLSSearchResult result) throws IOException, CoreException {
-		Match[] matches= result.getFileMatchAdapter().computeContainedMatches(result, file);
-
-		for (int i= 0; i < matches.length; i++) {
-			Match match= matches[i];
+		for (Match match : result.getFileMatchAdapter().computeContainedMatches(result, file)) {
 			if (match.getElement() instanceof CompilationUnitEntry) {
 				ICompilationUnit unit= ((CompilationUnitEntry)match.getElement()).getCompilationUnit();
 				String field= unit.getSource().substring(match.getOffset(), match.getOffset() + match.getLength());
@@ -106,8 +100,7 @@
 
 	private static String getContent(IFile entry) throws CoreException, IOException {
 		StringBuilder buf= new StringBuilder();
-		InputStream contents= entry.getContents();
-		try {
+		try (InputStream contents= entry.getContents()) {
 			char ch= (char)contents.read();
 			int avilable= contents.available();
 			while (avilable > 0 && ch != -1) {
@@ -116,16 +109,11 @@
 				avilable--;
 			}
 			return buf.toString();
-		} finally {
-			contents.close();
 		}
 	}
 
 	private static void assertResultHasDuplicateKey(String key, IFile file, NLSSearchResult result) throws CoreException, IOException {
-		Match[] matches= result.getFileMatchAdapter().computeContainedMatches(result, file);
-
-		for (int i= 0; i < matches.length; i++) {
-			Match match= matches[i];
+		for (Match match : result.getFileMatchAdapter().computeContainedMatches(result, file)) {
 			if (match.getElement() instanceof FileEntry) {
 				FileEntry entry= (FileEntry)match.getElement();
 				String content= getContent(entry.getPropertiesFile());
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/ParticipantTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/ParticipantTest.java
index 65a3eb1..a03fd71 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/ParticipantTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/ParticipantTest.java
@@ -90,9 +90,8 @@
 		JavaSearchResult result= (JavaSearchResult) query.getSearchResult();
 		assertEquals(20, result.getMatchCount());
 
-		Object[] elements= result.getElements();
-		for (int i= 0; i < elements.length; i++) {
-			assertTrue(elements[i] instanceof Integer);
+		for (Object element : result.getElements()) {
+			assertTrue(element instanceof Integer);
 		}
 	}
 
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/WorkspaceScopeTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/WorkspaceScopeTest.java
index 273e83c..ff46582 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/WorkspaceScopeTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/WorkspaceScopeTest.java
@@ -98,11 +98,9 @@
 
 		assertTrue(scope.encloses(fCompilationUnit));
 
-		IPackageFragmentRoot[] roots= fProject1.getAllPackageFragmentRoots();
-		for (int i= 0; i < roots.length; i++) {
-			IJavaElement[] fragments= roots[i].getChildren();
-			for (int j= 0; j < fragments.length; j++) {
-				assertFalse(scope.encloses(fragments[j]));
+		for (IPackageFragmentRoot root : fProject1.getAllPackageFragmentRoots()) {
+			for (IJavaElement fragment : root.getChildren()) {
+				assertFalse(scope.encloses(fragment));
 			}
 		}
 
@@ -121,12 +119,11 @@
 
 		assertTrue(scope.encloses(fCompilationUnit.getParent()));
 
-		IPackageFragmentRoot[] roots= fProject1.getAllPackageFragmentRoots();
-		for (int i= 0; i < roots.length; i++) {
-			IJavaElement[] fragments= roots[i].getChildren();
-			for (int j= 0; j < fragments.length; j++) {
-				if (!fragments[j].equals(fCompilationUnit.getParent()))
-					assertFalse(scope.encloses(fragments[j]));
+		for (IPackageFragmentRoot root : fProject1.getAllPackageFragmentRoots()) {
+			for (IJavaElement fragment : root.getChildren()) {
+				if (!fragment.equals(fCompilationUnit.getParent())) {
+					assertFalse(scope.encloses(fragment));
+				}
 			}
 		}
 
@@ -154,38 +151,34 @@
 	}
 
 	private void checkNoJreRoots(IJavaSearchScope scope, IJavaProject project) throws JavaModelException {
-		IPackageFragmentRoot[] roots= project.getAllPackageFragmentRoots();
-		for (int i= 0; i < roots.length; i++) {
-			if(scope.encloses(roots[i])) {
-				assertFalse(roots[i].isExternal());
+		for (IPackageFragmentRoot root : project.getAllPackageFragmentRoots()) {
+			if (scope.encloses(root)) {
+				assertFalse(root.isExternal());
 			} else {
-				assertTrue(roots[i].isExternal());
+				assertTrue(root.isExternal());
 			}
 		}
 	}
 
 	private void checkJreRoots(IJavaSearchScope scope, IJavaProject project) throws JavaModelException {
-		IPackageFragmentRoot[] roots= project.getAllPackageFragmentRoots();
-		for (int i= 0; i < roots.length; i++) {
-			if(scope.encloses(roots[i])) {
-				assertTrue(roots[i].isExternal());
+		for (IPackageFragmentRoot root : project.getAllPackageFragmentRoots()) {
+			if (scope.encloses(root)) {
+				assertTrue(root.isExternal());
 			} else {
-				assertFalse(roots[i].isExternal());
+				assertFalse(root.isExternal());
 			}
 		}
 	}
 
 	private void checkNoRoots(IJavaSearchScope scope, IJavaProject project) throws JavaModelException {
-		IPackageFragmentRoot[] roots= project.getAllPackageFragmentRoots();
-		for (int i= 0; i < roots.length; i++) {
-			assertFalse(scope.encloses(roots[i]));
+		for (IPackageFragmentRoot root : project.getAllPackageFragmentRoots()) {
+			assertFalse(scope.encloses(root));
 		}
 	}
 
 	private void checkAllRoots(IJavaSearchScope scope, IJavaProject project) throws JavaModelException {
-		IPackageFragmentRoot[] roots= project.getAllPackageFragmentRoots();
-		for (int i= 0; i < roots.length; i++) {
-			assertTrue(scope.encloses(roots[i]));
+		for (IPackageFragmentRoot root : project.getAllPackageFragmentRoots()) {
+			assertTrue(scope.encloses(root));
 		}
 	}
 
diff --git a/org.eclipse.jdt.ui/META-INF/MANIFEST.MF b/org.eclipse.jdt.ui/META-INF/MANIFEST.MF
index a20ac02..80123f9 100644
--- a/org.eclipse.jdt.ui/META-INF/MANIFEST.MF
+++ b/org.eclipse.jdt.ui/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jdt.ui; singleton:=true
-Bundle-Version: 3.20.100.qualifier
+Bundle-Version: 3.21.0.qualifier
 Bundle-Activator: org.eclipse.jdt.internal.ui.JavaPlugin
 Bundle-ActivationPolicy: lazy
 Bundle-Vendor: %providerName
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/buildpath/CPJavaProject.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/buildpath/CPJavaProject.java
index 1406617..e76141d 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/buildpath/CPJavaProject.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/buildpath/CPJavaProject.java
@@ -14,7 +14,6 @@
 package org.eclipse.jdt.internal.corext.buildpath;
 
 import java.util.ArrayList;
-import java.util.Iterator;
 import java.util.List;
 
 import org.eclipse.core.runtime.CoreException;
@@ -44,10 +43,9 @@
 
     public CPJavaProject createWorkingCopy() {
     	List<CPListElement> newList= new ArrayList<>(fCPListElements.size());
-    	for (Iterator<CPListElement> iterator= fCPListElements.iterator(); iterator.hasNext();) {
-	        CPListElement element= iterator.next();
-	        newList.add(element.copy());
-        }
+		for (CPListElement element : fCPListElements) {
+			newList.add(element.copy());
+		}
 		return new CPJavaProject(fJavaProject, newList, fDefaultOutputLocation);
     }
 
@@ -58,11 +56,10 @@
     public IClasspathEntry[] getClasspathEntries() {
     	IClasspathEntry[] result= new IClasspathEntry[fCPListElements.size()];
     	int i= 0;
-    	for (Iterator<CPListElement> iterator= fCPListElements.iterator(); iterator.hasNext();) {
-	        CPListElement element= iterator.next();
-	        result[i]= element.getClasspathEntry();
-	        i++;
-        }
+		for (CPListElement element : fCPListElements) {
+			result[i]= element.getClasspathEntry();
+			i++;
+		}
 	    return result;
     }
 
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/buildpath/ClasspathModifier.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/buildpath/ClasspathModifier.java
index 339a7ac..cd3c0bf 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/buildpath/ClasspathModifier.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/buildpath/ClasspathModifier.java
@@ -17,7 +17,6 @@
 import java.net.URI;
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.Iterator;
 import java.util.List;
 
 import org.eclipse.core.filesystem.EFS;
@@ -53,12 +52,12 @@
 import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jdt.core.JavaModelException;
 
+import org.eclipse.jdt.internal.core.manipulation.util.BasicElementLabels;
 import org.eclipse.jdt.internal.corext.util.Messages;
 
 import org.eclipse.jdt.ui.PreferenceConstants;
 
 import org.eclipse.jdt.internal.ui.dialogs.StatusInfo;
-import org.eclipse.jdt.internal.core.manipulation.util.BasicElementLabels;
 import org.eclipse.jdt.internal.ui.wizards.NewWizardMessages;
 import org.eclipse.jdt.internal.ui.wizards.buildpaths.ArchiveFileFilter;
 import org.eclipse.jdt.internal.ui.wizards.buildpaths.BuildPathSupport;
@@ -200,23 +199,22 @@
     	List<CPListElement> newEntries= new ArrayList<>();
     	List<CPListElement> duplicateEntries= new ArrayList<>();
     	List<CPListElement> existingEntries= cpProject.getCPListElements();
-    	for (int i= 0; i < absolutePaths.length; i++) {
-	        CPListElement newEntry= new CPListElement(javaProject, IClasspathEntry.CPE_LIBRARY, absolutePaths[i], null);
-	        if (existingEntries.contains(newEntry)) {
-	        	duplicateEntries.add(newEntry);
-	        } else {
-	        	newEntries.add(newEntry);
-	        }
-        }
+		for (IPath absolutePath : absolutePaths) {
+			CPListElement newEntry= new CPListElement(javaProject, IClasspathEntry.CPE_LIBRARY, absolutePath, null);
+			if (existingEntries.contains(newEntry)) {
+				duplicateEntries.add(newEntry);
+			} else {
+				newEntries.add(newEntry);
+			}
+		}
 
 		if (duplicateEntries.size() > 0) {
 			String message;
 			if (duplicateEntries.size() > 1) {
 				StringBuilder buf= new StringBuilder();
-				for (Iterator<CPListElement> iterator= duplicateEntries.iterator(); iterator.hasNext();) {
-	                CPListElement dup= iterator.next();
-	                buf.append('\n').append(BasicElementLabels.getResourceName(dup.getPath().lastSegment()));
-                }
+				for (CPListElement dup : duplicateEntries) {
+					buf.append('\n').append(BasicElementLabels.getResourceName(dup.getPath().lastSegment()));
+				}
 				message= Messages.format(NewWizardMessages.AddArchiveToBuildpathAction_DuplicateArchivesInfo_message, buf.toString());
 			} else {
 				message= Messages.format(NewWizardMessages.AddArchiveToBuildpathAction_DuplicateArchiveInfo_message, BasicElementLabels.getResourceName(duplicateEntries.get(0).getPath().lastSegment()));
@@ -230,10 +228,9 @@
 		cpProject= cpProject.createWorkingCopy();
 		existingEntries= cpProject.getCPListElements();
 
-		for (Iterator<CPListElement> iterator= newEntries.iterator(); iterator.hasNext();) {
-            CPListElement newEntry= iterator.next();
-            insertAtEndOfCategory(newEntry, existingEntries);
-        }
+		for (CPListElement newEntry : newEntries) {
+			insertAtEndOfCategory(newEntry, existingEntries);
+		}
 
 		IJavaModelStatus cpStatus= JavaConventions.validateClasspath(javaProject, cpProject.getClasspathEntries(), cpProject.getDefaultOutputLocation());
 		if (!cpStatus.isOK())
@@ -248,13 +245,13 @@
     	IJavaProject javaProject= cpProject.getJavaProject();
 
     	List<CPListElement> existingEntries= cpProject.getCPListElements();
-    	for (int i= 0; i < absolutePaths.length; i++) {
-	        CPListElement newEntry= new CPListElement(javaProject, IClasspathEntry.CPE_LIBRARY, absolutePaths[i], null);
-	        if (!existingEntries.contains(newEntry)) {
-	        	insertAtEndOfCategory(newEntry, existingEntries);
-	        	result.addEntry(newEntry);
-	        }
-        }
+		for (IPath absolutePath : absolutePaths) {
+			CPListElement newEntry= new CPListElement(javaProject, IClasspathEntry.CPE_LIBRARY, absolutePath, null);
+			if (!existingEntries.contains(newEntry)) {
+				insertAtEndOfCategory(newEntry, existingEntries);
+				result.addEntry(newEntry);
+			}
+		}
 
 		result.setNewEntries(existingEntries.toArray(new CPListElement[existingEntries.size()]));
 		result.setDefaultOutputLocation(cpProject.getDefaultOutputLocation());
@@ -270,21 +267,20 @@
     	List<CPListElement> existingEntries= cpProject.getCPListElements();
 		BuildpathDelta result= new BuildpathDelta(NewWizardMessages.NewSourceContainerWorkbookPage_ToolBar_RemoveFromCP_tooltip);
 
-		for (int i= 0; i < toRemove.length; i++) {
-	        CPListElement element= toRemove[i];
-	        existingEntries.remove(element);
-	        result.removeEntry(element);
-	        IPath path= element.getPath();
+		for (CPListElement element : toRemove) {
+			existingEntries.remove(element);
+			result.removeEntry(element);
+			IPath path= element.getPath();
 			removeFilters(path, javaProject, existingEntries);
 			if (!path.equals(projectPath)) {
-	            IResource member= workspaceRoot.findMember(path);
-	            if (member != null)
-	            	result.addDeletedResource(member);
-            } else if (cpProject.getDefaultOutputLocation().equals(projectPath) && containsSourceFolders(cpProject)) {
-            	String outputFolderName= PreferenceConstants.getPreferenceStore().getString(PreferenceConstants.SRCBIN_BINNAME);
-    			cpProject.setDefaultOutputLocation(cpProject.getDefaultOutputLocation().append(outputFolderName));
-            }
-        }
+				IResource member= workspaceRoot.findMember(path);
+				if (member != null)
+					result.addDeletedResource(member);
+			} else if (cpProject.getDefaultOutputLocation().equals(projectPath) && containsSourceFolders(cpProject)) {
+				String outputFolderName= PreferenceConstants.getPreferenceStore().getString(PreferenceConstants.SRCBIN_BINNAME);
+				cpProject.setDefaultOutputLocation(cpProject.getDefaultOutputLocation().append(outputFolderName));
+			}
+		}
 
 		result.setDefaultOutputLocation(cpProject.getDefaultOutputLocation());
     	result.setNewEntries(existingEntries.toArray(new CPListElement[existingEntries.size()]));
@@ -293,21 +289,17 @@
     }
 
     private static boolean containsSourceFolders(CPJavaProject cpProject) {
-    	List<CPListElement> elements= cpProject.getCPListElements();
-    	for (Iterator<CPListElement> iterator= elements.iterator(); iterator.hasNext();) {
-	        CPListElement element= iterator.next();
-	        if (element.getEntryKind() == IClasspathEntry.CPE_SOURCE)
-	        	return true;
-        }
+    	for (CPListElement element : cpProject.getCPListElements()) {
+			if (element.getEntryKind() == IClasspathEntry.CPE_SOURCE)
+				return true;
+		}
 	    return false;
     }
 
 	private static void include(CPJavaProject cpProject, IPath path) {
-	    List<CPListElement> elements= cpProject.getCPListElements();
-	    for (Iterator<CPListElement> iterator= elements.iterator(); iterator.hasNext();) {
-	        CPListElement element= iterator.next();
-	        element.removeFromExclusions(path);
-	    }
+	 	for (CPListElement element : cpProject.getCPListElements()) {
+			element.removeFromExclusions(path);
+		}
     }
 
 	/**
@@ -320,11 +312,9 @@
 	 * @throws JavaModelException
 	 */
 	public static List<CPListElement> getExistingEntries(IJavaProject project) throws JavaModelException {
-		IClasspathEntry[] classpathEntries= project.getRawClasspath();
 		ArrayList<CPListElement> newClassPath= new ArrayList<>();
-		for (int i= 0; i < classpathEntries.length; i++) {
-			IClasspathEntry curr= classpathEntries[i];
-			newClassPath.add(CPListElement.createFromExisting(curr, project));
+		for (IClasspathEntry entry : project.getRawClasspath()) {
+			newClassPath.add(CPListElement.createFromExisting(entry, project));
 		}
 		return newClassPath;
 	}
@@ -420,9 +410,7 @@
 	 * @throws JavaModelException
 	 */
 	public static IClasspathEntry getClasspathEntryFor(IPath path, IJavaProject project, int entryKind) throws JavaModelException {
-		IClasspathEntry[] entries= project.getRawClasspath();
-		for (int i= 0; i < entries.length; i++) {
-			IClasspathEntry entry= entries[i];
+		for (IClasspathEntry entry : project.getRawClasspath()) {
 			if (entry.getPath().equals(path) && equalEntryKind(entry, entryKind))
 				return entry;
 		}
@@ -547,9 +535,10 @@
 		try {
 			IPackageFragmentRoot[] roots= project.getPackageFragmentRoots();
 			monitor.beginTask(NewWizardMessages.ClasspathModifier_Monitor_CheckOutputFolders, roots.length);
-			for (int i= 0; i < roots.length; i++) {
-				if (roots[i].getRawClasspathEntry().getOutputLocation() != null)
+			for (IPackageFragmentRoot root : roots) {
+				if (root.getRawClasspathEntry().getOutputLocation() != null) {
 					return true;
+				}
 				monitor.worked(1);
 			}
 		} finally {
@@ -768,28 +757,26 @@
 		}
 
 		List<CPListElement> result= new ArrayList<>();
-		for (Iterator<CPListElement> iter= existingEntries.iterator(); iter.hasNext();) {
-			CPListElement element= iter.next();
+		for (CPListElement element : existingEntries) {
 			boolean hasChange= false;
 			IPath[] exlusions= (IPath[])element.getAttribute(CPListElement.EXCLUSION);
 			if (exlusions != null) {
 				List<IPath> exlusionList= new ArrayList<>(exlusions.length);
-				for (int i= 0; i < exlusions.length; i++) {
-					if (!exlusions[i].equals(path)) {
-						exlusionList.add(exlusions[i]);
+				for (IPath exlusion : exlusions) {
+					if (!exlusion.equals(path)) {
+						exlusionList.add(exlusion);
 					} else {
 						hasChange= true;
 					}
 				}
 				element.setAttribute(CPListElement.EXCLUSION, exlusionList.toArray(new IPath[exlusionList.size()]));
 			}
-
-			IPath[] inclusion= (IPath[])element.getAttribute(CPListElement.INCLUSION);
-			if (inclusion != null) {
-				List<IPath> inclusionList= new ArrayList<>(inclusion.length);
-				for (int i= 0; i < inclusion.length; i++) {
-					if (!inclusion[i].equals(path)) {
-						inclusionList.add(inclusion[i]);
+			IPath[] inclusions= (IPath[])element.getAttribute(CPListElement.INCLUSION);
+			if (inclusions != null) {
+				List<IPath> inclusionList= new ArrayList<>(inclusions.length);
+				for (IPath inclusion : inclusions) {
+					if (!inclusion.equals(path)) {
+						inclusionList.add(inclusion);
 					} else {
 						hasChange= true;
 					}
@@ -1041,7 +1028,7 @@
 			IJavaModelStatus status= JavaConventions.validateClasspath(project, entries, outputLocation);
 			if (!status.isOK())
 				throw new JavaModelException(status);
-			
+
 			BuildPathSupport.setEEComplianceOptions(project, newEntries);
 			project.setRawClasspath(entries, outputLocation, new SubProgressMonitor(monitor, 2));
 		} finally {
@@ -1139,9 +1126,10 @@
 			monitor.beginTask(NewWizardMessages.ClasspathModifier_Monitor_ComparePaths, paths.length);
 			if (path.getFileExtension() == null)
 				path= new Path(completeName(path.toString()));
-			for (int i= 0; i < paths.length; i++) {
-				if (paths[i].equals(path))
+			for (IPath p : paths) {
+				if (p.equals(path)) {
 					return true;
+				}
 				monitor.worked(1);
 			}
 		} finally {
@@ -1188,10 +1176,11 @@
 				return paths;
 
 			ArrayList<IPath> newPaths= new ArrayList<>();
-			for (int i= 0; i < paths.length; i++) {
+			for (IPath p : paths) {
 				monitor.worked(1);
-				if (!paths[i].equals(path))
-					newPaths.add(paths[i]);
+				if (!p.equals(path)) {
+					newPaths.add(p);
+				}
 			}
 
 			return newPaths.toArray(new IPath[newPaths.size()]);
@@ -1221,9 +1210,8 @@
 	 */
 	private static List<Path> getFoldersOnCP(IPath path, IJavaProject project, IProgressMonitor monitor) throws JavaModelException {
 		List<Path> srcFolders= new ArrayList<>();
-		IClasspathEntry[] cpEntries= project.getRawClasspath();
-		for (int i= 0; i < cpEntries.length; i++) {
-			IPath cpPath= cpEntries[i].getPath();
+		for (IClasspathEntry cpEntry : project.getRawClasspath()) {
+			IPath cpPath= cpEntry.getPath();
 			if (path.isPrefixOf(cpPath) && path.segmentCount() + 1 == cpPath.segmentCount())
 				srcFolders.add(new Path(completeName(cpPath.lastSegment())));
 		}
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/CallHierarchy.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/CallHierarchy.java
index db2b2d0..b1f04d7 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/CallHierarchy.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/callhierarchy/CallHierarchy.java
@@ -110,19 +110,18 @@
         fgCallHierarchyCore.setSearchScope(searchScope);
     }
 
-	/**
-	 * Checks whether the fully qualified name is ignored by the set filters.
-	 *
-	 * @param fullyQualifiedName the fully qualified name
-	 *
-	 * @return <code>true</code> if the fully qualified name is ignored
-	 */
+    /**
+     * Checks whether the fully qualified name is ignored by the set filters.
+     *
+     * @param fullyQualifiedName the fully qualified name
+     *
+     * @return <code>true</code> if the fully qualified name is ignored
+     */
     public boolean isIgnored(String fullyQualifiedName) {
-        if ((getIgnoreFilters() != null) && (getIgnoreFilters().length > 0)) {
-            for (int i = 0; i < getIgnoreFilters().length; i++) {
-                String fullyQualifiedName1 = fullyQualifiedName;
-
-                if (getIgnoreFilters()[i].match(fullyQualifiedName1)) {
+        StringMatcher[] ignoreFilters= getIgnoreFilters();
+        if (ignoreFilters != null) {
+            for (StringMatcher ignoreFilter : ignoreFilters) {
+                if (ignoreFilter.match(fullyQualifiedName)) {
                     return true;
                 }
             }
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/AddGetterSetterOperation.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/AddGetterSetterOperation.java
index 4032600..ac45192 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/AddGetterSetterOperation.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/AddGetterSetterOperation.java
@@ -192,7 +192,7 @@
 
 	/**
 	 * Generates a new setter method for the specified field
-	 * 
+	 *
 	 * @param field the field
 	 * @param astRewrite the AST rewrite to use
 	 * @param rewrite the list rewrite to use
@@ -322,16 +322,16 @@
 			}
 
 			fSkipAllExisting= (fSkipExistingQuery == null);
-			
+
 			Set<IField> accessors = new HashSet<>(Arrays.asList(fAccessorFields));
 			Set<IField> getters = new HashSet<>(Arrays.asList(fGetterFields));
 			Set<IField> setters= new HashSet<>(Arrays.asList(fSetterFields));
 			IField[] fields= fType.getFields(); // generate methods in order of field declarations
 			if (!fSort) {
-				for (int i= 0; i < fields.length; i++) {
-					if (accessors.contains(fields[i])) {
-						generateGetterMethod(fields[i], listRewriter);
-						generateSetterMethod(fields[i], astRewrite, listRewriter);
+				for (IField field : fields) {
+					if (accessors.contains(field)) {
+						generateGetterMethod(field, listRewriter);
+						generateSetterMethod(field, astRewrite, listRewriter);
 						monitor.worked(1);
 						if (monitor.isCanceled()) {
 							throw new OperationCanceledException();
@@ -339,18 +339,18 @@
 					}
 				}
 			}
-			for (int i= 0; i < fields.length; i++) {
-				if (getters.contains(fields[i])) {
-					generateGetterMethod(fields[i], listRewriter);
+			for (IField field : fields) {
+				if (getters.contains(field)) {
+					generateGetterMethod(field, listRewriter);
 					monitor.worked(1);
 					if (monitor.isCanceled()) {
 						throw new OperationCanceledException();
 					}
 				}
 			}
-			for (int i= 0; i < fields.length; i++) {
-				if (setters.contains(fields[i])) {
-					generateSetterMethod(fields[i], astRewrite, listRewriter);
+			for (IField field : fields) {
+				if (setters.contains(field)) {
+					generateSetterMethod(field, astRewrite, listRewriter);
 					monitor.worked(1);
 					if (monitor.isCanceled()) {
 						throw new OperationCanceledException();
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/AddImportsOperation.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/AddImportsOperation.java
index d1fb8d9..b1c82cc 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/AddImportsOperation.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/AddImportsOperation.java
@@ -156,7 +156,7 @@
 
 	/**
 	 * Runs the operation.
-	 * 
+	 *
 	 * @param monitor The progress monitor
 	 * @throws CoreException if accessing the CU or rewritting the imports fails
 	 * @throws OperationCanceledException Runtime error thrown when operation is canceled.
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/AddJavaDocStubOperation.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/AddJavaDocStubOperation.java
index 63d4d81..ec8822e 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/AddJavaDocStubOperation.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/AddJavaDocStubOperation.java
@@ -130,8 +130,7 @@
 			String lineDelim= TextUtilities.getDefaultLineDelimiter(document);
 			MultiTextEdit edit= new MultiTextEdit();
 
-			for (int i= 0; i < fMembers.length; i++) {
-				IMember curr= fMembers[i];
+			for (IMember curr : fMembers) {
 				int memberStartOffset= getMemberStartOffset(curr, document);
 
 				String comment= null;
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/AddUnimplementedMethodsOperation.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/AddUnimplementedMethodsOperation.java
index 42c87ac..0bd582b 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/AddUnimplementedMethodsOperation.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/AddUnimplementedMethodsOperation.java
@@ -214,8 +214,7 @@
 				}
 			}
 
-			for (int i= 0; i < methodsToImplement.length; i++) {
-				IMethodBinding curr= methodsToImplement[i];
+			for (IMethodBinding curr : methodsToImplement) {
 				MethodDeclaration stub= StubUtility2.createImplementationStub(cu, astRewrite, importRewrite, context, curr, currTypeBinding, settings, currTypeBinding.isInterface(), insertion);
 				if (stub != null) {
 					fCreatedMethods.add(curr.getKey());
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/SortMembersOperation.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/SortMembersOperation.java
index 579fab7..088af3a 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/SortMembersOperation.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/SortMembersOperation.java
@@ -124,7 +124,7 @@
 		public int compare(BodyDeclaration bodyDeclaration1, BodyDeclaration bodyDeclaration2) {
 			boolean preserved1= fDoNotSortFields && isSortPreserved(bodyDeclaration1);
 			boolean preserved2= fDoNotSortFields && isSortPreserved(bodyDeclaration2);
-			
+
 			// Bug 407759: need to use a common category for all isSortPreserved members that are to be sorted in the same group:
 			int cat1= category(bodyDeclaration1);
 			if (preserved1) {
@@ -138,9 +138,9 @@
 			if (cat1 != cat2) {
 				return getCategoryIndex(cat1) - getCategoryIndex(cat2);
 			}
-			
+
 			// cat1 == cat2 implies preserved1 == preserved2
-			
+
 			if (preserved1) {
 				return preserveRelativeOrder(bodyDeclaration1, bodyDeclaration2);
 			}
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/StubUtility2.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/StubUtility2.java
index 607cfb1..af8ee28 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/StubUtility2.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/StubUtility2.java
@@ -94,17 +94,17 @@
 
 		decl.setName(ast.newSimpleName(binding.getName()));
 		decl.setConstructor(false);
-		
+
 		ITypeBinding bindingReturnType= binding.getReturnType();
 		bindingReturnType = StubUtility2Core.replaceWildcardsAndCaptures(bindingReturnType);
-		
+
 		if (JavaModelUtil.is50OrHigher(javaProject)) {
 			StubUtility2Core.createTypeParameters(imports, context, ast, binding, decl);
-			
+
 		} else {
 			bindingReturnType= bindingReturnType.getErasure();
 		}
-		
+
 		decl.setReturnType2(imports.addImport(bindingReturnType, ast, context, TypeLocation.RETURN_TYPE));
 
 		List<SingleVariableDeclaration> parameters= StubUtility2Core.createParameters(javaProject, imports, context, ast, binding, parameterNames, decl, nullnessDefault);
@@ -181,7 +181,7 @@
 		boolean skipOverride= inInterface && declaringType == typeObject && !Modifier.isPublic(modifiers);
 
 		if (!skipOverride) {
-			StubUtility2Core.addOverrideAnnotation(settings, javaProject, rewrite, imports, decl, binding.getDeclaringClass().isInterface(), null);			
+			StubUtility2Core.addOverrideAnnotation(settings, javaProject, rewrite, imports, decl, binding.getDeclaringClass().isInterface(), null);
 		}
 
 		return decl;
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/ToStringGenerationSettings.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/ToStringGenerationSettings.java
index f9f752c..2c41ec7 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/ToStringGenerationSettings.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/ToStringGenerationSettings.java
@@ -54,7 +54,7 @@
 
 	/**
 	 * Writes given custom builder settings object to the underlying dialog settings.
-	 * 
+	 *
 	 * @param customBuilderSettings1 settings to save
 	 */
 	public void writeCustomBuilderSettings(CustomBuilderSettings customBuilderSettings1) {
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/ASTBatchParser.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/ASTBatchParser.java
index 96adab8..87bda1e 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/ASTBatchParser.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/ASTBatchParser.java
@@ -17,7 +17,6 @@
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Hashtable;
-import java.util.Iterator;
 import java.util.List;
 
 import org.eclipse.core.runtime.IProgressMonitor;
@@ -42,7 +41,7 @@
 	private static final int MAX_AT_ONCE;
 	static {
 		long maxMemory= Runtime.getRuntime().maxMemory() / (1 << 20); // in MiB
-		
+
 		if      (maxMemory >= 2000) MAX_AT_ONCE= 400;
 		else if (maxMemory >= 1500) MAX_AT_ONCE= 300;
 		else if (maxMemory >= 1000) MAX_AT_ONCE= 200;
@@ -78,10 +77,7 @@
 		monitor.beginTask("", compilationUnits.length); //$NON-NLS-1$
 		try {
 
-			ICompilationUnit[][] splited= splitByProject(compilationUnits);
-			for (int i= 0; i < splited.length; i++) {
-				ICompilationUnit[] units= splited[i];
-
+			for (ICompilationUnit[] units : splitByProject(compilationUnits)) {
 				if (units.length <= MAX_AT_ONCE) {
 					createParser(units[0].getJavaProject()).createASTs(units, bindingKeys, requestor, new SubProgressMonitor(monitor, units.length));
 				} else {
@@ -93,7 +89,7 @@
 						List<ICompilationUnit> toParse= list.subList(cursor, end);
 
 						createParser(units[0].getJavaProject()).createASTs(toParse.toArray(new ICompilationUnit[toParse.size()]), bindingKeys, requestor,
-								new SubProgressMonitor(monitor, toParse.size()));
+							new SubProgressMonitor(monitor, toParse.size()));
 						cursor= end;
 					}
 				}
@@ -127,8 +123,7 @@
 
 		Hashtable<IJavaProject, ArrayList<ICompilationUnit>> projectTable= new Hashtable<>();
 
-		for (int i= 0; i < units.length; i++) {
-			ICompilationUnit unit= units[i];
+		for (ICompilationUnit unit : units) {
 			ArrayList<ICompilationUnit> list= projectTable.get(unit.getJavaProject());
 			if (list == null) {
 				list= new ArrayList<>();
@@ -141,8 +136,7 @@
 
 		ICompilationUnit[][] result= new ICompilationUnit[values.size()][];
 		int i= 0;
-		for (Iterator<ArrayList<ICompilationUnit>> iterator= values.iterator(); iterator.hasNext();) {
-			ArrayList<ICompilationUnit> cus= iterator.next();
+		for (ArrayList<ICompilationUnit> cus : values) {
 			result[i]= cus.toArray(new ICompilationUnit[cus.size()]);
 			i++;
 		}
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/TypeAnnotationRewrite.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/TypeAnnotationRewrite.java
index e8aa6ba..40aa059 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/TypeAnnotationRewrite.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/dom/TypeAnnotationRewrite.java
@@ -35,7 +35,7 @@
 
 /**
  * Rewrite helper for type annotations.
- * 
+ *
  * @see JDTUIHelperClasses
  * @since 3.13
  */
@@ -47,7 +47,7 @@
 	 * <p>
 	 * In a combination of {@link ElementType#TYPE_USE} and {@link ElementType#TYPE_PARAMETER}
 	 * the latter is ignored, because this is implied by the former and creates no ambiguity.</p>
-	 * 
+	 *
 	 * @param node ASTNode
 	 * @param childListProperty child list property
 	 * @param rewrite rewrite that removes the nodes
@@ -86,8 +86,7 @@
 	}
 
 	private static IAnnotationBinding findTargetAnnotation(IAnnotationBinding[] metaAnnotations) {
-		for (int i= 0; i < metaAnnotations.length; i++) {
-			IAnnotationBinding binding= metaAnnotations[i];
+		for (IAnnotationBinding binding : metaAnnotations) {
 			ITypeBinding annotationType= binding.getAnnotationType();
 			if (annotationType != null && annotationType.getQualifiedName().equals(Target.class.getName())) {
 				return binding;
@@ -97,17 +96,15 @@
 	}
 
 	private static boolean isTypeUseOnly(IAnnotationBinding binding) {
-		IMemberValuePairBinding[] pairs= binding.getAllMemberValuePairs();
 		boolean typeUseSeen= false;
 		boolean otherSeen= false;
-		for (final IMemberValuePairBinding pair : pairs) {
+		for (final IMemberValuePairBinding pair : binding.getAllMemberValuePairs()) {
 			if (pair.getKey() == null || pair.getKey().equals("value")) { //$NON-NLS-1$
 				Object value= pair.getValue();
 				if (value instanceof Object[]) {
-					Object[] values= (Object[]) value;
-					for (int k= 0; k < values.length; k++) {
-						if (values[k] instanceof IVariableBinding) {
-							String name= ((IVariableBinding) values[k]).getName();
+					for (Object v : (Object[]) value) {
+						if (v instanceof IVariableBinding) {
+							String name= ((IVariableBinding) v).getName();
 							if (name.equals(ElementType.TYPE_USE.name())) {
 								typeUseSeen= true;
 							} else if (!name.equals(ElementType.TYPE_PARAMETER.name())) {
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpConstantsOptions.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpConstantsOptions.java
index d060256..56c1a71 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpConstantsOptions.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpConstantsOptions.java
@@ -15,8 +15,6 @@
  *******************************************************************************/
 package org.eclipse.jdt.internal.corext.fix;
 
-import java.util.Iterator;
-
 import org.eclipse.core.runtime.Assert;
 
 import org.eclipse.jface.preference.IPreferenceStore;
@@ -58,6 +56,8 @@
 		options.setOption(EXPRESSIONS_USE_PARENTHESES_NEVER, CleanUpOptions.TRUE);
 		options.setOption(EXPRESSIONS_USE_PARENTHESES_ALWAYS, CleanUpOptions.FALSE);
 
+		options.setOption(NUMBER_SUFFIX, CleanUpOptions.FALSE);
+
 		//Variable Declarations
 		options.setOption(VARIABLE_DECLARATIONS_USE_FINAL, CleanUpOptions.FALSE);
 		options.setOption(VARIABLE_DECLARATIONS_USE_FINAL_LOCAL_VARIABLES, CleanUpOptions.TRUE);
@@ -151,6 +151,8 @@
 		options.setOption(EXPRESSIONS_USE_PARENTHESES_NEVER, CleanUpOptions.TRUE);
 		options.setOption(EXPRESSIONS_USE_PARENTHESES_ALWAYS, CleanUpOptions.FALSE);
 
+		options.setOption(NUMBER_SUFFIX, CleanUpOptions.FALSE);
+
 		//Variable Declarations
 		options.setOption(VARIABLE_DECLARATIONS_USE_FINAL, CleanUpOptions.FALSE);
 		options.setOption(VARIABLE_DECLARATIONS_USE_FINAL_LOCAL_VARIABLES, CleanUpOptions.TRUE);
@@ -218,8 +220,7 @@
 
 	public static void initDefaults(IPreferenceStore store) {
 		CleanUpOptions settings= JavaPlugin.getDefault().getCleanUpRegistry().getDefaultOptions(CleanUpConstants.DEFAULT_CLEAN_UP_OPTIONS);
-		for (Iterator<String> iterator= settings.getKeys().iterator(); iterator.hasNext();) {
-			String key= iterator.next();
+		for (String key : settings.getKeys()) {
 			store.setDefault(key, settings.getValue(key));
 		}
 
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpPostSaveListener.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpPostSaveListener.java
index e62875b..2f01750 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpPostSaveListener.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpPostSaveListener.java
@@ -16,7 +16,6 @@
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.Map;
 import java.util.Set;
@@ -150,23 +149,23 @@
 			try {
 				manager.connect(fFile.getFullPath(), LocationKind.IFILE, new SubProgressMonitor(pm, 1));
 				buffer= manager.getTextFileBuffer(fFile.getFullPath(), LocationKind.IFILE);
-				
+
 				final IDocument document= buffer.getDocument();
 				final long oldFileValue= fFile.getModificationStamp();
 				final LinkedList<UndoEdit> undoEditCollector= new LinkedList<>();
 				final long[] oldDocValue= new long[1];
 				final boolean[] setContentStampSuccess= { false };
-				
+
 				if (! buffer.isSynchronizationContextRequested()) {
 					performEdit(document, oldFileValue, undoEditCollector, oldDocValue, setContentStampSuccess);
-					
+
 				} else {
 					ITextFileBufferManager fileBufferManager= FileBuffers.getTextFileBufferManager();
-					
+
 					class UIRunnable implements Runnable {
 						public boolean fDone;
 						public Exception fException;
-						
+
 						@Override
 						public void run() {
 							synchronized (this) {
@@ -186,7 +185,7 @@
 						}
 					}
 					UIRunnable runnable= new UIRunnable();
-					
+
 					synchronized (runnable) {
 						fileBufferManager.execute(runnable);
 						while (! runnable.fDone) {
@@ -196,7 +195,7 @@
 							}
 						}
 					}
-					
+
 					if (runnable.fException != null) {
 						if (runnable.fException instanceof BadLocationException) {
 							throw (BadLocationException) runnable.fException;
@@ -230,8 +229,7 @@
 			}
 
 			// perform the changes
-			for (int index= 0; index < fUndos.length; index++) {
-				UndoEdit edit= fUndos[index];
+			for (UndoEdit edit : fUndos) {
 				UndoEdit redo= edit.apply(document, TextEdit.CREATE_UNDO);
 				editCollector.addFirst(redo);
 			}
@@ -254,7 +252,7 @@
 		private final String fCleanUpNames;
 
 		protected SlowCleanUpWarningDialog(Shell parent, String title, String cleanUpNames) {
-			super(ID, parent, title, null, null, MessageDialog.WARNING, new String[] { IDialogConstants.OK_LABEL, IDialogConstants.CANCEL_LABEL }, 0);
+			super(ID, parent, title, null, null, MessageDialog.WARNING, new String[] { IDialogConstants.OK_LABEL}, 0);
 			fCleanUpNames= cleanUpNames;
 		}
 
@@ -359,20 +357,20 @@
 
     			do {
     				RefactoringStatus preCondition= new RefactoringStatus();
-    				for (int i= 0; i < cleanUps.length; i++) {
-    					RefactoringStatus conditions= cleanUps[i].checkPreConditions(unit.getJavaProject(), new ICompilationUnit[] {unit}, new SubProgressMonitor(monitor, 5));
-    					preCondition.merge(conditions);
-    				}
+					for (ICleanUp cleanUp : cleanUps) {
+						RefactoringStatus conditions= cleanUp.checkPreConditions(unit.getJavaProject(), new ICompilationUnit[] {unit}, new SubProgressMonitor(monitor, 5));
+						preCondition.merge(conditions);
+					}
     				if (showStatus(preCondition) != Window.OK)
     					return;
 
     				Map<String, String> options= new HashMap<>();
-    				for (int i= 0; i < cleanUps.length; i++) {
-    					Map<String, String> map= cleanUps[i].getRequirements().getCompilerOptions();
-    					if (map != null) {
-    						options.putAll(map);
-    					}
-    				}
+					for (ICleanUp cleanUp : cleanUps) {
+						Map<String, String> map= cleanUp.getRequirements().getCompilerOptions();
+						if (map != null) {
+							options.putAll(map);
+						}
+					}
 
     				CompilationUnit ast= null;
     				if (requiresAST(cleanUps)) {
@@ -390,10 +388,10 @@
 					CleanUpChange change= CleanUpRefactoring.calculateChange(context, cleanUps, undoneCleanUps, slowCleanUps);
 
     				RefactoringStatus postCondition= new RefactoringStatus();
-    				for (int i= 0; i < cleanUps.length; i++) {
-    					RefactoringStatus conditions= cleanUps[i].checkPostConditions(new SubProgressMonitor(monitor, 1));
-    					postCondition.merge(conditions);
-    				}
+					for (ICleanUp cleanUp : cleanUps) {
+						RefactoringStatus conditions= cleanUp.checkPostConditions(new SubProgressMonitor(monitor, 1));
+						postCondition.merge(conditions);
+					}
     				if (showStatus(postCondition) != Window.OK)
     					return;
 
@@ -467,8 +465,8 @@
 	private static ICleanUp[] getCleanUps(Map<String, String> settings, Set<String> ids) {
 		ICleanUp[] result= JavaPlugin.getDefault().getCleanUpRegistry().createCleanUps(ids);
 
-		for (int i= 0; i < result.length; i++) {
-			result[i].setOptions(new MapCleanUpOptions(settings));
+		for (ICleanUp cleanUp : result) {
+			cleanUp.setOptions(new MapCleanUpOptions(settings));
 		}
 
 		return result;
@@ -543,8 +541,7 @@
 				performChangeOperation.run(new SubProgressMonitor(monitor, 5));
 
 				ArrayList<Region> result= new ArrayList<>();
-				for (int i= 0; i < positions.length; i++) {
-					Position position= positions[i];
+				for (Position position : positions) {
 					if (!position.isDeleted())
 						result.add(new Region(position.getOffset(), position.getLength()));
 				}
@@ -566,17 +563,18 @@
 	}
 
 	private boolean requiresAST(ICleanUp[] cleanUps) {
-		for (int i= 0; i < cleanUps.length; i++) {
-	        if (cleanUps[i].getRequirements().requiresAST())
-	        	return true;
-        }
+		for (ICleanUp cleanUp : cleanUps) {
+			if (cleanUp.getRequirements().requiresAST()) {
+				return true;
+			}
+		}
 
 	    return false;
     }
 
 	private boolean requiresChangedRegions(ICleanUp[] cleanUps) {
-		for (int i= 0; i < cleanUps.length; i++) {
-			CleanUpRequirements requirements= cleanUps[i].getRequirements();
+		for (ICleanUp cleanUp : cleanUps) {
+			CleanUpRequirements requirements= cleanUp.getRequirements();
 			if (requirements.requiresChangedRegions())
 				return true;
 		}
@@ -608,13 +606,12 @@
 
 		Map<String, String> projectOptions= project.getOptions(true);
 
-		for (Iterator<String> iterator= cleanUpOptions.keySet().iterator(); iterator.hasNext();) {
-	        String key= iterator.next();
-	        String projectOption= projectOptions.get(key);
+		for (String key : cleanUpOptions.keySet()) {
+			String projectOption= projectOptions.get(key);
 			String cleanUpOption= cleanUpOptions.get(key);
 			if (!strongerEquals(projectOption, cleanUpOption))
 				return false;
-        }
+		}
 
 	    return true;
     }
@@ -659,15 +656,13 @@
 	private void showSlowCleanUpsWarning(HashSet<ICleanUp> slowCleanUps) {
 
 		final StringBuilder cleanUpNames= new StringBuilder();
-		for (Iterator<ICleanUp> iterator= slowCleanUps.iterator(); iterator.hasNext();) {
-			ICleanUp cleanUp= iterator.next();
+		for (ICleanUp cleanUp : slowCleanUps) {
 			String[] descriptions= cleanUp.getStepDescriptions();
 			if (descriptions != null) {
-				for (int i= 0; i < descriptions.length; i++) {
+				for (String description : descriptions) {
 					if (cleanUpNames.length() > 0)
 						cleanUpNames.append('\n');
-
-					cleanUpNames.append(descriptions[i]);
+					cleanUpNames.append(description);
 				}
 			}
 		}
@@ -675,12 +670,7 @@
 		if (Display.getCurrent() != null) {
 			showSlowCleanUpDialog(cleanUpNames);
 		} else {
-			Display.getDefault().asyncExec(new Runnable() {
-				@Override
-				public void run() {
-					showSlowCleanUpDialog(cleanUpNames);
-				}
-			});
+			Display.getDefault().asyncExec(() -> showSlowCleanUpDialog(cleanUpNames));
 		}
 	}
 
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpPreferenceUtil.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpPreferenceUtil.java
index a1a9778..d265092 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpPreferenceUtil.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpPreferenceUtil.java
@@ -18,7 +18,6 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.preferences.DefaultScope;
@@ -67,12 +66,10 @@
     		}
     	}
 
-    	List<Profile> builtInProfiles= getBuiltInProfiles();
-    	for (Iterator<Profile> iterator= builtInProfiles.iterator(); iterator.hasNext();) {
-    		Profile profile= iterator.next();
-            if (id.equals(profile.getID()))
-            	return profile.getSettings();
-        }
+    	for (Profile profile : getBuiltInProfiles()) {
+			if (id.equals(profile.getID()))
+				return profile.getSettings();
+		}
 
     	if (id.equals(CleanUpConstants.SAVE_PARTICIPANT_PROFILE))
     		return JavaPlugin.getDefault().getCleanUpRegistry().getDefaultOptions(CleanUpConstants.DEFAULT_SAVE_ACTION_OPTIONS).getMap();
@@ -89,11 +86,10 @@
         if (list == null)
         	return null;
 
-        for (Iterator<Profile> iterator= list.iterator(); iterator.hasNext();) {
-        	Profile profile= iterator.next();
-        	if (id.equals(profile.getID()))
-        		return profile.getSettings();
-        }
+		for (Profile profile : list) {
+			if (id.equals(profile.getID()))
+				return profile.getSettings();
+		}
 
     	return null;
     }
@@ -105,13 +101,11 @@
     	CleanUpProfileVersioner versioner= new CleanUpProfileVersioner();
 
     	CleanUpOptions defaultOptions= JavaPlugin.getDefault().getCleanUpRegistry().getDefaultOptions(CleanUpConstants.DEFAULT_CLEAN_UP_OPTIONS);
-    	KeySet[] keySets= CleanUpProfileManager.KEY_SETS;
 
     	boolean hasValues= false;
-		for (int i= 0; i < keySets.length; i++) {
-	        KeySet keySet= keySets[i];
-	        IEclipsePreferences preferences= context.getNode(keySet.getNodeName());
-	        for (final Iterator<String> keyIter = keySet.getKeys().iterator(); keyIter.hasNext(); ) {
+		for (KeySet keySet : CleanUpProfileManager.KEY_SETS) {
+			IEclipsePreferences preferences= context.getNode(keySet.getNodeName());
+			for (final Iterator<String> keyIter = keySet.getKeys().iterator(); keyIter.hasNext(); ) {
 				final String key= keyIter.next();
 				String val= preferences.get(key, null);
 				if (val != null) {
@@ -121,7 +115,7 @@
 				}
 				profileOptions.put(key, val);
 			}
-        }
+		}
 
 		if (!hasValues)
 			return null;
@@ -149,32 +143,27 @@
 		}
 
 		Map<String, String> result= new HashMap<>();
-		Set<String> keys= JavaPlugin.getDefault().getCleanUpRegistry().getDefaultOptions(CleanUpConstants.DEFAULT_SAVE_ACTION_OPTIONS).getKeys();
-		for (Iterator<String> iterator= keys.iterator(); iterator.hasNext();) {
-	        String key= iterator.next();
-	        result.put(key, node.get(SAVE_PARTICIPANT_KEY_PREFIX + key, CleanUpOptions.FALSE));
-        }
+		for (String key : JavaPlugin.getDefault().getCleanUpRegistry().getDefaultOptions(CleanUpConstants.DEFAULT_SAVE_ACTION_OPTIONS).getKeys()) {
+			result.put(key, node.get(SAVE_PARTICIPANT_KEY_PREFIX + key, CleanUpOptions.FALSE));
+		}
 
 		return result;
 	}
 
     public static void saveSaveParticipantOptions(IScopeContext context, Map<String, String> settings) {
     	IEclipsePreferences node= context.getNode(JavaUI.ID_PLUGIN);
-    	for (Iterator<String> iterator= settings.keySet().iterator(); iterator.hasNext();) {
-	        String key= iterator.next();
-	        node.put(SAVE_PARTICIPANT_KEY_PREFIX + key, settings.get(key));
-        }
+		for (String key : settings.keySet()) {
+			node.put(SAVE_PARTICIPANT_KEY_PREFIX + key, settings.get(key));
+		}
     }
 
 	public static boolean hasSettingsInScope(IScopeContext context) {
     	IEclipsePreferences node= context.getNode(JavaUI.ID_PLUGIN);
 
-    	Set<String> keys= JavaPlugin.getDefault().getCleanUpRegistry().getDefaultOptions(CleanUpConstants.DEFAULT_SAVE_ACTION_OPTIONS).getKeys();
-		for (Iterator<String> iterator= keys.iterator(); iterator.hasNext();) {
-			String key= iterator.next();
+    	for (String key : JavaPlugin.getDefault().getCleanUpRegistry().getDefaultOptions(CleanUpConstants.DEFAULT_SAVE_ACTION_OPTIONS).getKeys()) {
 			if (node.get(SAVE_PARTICIPANT_KEY_PREFIX + key, null) != null)
 				return true;
-        }
+		}
 
     	return false;
     }
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpRefactoring.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpRefactoring.java
index 0d99040..fa41cf4 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpRefactoring.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpRefactoring.java
@@ -148,14 +148,11 @@
 			if (Display.getCurrent() == null) {
 				final Change[] result= new Change[1];
 				final CoreException[] exs= new CoreException[1];
-				Display.getDefault().syncExec(new Runnable() {
-					@Override
-					public void run() {
-						try {
-							result[0]= CleanUpChange.super.perform(pm);
-						} catch (CoreException e) {
-							exs[0]= e;
-						}
+				Display.getDefault().syncExec(() -> {
+					try {
+						result[0]= CleanUpChange.super.perform(pm);
+					} catch (CoreException e) {
+						exs[0]= e;
 					}
 				});
 
@@ -260,8 +257,7 @@
 			fMonitor= monitor;
 			fUndoneElements= new ArrayList<>();
 			fCompilationUnitParseElementMap= new Hashtable<>(parseList.size());
-			for (Iterator<ParseListElement> iter= parseList.iterator(); iter.hasNext();) {
-				ParseListElement element= iter.next();
+			for (ParseListElement element : parseList) {
 				fCompilationUnitParseElementMap.put(element.getTarget().getCompilationUnit(), element);
 			}
 		}
@@ -341,13 +337,12 @@
 			fWorkingCopies= new Hashtable<>();
 
 			fParseList= new ArrayList<>(targets.length);
-			for (int i= 0; i < targets.length; i++) {
-				fParseList.add(new ParseListElement(targets[i], cleanUps));
+			for (CleanUpTarget target : targets) {
+				fParseList.add(new ParseListElement(target, cleanUps));
 			}
 
 			fCleanUpOptions= new Hashtable<>();
-			for (int i= 0; i < cleanUps.length; i++) {
-				ICleanUp cleanUp= cleanUps[i];
+			for (ICleanUp cleanUp : cleanUps) {
 				Map<String, String> currentCleanUpOption= cleanUp.getRequirements().getCompilerOptions();
 				if (currentCleanUpOption != null)
 					fCleanUpOptions.putAll(currentCleanUpOption);
@@ -366,9 +361,7 @@
 			List<ICompilationUnit> sourceList= new ArrayList<>();
 
 			try {
-				for (Iterator<ParseListElement> iter= fParseList.iterator(); iter.hasNext();) {
-					ParseListElement element= iter.next();
-
+				for (ParseListElement element : fParseList) {
 					ICompilationUnit compilationUnit= element.getTarget().getCompilationUnit();
 					if (fSolutions.containsKey(compilationUnit)) {
 						if (fWorkingCopies.containsKey(compilationUnit)) {
@@ -440,9 +433,10 @@
 		}
 
 		private boolean requiresAST(ICleanUp[] cleanUps) {
-			for (int i= 0; i < cleanUps.length; i++) {
-				if (cleanUps[i].getRequirements().requiresAST())
+			for (ICleanUp cleanUp : cleanUps) {
+				if (cleanUp.getRequirements().requiresAST()) {
 					return true;
+				}
 			}
 			return false;
 		}
@@ -451,9 +445,7 @@
 
 			Change[] result= new Change[fSolutions.size()];
 			int i=0;
-			for (Iterator<Entry<ICompilationUnit, List<CleanUpChange>>> iterator= fSolutions.entrySet().iterator(); iterator.hasNext();) {
-				Entry<ICompilationUnit, List<CleanUpChange>>  entry= iterator.next();
-
+			for (Entry<ICompilationUnit, List<CleanUpChange>> entry : fSolutions.entrySet()) {
 				List<CleanUpChange> changes= entry.getValue();
 				ICompilationUnit unit= entry.getKey();
 
@@ -555,8 +547,7 @@
 
 	public CleanUpTarget[] getCleanUpTargets() {
 		List<CleanUpTarget> result= new ArrayList<>();
-		for (Iterator<List<CleanUpTarget>> iter= fProjects.values().iterator(); iter.hasNext();) {
-			List<CleanUpTarget> projectTargets= iter.next();
+		for (List<CleanUpTarget> projectTargets : fProjects.values()) {
 			result.addAll(projectTargets);
 		}
 		return result.toArray(new CleanUpTarget[result.size()]);
@@ -564,8 +555,7 @@
 
 	public int getCleanUpTargetsSize() {
 		int result= 0;
-		for (Iterator<List<CleanUpTarget>> iter= fProjects.values().iterator(); iter.hasNext();) {
-			List<CleanUpTarget> projectTargets= iter.next();
+		for (List<CleanUpTarget> projectTargets : fProjects.values()) {
 			result+= projectTargets.size();
 		}
 		return result;
@@ -644,30 +634,24 @@
 		try {
 			DynamicValidationStateChange change= new DynamicValidationStateChange(getName());
 			change.setSchedulingRule(getSchedulingRule());
-			for (Iterator<Entry<IJavaProject, List<CleanUpTarget>>> projectIter= fProjects.entrySet().iterator(); projectIter.hasNext();) {
-				Entry<IJavaProject, List<CleanUpTarget>> entry= projectIter.next();
+			for (Entry<IJavaProject, List<CleanUpTarget>> entry : fProjects.entrySet()) {
 				IJavaProject project= entry.getKey();
 				List<CleanUpTarget> targetsList= entry.getValue();
 				CleanUpTarget[] targets= targetsList.toArray(new CleanUpTarget[targetsList.size()]);
-
 				if (fUseOptionsFromProfile) {
 					result.merge(setOptionsFromProfile(project, cleanUps));
 					if (result.hasFatalError())
 						return result;
 				}
-
 				result.merge(checkPreConditions(project, targets, new SubProgressMonitor(pm, 3 * cleanUps.length)));
 				if (result.hasFatalError())
 					return result;
-
 				Change[] changes= cleanUpProject(project, targets, cleanUps, pm);
-
 				result.merge(checkPostConditions(new SubProgressMonitor(pm, cleanUps.length)));
 				if (result.hasFatalError())
 					return result;
-
-				for (int i= 0; i < changes.length; i++) {
-					change.add(changes[i]);
+				for (Change c : changes) {
+					change.add(c);
 				}
 			}
 			fChange= change;
@@ -683,9 +667,7 @@
 	}
 
 	private void findFilesToBeModified(CompositeChange change, List<IResource> result) throws JavaModelException {
-		Change[] children= change.getChildren();
-		for (int i= 0; i < children.length; i++) {
-			Change child= children[i];
+		for (Change child : change.getChildren()) {
 			if (child instanceof CompositeChange) {
 				findFilesToBeModified((CompositeChange)child, result);
 			} else if (child instanceof MultiStateCompilationUnitChange) {
@@ -720,8 +702,9 @@
 			return RefactoringStatus.createFatalErrorStatus(Messages.format(FixMessages.CleanUpRefactoring_could_not_retrive_profile, BasicElementLabels.getResourceName(javaProject.getProject())));
 
 		CleanUpOptions cleanUpOptions= new MapCleanUpOptions(options);
-		for (int i= 0; i < cleanUps.length; i++)
-			cleanUps[i].setOptions(cleanUpOptions);
+		for (ICleanUp cleanUp : cleanUps) {
+			cleanUp.setOptions(cleanUpOptions);
+		}
 
 		return new RefactoringStatus();
 	}
@@ -738,8 +721,8 @@
 		monitor.beginTask("", compilationUnits.length * cleanUps.length); //$NON-NLS-1$
 		monitor.subTask(Messages.format(FixMessages.CleanUpRefactoring_Initialize_message, BasicElementLabels.getResourceName(javaProject.getProject())));
 		try {
-			for (int j= 0; j < cleanUps.length; j++) {
-				result.merge(cleanUps[j].checkPreConditions(javaProject, compilationUnits, new SubProgressMonitor(monitor, compilationUnits.length)));
+			for (ICleanUp cleanUp : cleanUps) {
+				result.merge(cleanUp.checkPreConditions(javaProject, compilationUnits, new SubProgressMonitor(monitor, compilationUnits.length)));
 				if (result.hasFatalError())
 					return result;
 			}
@@ -757,8 +740,8 @@
 		monitor.beginTask("", cleanUps.length); //$NON-NLS-1$
 		monitor.subTask(FixMessages.CleanUpRefactoring_checkingPostConditions_message);
 		try {
-			for (int j= 0; j < cleanUps.length; j++) {
-				result.merge(cleanUps[j].checkPostConditions(new SubProgressMonitor(monitor, 1)));
+			for (ICleanUp cleanUp : cleanUps) {
+				result.merge(cleanUp.checkPostConditions(new SubProgressMonitor(monitor, 1)));
 			}
 		} finally {
 			monitor.done();
@@ -828,9 +811,8 @@
 	}
 
 	private static void copyChangeGroups(CompilationUnitChange target, CompilationUnitChange source) {
-		TextEditBasedChangeGroup[] changeGroups= source.getChangeGroups();
-		for (int i= 0; i < changeGroups.length; i++) {
-			TextEditGroup textEditGroup= changeGroups[i].getTextEditGroup();
+		for (TextEditBasedChangeGroup changeGroup : source.getChangeGroups()) {
+			TextEditGroup textEditGroup= changeGroup.getTextEditGroup();
 			TextEditGroup newGroup;
 			if (textEditGroup instanceof CategorizedTextEditGroup) {
 				String label= textEditGroup.getName();
@@ -838,9 +820,8 @@
 			} else {
 				newGroup= new TextEditGroup(textEditGroup.getName());
 			}
-			TextEdit[] textEdits= textEditGroup.getTextEdits();
-			for (int j= 0; j < textEdits.length; j++) {
-				newGroup.addTextEdit(textEdits[j]);
+			for (TextEdit textEdit : textEditGroup.getTextEdits()) {
+				newGroup.addTextEdit(textEdit);
 			}
 			target.addTextEditGroup(newGroup);
 		}
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpRegistry.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpRegistry.java
index 87fa39af..dcd7d3e 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpRegistry.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpRegistry.java
@@ -15,7 +15,6 @@
 
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Comparator;
 import java.util.Set;
 
 import com.ibm.icu.text.Collator;
@@ -53,7 +52,7 @@
 
 /**
  * The clean up registry provides a set of clean ups and there corresponding UI representatives.
- * 
+ *
  * @since 3.4
  */
 public class CleanUpRegistry {
@@ -105,7 +104,7 @@
 		private static final String ATTRIBUTE_ID_CLASS= "class"; //$NON-NLS-1$
 		private static final String ATTRIBUTE_ID_NAME= "name"; //$NON-NLS-1$
 		private static final String ATTRIBUTE_NAME_KIND= "cleanUpKind"; //$NON-NLS-1$
-		
+
 		private final String fName;
 		private final IConfigurationElement fElement;
 		private int fKind;
@@ -231,17 +230,14 @@
 					fOptionsProvider= (ICleanUpOptionsInitializer)fElement.createExecutableExtension(ATTRIBUTE_NAME_CLASS);
 				} catch (CoreException e) {
 					JavaPlugin.log(e);
-					fOptionsProvider= new ICleanUpOptionsInitializer() {
-						@Override
-						public void setDefaultOptions(CleanUpOptions options) {
-						}
+					fOptionsProvider= options -> {
 					};
 				}
 			}
 			return fOptionsProvider;
 		}
 	}
-	
+
 	private static final String EXTENSION_POINT_NAME= "cleanUps"; //$NON-NLS-1$
 	private static final String CLEAN_UP_CONFIGURATION_ELEMENT_NAME= "cleanUp"; //$NON-NLS-1$
 	private static final String TABPAGE_CONFIGURATION_ELEMENT_NAME= "cleanUpConfigurationUI"; //$NON-NLS-1$
@@ -257,7 +253,7 @@
 
 	/**
 	 * Creates and returns the registered clean ups that don't fail upon creation.
-	 * 
+	 *
 	 * @return an array of clean ups
 	 */
 	public synchronized ICleanUp[] createCleanUps() {
@@ -266,7 +262,7 @@
 
 	/**
 	 * Creates and returns the registered clean ups that don't fail upon creation.
-	 * 
+	 *
 	 * @param ids the ids of the clean ups to create, or <code>null</code> to create all
 	 * @return an array of clean ups
 	 * @since 3.5
@@ -274,9 +270,9 @@
 	public synchronized ICleanUp[] createCleanUps(Set<String> ids) {
 		ensureCleanUpsRegistered();
 		ArrayList<ICleanUp> result= new ArrayList<>(fCleanUpDescriptors.length);
-		for (int i= 0; i < fCleanUpDescriptors.length; i++) {
-			if (ids == null || ids.contains(fCleanUpDescriptors[i].getId())) {
-				ICleanUp cleanUp= fCleanUpDescriptors[i].createCleanUp();
+		for (CleanUpDescriptor descriptor : fCleanUpDescriptors) {
+			if (ids == null || ids.contains(descriptor.getId())) {
+				ICleanUp cleanUp= descriptor.createCleanUp();
 				if (cleanUp != null)
 					result.add(cleanUp);
 			}
@@ -286,9 +282,9 @@
 
 	/**
 	 * @param kind the kind of clean up for which to retrieve the configuratin pages
-	 * 
+	 *
 	 * @return set of clean up tab page descriptors
-	 * 
+	 *
 	 * @see CleanUpConstants#DEFAULT_CLEAN_UP_OPTIONS
 	 * @see CleanUpConstants#DEFAULT_SAVE_ACTION_OPTIONS
 	 */
@@ -296,19 +292,20 @@
 		ensurePagesRegistered();
 
 		ArrayList<CleanUpTabPageDescriptor> result= new ArrayList<>();
-		for (int i= 0; i < fPageDescriptors.length; i++) {
-			if (fPageDescriptors[i].getKind() == kind)
-				result.add(fPageDescriptors[i]);
+		for (CleanUpTabPageDescriptor descriptor : fPageDescriptors) {
+			if (descriptor.getKind() == kind) {
+				result.add(descriptor);
+			}
 		}
 		return result.toArray(new CleanUpTabPageDescriptor[result.size()]);
 	}
 
 	/**
 	 * Returns the default options for the specified clean up kind.
-	 * 
+	 *
 	 * @param kind the kind of clean up for which to retrieve the options
 	 * @return the default options
-	 * 
+	 *
 	 * @see CleanUpConstants#DEFAULT_CLEAN_UP_OPTIONS
 	 * @see CleanUpConstants#DEFAULT_SAVE_ACTION_OPTIONS
 	 */
@@ -316,8 +313,7 @@
 		ensureCleanUpInitializersRegistered();
 
 		CleanUpOptions options= new CleanUpOptions();
-		for (int i= 0; i < fCleanUpInitializerDescriptors.length; i++) {
-			CleanUpInitializerDescriptor descriptor= fCleanUpInitializerDescriptors[i];
+		for (CleanUpInitializerDescriptor descriptor : fCleanUpInitializerDescriptors) {
 			if (descriptor.getKind() == kind) {
 				descriptor.getOptionsInitializer().setDefaultOptions(options);
 			}
@@ -335,10 +331,7 @@
 		final ArrayList<CleanUpDescriptor> descriptors= new ArrayList<>();
 
 		IExtensionPoint point= Platform.getExtensionRegistry().getExtensionPoint(JavaPlugin.getPluginId(), EXTENSION_POINT_NAME);
-		IConfigurationElement[] elements= point.getConfigurationElements();
-		for (int i= 0; i < elements.length; i++) {
-			IConfigurationElement element= elements[i];
-
+		for (IConfigurationElement element : point.getConfigurationElements()) {
 			if (CLEAN_UP_CONFIGURATION_ELEMENT_NAME.equals(element.getName())) {
 				descriptors.add(new CleanUpDescriptor(element));
 			}
@@ -350,7 +343,7 @@
 			final CleanUpDescriptor cleanUpDescriptor= descriptors.get(i);
 			final boolean disable[]= new boolean[1];
 			ISafeRunnable runnable= new SafeRunnable() {
-				
+
 				@Override
 				public void run() throws Exception {
 					ICleanUp cleanUp= cleanUpDescriptor.createCleanUp();
@@ -427,27 +420,21 @@
 	private synchronized void ensurePagesRegistered() {
 		if (fPageDescriptors != null)
 			return;
-		
+
 		ArrayList<CleanUpTabPageDescriptor> result= new ArrayList<>();
 
 		IExtensionPoint point= Platform.getExtensionRegistry().getExtensionPoint(JavaPlugin.getPluginId(), EXTENSION_POINT_NAME);
-		IConfigurationElement[] elements= point.getConfigurationElements();
-		for (int i= 0; i < elements.length; i++) {
-			IConfigurationElement element= elements[i];
-
+		for (IConfigurationElement element : point.getConfigurationElements()) {
 			if (TABPAGE_CONFIGURATION_ELEMENT_NAME.equals(element.getName())) {
 				result.add(new CleanUpTabPageDescriptor(element));
 			}
 		}
 
 		fPageDescriptors= result.toArray(new CleanUpTabPageDescriptor[result.size()]);
-		Arrays.sort(fPageDescriptors, new Comparator<CleanUpTabPageDescriptor>() {
-			@Override
-			public int compare(CleanUpTabPageDescriptor o1, CleanUpTabPageDescriptor o2) {
-				String name1= o1.getName();
-				String name2= o2.getName();
-				return Collator.getInstance().compare(name1.replaceAll("&", ""), name2.replaceAll("&", "")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
-			}
+		Arrays.sort(fPageDescriptors, (o1, o2) -> {
+			String name1= o1.getName();
+			String name2= o2.getName();
+			return Collator.getInstance().compare(name1.replaceAll("&", ""), name2.replaceAll("&", "")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
 		});
 	}
 
@@ -458,10 +445,7 @@
 		ArrayList<CleanUpInitializerDescriptor> result= new ArrayList<>();
 
 		IExtensionPoint point= Platform.getExtensionRegistry().getExtensionPoint(JavaPlugin.getPluginId(), EXTENSION_POINT_NAME);
-		IConfigurationElement[] elements= point.getConfigurationElements();
-		for (int i= 0; i < elements.length; i++) {
-			IConfigurationElement element= elements[i];
-
+		for (IConfigurationElement element : point.getConfigurationElements()) {
 			if (CLEAN_UP_INITIALIZER_CONFIGURATION_ELEMENT_NAME.equals(element.getName())) {
 				result.add(new CleanUpInitializerDescriptor(element));
 			}
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CodeFormatFix.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CodeFormatFix.java
index 8a63859..1282f5c 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CodeFormatFix.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CodeFormatFix.java
@@ -152,9 +152,7 @@
 						CategorizedTextEditGroup group= new CategorizedTextEditGroup(label, new GroupCategorySet(new GroupCategory(label, label, label)));
 
 						if (edit instanceof MultiTextEdit) {
-							TextEdit[] children= ((MultiTextEdit)edit).getChildren();
-							for (int i= 0; i < children.length; i++) {
-								TextEdit child= children[i];
+							for (TextEdit child : ((MultiTextEdit)edit).getChildren()) {
 								edit.removeChild(child);
 								if (!TextEditUtil.overlaps(formatEdit, child) && !TextEditUtil.overlaps(otherEdit, child)) {
 									otherEdit.addChild(child);
@@ -196,7 +194,7 @@
 	 * Returns the index in document of a none whitespace character between start (inclusive) and
 	 * end (inclusive) such that if more then one such character the index returned is the largest
 	 * possible (closest to end). Returns start - 1 if no such character.
-	 * 
+	 *
 	 * @param start the start
 	 * @param end the end
 	 * @param document the document
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/ExpressionsFix.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/ExpressionsFix.java
index fb9fe17..1be787b 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/ExpressionsFix.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/ExpressionsFix.java
@@ -110,10 +110,8 @@
 			ASTRewrite rewrite= cuRewrite.getASTRewrite();
 			AST ast= cuRewrite.getRoot().getAST();
 
-			for (int i= 0; i < fExpressions.length; i++) {
+			for (Expression expression : fExpressions) {
 				// add parenthesis around expression
-				Expression expression= fExpressions[i];
-
 				ParenthesizedExpression parenthesizedExpression= ast.newParenthesizedExpression();
 				parenthesizedExpression.setExpression((Expression) rewrite.createCopyTarget(expression));
 				rewrite.replace(expression, parenthesizedExpression, group);
@@ -166,8 +164,7 @@
 			return null;
 		// check sub-expressions in fully covered nodes
 		final ArrayList<ASTNode> changedNodes = new ArrayList<>();
-		for (int i= 0; i < coveredNodes.length; i++) {
-			ASTNode covered = coveredNodes[i];
+		for (ASTNode covered : coveredNodes) {
 			if (covered instanceof InfixExpression)
 				covered.accept(new MissingParenthesisVisitor(changedNodes));
 		}
@@ -182,8 +179,7 @@
 	public static ExpressionsFix createRemoveUnnecessaryParenthesisFix(CompilationUnit compilationUnit, ASTNode[] nodes) {
 		// check sub-expressions in fully covered nodes
 		final ArrayList<ParenthesizedExpression> changedNodes= new ArrayList<>();
-		for (int i= 0; i < nodes.length; i++) {
-			ASTNode covered= nodes[i];
+		for (ASTNode covered : nodes) {
 			if (covered instanceof ParenthesizedExpression || covered instanceof InfixExpression)
 				covered.accept(new UnnecessaryParenthesisVisitor(changedNodes));
 		}
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/ExternalNullAnnotationChangeProposals.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/ExternalNullAnnotationChangeProposals.java
index 92739ef..55fd45d 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/ExternalNullAnnotationChangeProposals.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/ExternalNullAnnotationChangeProposals.java
@@ -95,7 +95,7 @@
 
 /**
  * Proposals for null annotations that modify external annotations, rather than Java source files.
- * 
+ *
  * @see <a href="https://bugs.eclipse.org/458200">[null] "Annotate" proposals for adding external
  *      null annotations to library classes</a>
  * @since 3.11
@@ -358,7 +358,7 @@
 		if (binding == null || binding.isRecovered()) throw new MissingBindingException(type);
 		return binding;
 	}
-	
+
 	static IMethodBinding resolveBinding(MethodDeclaration method) {
 		IMethodBinding binding= method.resolveBinding();
 		if (binding == null || binding.isRecovered()) throw new MissingBindingException(method);
@@ -870,7 +870,7 @@
 			fBuffer.append(resolveBinding(node).getBinaryName());
 			return false;
 		}
-	
+
 		String binaryName(ITypeBinding type) {
 			return type.getBinaryName().replace('.', '/');
 		}
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/ImportsFix.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/ImportsFix.java
index 065a81e..d284231 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/ImportsFix.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/ImportsFix.java
@@ -21,7 +21,6 @@
 import org.eclipse.ltk.core.refactoring.RefactoringStatus;
 
 import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.ISourceRange;
 import org.eclipse.jdt.core.dom.CompilationUnit;
 import org.eclipse.jdt.core.manipulation.OrganizeImportsOperation;
 import org.eclipse.jdt.core.manipulation.OrganizeImportsOperation.IChooseImportQuery;
@@ -42,12 +41,9 @@
 			return null;
 
 		final boolean hasAmbiguity[]= new boolean[] { false };
-		IChooseImportQuery query= new IChooseImportQuery() {
-			@Override
-			public TypeNameMatch[] chooseImports(TypeNameMatch[][] openChoices, ISourceRange[] ranges) {
-				hasAmbiguity[0]= true;
-				return new TypeNameMatch[0];
-			}
+		IChooseImportQuery query= (openChoices, ranges) -> {
+			hasAmbiguity[0]= true;
+			return new TypeNameMatch[0];
 		};
 
 		final ICompilationUnit unit= (ICompilationUnit)cu.getJavaElement();
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/Java50Fix.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/Java50Fix.java
index 2b21e5f..8c0238b 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/Java50Fix.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/Java50Fix.java
@@ -157,7 +157,7 @@
 	public static boolean isMissingOverrideAnnotationInterfaceProblem(int id) {
 		return id == IProblem.MissingOverrideAnnotationForInterfaceMethodImplementation;
 	}
-	
+
 	public static boolean isMissingOverrideAnnotationProblem(int id) {
 		return id == IProblem.MissingOverrideAnnotation || id == IProblem.MissingOverrideAnnotationForInterfaceMethodImplementation;
 	}
@@ -281,9 +281,7 @@
 	}
 
 	private static void createAddDeprecatedAnnotationOperations(CompilationUnit compilationUnit, IProblemLocation[] locations, List<CompilationUnitRewriteOperation> result) {
-		for (int i= 0; i < locations.length; i++) {
-			IProblemLocation problem= locations[i];
-
+		for (IProblemLocation problem : locations) {
 			if (isMissingDeprecationProblem(problem.getProblemId())) {
 				ASTNode selectedNode= problem.getCoveringNode(compilationUnit);
 				if (selectedNode != null) {
@@ -300,15 +298,14 @@
 	}
 
 	private static void createAddOverrideAnnotationOperations(CompilationUnit compilationUnit, boolean addOverrideInterfaceAnnotation, IProblemLocation[] locations, List<CompilationUnitRewriteOperation> result) {
-		for (int i= 0; i < locations.length; i++) {
-			IProblemLocation problem= locations[i];
+		for (IProblemLocation problem : locations) {
 			int problemId= problem.getProblemId();
-			
+
 			if (isMissingOverrideAnnotationProblem(problemId)) {
 				if (!isMissingOverrideAnnotationInterfaceProblem(problemId) || addOverrideInterfaceAnnotation) {
 					ASTNode selectedNode= problem.getCoveringNode(compilationUnit);
 					if (selectedNode != null) {
-	
+
 						ASTNode declaringNode= getDeclaringNode(selectedNode);
 						if (declaringNode instanceof BodyDeclaration) {
 							BodyDeclaration declaration= (BodyDeclaration) declaringNode;
@@ -326,9 +323,7 @@
 			return null;
 
 		List<SimpleType> result= new ArrayList<>();
-		for (int i= 0; i < locations.length; i++) {
-			IProblemLocation problem= locations[i];
-
+		for (IProblemLocation problem : locations) {
 			if (isRawTypeReferenceProblem(problem.getProblemId())) {
 				ASTNode node= problem.getCoveredNode(compilationUnit);
 				if (node instanceof ClassInstanceCreation) {
@@ -371,15 +366,13 @@
 			return true;
 		}
 
-		IProblem[] problems= compilationUnit.getProblems();
-		for (int i= 0; i < problems.length; i++) {
-			if (problems[i].isError()) {
-				if (!(problems[i] instanceof CategorizedProblem))
+		for (IProblem problem : compilationUnit.getProblems()) {
+			if (problem.isError()) {
+				if (!(problem instanceof CategorizedProblem)) {
 					return true;
-
-				CategorizedProblem categorizedProblem= (CategorizedProblem) problems[i];
+				}
+				CategorizedProblem categorizedProblem= (CategorizedProblem) problem;
 				int categoryID= categorizedProblem.getCategoryID();
-
 				if (categoryID == CategorizedProblem.CAT_BUILDPATH)
 					return true;
 				if (categoryID == CategorizedProblem.CAT_SYNTAX)
@@ -453,10 +446,9 @@
 	}
 
 	private static SimpleType getRawReference(SimpleName name, CompilationUnit compilationUnit) {
-		SimpleName[] names= LinkedNodeFinder.findByNode(compilationUnit, name);
-		for (int j= 0; j < names.length; j++) {
-			if (names[j].getParent() instanceof VariableDeclarationFragment) {
-				VariableDeclarationFragment fragment= (VariableDeclarationFragment)names[j].getParent();
+		for (SimpleName n : LinkedNodeFinder.findByNode(compilationUnit, name)) {
+			if (n.getParent() instanceof VariableDeclarationFragment) {
+				VariableDeclarationFragment fragment= (VariableDeclarationFragment) n.getParent();
 				if (fragment.getParent() instanceof VariableDeclarationStatement) {
 					VariableDeclarationStatement statement= (VariableDeclarationStatement)fragment.getParent();
 					ASTNode result= (ASTNode)statement.getStructuralProperty(VariableDeclarationStatement.TYPE_PROPERTY);
@@ -468,13 +460,13 @@
 					if (isRawTypeReference(result))
 						return (SimpleType) result;
 				}
-			} else if (names[j].getParent() instanceof SingleVariableDeclaration) {
-				SingleVariableDeclaration declaration= (SingleVariableDeclaration)names[j].getParent();
+			} else if (n.getParent() instanceof SingleVariableDeclaration) {
+				SingleVariableDeclaration declaration= (SingleVariableDeclaration) n.getParent();
 				ASTNode result= (ASTNode)declaration.getStructuralProperty(SingleVariableDeclaration.TYPE_PROPERTY);
 				if (isRawTypeReference(result))
 					return (SimpleType) result;
-			} else if (names[j].getParent() instanceof MethodDeclaration) {
-				MethodDeclaration methodDecl= (MethodDeclaration)names[j].getParent();
+			} else if (n.getParent() instanceof MethodDeclaration) {
+				MethodDeclaration methodDecl= (MethodDeclaration) n.getParent();
 				ASTNode result= (ASTNode)methodDecl.getStructuralProperty(MethodDeclaration.RETURN_TYPE2_PROPERTY);
 				if (isRawTypeReference(result))
 					return (SimpleType) result;
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/LinkedProposalPositionGroup.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/LinkedProposalPositionGroup.java
index 5ea6a79..6b7cccd 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/LinkedProposalPositionGroup.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/LinkedProposalPositionGroup.java
@@ -10,7 +10,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
- *     Red Hat Inc. - split into LinkedProposalPositionGroupCore in 
+ *     Red Hat Inc. - split into LinkedProposalPositionGroupCore in
  *                    core manipulation
  *******************************************************************************/
 package org.eclipse.jdt.internal.corext.fix;
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/NullAnnotationsFix.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/NullAnnotationsFix.java
index 9124b40..0e4f02a 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/NullAnnotationsFix.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/NullAnnotationsFix.java
@@ -210,8 +210,7 @@
 		String nonNullAnnotationName= getNonNullAnnotationName(compilationUnit.getJavaElement(), false);
 
 		Set<String> handledPositions= new HashSet<>();
-		for (int i= 0; i < locations.length; i++) {
-			IProblemLocation problem= locations[i];
+		for (IProblemLocation problem : locations) {
 			if (problem == null)
 				continue; // problem was filtered out by createCleanUp()
 
@@ -226,7 +225,7 @@
 				continue;
 			}
 			Builder builder= new Builder(problem, compilationUnit, nullableAnnotationName, nonNullAnnotationName,
-											/*allowRemove*/false, isArgumentProblem, ChangeKind.LOCAL);
+					/*allowRemove*/false, isArgumentProblem, ChangeKind.LOCAL);
 			boolean addNonNull= false;
 			// cf. createNullAnnotationInSignatureFix() but changeKind is constantly LOCAL
 			switch (problem.getProblemId()) {
@@ -263,15 +262,14 @@
 	}
 
 	private static void createRemoveRedundantNullAnnotationsOperations(CompilationUnit compilationUnit, IProblemLocation[] locations, List<CompilationUnitRewriteOperation> result) {
-		for (int i= 0; i < locations.length; i++) {
-			IProblemLocation problem= locations[i];
+		for (IProblemLocation problem : locations) {
 			if (problem == null)
 				continue; // problem was filtered out by createCleanUp()
 
 			int problemId= problem.getProblemId();
 			if (problemId == IProblem.RedundantNullAnnotation || problemId == IProblem.RedundantNullDefaultAnnotationPackage || problemId == IProblem.RedundantNullDefaultAnnotationType
-					|| problemId == IProblem.RedundantNullDefaultAnnotationMethod || problemId == IProblem.RedundantNullDefaultAnnotationLocal
-					|| problemId == IProblem.RedundantNullDefaultAnnotationField) {
+				|| problemId == IProblem.RedundantNullDefaultAnnotationMethod || problemId == IProblem.RedundantNullDefaultAnnotationLocal
+				|| problemId == IProblem.RedundantNullDefaultAnnotationField) {
 				RemoveRedundantAnnotationRewriteOperation operation= new RemoveRedundantAnnotationRewriteOperation(compilationUnit, problem);
 				result.add(operation);
 			}
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/NullAnnotationsRewriteOperations.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/NullAnnotationsRewriteOperations.java
index e5e2bff..21321da 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/NullAnnotationsRewriteOperations.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/NullAnnotationsRewriteOperations.java
@@ -426,11 +426,10 @@
 				if (annotationType == null) {
 					return false;
 				}
-				IAnnotation[] annotations= annotationType.getAnnotations();
-				for (int i= 0; i < annotations.length; i++) {
+				for (IAnnotation annotation : annotationType.getAnnotations()) {
 					if (annotationType.isBinary()) {
-						if (annotations[i].getElementName().equals(Target.class.getName())) {
-							for (IMemberValuePair valuePair : annotations[i].getMemberValuePairs()) {
+						if (annotation.getElementName().equals(Target.class.getName())) {
+							for (IMemberValuePair valuePair : annotation.getMemberValuePairs()) {
 								if (TYPE_USE_NAME.equals(valuePair.getValue())) {
 									return true;
 								}
@@ -438,20 +437,19 @@
 							return false;
 						}
 					} else {
-						String[][] resolveType= annotationType.resolveType(annotations[i].getElementName());
+						String[][] resolveType= annotationType.resolveType(annotation.getElementName());
 						if (resolveType != null && resolveType.length == 1 && (resolveType[0][0].equals(Target.class.getPackage().getName())
-								&& resolveType[0][1].equals(Target.class.getSimpleName()))) {
-							for (IMemberValuePair valuePair : annotations[i].getMemberValuePairs()) {
+							&& resolveType[0][1].equals(Target.class.getSimpleName()))) {
+							for (IMemberValuePair valuePair : annotation.getMemberValuePairs()) {
 								final Object value= valuePair.getValue();
 								if (value instanceof String) {
 									if (((String) value).endsWith(ElementType.TYPE_USE.name())) {
 										return true;
 									}
 								} else if (value instanceof Object[]) {
-									Object[] values= (Object[]) value;
-									for (int k= 0; k < values.length; k++) {
-										if (values[k] instanceof String) {
-											if (((String) values[k]).endsWith(ElementType.TYPE_USE.name())) {
+									for (Object v : (Object[]) value) {
+										if (v instanceof String) {
+											if (((String) v).endsWith(ElementType.TYPE_USE.name())) {
 												return true;
 											}
 										}
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/PotentialProgrammingProblemsFix.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/PotentialProgrammingProblemsFix.java
index 6f86039..5f13980 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/PotentialProgrammingProblemsFix.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/PotentialProgrammingProblemsFix.java
@@ -72,7 +72,7 @@
 			boolean calculatedId,
 			boolean defaultId,
 			boolean randomId) throws CoreException {
-		
+
 		return PotentialProgrammingProblemsFixCore.checkPreConditions(project, compilationUnits, monitor, calculatedId, defaultId, randomId);
     }
 
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/StringFix.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/StringFix.java
index ebd5a89..538ebde 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/StringFix.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/StringFix.java
@@ -14,7 +14,6 @@
 package org.eclipse.jdt.internal.corext.fix;
 
 import java.util.ArrayList;
-import java.util.Iterator;
 import java.util.List;
 
 import org.eclipse.core.runtime.CoreException;
@@ -108,13 +107,12 @@
 	private static ICleanUpFix createCleanUp(CompilationUnit compilationUnit, boolean addNLSTag, boolean removeNLSTag, IProblemLocation[] problems) throws CoreException, JavaModelException {
 		ICompilationUnit cu= (ICompilationUnit)compilationUnit.getJavaElement();
 		if (!cu.isStructureKnown())
-			return null; //[clean up] 'Remove unnecessary $NLS-TAGS$' removes necessary ones in case of syntax errors: https://bugs.eclipse.org/bugs/show_bug.cgi?id=285814 : 
+			return null; //[clean up] 'Remove unnecessary $NLS-TAGS$' removes necessary ones in case of syntax errors: https://bugs.eclipse.org/bugs/show_bug.cgi?id=285814 :
 
 		List<CategorizedTextEditGroup> result= new ArrayList<>();
 
 		List<IProblemLocation> missingNLSProblems= new ArrayList<>();
-		for (int i= 0; i < problems.length; i++) {
-			IProblemLocation problem= problems[i];
+		for (IProblemLocation problem : problems) {
 			if (addNLSTag && problem.getProblemId() == IProblem.NonExternalizedStringLiteral) {
 				missingNLSProblems.add(problem);
 			}
@@ -132,16 +130,15 @@
 		if (!missingNLSProblems.isEmpty()) {
 			int[] positions= new int[missingNLSProblems.size()];
 			int i=0;
-			for (Iterator<IProblemLocation> iter= missingNLSProblems.iterator(); iter.hasNext();) {
-				IProblemLocation problem= iter.next();
+			for (IProblemLocation problem : missingNLSProblems) {
 				positions[i]= problem.getOffset();
 				i++;
 			}
 			TextEdit[] edits= NLSUtil.createNLSEdits(cu, positions);
 			if (edits != null) {
-				for (int j= 0; j < edits.length; j++) {
+				for (TextEdit edit : edits) {
 					String label= FixMessages.StringFix_AddNonNls_description;
-					result.add(new CategorizedTextEditGroup(label, edits[j], new GroupCategorySet(new GroupCategory(label, label, label))));
+					result.add(new CategorizedTextEditGroup(label, edit, new GroupCategorySet(new GroupCategory(label, label, label))));
 				}
 			}
 		}
@@ -206,11 +203,10 @@
 			return null;
 
 		CompilationUnitChange result= new CompilationUnitChange(getDisplayString(), fCompilationUnit);
-		for (int i= 0; i < fEditGroups.length; i++) {
-			TextEdit[] edits= fEditGroups[i].getTextEdits();
-			String groupName= fEditGroups[i].getName();
-			for (int j= 0; j < edits.length; j++) {
-				TextChangeCompatibility.addTextEdit(result, groupName, edits[j]);
+		for (TextEditGroup editGroup : fEditGroups) {
+			String groupName= editGroup.getName();
+			for (TextEdit edit : editGroup.getTextEdits()) {
+				TextChangeCompatibility.addTextEdit(result, groupName, edit);
 			}
 		}
 		return result;
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/TypeAnnotationRewriteOperations.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/TypeAnnotationRewriteOperations.java
index 5d71a49..40d27ae 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/TypeAnnotationRewriteOperations.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/TypeAnnotationRewriteOperations.java
@@ -151,7 +151,7 @@
 			AnnotatableType annotatableType= (AnnotatableType) target;
 			if(annotatableType.isSimpleType()) {
 				// for cleanups, if another type annotation has been moved.
-				annotatableType = (AnnotatableType) astRewrite.get(annotatableType.getParent(), annotatableType.getLocationInParent()); 
+				annotatableType = (AnnotatableType) astRewrite.get(annotatableType.getParent(), annotatableType.getLocationInParent());
 			}
 			if (annotatableType.isSimpleType()) {
 				SimpleType simpleType= (SimpleType) annotatableType;
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/UnnecessaryArrayCreationFix.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/UnnecessaryArrayCreationFix.java
index 0bdb72e..efefd75 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/UnnecessaryArrayCreationFix.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/UnnecessaryArrayCreationFix.java
@@ -20,6 +20,7 @@
 
 import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.ArrayCreation;
+import org.eclipse.jdt.core.dom.ArrayInitializer;
 import org.eclipse.jdt.core.dom.CompilationUnit;
 import org.eclipse.jdt.core.dom.Expression;
 import org.eclipse.jdt.core.dom.IMethodBinding;
@@ -51,7 +52,9 @@
 				if (parent instanceof MethodInvocation) {
 					MethodInvocation m= (MethodInvocation)parent;
 					List arguments= m.arguments();
-					if (arguments.size() > 0 && arguments.get(arguments.size() - 1) == node) {
+					ArrayInitializer initializer= node.getInitializer();
+					if (arguments.size() > 0 && arguments.get(arguments.size() - 1) == node
+							&& initializer != null && initializer.expressions() != null) {
 						IMethodBinding binding= m.resolveMethodBinding();
 						if (binding != null && binding.isVarargs() && binding.getParameterTypes().length == arguments.size()) {
 							fResult.add(new UnwrapNewArrayOperation(node, m));
@@ -60,7 +63,9 @@
 				} else if (parent instanceof SuperMethodInvocation) {
 					SuperMethodInvocation m= (SuperMethodInvocation)parent;
 					List arguments= m.arguments();
-					if (arguments.size() > 0 && arguments.get(arguments.size() - 1) == node) {
+					ArrayInitializer initializer= node.getInitializer();
+					if (arguments.size() > 0 && arguments.get(arguments.size() - 1) == node
+							&& initializer != null && initializer.expressions() != null) {
 						IMethodBinding binding= m.resolveMethodBinding();
 						if (binding != null && binding.isVarargs() && binding.getParameterTypes().length == arguments.size()) {
 							fResult.add(new UnwrapNewArrayOperation(node, m));
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/VariableDeclarationFix.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/VariableDeclarationFix.java
index 545cc56..f452bcd 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/VariableDeclarationFix.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/VariableDeclarationFix.java
@@ -37,8 +37,7 @@
 		if (selectedNodes.length == 1) {
 			selectedNodes[0].accept(visitor);
 		} else {
-			for (int i= 0; i < selectedNodes.length; i++) {
-				ASTNode selectedNode= selectedNodes[i];
+			for (ASTNode selectedNode : selectedNodes) {
 				selectedNode.accept(visitor);
 			}
 		}
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/javadoc/JavaDocCommentReader.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/javadoc/JavaDocCommentReader.java
index 39430ec..c543c9b 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/javadoc/JavaDocCommentReader.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/javadoc/JavaDocCommentReader.java
@@ -97,7 +97,7 @@
 
 	/**
 	 * Returns the offset of the last read character in the passed buffer.
-	 * 
+	 *
 	 * @return the offset
 	 */
 	public int getOffset() {
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/javadoc/JavaDocLocations.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/javadoc/JavaDocLocations.java
index d2e65bf..45a0d2c 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/javadoc/JavaDocLocations.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/javadoc/JavaDocLocations.java
@@ -95,9 +95,8 @@
 		if (path == null) {
 			return null;
 		}
-		IClasspathAttribute[] extraAttributes= entry.getExtraAttributes();
-		for (int i= 0; i < extraAttributes.length; i++) {
-			if (IClasspathAttribute.JAVADOC_LOCATION_ATTRIBUTE_NAME.equals(extraAttributes[i].getName())) {
+		for (IClasspathAttribute extraAttribute : entry.getExtraAttributes()) {
+			if (IClasspathAttribute.JAVADOC_LOCATION_ATTRIBUTE_NAME.equals(extraAttribute.getName())) {
 				return null;
 			}
 		}
@@ -179,9 +178,7 @@
 			throw new IllegalArgumentException("Entry must be of kind CPE_LIBRARY or CPE_VARIABLE"); //$NON-NLS-1$
 		}
 
-		IClasspathAttribute[] extraAttributes= entry.getExtraAttributes();
-		for (int i= 0; i < extraAttributes.length; i++) {
-			IClasspathAttribute attrib= extraAttributes[i];
+		for (IClasspathAttribute attrib : entry.getExtraAttributes()) {
 			if (IClasspathAttribute.JAVADOC_LOCATION_ATTRIBUTE_NAME.equals(attrib.getName())) {
 				return parseURL(attrib.getValue());
 			}
@@ -230,7 +227,7 @@
 		if (!urlString.endsWith("/")) { //$NON-NLS-1$
 			urlBuffer.append('/');
 		}
-		
+
 		StringBuffer pathBuffer= new StringBuffer();
 		StringBuffer fragmentBuffer= new StringBuffer();
 
@@ -309,7 +306,7 @@
 			case IJavaElement.JAVA_MODULE:
 				IModuleDescription module= (IModuleDescription) element;
 				appendModuleSummaryPath(module, pathBuffer);
-				break;	
+				break;
 			default :
 				return null;
 		}
@@ -449,7 +446,7 @@
 
 	/**
 	 * Returns the location of the Javadoc.
-	 * 
+	 *
 	 * @param element whose Javadoc location has to be found
 	 * @param isBinary <code>true</code> if the Java element is from a binary container
 	 * @return the location URL of the Javadoc or <code>null</code> if the location cannot be found
@@ -491,7 +488,7 @@
 
 	/**
 	 * Returns the reason for why the Javadoc of the Java element could not be retrieved.
-	 * 
+	 *
 	 * @param element whose Javadoc could not be retrieved
 	 * @param root the root of the Java element
 	 * @return the String message for why the Javadoc could not be retrieved for the Java element or
@@ -530,7 +527,7 @@
 	 * Handles the exception thrown from JDT Core when the attached Javadoc
 	 * cannot be retrieved due to accessibility issues or location URL issue. This exception is not
 	 * logged but the exceptions occurred due to other reasons are logged.
-	 * 
+	 *
 	 * @param e the exception thrown when retrieving the Javadoc fails
 	 * @return the String message for why the Javadoc could not be retrieved
 	 * @since 3.9
@@ -554,7 +551,7 @@
 	/**
 	 * Parse a URL from a String. This method first tries to treat <code>url</code> as a valid, encoded URL.
 	 * If that didn't work, it tries to recover from bad URLs, e.g. the unencoded form we used to use in persistent storage.
-	 * 
+	 *
 	 * @param url a URL
 	 * @return the parsed URL or <code>null</code> if the URL couldn't be parsed
 	 * @since 3.9
@@ -587,7 +584,7 @@
 	/**
 	 * Returns the {@link File} of a <code>file:</code> URL. This method tries to recover from bad URLs,
 	 * e.g. the unencoded form we used to use in persistent storage.
-	 * 
+	 *
 	 * @param url a <code>file:</code> URL
 	 * @return the file
 	 * @since 3.9
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/ImportsResolver.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/ImportsResolver.java
index 6c53894..8eb9599 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/ImportsResolver.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/ImportsResolver.java
@@ -13,9 +13,6 @@
  *******************************************************************************/
 package org.eclipse.jdt.internal.corext.template.java;
 
-import java.util.Iterator;
-import java.util.List;
-
 import org.eclipse.jface.text.templates.TemplateContext;
 import org.eclipse.jface.text.templates.TemplateVariable;
 import org.eclipse.jface.text.templates.TemplateVariableResolver;
@@ -45,12 +42,8 @@
 
 		if (context instanceof JavaContext) {
 			JavaContext jc= (JavaContext) context;
-			List<String> params= variable.getVariableType().getParams();
-			if (params.size() > 0) {
-				for (Iterator<String> iterator= params.iterator(); iterator.hasNext();) {
-					String typeName= iterator.next();
-					jc.addImport(typeName);
-				}
+			for (String typeName : variable.getVariableType().getParams()) {
+				jc.addImport(typeName);
 			}
 		} else {
 			super.resolve(variable, context);
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/JavaFormatter.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/JavaFormatter.java
index 1c64b37..b02208a 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/JavaFormatter.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/JavaFormatter.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -82,7 +82,7 @@
 
 		/**
 		 * Creates a new tracker.
-		 * 
+		 *
 		 * @param buffer the buffer to track
 		 * @throws MalformedTreeException
 		 * @throws BadLocationException
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/JavaPostfixContext.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/JavaPostfixContext.java
index b3e4aa5..40321a2 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/JavaPostfixContext.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/JavaPostfixContext.java
@@ -148,7 +148,7 @@
 	 * <li><code>new Integer(0).$</code> will return the {@link ASTNode} for
 	 * <code>new Integer(0)</code></li>
 	 * </ul>
-	 * 
+	 *
 	 * @param currentNode The {@link ASTNode} of the completion.
 	 * @return An {@link ASTNode} of the key set of {@link #nodeRegions}.
 	 */
@@ -442,7 +442,7 @@
 
 	/**
 	 * Returns the {@link Region} which represents the source region of the affected statement.
-	 * 
+	 *
 	 * @return the source region of the affected statement
 	 */
 	public Region getAffectedSourceRegion() {
@@ -476,7 +476,7 @@
 
 	/**
 	 * Calculates the beginning position of a given {@link ASTNode}
-	 * 
+	 *
 	 * @param node the {@link ASTNode}
 	 * @return source position of the node or -1 if the given node is <code>null</code>
 	 */
@@ -500,7 +500,7 @@
 
 	/**
 	 * Calculates the length of a given {@link ASTNode}
-	 * 
+	 *
 	 * @param node the {@link ASTNode}
 	 * @return length of the node or -1 if the given node is <code>null</code>
 	 */
@@ -519,7 +519,7 @@
 	 * new Object().a		=> getPrefixKey() returns "a"<br/>
 	 * new object().asdf	=> getPrefixKey() returns "asdf"<br/>
 	 * </code>
-	 * 
+	 *
 	 * @return an empty string or a string which represents the prefix of the key which was typed in
 	 */
 	private String getPrefixKey() {
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/LinkResolver.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/LinkResolver.java
index df81729..eb3af17 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/LinkResolver.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/LinkResolver.java
@@ -13,7 +13,6 @@
  *******************************************************************************/
 package org.eclipse.jdt.internal.corext.template.java;
 
-import java.util.Iterator;
 import java.util.List;
 
 import org.eclipse.jface.text.templates.TemplateContext;
@@ -54,8 +53,7 @@
 			if (params.size() > 0) {
 				fProposals= new String[params.size()];
 				int i= 0;
-				for (Iterator<String> iterator= params.iterator(); iterator.hasNext();) {
-					String param= iterator.next();
+				for (String param : params) {
 					fProposals[i]= param;
 					i++;
 				}
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/StaticImportResolver.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/StaticImportResolver.java
index 0575467..3227bbf 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/StaticImportResolver.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/StaticImportResolver.java
@@ -13,9 +13,6 @@
  *******************************************************************************/
 package org.eclipse.jdt.internal.corext.template.java;
 
-import java.util.Iterator;
-import java.util.List;
-
 import org.eclipse.jface.text.templates.TemplateContext;
 import org.eclipse.jface.text.templates.TemplateVariable;
 import org.eclipse.jface.text.templates.TemplateVariableResolver;
@@ -45,12 +42,8 @@
 
 		if (context instanceof JavaContext) {
 			JavaContext jc= (JavaContext) context;
-			List<String> params= variable.getVariableType().getParams();
-			if (params.size() > 0) {
-				for (Iterator<String> iterator= params.iterator(); iterator.hasNext();) {
-					String qualifiedMemberName= iterator.next();
-					jc.addStaticImport(qualifiedMemberName);
-				}
+			for (String qualifiedMemberName : variable.getVariableType().getParams()) {
+				jc.addStaticImport(qualifiedMemberName);
 			}
 		} else {
 			super.resolve(variable, context);
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/TemplateSet.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/TemplateSet.java
index cbfc010..a03a04e 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/TemplateSet.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/TemplateSet.java
@@ -81,7 +81,7 @@
 
 	/**
 	 * Convenience method for reading templates from a file.
-	 * 
+	 *
 	 * @param file the file
 	 * @param allowDuplicates <code>true</code> if duplicates are allowed
 	 * @throws CoreException if reading fails
@@ -114,7 +114,7 @@
 
 	/**
 	 * Reads templates from a XML stream and adds them to the templates
-	 * 
+	 *
 	 * @param stream the input stream
 	 * @param allowDuplicates <code>true</code> if duplicates are allowed
 	 * @throws CoreException if reading fails
@@ -160,9 +160,8 @@
 				String message= validateTemplate(template);
 				if (message == null) {
 					if (!allowDuplicates) {
-						Template[] templates= getTemplates(name);
-						for (int k= 0; k < templates.length; k++) {
-							remove(templates[k]);
+						for (Template t : getTemplates(name)) {
+							remove(t);
 						}
 					}
 					add(template);
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/CollectionsUtil.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/CollectionsUtil.java
index 9e1eb00..3575715 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/CollectionsUtil.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/CollectionsUtil.java
@@ -20,15 +20,15 @@
 	/**
 	 * Returns an array containing all of the elements in the given collection. This is a
 	 * compile-time type-safe alternative to {@link Collection#toArray(Object[])}.
-	 * 
+	 *
 	 * @param collection the source collection
 	 * @param clazz the type of the array elements
 	 * @param <A> the type of the array elements
 	 * @return an array of type <code>A</code> containing all of the elements in the given
 	 *         collection
-	 * 
+	 *
 	 * @throws NullPointerException if the specified collection or class is null
-	 * 
+	 *
 	 * @see <a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7023484">Sun bug 7023484</a>
 	 */
 	public static <A> A[] toArray(Collection<? extends A> collection, Class<A> clazz) {
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/History.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/History.java
index 511c500..58af0bd 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/History.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/History.java
@@ -63,7 +63,7 @@
  * from the list. An element can be added/renewed with a call to <code>accessed(Object)</code>.
  *
  * The history can be stored to/loaded from an xml file.
- * 
+ *
  * @param <K> key type
  * @param <V> value type
  */
@@ -247,10 +247,8 @@
 
 	private void rebuildPositions() {
 		fPositions.clear();
-		Collection<V> values= fHistory.values();
 		int pos=0;
-		for (Iterator<V> iter= values.iterator(); iter.hasNext();) {
-			V element= iter.next();
+		for (V element : fHistory.values()) {
 			fPositions.put(getKey(element), Integer.valueOf(pos));
 			pos++;
 		}
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/InfoFilesUtil.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/InfoFilesUtil.java
index 791581c..154d78c 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/InfoFilesUtil.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/InfoFilesUtil.java
@@ -37,7 +37,7 @@
 	 * Creates a compilation unit in the given package fragment with the specified file name. The
 	 * compilation unit is formatted and contains the given contents with file and type comments
 	 * prepended to it.
-	 * 
+	 *
 	 * @param fileName the name of the compilation unit
 	 * @param fileContent the contents of the compilation unit
 	 * @param pack the package fragment to create the compilation unit in
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/JDTUIHelperClasses.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/JDTUIHelperClasses.java
index 33ffa1f..782f4c2 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/JDTUIHelperClasses.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/JDTUIHelperClasses.java
@@ -51,14 +51,14 @@
  * <p>
  * New helpers preferably go into the o.e.jdt.core.manipulation bundle.
  * </p>
- * 
+ *
  * Here's a list of the most important helper classes:
- * 
+ *
  * <h2>Java Model</h2>
  * <p>
  * APIs in {@link org.eclipse.jdt.core}.
  * </p>
- * 
+ *
  * <p>
  * Static helper methods for analysis in {@link org.eclipse.jdt.internal.corext.util} and elsewhere:
  * </p>
@@ -70,21 +70,21 @@
  * <li>{@link MethodOverrideTester}</li>
  * <li>{@link SuperTypeHierarchyCache}</li>
  * </ul>
- * 
+ *
  * <p>
  * Static helper methods for stubs creation:
  * </p>
  * <ul>
  * <li>{@link StubUtility}</li>
  * </ul>
- * 
- * 
+ *
+ *
  * <h2>DOM AST</h2>
  * <p>
  * APIs in {@link org.eclipse.jdt.core.dom} and {@link org.eclipse.jdt.core.dom.rewrite}.<br>
  * Core API classes that are easy to miss: {@link NodeFinder}, {@link ASTVisitor}, {@link ASTMatcher}.
  * </p>
- * 
+ *
  * <p>
  * Static helper methods for analysis:
  * </p>
@@ -96,7 +96,7 @@
  * <li>{@link Bindings}</li>
  * <li>{@link TypeRules}</li>
  * </ul>
- * 
+ *
  * <p>
  * Static helper methods for node/stubs creation:
  * </p>
@@ -104,7 +104,7 @@
  * <li>{@link ASTNodeFactory}</li>
  * <li>{@link StubUtility2}</li>
  * </ul>
- * 
+ *
  * <p>
  * Helper classes in {@link org.eclipse.jdt.internal.corext.dom}, e.g.:
  * </p>
@@ -113,7 +113,7 @@
  * <li>{@link HierarchicalASTVisitor}</li>
  * <li>{@link NecessaryParenthesesChecker}</li>
  * </ul>
- * 
+ *
  * <p>
  * Helper classes for {@link ASTRewrite}:
  * </p>
@@ -127,7 +127,7 @@
  * <li>{@link TypeAnnotationRewrite}</li>
  * <li>{@link VariableDeclarationRewrite}</li>
  * </ul>
- * 
+ *
  * <p>
  * Label and text manipulation helpers:
  * </p>
@@ -137,7 +137,7 @@
  * <li>{@link org.eclipse.jdt.internal.ui.viewsupport.BasicElementLabels}</li>
  * <li>{@link org.eclipse.jdt.internal.core.manipulation.util.BasicElementLabels}</li>
  * </ul>
- * 
+ *
  * @noreference This class is not intended to be referenced by clients
  */
 public final class JDTUIHelperClasses {
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/JavaElementResourceMapping.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/JavaElementResourceMapping.java
index 024d385..cecd043 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/JavaElementResourceMapping.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/JavaElementResourceMapping.java
@@ -208,27 +208,25 @@
 	private static ResourceTraversal[] getPackageFragmentTraversals(IPackageFragment pack) throws CoreException {
 		ArrayList<ResourceTraversal> res= new ArrayList<>();
 		IContainer container= (IContainer)pack.getResource();
-		
+
 		if (container != null) {
 			res.add(new ResourceTraversal(new IResource[] { container }, IResource.DEPTH_ONE, 0));
 			if (pack.exists()) { // folder may not exist any more, see https://bugs.eclipse.org/bugs/show_bug.cgi?id=269167
-				Object[] nonJavaResources= pack.getNonJavaResources();
-				for (int i= 0; i < nonJavaResources.length; i++) {
-					Object resource= nonJavaResources[i];
+				for (Object resource : pack.getNonJavaResources()) {
 					if (resource instanceof IFolder) {
 						res.add(new ResourceTraversal(new IResource[] { (IResource)resource }, IResource.DEPTH_INFINITE, 0));
 					}
 				}
 			}
 		}
-	
+
 		return res.toArray(new ResourceTraversal[res.size()]);
 	}
 
 	private static ResourceTraversal[] getRemotePackageFragmentTraversals(IPackageFragment pack, RemoteResourceMappingContext context, IProgressMonitor monitor) throws CoreException {
 		ArrayList<ResourceTraversal> res= new ArrayList<>();
 		IContainer container= (IContainer)pack.getResource();
-		
+
 		if (container != null) {
 			res.add(new ResourceTraversal(new IResource[] {container}, IResource.DEPTH_ONE, 0));
 			IResource[] remoteMembers= context.fetchRemoteMembers(container, monitor);
@@ -236,10 +234,9 @@
 				remoteMembers= context.fetchMembers(container, monitor);
 			}
 			if (remoteMembers != null) {
-				for (int i= 0; i < remoteMembers.length; i++) {
-					IResource member= remoteMembers[i];
+				for (IResource member : remoteMembers) {
 					if (member instanceof IFolder
-							&& JavaConventionsUtil.validatePackageName(member.getName(), pack).getSeverity() == IStatus.ERROR) {
+						&& JavaConventionsUtil.validatePackageName(member.getName(), pack).getSeverity() == IStatus.ERROR) {
 						res.add(new ResourceTraversal(new IResource[] { member }, IResource.DEPTH_INFINITE, 0));
 					}
 				}
@@ -247,7 +244,7 @@
 		}
 		return res.toArray(new ResourceTraversal[res.size()]);
 	}
-	
+
 	private static final class CompilationUnitResourceMapping extends JavaElementResourceMapping {
 		private final ICompilationUnit fUnit;
 		private CompilationUnitResourceMapping(ICompilationUnit unit) {
@@ -303,8 +300,8 @@
 		@Override
 		public IProject[] getProjects() {
 			Set<IProject> result= new HashSet<>();
-			for (int i= 0; i < fFragments.length; i++) {
-				result.add(fFragments[i].getJavaProject().getProject());
+			for (IPackageFragment fragment : fFragments) {
+				result.add(fragment.getJavaProject().getProject());
 			}
 			return result.toArray(new IProject[result.size()]);
 		}
@@ -312,12 +309,12 @@
 		public ResourceTraversal[] getTraversals(ResourceMappingContext context, IProgressMonitor monitor) throws CoreException {
 			List<ResourceTraversal> result= new ArrayList<>();
 			if (context instanceof RemoteResourceMappingContext) {
-				for (int i= 0; i < fFragments.length; i++) {
-					result.addAll(Arrays.asList(getRemotePackageFragmentTraversals(fFragments[i], (RemoteResourceMappingContext)context, monitor)));
+				for (IPackageFragment fragment : fFragments) {
+					result.addAll(Arrays.asList(getRemotePackageFragmentTraversals(fragment, (RemoteResourceMappingContext)context, monitor)));
 				}
 			} else {
-				for (int i= 0; i < fFragments.length; i++) {
-					result.addAll(Arrays.asList(getPackageFragmentTraversals(fFragments[i])));
+				for (IPackageFragment fragment : fFragments) {
+					result.addAll(Arrays.asList(getPackageFragmentTraversals(fragment)));
 				}
 			}
 			return result.toArray(new ResourceTraversal[result.size()]);
@@ -401,11 +398,11 @@
 	public static ResourceMapping create(LogicalPackage logicalPackage) {
 		IPackageFragment[] fragments= logicalPackage.getFragments();
 		List<IPackageFragment> toProcess= new ArrayList<>(fragments.length);
-		for (int i= 0; i < fragments.length; i++) {
+		for (IPackageFragment fragment : fragments) {
 			// only add if not part of an archive
-			IPackageFragmentRoot root= (IPackageFragmentRoot)fragments[i].getAncestor(IJavaElement.PACKAGE_FRAGMENT_ROOT);
+			IPackageFragmentRoot root= (IPackageFragmentRoot) fragment.getAncestor(IJavaElement.PACKAGE_FRAGMENT_ROOT);
 			if (!root.isArchive() && !root.isExternal()) {
-				toProcess.add(fragments[i]);
+				toProcess.add(fragment);
 			}
 		}
 		if (toProcess.size() == 0)
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/OpenTypeHistory.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/OpenTypeHistory.java
index de4a3f4..6a64c85 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/OpenTypeHistory.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/OpenTypeHistory.java
@@ -140,9 +140,8 @@
 		*/
 
 		private boolean processChildrenDelta(IJavaElementDelta delta) {
-			IJavaElementDelta[] children= delta.getAffectedChildren();
-			for (int i= 0; i < children.length; i++) {
-				if (processDelta(children[i])) {
+			for (IJavaElementDelta child : delta.getAffectedChildren()) {
+				if (processDelta(child)) {
 					return true;
 				}
 			}
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/Strings.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/Strings.java
index a3d6fa0..a9e2941 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/Strings.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/Strings.java
@@ -21,7 +21,7 @@
 
 /**
  * Helper class to provide String manipulation functions not available in standard JDK.
- * 
+ *
  * @see JDTUIHelperClasses
  */
 public class Strings extends org.eclipse.jdt.internal.core.manipulation.util.Strings {
@@ -32,7 +32,7 @@
 	 * Sets the given <code>styler</code> to use for <code>matchingRegions</code> (obtained from
 	 * {@link org.eclipse.jdt.core.search.SearchPattern#getMatchingRegions}) in the
 	 * <code>styledString</code> starting from the given <code>index</code>.
-	 * 
+	 *
 	 * @param styledString the styled string to mark
 	 * @param index the index from which to start marking
 	 * @param matchingRegions the regions to mark
@@ -57,20 +57,20 @@
 			}
 		}
 	}
-	
+
 	/**
 	 * Adds special marks so that that the given styled string is readable in a BiDi environment.
-	 * 
+	 *
 	 * @param styledString the styled string
 	 * @return the processed styled string
 	 * @since 3.4
 	 */
 	public static StyledString markLTR(StyledString styledString) {
-		
+
 		/*
 		 * NOTE: For performance reasons we do not call  markLTR(styledString, null)
 		 */
-		
+
 		if (!USE_TEXT_PROCESSOR)
 			return styledString;
 
@@ -84,7 +84,7 @@
 	/**
 	 * Adds special marks so that that the given styled Java element label is readable in a BiDi
 	 * environment.
-	 * 
+	 *
 	 * @param styledString the styled string
 	 * @return the processed styled string
 	 * @since 3.6
@@ -102,7 +102,7 @@
 
 	/**
 	 * Adds special marks so that that the given styled string is readable in a BiDi environment.
-	 * 
+	 *
 	 * @param styledString the styled string
 	 * @param delimiters the additional delimiters
 	 * @return the processed styled string
@@ -121,7 +121,7 @@
 
 	/**
 	 * Inserts the marks into the given styled string.
-	 * 
+	 *
 	 * @param styledString the styled string
 	 * @param originalString the original string
 	 * @param processedString the processed string
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/TypeFilter.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/TypeFilter.java
index 7268aec..7f671f5 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/TypeFilter.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/TypeFilter.java
@@ -61,7 +61,7 @@
 		boolean filteredByPattern= getDefault().filter(match.getFullyQualifiedName());
 		if (filteredByPattern)
 			return true;
-		
+
 		int accessibility= match.getAccessibility();
 		switch (accessibility) {
 			case IAccessRule.K_NON_ACCESSIBLE:
@@ -115,9 +115,7 @@
 	 * @return <code>true</code> iff the given type is filtered out
 	 */
 	public boolean filter(String fullTypeName) {
-		StringMatcher[] matchers= getStringMatchers();
-		for (int i= 0; i < matchers.length; i++) {
-			StringMatcher curr= matchers[i];
+		for (StringMatcher curr : getStringMatchers()) {
 			if (curr.match(fullTypeName)) {
 				return true;
 			}
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/ExceptionInfo.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/ExceptionInfo.java
index 3a35fca..ea0980b 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/ExceptionInfo.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/ExceptionInfo.java
@@ -70,7 +70,7 @@
 	public IJavaElement getElement() {
 		return fElement;
 	}
-	
+
 	public String getFullyQualifiedName() {
 		return fElement instanceof IType ? ((IType) fElement).getFullyQualifiedName('.') : fElement.getElementName();
 	}
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/RefactoringAvailabilityTester.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/RefactoringAvailabilityTester.java
index 8298942..f166c02 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/RefactoringAvailabilityTester.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/RefactoringAvailabilityTester.java
@@ -90,9 +90,10 @@
 
 	public static IJavaElement[] getJavaElements(final Object[] elements) {
 		List<IJavaElement> result= new ArrayList<>();
-		for (int index= 0; index < elements.length; index++) {
-			if (elements[index] instanceof IJavaElement)
-				result.add((IJavaElement) elements[index]);
+		for (Object element : elements) {
+			if (element instanceof IJavaElement) {
+				result.add((IJavaElement) element);
+			}
 		}
 		return result.toArray(new IJavaElement[result.size()]);
 	}
@@ -100,20 +101,20 @@
 	public static IMember[] getPullUpMembers(final IType type) throws JavaModelException {
 		final List<IMember> list= new ArrayList<>(3);
 		if (type.exists()) {
-			IMember[] members= type.getFields();
-			for (int index= 0; index < members.length; index++) {
-				if (isPullUpAvailable(members[index]))
-					list.add(members[index]);
+			for (IMember member : type.getFields()) {
+				if (isPullUpAvailable(member)) {
+					list.add(member);
+				}
 			}
-			members= type.getMethods();
-			for (int index= 0; index < members.length; index++) {
-				if (isPullUpAvailable(members[index]))
-					list.add(members[index]);
+			for (IMember member : type.getMethods()) {
+				if (isPullUpAvailable(member)) {
+					list.add(member);
+				}
 			}
-			members= type.getTypes();
-			for (int index= 0; index < members.length; index++) {
-				if (isPullUpAvailable(members[index]))
-					list.add(members[index]);
+			for (IMember member : type.getTypes()) {
+				if (isPullUpAvailable(member)) {
+					list.add(member);
+				}
 			}
 		}
 		return list.toArray(new IMember[list.size()]);
@@ -122,15 +123,15 @@
 	public static IMember[] getPushDownMembers(final IType type) throws JavaModelException {
 		final List<IMember> list= new ArrayList<>(3);
 		if (type.exists()) {
-			IMember[] members= type.getFields();
-			for (int index= 0; index < members.length; index++) {
-				if (isPushDownAvailable(members[index]))
-					list.add(members[index]);
+			for (IMember member : type.getFields()) {
+				if (isPushDownAvailable(member)) {
+					list.add(member);
+				}
 			}
-			members= type.getMethods();
-			for (int index= 0; index < members.length; index++) {
-				if (isPushDownAvailable(members[index]))
-					list.add(members[index]);
+			for (IMember member : type.getMethods()) {
+				if (isPushDownAvailable(member)) {
+					list.add(member);
+				}
 			}
 		}
 		return list.toArray(new IMember[list.size()]);
@@ -138,9 +139,10 @@
 
 	public static IResource[] getResources(final Object[] elements) {
 		List<IResource> result= new ArrayList<>();
-		for (int index= 0; index < elements.length; index++) {
-			if (elements[index] instanceof IResource)
-				result.add((IResource) elements[index]);
+		for (Object element : elements) {
+			if (element instanceof IResource) {
+				result.add((IResource) element);
+			}
 		}
 		return result.toArray(new IResource[result.size()]);
 	}
@@ -271,13 +273,15 @@
 
 			if (objects.length != resources.length + elements.length)
 				return false;
-			for (int index= 0; index < resources.length; index++) {
-				if (!isDeleteAvailable(resources[index]))
+			for (IResource resource : resources) {
+				if (!isDeleteAvailable(resource)) {
 					return false;
+				}
 			}
-			for (int index= 0; index < elements.length; index++) {
-				if (!isDeleteAvailable(elements[index]))
+			for (IJavaElement element : elements) {
+				if (!isDeleteAvailable(element)) {
 					return false;
+				}
 			}
 			return true;
 		}
@@ -351,9 +355,10 @@
 			if (nodes.length == 1)
 				return nodes[0] instanceof Statement || Checks.isExtractableExpression(nodes[0]);
 			else {
-				for (int index= 0; index < nodes.length; index++) {
-					if (!(nodes[index] instanceof Statement))
+				for (ASTNode node : nodes) {
+					if (!(node instanceof Statement)) {
 						return false;
+					}
 				}
 				return true;
 			}
@@ -405,9 +410,10 @@
 			final IType type= getTopLevelType(members);
 			if (type != null && !type.isClass())
 				return false;
-			for (int index= 0; index < members.length; index++) {
-				if (!isExtractSupertypeAvailable(members[index]))
+			for (IMember member : members) {
+				if (!isExtractSupertypeAvailable(member)) {
 					return false;
+				}
 			}
 			return members.length == 1 || isCommonDeclaringType(members);
 		}
@@ -508,10 +514,10 @@
 			return false;
 		} else if (element instanceof IJavaProject) {
 			IJavaProject project= (IJavaProject) element;
-			IClasspathEntry[] classpathEntries= project.getRawClasspath();
-			for (int i= 0; i < classpathEntries.length; i++) {
-				if (classpathEntries[i].getEntryKind() == IClasspathEntry.CPE_SOURCE)
+			for (IClasspathEntry classpathEntry : project.getRawClasspath()) {
+				if (classpathEntry.getEntryKind() == IClasspathEntry.CPE_SOURCE) {
 					return true;
+				}
 			}
 			return false;
 		} else if (element instanceof IPackageFragmentRoot) {
@@ -531,9 +537,10 @@
 		if (elements.length == 0)
 			return false;
 
-		for (int i= 0; i < elements.length; i++) {
-			if (!(isInferTypeArgumentsAvailable(elements[i])))
+		for (IJavaElement element : elements) {
+			if (!(isInferTypeArgumentsAvailable(element))) {
 				return false;
+			}
 		}
 		return true;
 	}
@@ -729,8 +736,7 @@
 
 	public static boolean isMoveAvailable(final IResource[] resources, final IJavaElement[] elements) throws JavaModelException {
 		if (elements != null) {
-			for (int index= 0; index < elements.length; index++) {
-				IJavaElement element= elements[index];
+			for (IJavaElement element : elements) {
 				if (element == null || !element.exists())
 					return false;
 				if ((element instanceof IType) && ((IType) element).isLocal())
@@ -854,9 +860,10 @@
 			final IType type= getTopLevelType(members);
 			if (type != null && getPullUpMembers(type).length != 0)
 				return true;
-			for (int index= 0; index < members.length; index++) {
-				if (!isPullUpAvailable(members[index]))
+			for (IMember member : members) {
+				if (!isPullUpAvailable(member)) {
 					return false;
+				}
 			}
 			return isCommonDeclaringType(members);
 		}
@@ -924,9 +931,10 @@
 				return true;
 			if (type != null && JdtFlags.isEnum(type))
 				return false;
-			for (int index= 0; index < members.length; index++) {
-				if (!isPushDownAvailable(members[index]))
+			for (IMember member : members) {
+				if (!isPushDownAvailable(member)) {
 					return false;
+				}
 			}
 			return isCommonDeclaringType(members);
 		}
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/RefactoringExecutionStarter.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/RefactoringExecutionStarter.java
index 798faaf..6fb3e16 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/RefactoringExecutionStarter.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/RefactoringExecutionStarter.java
@@ -226,14 +226,14 @@
 
 	public static void startCleanupRefactoring(ICompilationUnit[] cus, ICleanUp[] cleanUps, boolean useOptionsFromProfile, Shell shell, boolean showWizard, String actionName) throws InvocationTargetException {
 		final CleanUpRefactoring refactoring= new CleanUpRefactoring(actionName);
-		for (int i= 0; i < cus.length; i++) {
-			refactoring.addCompilationUnit(cus[i]);
+		for (ICompilationUnit cu : cus) {
+			refactoring.addCompilationUnit(cu);
 		}
 
 		if (!showWizard) {
 			refactoring.setUseOptionsFromProfile(useOptionsFromProfile);
-			for (int i= 0; i < cleanUps.length; i++) {
-				refactoring.addCleanUp(cleanUps[i]);
+			for (ICleanUp cleanUp : cleanUps) {
+				refactoring.addCleanUp(cleanUp);
 			}
 
 			IRunnableContext context;
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/TypeContextChecker.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/TypeContextChecker.java
index ea75726..f6ecc5c 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/TypeContextChecker.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/TypeContextChecker.java
@@ -113,9 +113,11 @@
 
 		public RefactoringStatus[] checkAndResolveMethodTypes() throws CoreException {
 			RefactoringStatus[] results= new MethodTypesSyntaxChecker(fMethod, fParameterInfos, fReturnTypeInfo).checkSyntax();
-			for (int i= 0; i < results.length; i++)
-				if (results[i] != null && results[i].hasFatalError())
+			for (RefactoringStatus result : results) {
+				if (result != null && result.hasFatalError()) {
 					return results;
+				}
+			}
 
 			int parameterCount= fParameterInfos.size();
 			String[] types= new String[parameterCount + 1];
@@ -197,11 +199,10 @@
 						continue;
 					}
 					results[i]= new RefactoringStatus();
-					IProblem[] problems= ASTNodes.getProblems(type, ASTNodes.NODE_ONLY, ASTNodes.PROBLEMS);
-					if (problems.length > 0) {
-						for (int p= 0; p < problems.length; p++)
-							if (isError(problems[p], type))
-								results[i].addError(problems[p].getMessage());
+					for (IProblem problem : ASTNodes.getProblems(type, ASTNodes.NODE_ONLY, ASTNodes.PROBLEMS)) {
+						if (isError(problem, type)) {
+							results[i].addError(problem.getMessage());
+						}
 					}
 					ITypeBinding binding= handleBug84585(type.resolveBinding());
 					if (firstPass && (binding == null || binding.isRecovered())) {
@@ -454,12 +455,9 @@
 		Type type= (Type)selected;
 		if (MethodTypesSyntaxChecker.isVoidArrayType(type))
 			return null;
-		IProblem[] problems= ASTNodes.getProblems(type, ASTNodes.NODE_ONLY, ASTNodes.PROBLEMS);
-		if (problems.length > 0) {
-			for (int i= 0; i < problems.length; i++)
-				problemsCollector.add(problems[i].getMessage());
+		for (IProblem problem : ASTNodes.getProblems(type, ASTNodes.NODE_ONLY, ASTNodes.PROBLEMS)) {
+			problemsCollector.add(problem.getMessage());
 		}
-
 		String typeNodeRange= cuBuff.substring(type.getStartPosition(), ASTNodes.getExclusiveEnd(type));
 		if (typeString.equals(typeNodeRange))
 			return type;
@@ -544,8 +542,7 @@
 
 	private static void fillWithTypeStubs(final StringBuilder bufBefore, final StringBuilder bufAfter, final int focalPosition, List<? extends BodyDeclaration> types) {
 		StringBuilder buf;
-		for (Iterator<? extends BodyDeclaration> iter= types.iterator(); iter.hasNext();) {
-			BodyDeclaration bodyDeclaration= iter.next();
+		for (BodyDeclaration bodyDeclaration : types) {
 			if (! (bodyDeclaration instanceof AbstractTypeDeclaration)) {
 				//account for local classes:
 				if (! (bodyDeclaration instanceof MethodDeclaration))
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/TypedSource.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/TypedSource.java
index 138e921..d44efb4 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/TypedSource.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/TypedSource.java
@@ -114,12 +114,7 @@
 	}
 
 	public static Comparator<TypedSource> createTypeComparator() {
-		return new Comparator<TypedSource>(){
-			@Override
-			public int compare(TypedSource arg0, TypedSource arg1) {
-				return arg0.getType() - arg1.getType();
-			}
-		};
+		return (arg0, arg1) -> arg0.getType() - arg1.getType();
 	}
 	public static TypedSource[] createTypedSources(IJavaElement[] javaElements) throws CoreException {
 		//Map<ICompilationUnit, List<IJavaElement>>
@@ -150,8 +145,8 @@
 	private static TypedSource[] createTypedSourcesForImportContainer(SourceTuple tuple, IImportContainer container) throws JavaModelException, CoreException {
 		IJavaElement[] imports= container.getChildren();
 		List<TypedSource> result= new ArrayList<>(imports.length);
-		for (int i= 0; i < imports.length; i++) {
-			result.addAll(Arrays.asList(createTypedSources(imports[i], tuple)));
+		for (IJavaElement importedElement : imports) {
+			result.addAll(Arrays.asList(createTypedSources(importedElement, tuple)));
 		}
 		return result.toArray(new TypedSource[result.size()]);
 	}
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/binary/StubCreator.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/binary/StubCreator.java
index e4d7c62..458b112 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/binary/StubCreator.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/binary/StubCreator.java
@@ -56,8 +56,7 @@
 	protected void appendEnumConstants(final IType type) throws JavaModelException {
 		final IField[] fields= type.getFields();
 		final List<IField> list= new ArrayList<>(fields.length);
-		for (int index= 0; index < fields.length; index++) {
-			final IField field= fields[index];
+		for (IField field : fields) {
 			if (Flags.isEnum(field.getFlags()))
 				list.add(field);
 		}
@@ -72,7 +71,7 @@
 	protected void appendExpression(final String signature) {
 		appendExpression(signature, false);
 	}
-	
+
 	protected void appendExpression(String signature, boolean castNull) {
 		switch (signature.charAt(0)) {
 			case Signature.C_BOOLEAN:
@@ -125,7 +124,7 @@
 			annotationSet.clear();
 			annotationSet= null;
 		}
-		
+
 		int flags= member.getFlags();
 		final int kind= member.getElementType();
 		if (kind == IJavaElement.TYPE) {
@@ -149,12 +148,12 @@
 	private void appendAnnotation(IAnnotation annotation) throws JavaModelException {
 		String name= annotation.getElementName();
 		if (!fStubInvisible && name.startsWith("sun.") || name.startsWith("jdk.internal.")) //$NON-NLS-1$ //$NON-NLS-2$
-			return; // skip Sun-internal annotations 
-		
+			return; // skip Sun-internal annotations
+
 		fBuffer.append('@');
 		fBuffer.append(name.replace('$', '.'));
 		fBuffer.append('(');
-		
+
 		IMemberValuePair[] memberValuePairs= annotation.getMemberValuePairs();
 		for (IMemberValuePair pair : memberValuePairs) {
 			fBuffer.append(pair.getMemberName());
@@ -164,7 +163,7 @@
 		}
 		if (memberValuePairs.length > 0)
 			fBuffer.deleteCharAt(fBuffer.length() - 1);
-		
+
 		fBuffer.append(')').append('\n');
 	}
 
@@ -179,7 +178,7 @@
 			if (objects.length > 0)
 				fBuffer.deleteCharAt(fBuffer.length() - 1);
 			fBuffer.append('}');
-			
+
 		} else {
 			switch (valueKind) {
 				case IMemberValuePair.K_ANNOTATION:
@@ -188,7 +187,7 @@
 				case IMemberValuePair.K_STRING:
 					fBuffer.append('"').append(value).append('"');
 					break;
-					
+
 				default:
 					fBuffer.append(value);
 					break;
@@ -199,16 +198,15 @@
 	protected void appendMembers(final IType type, final IProgressMonitor monitor) throws JavaModelException {
 		try {
 			monitor.beginTask(RefactoringCoreMessages.StubCreationOperation_creating_type_stubs, 1);
-			final IJavaElement[] children= type.getChildren();
-			for (int index= 0; index < children.length; index++) {
-				final IMember child= (IMember) children[index];
+			for (IJavaElement childJavaElement : type.getChildren()) {
+				final IMember child= (IMember) childJavaElement;
 				final int flags= child.getFlags();
 				final boolean isPrivate= Flags.isPrivate(flags);
 				final boolean isDefault= !Flags.isPublic(flags) && !Flags.isProtected(flags) && !isPrivate;
 				final boolean stub= fStubInvisible || (!isPrivate && !isDefault);
 				if (child instanceof IType) {
 					if (stub || "java.lang.invoke.MethodHandle".equals(type.getFullyQualifiedName()) //$NON-NLS-1$
-							|| "java.util.concurrent.ConcurrentHashMap$CollectionView".equals(((IType) child).getFullyQualifiedName())) //$NON-NLS-1$
+						|| "java.util.concurrent.ConcurrentHashMap$CollectionView".equals(((IType) child).getFullyQualifiedName())) //$NON-NLS-1$
 						appendTypeDeclaration((IType) child, new SubProgressMonitor(monitor, 1));
 				} else if (child instanceof IField) {
 					if (stub && !Flags.isEnum(flags) && !Flags.isSynthetic(flags))
@@ -249,17 +247,16 @@
 				final IType superclass= declaringType.getJavaProject().findType(Signature.getSignatureQualifier(superSignature), Signature.getSignatureSimpleName(superSignature));
 				if (superclass != null) {
 					final IMethod[] superMethods= superclass.getMethods();
-					
+
 					// collect super constructors by parameter count
 					Map<Integer, List<IMethod>> superConstructorsByParamCount= new TreeMap<>();
 					boolean multi= false;
 					IMethod superConstructor= null;
-					for (int i= 0; i < superMethods.length; i++) {
-						IMethod superMethod= superMethods[i];
+					for (IMethod superMethod : superMethods) {
 						if (superMethod.isConstructor()
-								&& !Flags.isPrivate(superMethod.getFlags())
-								&& !(Flags.isPackageDefault(superMethod.getFlags()) && !declaringType.getPackageFragment().equals(superclass.getPackageFragment()))
-								) {
+							&& !Flags.isPrivate(superMethod.getFlags())
+							&& !(Flags.isPackageDefault(superMethod.getFlags()) && !declaringType.getPackageFragment().equals(superclass.getPackageFragment()))
+							) {
 							int paramCount= superMethod.getNumberOfParameters();
 							if (paramCount == 0) {
 								superConstructor= superMethod;
@@ -288,7 +285,7 @@
 								if (superConstructor == null) {
 									superConstructor= constructor;
 									multi= constructors.size() != 1;
-								}									
+								}
 							}
 						}
 						if (superConstructor == null) {
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/ClasspathChange.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/ClasspathChange.java
index e1505ed..4744c3c 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/ClasspathChange.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/ClasspathChange.java
@@ -48,10 +48,8 @@
 	}
 
 	public static ClasspathChange removeEntryChange(IJavaProject project, IClasspathEntry entryToRemove) throws JavaModelException {
-		IClasspathEntry[] rawClasspath= project.getRawClasspath();
 		ArrayList<IClasspathEntry> newClasspath= new ArrayList<>();
-		for (int i= 0; i < rawClasspath.length; i++) {
-			IClasspathEntry curr= rawClasspath[i];
+		for (IClasspathEntry curr : project.getRawClasspath()) {
 			if (curr.getEntryKind() != entryToRemove.getEntryKind() || !curr.getPath().equals(entryToRemove.getPath())) {
 				newClasspath.add(curr);
 			}
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/DeletePackageFragmentRootChange.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/DeletePackageFragmentRootChange.java
index 411f2ed..456672a 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/DeletePackageFragmentRootChange.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/DeletePackageFragmentRootChange.java
@@ -18,7 +18,6 @@
 import java.io.InputStreamReader;
 import java.io.UnsupportedEncodingException;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.Map.Entry;
 
 import org.eclipse.core.runtime.Assert;
@@ -51,6 +50,7 @@
 import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jdt.core.JavaModelException;
 
+import org.eclipse.jdt.internal.core.manipulation.util.BasicElementLabels;
 import org.eclipse.jdt.internal.corext.Corext;
 import org.eclipse.jdt.internal.corext.refactoring.RefactoringCoreMessages;
 import org.eclipse.jdt.internal.corext.refactoring.reorg.IPackageFragmentRootManipulationQuery;
@@ -60,7 +60,6 @@
 import org.eclipse.jdt.ui.JavaElementLabels;
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
-import org.eclipse.jdt.internal.core.manipulation.util.BasicElementLabels;
 
 public class DeletePackageFragmentRootChange extends AbstractDeleteChange {
 
@@ -118,10 +117,8 @@
 		CompositeChange result= new CompositeChange(getName());
 
 		ResourceDescription rootDescription = ResourceDescription.fromResource(rootResource);
-		IJavaProject[] referencingProjects= JavaElementUtil.getReferencingProjects(root);
 		HashMap<IFile, String> classpathFilesContents= new HashMap<>();
-		for (int i= 0; i < referencingProjects.length; i++) {
-			IJavaProject javaProject= referencingProjects[i];
+		for (IJavaProject javaProject : JavaElementUtil.getReferencingProjects(root)) {
 			IFile classpathFile= javaProject.getProject().getFile(".classpath"); //$NON-NLS-1$
 			if (classpathFile.exists()) {
 				classpathFilesContents.put(classpathFile, getFileContents(classpathFile));
@@ -131,8 +128,7 @@
 		root.delete(resourceUpdateFlags, jCoreUpdateFlags, new SubProgressMonitor(pm, 1));
 
 		rootDescription.recordStateFromHistory(rootResource, new SubProgressMonitor(pm, 1));
-		for (Iterator<Entry<IFile, String>> iterator= classpathFilesContents.entrySet().iterator(); iterator.hasNext();) {
-			Entry<IFile, String> entry= iterator.next();
+		for (Entry<IFile, String> entry : classpathFilesContents.entrySet()) {
 			IFile file= entry.getKey();
 			String contents= entry.getValue();
 			//Restore time stamps? This should probably be some sort of UndoTextFileChange.
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/DeleteSourceManipulationChange.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/DeleteSourceManipulationChange.java
index 55d4cb1..a55b981 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/DeleteSourceManipulationChange.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/DeleteSourceManipulationChange.java
@@ -111,9 +111,9 @@
 		} else if (element instanceof IPackageFragment) {
 			ICompilationUnit[] units= ((IPackageFragment)element).getCompilationUnits();
 			pm.beginTask("", units.length + 1); //$NON-NLS-1$
-			for (int i = 0; i < units.length; i++) {
+			for (ICompilationUnit unit : units) {
 				// fix https://bugs.eclipse.org/bugs/show_bug.cgi?id=66835
-				saveCUnitIfNeeded(units[i], new SubProgressMonitor(pm, 1));
+				saveCUnitIfNeeded(unit, new SubProgressMonitor(pm, 1));
 			}
 			element.delete(false, new SubProgressMonitor(pm, 1));
 			return new NullChange(); // caveat: real undo implemented by UndoablePackageDeleteChange
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/RenameJavaProjectChange.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/RenameJavaProjectChange.java
index af3a3ee..2ec7819 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/RenameJavaProjectChange.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/RenameJavaProjectChange.java
@@ -125,8 +125,8 @@
 	private void modifyClassPaths(IProgressMonitor pm) throws JavaModelException {
 		IProject[] referencing= getProject().getReferencingProjects();
 		pm.beginTask(RefactoringCoreMessages.RenameJavaProjectChange_update, referencing.length);
-		for (int i= 0; i < referencing.length; i++) {
-			IJavaProject jp= JavaCore.create(referencing[i]);
+		for (IProject p : referencing) {
+			IJavaProject jp= JavaCore.create(p);
 			if (jp != null && jp.exists()) {
 				modifyClassPath(jp, new SubProgressMonitor(pm, 1));
 			} else {
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/RenamePackageChange.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/RenamePackageChange.java
index 01357be..c07a4a1 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/RenamePackageChange.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/changes/RenamePackageChange.java
@@ -14,7 +14,6 @@
 package org.eclipse.jdt.internal.corext.refactoring.changes;
 
 import java.util.Arrays;
-import java.util.Comparator;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -71,8 +70,8 @@
 	}
 
 	private void addStamps(Map<IResource, Long> stamps, ICompilationUnit[] units) {
-		for (int i= 0; i < units.length; i++) {
-			IResource resource= units[i].getResource();
+		for (ICompilationUnit unit : units) {
+			IResource resource= unit.getResource();
 			long stamp= IResource.NULL_STAMP;
 			if (resource != null && (stamp= resource.getModificationStamp()) != IResource.NULL_STAMP) {
 				stamps.put(resource, Long.valueOf(stamp));
@@ -103,9 +102,7 @@
 		if (!fRenameSubpackages) {
 			addStamps(stamps, pack.getCompilationUnits());
 		} else {
-			IPackageFragment[] allPackages= JavaElementUtil.getPackageAndSubpackages(pack);
-			for (int i= 0; i < allPackages.length; i++) {
-				IPackageFragment currentPackage= allPackages[i];
+			for (IPackageFragment currentPackage : JavaElementUtil.getPackageAndSubpackages(pack)) {
 				addStamps(stamps, currentPackage.getCompilationUnits());
 			}
 		}
@@ -125,13 +122,10 @@
 
 		} else {
 			IPackageFragment[] allPackages= JavaElementUtil.getPackageAndSubpackages(pack);
-			Arrays.sort(allPackages, new Comparator<IPackageFragment>() {
-				@Override
-				public int compare(IPackageFragment o1, IPackageFragment o2) {
-					String p1= o1.getElementName();
-					String p2= o2.getElementName();
-					return p1.compareTo(p2);
-				}
+			Arrays.sort(allPackages, (o1, o2) -> {
+				String p1= o1.getElementName();
+				String p2= o2.getElementName();
+				return p1.compareTo(p2);
 			});
 			int count= allPackages.length;
 			pm.beginTask("", count); //$NON-NLS-1$
@@ -181,13 +175,13 @@
 					IPackageFragment[] allPackages= JavaElementUtil.getPackageAndSubpackages(pack);
 					SubProgressMonitor subPm= new SubProgressMonitor(pm, 1);
 					subPm.beginTask("", allPackages.length); //$NON-NLS-1$
-					for (int i= 0; i < allPackages.length; i++) {
+					for (IPackageFragment pckg : allPackages) {
 						// don't check for read-only since we don't go through
 						// validate edit.
-						checkIfModifiable(result, allPackages[i].getResource(), VALIDATE_NOT_DIRTY);
+						checkIfModifiable(result, pckg.getResource(), VALIDATE_NOT_DIRTY);
 						if (result.hasFatalError())
 							return result;
-						isValid(result, allPackages[i], new SubProgressMonitor(subPm, 1));
+						isValid(result, pckg, new SubProgressMonitor(subPm, 1));
 					}
 				} else {
 					isValid(result, pack, new SubProgressMonitor(pm, 1));
@@ -202,9 +196,9 @@
 	private void isValid(RefactoringStatus result, IPackageFragment pack, IProgressMonitor pm) throws JavaModelException {
 		ICompilationUnit[] units= pack.getCompilationUnits();
 		pm.beginTask("", units.length); //$NON-NLS-1$
-		for (int i= 0; i < units.length; i++) {
+		for (ICompilationUnit unit : units) {
 			pm.subTask(Messages.format(RefactoringCoreMessages.RenamePackageChange_checking_change, JavaElementLabels.getElementLabel(pack, JavaElementLabels.ALL_DEFAULT)));
-			checkIfModifiable(result, units[i].getResource(), VALIDATE_NOT_READ_ONLY | VALIDATE_NOT_DIRTY);
+			checkIfModifiable(result, unit.getResource(), VALIDATE_NOT_READ_ONLY | VALIDATE_NOT_DIRTY);
 			pm.worked(1);
 		}
 		pm.done();
@@ -217,9 +211,8 @@
 		if (fCompilationUnitStamps != null) {
 			IPackageFragment newPack= (IPackageFragment) JavaCore.create(ResourcesPlugin.getWorkspace().getRoot().getFolder(newPath));
 			if (newPack.exists()) {
-				ICompilationUnit[] units= newPack.getCompilationUnits();
-				for (int i= 0; i < units.length; i++) {
-					IResource resource= units[i].getResource();
+				for (ICompilationUnit unit : newPack.getCompilationUnits()) {
+					IResource resource= unit.getResource();
 					if (resource != null) {
 						Long stamp= fCompilationUnitStamps.get(resource);
 						if (stamp != null) {
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExceptionAnalyzer.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExceptionAnalyzer.java
index 5217c25..d0d646e 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExceptionAnalyzer.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExceptionAnalyzer.java
@@ -29,8 +29,8 @@
 
 	public static ITypeBinding[] perform(ASTNode[] statements) {
 		ExceptionAnalyzer analyzer= new ExceptionAnalyzer();
-		for (int i= 0; i < statements.length; i++) {
-			statements[i].accept(analyzer);
+		for (ASTNode statement : statements) {
+			statement.accept(analyzer);
 		}
 		List<ITypeBinding> exceptions= analyzer.getCurrentExceptions();
 		return exceptions.toArray(new ITypeBinding[exceptions.size()]);
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExtractConstantRefactoring.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExtractConstantRefactoring.java
index ad95abb..9c1a5a7 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExtractConstantRefactoring.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExtractConstantRefactoring.java
@@ -598,9 +598,7 @@
 		ASTRewrite astRewrite= fCuRewrite.getASTRewrite();
 		AST ast= astRewrite.getAST();
 
-		IASTFragment[] fragmentsToReplace= getFragmentsToReplace();
-		for (int i= 0; i < fragmentsToReplace.length; i++) {
-			IASTFragment fragment= fragmentsToReplace[i];
+		for (IASTFragment fragment : getFragmentsToReplace()) {
 			ASTNode node= fragment.getAssociatedNode();
 			boolean inTypeDeclarationAnnotation= isInTypeDeclarationAnnotation(node);
 			if (inTypeDeclarationAnnotation && JdtFlags.VISIBILITY_STRING_PRIVATE == getVisibility())
@@ -778,9 +776,10 @@
 	// !! - like one in ExtractTempRefactoring
 	private static IASTFragment[] retainOnlyReplacableMatches(IASTFragment[] allMatches) {
 		List<IASTFragment> result= new ArrayList<>(allMatches.length);
-		for (int i= 0; i < allMatches.length; i++) {
-			if (canReplace(allMatches[i]))
-				result.add(allMatches[i]);
+		for (IASTFragment match : allMatches) {
+			if (canReplace(match)) {
+				result.add(match);
+			}
 		}
 		return result.toArray(new IASTFragment[result.size()]);
 	}
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExtractMethodAnalyzer.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExtractMethodAnalyzer.java
index f59b5ce..937dc5f 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExtractMethodAnalyzer.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExtractMethodAnalyzer.java
@@ -142,7 +142,7 @@
 	private boolean fForceStatic;
 	private boolean fIsLastStatementSelected;
 	private SimpleName fEnclosingLoopLabel;
-	
+
 	public ExtractMethodAnalyzer(ICompilationUnit unit, Selection selection) throws CoreException {
 		super(unit, selection, false);
 	}
@@ -413,13 +413,13 @@
 	private String canHandleBranches() {
 		if (fReturnValue != null)
 			return RefactoringCoreMessages.ExtractMethodAnalyzer_branch_mismatch;
-		
+
 		ASTNode[] selectedNodes= getSelectedNodes();
 		final ASTNode lastSelectedNode= selectedNodes[selectedNodes.length - 1];
 		Statement body= getParentLoopBody(lastSelectedNode.getParent());
 		if (!(body instanceof Block))
 			return RefactoringCoreMessages.ExtractMethodAnalyzer_branch_mismatch;
-		
+
 		if (body != lastSelectedNode) {
 			Block block= (Block)body;
 			List<Statement> statements= block.statements();
@@ -427,24 +427,23 @@
 			if (lastSelectedNode != lastStatementInLoop)
 				return RefactoringCoreMessages.ExtractMethodAnalyzer_branch_mismatch;
 		}
-		
+
 		final String continueMatchesLoopProblem[]= { null };
-		for (int i= 0; i < selectedNodes.length; i++) {
-			final ASTNode astNode= selectedNodes[i];
+		for (ASTNode astNode : selectedNodes) {
 			astNode.accept(new ASTVisitor() {
 				ArrayList<String> fLocalLoopLabels= new ArrayList<>();
-				
+
 				@Override
 				public boolean visit(BreakStatement node) {
 					SimpleName label= node.getLabel();
 					if (label != null && !fLocalLoopLabels.contains(label.getIdentifier())) {
 						continueMatchesLoopProblem[0]= Messages.format(
-								RefactoringCoreMessages.ExtractMethodAnalyzer_branch_break_mismatch,
-								new Object[] { ("break " + label.getIdentifier()) }); //$NON-NLS-1$
+							RefactoringCoreMessages.ExtractMethodAnalyzer_branch_break_mismatch,
+							new Object[] { ("break " + label.getIdentifier()) }); //$NON-NLS-1$
 					}
 					return false;
 				}
-				
+
 				@Override
 				public boolean visit(LabeledStatement node) {
 					SimpleName label= node.getLabel();
@@ -452,15 +451,15 @@
 						fLocalLoopLabels.add(label.getIdentifier());
 					return true;
 				}
-				
+
 				@Override
 				public void endVisit(ContinueStatement node) {
 					SimpleName label= node.getLabel();
 					if (label != null && !fLocalLoopLabels.contains(label.getIdentifier())) {
 						if (fEnclosingLoopLabel == null || ! label.getIdentifier().equals(fEnclosingLoopLabel.getIdentifier())) {
 							continueMatchesLoopProblem[0]= Messages.format(
-									RefactoringCoreMessages.ExtractMethodAnalyzer_branch_continue_mismatch,
-									new Object[] { "continue " + label.getIdentifier() }); //$NON-NLS-1$
+								RefactoringCoreMessages.ExtractMethodAnalyzer_branch_continue_mismatch,
+								new Object[] { "continue " + label.getIdentifier() }); //$NON-NLS-1$
 						}
 					}
 				}
@@ -562,10 +561,11 @@
 	private IVariableBinding[] removeSelectedDeclarations(IVariableBinding[] bindings) {
 		List<IVariableBinding> result= new ArrayList<>(bindings.length);
 		Selection selection= getSelection();
-		for (int i= 0; i < bindings.length; i++) {
-			ASTNode decl= ((CompilationUnit)fEnclosingBodyDeclaration.getRoot()).findDeclaringNode(bindings[i]);
-			if (!selection.covers(decl))
-				result.add(bindings[i]);
+		for (IVariableBinding binding : bindings) {
+			ASTNode decl= ((CompilationUnit)fEnclosingBodyDeclaration.getRoot()).findDeclaringNode(binding);
+			if (!selection.covers(decl)) {
+				result.add(binding);
+			}
 		}
 		return result.toArray(new IVariableBinding[result.size()]);
 	}
@@ -576,14 +576,14 @@
 		// first remove all type variables that come from outside of the method
 		// or are covered by the selection
 		CompilationUnit compilationUnit= (CompilationUnit)fEnclosingBodyDeclaration.getRoot();
-		for (int i= 0; i < bindings.length; i++) {
-			ASTNode decl= compilationUnit.findDeclaringNode(bindings[i]);
-			if (decl == null || (!selection.covers(decl) && decl.getParent() instanceof MethodDeclaration))
-				result.add(bindings[i]);
+		for (ITypeBinding binding : bindings) {
+			ASTNode decl= compilationUnit.findDeclaringNode(binding);
+			if (decl == null || (!selection.covers(decl) && decl.getParent() instanceof MethodDeclaration)) {
+				result.add(binding);
+			}
 		}
 		// all all type variables which are needed since a local variable uses it
-		for (int i= 0; i < fArguments.length; i++) {
-			IVariableBinding arg= fArguments[i];
+		for (IVariableBinding arg : fArguments) {
 			ITypeBinding type= arg.getType();
 			if (type != null && type.isTypeVariable()) {
 				ASTNode decl= compilationUnit.findDeclaringNode(type);
@@ -612,8 +612,8 @@
 		IVariableBinding[] reads= argInfo.get(flowContext, FlowInfo.READ | FlowInfo.READ_POTENTIAL | FlowInfo.UNKNOWN);
 		outer: for (int i= 0; i < returnValues.length && localReads.size() < returnValues.length; i++) {
 			IVariableBinding binding= returnValues[i];
-			for (int x= 0; x < reads.length; x++) {
-				if (reads[x] == binding) {
+			for (IVariableBinding read : reads) {
+				if (read == binding) {
 					localReads.add(binding);
 					fReturnValue= binding;
 					continue outer;
@@ -643,9 +643,7 @@
 		}
 		List<IVariableBinding> callerLocals= new ArrayList<>(5);
 		FlowInfo localInfo= new InputFlowAnalyzer(flowContext, selection, false).perform(fEnclosingBodyDeclaration);
-		IVariableBinding[] writes= localInfo.get(flowContext, FlowInfo.WRITE | FlowInfo.WRITE_POTENTIAL | FlowInfo.UNKNOWN);
-		for (int i= 0; i < writes.length; i++) {
-			IVariableBinding write= writes[i];
+		for (IVariableBinding write : localInfo.get(flowContext, FlowInfo.WRITE | FlowInfo.WRITE_POTENTIAL | FlowInfo.UNKNOWN)) {
 			if (getSelection().covers(ASTNodes.findDeclaration(write, fEnclosingBodyDeclaration)))
 				callerLocals.add(write);
 		}
@@ -684,9 +682,10 @@
 		if (array == null)
 			return null;
 		int size= 0;
-		for (int i= 0; i < array.length; i++) {
-			if (array[i] != null)
+		for (IVariableBinding binding : array) {
+			if (binding != null) {
 				size++;
+			}
 		}
 		if (size == array.length)
 			return array;
@@ -709,8 +708,7 @@
 		if (includeRuntimeExceptions)
 			return fAllExceptions;
 		List<ITypeBinding> result= new ArrayList<>(fAllExceptions.length);
-		for (int i= 0; i < fAllExceptions.length; i++) {
-			ITypeBinding exception= fAllExceptions[i];
+		for (ITypeBinding exception : fAllExceptions) {
 			if (!includeRuntimeExceptions && Bindings.isRuntimeException(exception))
 				continue;
 			result.add(exception);
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExtractMethodRefactoring.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExtractMethodRefactoring.java
index e17ed8f..f02c1c1 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExtractMethodRefactoring.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExtractMethodRefactoring.java
@@ -182,8 +182,8 @@
 		private Set<SimpleName> fIgnore= new HashSet<>();
 		public static Set<String> perform(ASTNode[] nodes) {
 			UsedNamesCollector collector= new UsedNamesCollector();
-			for (int i= 0; i < nodes.length; i++) {
-				nodes[i].accept(collector);
+			for (ASTNode node : nodes) {
+				node.accept(collector);
 			}
 			return collector.result;
 		}
@@ -415,11 +415,9 @@
 	 */
 	public RefactoringStatus checkParameterNames() {
 		RefactoringStatus result= new RefactoringStatus();
-		for (Iterator<ParameterInfo> iter= fParameterInfos.iterator(); iter.hasNext();) {
-			ParameterInfo parameter= iter.next();
+		for (ParameterInfo parameter : fParameterInfos) {
 			result.merge(Checks.checkIdentifier(parameter.getNewName(), fCUnit));
-			for (Iterator<ParameterInfo> others= fParameterInfos.iterator(); others.hasNext();) {
-				ParameterInfo other= others.next();
+			for (ParameterInfo other : fParameterInfos) {
 				if (parameter != other && other.getNewName().equals(parameter.getNewName())) {
 					result.addError(Messages.format(
 						RefactoringCoreMessages.ExtractMethodRefactoring_error_sameParameter,
@@ -558,9 +556,7 @@
 	}
 
 	private void replaceBranches(final CompilationUnitChange result) {
-		ASTNode[] selectedNodes= fAnalyzer.getSelectedNodes();
-		for (int i= 0; i < selectedNodes.length; i++) {
-			ASTNode astNode= selectedNodes[i];
+		for (ASTNode astNode : fAnalyzer.getSelectedNodes()) {
 			astNode.accept(new ASTVisitor() {
 				private LinkedList<String> fOpenLoopLabels= new LinkedList<>();
 
@@ -775,8 +771,7 @@
 
 	private void initializeUsedNames() {
 		fUsedNames= UsedNamesCollector.perform(fAnalyzer.getSelectedNodes());
-		for (Iterator<ParameterInfo> iter= fParameterInfos.iterator(); iter.hasNext();) {
-			ParameterInfo parameter= iter.next();
+		for (ParameterInfo parameter : fParameterInfos) {
 			fUsedNames.remove(parameter.getOldName());
 		}
 	}
@@ -952,9 +947,8 @@
 	private ASTNode[] createCallNodes(SnippetFinder.Match duplicate, int modifiers) {
 		List<ASTNode> result= new ArrayList<>(2);
 
-		IVariableBinding[] locals= fAnalyzer.getCallerLocals();
-		for (int i= 0; i < locals.length; i++) {
-			result.add(createDeclaration(locals[i], null));
+		for (IVariableBinding local : fAnalyzer.getCallerLocals()) {
+			result.add(createDeclaration(local, null));
 		}
 
 		MethodInvocation invocation= fAST.newMethodInvocation();
@@ -1123,15 +1117,15 @@
 			modifiers|= Modifier.DEFAULT;
 		}
 
-		ITypeBinding[] typeVariables= computeLocalTypeVariables(modifiers);
 		List<TypeParameter> typeParameters= result.typeParameters();
-		for (int i= 0; i < typeVariables.length; i++) {
+		for (ITypeBinding typeVariable : computeLocalTypeVariables(modifiers)) {
 			TypeParameter parameter= fAST.newTypeParameter();
-			parameter.setName(fAST.newSimpleName(typeVariables[i].getName()));
-			ITypeBinding[] bounds= typeVariables[i].getTypeBounds();
-			for (int j= 0; j < bounds.length; j++)
-				if (!"java.lang.Object".equals(bounds[j].getQualifiedName())) //$NON-NLS-1$
-					parameter.typeBounds().add(fImportRewriter.addImport(bounds[j], fAST));
+			parameter.setName(fAST.newSimpleName(typeVariable.getName()));
+			for (ITypeBinding bound : typeVariable.getTypeBounds()) {
+				if (!"java.lang.Object".equals(bound.getQualifiedName())) { //$NON-NLS-1$
+					parameter.typeBounds().add(fImportRewriter.addImport(bound, fAST));
+				}
+			}
 			typeParameters.add(parameter);
 		}
 
@@ -1154,9 +1148,7 @@
 		}
 
 		List<Type> exceptions= result.thrownExceptionTypes();
-		ITypeBinding[] exceptionTypes= fAnalyzer.getExceptions(fThrowRuntimeExceptions);
-		for (int i= 0; i < exceptionTypes.length; i++) {
-			ITypeBinding exceptionType= exceptionTypes[i];
+		for (ITypeBinding exceptionType : fAnalyzer.getExceptions(fThrowRuntimeExceptions)) {
 			exceptions.add(fImportRewriter.addImport(exceptionType, fAST, context, TypeLocation.EXCEPTION));
 		}
 		return result;
@@ -1168,9 +1160,8 @@
 			ParameterInfo info= fParameterInfos.get(i);
 			processVariable(result, info.getOldBinding(), modifier);
 		}
-		IVariableBinding[] methodLocals= fAnalyzer.getMethodLocals();
-		for (int i= 0; i < methodLocals.length; i++) {
-			processVariable(result, methodLocals[i], modifier);
+		for (IVariableBinding methodLocal : fAnalyzer.getMethodLocals()) {
+			processVariable(result, methodLocal, modifier);
 		}
 		return result.toArray(new ITypeBinding[result.size()]);
 	}
@@ -1180,9 +1171,7 @@
 			return;
 		ITypeBinding binding= variable.getType();
 		if (binding != null && binding.isParameterizedType()) {
-			ITypeBinding[] typeArgs= binding.getTypeArguments();
-			for (int args= 0; args < typeArgs.length; args++) {
-				ITypeBinding arg= typeArgs[args];
+			for (ITypeBinding arg : binding.getTypeArguments()) {
 				if (arg.isTypeVariable() && !result.contains(arg)) {
 					ASTNode decl= fRoot.findDeclaringNode(arg);
 					if (decl != null) {
@@ -1213,20 +1202,16 @@
 
 		// Locals that are not passed as an arguments since the extracted method only
 		// writes to them
-		IVariableBinding[] methodLocals= fAnalyzer.getMethodLocals();
-		for (int i= 0; i < methodLocals.length; i++) {
-			if (methodLocals[i] != null) {
-				result.statements().add(createDeclaration(methodLocals[i], null));
+		for (IVariableBinding methodLocal : fAnalyzer.getMethodLocals()) {
+			if (methodLocal != null) {
+				result.statements().add(createDeclaration(methodLocal, null));
 			}
 		}
-
-		for (Iterator<ParameterInfo> iter= fParameterInfos.iterator(); iter.hasNext();) {
-			ParameterInfo parameter= iter.next();
+		for (ParameterInfo parameter : fParameterInfos) {
 			if (parameter.isRenamed()) {
-				for (int n= 0; n < selectedNodes.length; n++) {
-					SimpleName[] oldNames= LinkedNodeFinder.findByBinding(selectedNodes[n], parameter.getOldBinding());
-					for (int i= 0; i < oldNames.length; i++) {
-						fRewriter.replace(oldNames[i], fAST.newSimpleName(parameter.getNewName()), null);
+				for (ASTNode selectedNode : selectedNodes) {
+					for (SimpleName oldName : LinkedNodeFinder.findByBinding(selectedNode, parameter.getOldBinding())) {
+						fRewriter.replace(oldName, fAST.newSimpleName(parameter.getNewName()), null);
 					}
 				}
 			}
@@ -1287,8 +1272,7 @@
 	}
 
 	private String getName(IVariableBinding binding) {
-		for (Iterator<ParameterInfo> iter= fParameterInfos.iterator(); iter.hasNext();) {
-			ParameterInfo info= iter.next();
+		for (ParameterInfo info : fParameterInfos) {
 			if (Bindings.equals(binding, info.getOldBinding())) {
 				return info.getNewName();
 			}
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExtractTempRefactoring.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExtractTempRefactoring.java
index 205ab76..1f2183f 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExtractTempRefactoring.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExtractTempRefactoring.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2019 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
@@ -177,8 +177,8 @@
 
 	private static boolean allArraysEqual(ASTNode[][] arrays, int position) {
 		Object element= arrays[0][position];
-		for (int i= 0; i < arrays.length; i++) {
-			Object[] array= arrays[i];
+		for (ASTNode[] a : arrays) {
+			Object[] array= a;
 			if (!element.equals(array[position]))
 				return false;
 		}
@@ -209,6 +209,9 @@
 			return false;
 		if (parent instanceof SwitchCase)
 			return false;
+		if (node instanceof SimpleName && node.getLocationInParent() != null) {
+			return !node.getLocationInParent().getId().equals("name"); //$NON-NLS-1$
+		}
 		return true;
 	}
 
@@ -323,9 +326,10 @@
 
 	private static IASTFragment[] retainOnlyReplacableMatches(IASTFragment[] allMatches) {
 		List<IASTFragment> result= new ArrayList<>(allMatches.length);
-		for (int i= 0; i < allMatches.length; i++) {
-			if (canReplace(allMatches[i]))
-				result.add(allMatches[i]);
+		for (IASTFragment match : allMatches) {
+			if (canReplace(match)) {
+				result.add(match);
+			}
 		}
 		return result.toArray(new IASTFragment[result.size()]);
 	}
@@ -337,7 +341,7 @@
 	private ICompilationUnit fCu;
 
 	private boolean fDeclareFinal;
-	
+
 	private boolean fDeclareVarType;
 
 	private String[] fExcludedVariableNames;
@@ -426,8 +430,7 @@
 		//TODO: should not have to prune duplicates here...
 		ASTRewrite rewrite= fCURewrite.getASTRewrite();
 		HashSet<IASTFragment> seen= new HashSet<>();
-		for (int i= 0; i < fragmentsToReplace.length; i++) {
-			IASTFragment fragment= fragmentsToReplace[i];
+		for (IASTFragment fragment : fragmentsToReplace) {
 			if (! seen.add(fragment))
 				continue;
 			SimpleName tempName= fCURewrite.getAST().newSimpleName(fTempName);
@@ -594,9 +597,8 @@
 
 	private RefactoringStatus checkMatchingFragments() throws JavaModelException {
 		RefactoringStatus result= new RefactoringStatus();
-		IASTFragment[] matchingFragments= getMatchingFragments();
-		for (int i= 0; i < matchingFragments.length; i++) {
-			ASTNode node= matchingFragments[i].getAssociatedNode();
+		for (IASTFragment matchingFragment : getMatchingFragments()) {
+			ASTNode node= matchingFragment.getAssociatedNode();
 			if (isLeftValue(node) && !isReferringToLocalVariableFromFor((Expression) node)) {
 				String msg= RefactoringCoreMessages.ExtractTempRefactoring_assigned_to;
 				result.addWarning(msg, JavaStatusContext.create(fCu, node));
@@ -788,7 +790,7 @@
 	public boolean declareFinal() {
 		return fDeclareFinal;
 	}
-	
+
 	public boolean declareVarType() {
 		return fDeclareVarType;
 	}
@@ -846,13 +848,7 @@
 		IASTFragment[] nodesToReplace= retainOnlyReplacableMatches(getMatchingFragments());
 		if (nodesToReplace.length == 0)
 			return getSelectedExpression();
-		Comparator<IASTFragment> comparator= new Comparator<IASTFragment>() {
-
-			@Override
-			public int compare(IASTFragment o1, IASTFragment o2) {
-				return o1.getStartPosition() - o2.getStartPosition();
-			}
-		};
+		Comparator<IASTFragment> comparator= (o1, o2) -> o1.getStartPosition() - o2.getStartPosition();
 		Arrays.sort(nodesToReplace, comparator);
 		return (IExpressionFragment) nodesToReplace[0];
 	}
@@ -912,7 +908,7 @@
 
 		ASTRewrite rewrite= fCURewrite.getASTRewrite();
 		AST ast= rewrite.getAST();
-		
+
 		if (isVarTypeAllowed() && fDeclareVarType) {
 			resultingType= ast.newSimpleType(ast.newSimpleName("var")); //$NON-NLS-1$
 		} else if (expression instanceof ClassInstanceCreation && (typeBinding == null || typeBinding.getTypeArguments().length == 0)) {
@@ -1040,7 +1036,7 @@
 	public void setDeclareFinal(boolean declareFinal) {
 		fDeclareFinal= declareFinal;
 	}
-	
+
 	public void setDeclareVarType(boolean declareVarType) {
 		fDeclareVarType= declareVarType;
 	}
@@ -1111,7 +1107,7 @@
 			return RefactoringStatus.createFatalErrorStatus(Messages.format(RefactoringCoreMessages.InitializableRefactoring_argument_not_exist, ATTRIBUTE_TYPE_VAR));
 		return new RefactoringStatus();
 	}
-	
+
 	public boolean isVarTypeAllowed() {
 		boolean isAllowed= false;
 		if (fCompilationUnitNode != null) {
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/IntroduceFactoryRefactoring.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/IntroduceFactoryRefactoring.java
index 8ca9ae0..60165b6 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/IntroduceFactoryRefactoring.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/IntroduceFactoryRefactoring.java
@@ -18,7 +18,6 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
-import java.util.Comparator;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
@@ -403,8 +402,7 @@
 		Collection<ICompilationUnit>	result= new ArrayList<>();
 		boolean hitInFactoryClass= false;
 
-		for(int i=0; i < searchHits.length; i++) {
-			SearchResultGroup	rg=  searchHits[i];
+		for (SearchResultGroup rg : searchHits) {
 			ICompilationUnit	icu= rg.getCompilationUnit();
 
 			result.add(icu);
@@ -463,8 +461,7 @@
 	private SearchResultGroup[] excludeBinaryUnits(SearchResultGroup[] groups) {
 		Collection<SearchResultGroup>	result= new ArrayList<>();
 
-		for (int i = 0; i < groups.length; i++) {
-			SearchResultGroup	rg=   groups[i];
+		for (SearchResultGroup rg : groups) {
 			ICompilationUnit	unit= rg.getCompilationUnit();
 
 			if (unit != null) // ignore hits within a binary unit
@@ -525,11 +522,11 @@
 		SearchResultGroup[] groups= (SearchResultGroup[]) engine.getResults();
 
 		if (groups.length != 0) {
-			for(int i= 0; i < groups.length; i++) {
-				SearchMatch[] matches= groups[i].getSearchResults();
-				for(int j= 0; j < matches.length; j++) {
-					if (matches[j].getAccuracy() == SearchMatch.A_ACCURATE)
-						return (IType) matches[j].getElement();
+			for (SearchResultGroup rg : groups) {
+				for (SearchMatch match : rg.getSearchResults()) {
+					if (match.getAccuracy() == SearchMatch.A_ACCURATE) {
+						return (IType) match.getElement();
+					}
 				}
 			}
 		}
@@ -604,7 +601,7 @@
 	/**
 	 * Creates and returns a new MethodDeclaration that represents the factory method to be used in
 	 * place of direct calls to the constructor in question.
-	 * 
+	 *
 	 * @param ast An AST used as a factory for various AST nodes
 	 * @param ctorBinding binding for the constructor being wrapped
 	 * @param unitRewriter the ASTRewrite to be used
@@ -638,13 +635,11 @@
 
 		if (Modifier.isAbstract(declaringClass.getModifiers())) {
 			AnonymousClassDeclaration decl= ast.newAnonymousClassDeclaration();
-			IMethodBinding[] unimplementedMethods= getUnimplementedMethods(declaringClass);
 			CodeGenerationSettings settings= JavaPreferencesSettings.getCodeGenerationSettings(fCUHandle.getJavaProject());
 			ImportRewriteContext context= new ContextSensitiveImportRewriteContext(fFactoryCU, decl.getStartPosition(), fImportRewriter);
-			for (int i= 0; i < unimplementedMethods.length; i++) {
-				IMethodBinding unImplementedMethod= unimplementedMethods[i];
+			for (IMethodBinding unImplementedMethod : getUnimplementedMethods(declaringClass)) {
 				MethodDeclaration newMethodDecl= StubUtility2.createImplementationStub(fCUHandle, unitRewriter, fImportRewriter, context,
-						unImplementedMethod, unImplementedMethod.getDeclaringClass(), settings, false, new NodeFinder(fFactoryCU, decl.getStartPosition(), 0).getCoveringNode());
+					unImplementedMethod, unImplementedMethod.getDeclaringClass(), settings, false, new NodeFinder(fFactoryCU, decl.getStartPosition(), 0).getCoveringNode());
 				decl.bodyDeclarations().add(newMethodDecl);
 			}
 			newCtorCall.setAnonymousClassDeclaration(decl);
@@ -655,7 +650,7 @@
 
 		return newMethod;
 	}
-	
+
 	private IMethodBinding[] getUnimplementedMethods(ITypeBinding binding) {
 		IMethodBinding[] unimplementedMethods= StubUtility2Core.getUnimplementedMethods(binding, true);
 		Arrays.sort(unimplementedMethods, new MethodsSourcePositionComparator(binding));
@@ -679,11 +674,10 @@
             ParameterizedType newInstantiatedType= ast.newParameterizedType(baseType);
             List<Type> newInstTypeArgs= newInstantiatedType.typeArguments();
 
-            for(int i= 0; i < ctorOwnerTypeParameters.length; i++) {
-                Type typeArg= ASTNodeFactory.newType(ast, ctorOwnerTypeParameters[i].getName());
-
-                newInstTypeArgs.add(typeArg);
-            }
+			for (ITypeBinding ctorOwnerTypeParameter : ctorOwnerTypeParameters) {
+				Type typeArg= ASTNodeFactory.newType(ast, ctorOwnerTypeParameter.getName());
+				newInstTypeArgs.add(typeArg);
+			}
             newCtorCall.setType(newInstantiatedType);
         }
 	}
@@ -707,11 +701,10 @@
             ParameterizedType newRetType= ast.newParameterizedType(baseType);
             List<Type> newRetTypeArgs= newRetType.typeArguments();
 
-            for(int i= 0; i < ctorOwnerTypeParameters.length; i++) {
-                Type retTypeArg= ASTNodeFactory.newType(ast, ctorOwnerTypeParameters[i].getName());
-
-                newRetTypeArgs.add(retTypeArg);
-            }
+			for (ITypeBinding ctorOwnerTypeParameter : ctorOwnerTypeParameters) {
+				Type retTypeArg= ASTNodeFactory.newType(ast, ctorOwnerTypeParameter.getName());
+				newRetTypeArgs.add(retTypeArg);
+			}
             newMethod.setReturnType2(newRetType);
         }
 	}
@@ -748,11 +741,10 @@
 			argDecls.add(argDecl);
 		}
 
-		ITypeBinding[] ctorExcepts= fCtorBinding.getExceptionTypes();
 		List<Type> exceptions= newMethod.thrownExceptionTypes();
 
-		for(int i=0; i < ctorExcepts.length; i++) {
-			exceptions.add(fImportRewriter.addImport(ctorExcepts[i], ast));
+		for (ITypeBinding ctorExcept : fCtorBinding.getExceptionTypes()) {
+			exceptions.add(fImportRewriter.addImport(ctorExcept, ast));
 		}
 
         copyTypeParameters(ast, newMethod);
@@ -776,22 +768,18 @@
 	 * @param newMethod the method onto which to copy the type parameters
 	 */
 	private void copyTypeParameters(AST ast, MethodDeclaration newMethod) {
-		ITypeBinding[] ctorOwnerTypeParms= fCtorBinding.getDeclaringClass().getTypeParameters();
 		List<TypeParameter> factoryMethodTypeParms= newMethod.typeParameters();
-		for(int i= 0; i < ctorOwnerTypeParms.length; i++) {
-            TypeParameter newParm= ast.newTypeParameter();
-            ITypeBinding[] parmTypeBounds= ctorOwnerTypeParms[i].getTypeBounds();
-            List<Type> newParmBounds= newParm.typeBounds();
-
-            newParm.setName(ast.newSimpleName(ctorOwnerTypeParms[i].getName()));
-            for(int b=0; b < parmTypeBounds.length; b++) {
-            	if (parmTypeBounds[b].isClass() && parmTypeBounds[b].getSuperclass() == null)
-            		continue;
-
-            	Type newBound= fImportRewriter.addImport(parmTypeBounds[b], ast);
-
-                newParmBounds.add(newBound);
-            }
+		for (ITypeBinding ctorOwnerTypeParm : fCtorBinding.getDeclaringClass().getTypeParameters()) {
+			TypeParameter newParm= ast.newTypeParameter();
+			List<Type> newParmBounds= newParm.typeBounds();
+			newParm.setName(ast.newSimpleName(ctorOwnerTypeParm.getName()));
+			for (ITypeBinding parmTypeBound : ctorOwnerTypeParm.getTypeBounds()) {
+				if (parmTypeBound.isClass() && parmTypeBound.getSuperclass() == null) {
+					continue;
+				}
+				Type newBound= fImportRewriter.addImport(parmTypeBound, ast);
+				newParmBounds.add(newBound);
+			}
 			factoryMethodTypeParms.add(newParm);
 		}
 	}
@@ -856,7 +844,7 @@
 		} else {
 			ctorCall= (ClassInstanceCreation)unitRewriter.get(ctorCallParent, ctorCallLocation);
 		}
-		
+
 		ListRewrite actualFactoryArgs= unitRewriter.getListRewrite(factoryMethodCall, MethodInvocation.ARGUMENTS_PROPERTY);
 		ListRewrite actualCtorArgs= unitRewriter.getListRewrite(ctorCall, ClassInstanceCreation.ARGUMENTS_PROPERTY);
 
@@ -875,7 +863,7 @@
 		List<Expression> actualCtorArgsList= actualCtorArgs.getRewrittenList();
 		for (int i=0; i < actualCtorArgsList.size(); i++) {
 			Expression actualCtorArg= actualCtorArgsList.get(i);
-			
+
 			ASTNode movedArg;
 			if (ASTNodes.isExistingNode(actualCtorArg)) {
 				movedArg= unitRewriter.createMoveTarget(actualCtorArg);
@@ -883,7 +871,7 @@
 				unitRewriter.remove(actualCtorArg, null);
 				movedArg= actualCtorArg;
 			}
-				
+
 			actualFactoryArgs.insertLast(movedArg, gd);
 		}
 
@@ -1003,8 +991,9 @@
 	}
 
 	/**
-	 * Use the given <code>ASTRewrite</code> to replace direct calls to the constructor
-	 * with calls to the newly-created factory method.
+	 * Use the given <code>ASTRewrite</code> to replace direct calls to the constructor with calls
+	 * to the newly-created factory method.
+	 * 
 	 * @param rg the <code>SearchResultGroup</code> indicating all of the constructor references
 	 * @param unit the <code>CompilationUnit</code> to be rewritten
 	 * @param unitRewriter the rewriter
@@ -1015,23 +1004,17 @@
 	private boolean replaceConstructorCalls(SearchResultGroup rg, CompilationUnit unit, ASTRewrite unitRewriter, CompilationUnitChange unitChange) throws CoreException {
 		Assert.isTrue(ASTCreator.getCu(unit).equals(rg.getCompilationUnit()));
 		SearchMatch[] hits= rg.getSearchResults();
-		Arrays.sort(hits, new Comparator<SearchMatch>() {
-			/**
-			 * Sort by descending offset, such that nested constructor calls are processed first.
-			 * This is necessary, since they can only be moved into the factory method invocation
-			 * after they have been rewritten.
-			 */
-			@Override
-			public int compare(SearchMatch m1, SearchMatch m2) {
-				return m2.getOffset() - m1.getOffset();
-			}
-		});
-		
+		/*
+		 * Sort by descending offset, such that nested constructor calls are processed first. This
+		 * is necessary, since they can only be moved into the factory method invocation after they
+		 * have been rewritten.
+		 */
+		Arrays.sort(hits, (m1, m2) -> m2.getOffset() - m1.getOffset());
+
 		boolean someCallPatched= false;
 
-		for (int i=0; i < hits.length; i++) {
-			ASTNode ctrCall= getCtorCallAt(hits[i].getOffset(), hits[i].getLength(), unit);
-
+		for (SearchMatch hit : hits) {
+			ASTNode ctrCall= getCtorCallAt(hit.getOffset(), hit.getLength(), unit);
 			if (ctrCall instanceof ClassInstanceCreation) {
 				TextEditGroup gd= new TextEditGroup(RefactoringCoreMessages.IntroduceFactory_replaceCalls);
 
@@ -1136,7 +1119,7 @@
 	 * Perform the AST rewriting necessary on the given <code>CompilationUnit</code> to create the
 	 * factory method. The method will reside on the type identified by
 	 * <code>fFactoryOwningClass</code>.
-	 * 
+	 *
 	 * @param unitRewriter the ASTRewrite to be used
 	 * @param unit the <code>CompilationUnit</code> where factory method will be created
 	 * @param gd the <code>GroupDescription</code> to associate with the changes made
@@ -1188,8 +1171,7 @@
 			final DynamicValidationStateChange result= new DynamicValidationRefactoringChange(descriptor, RefactoringCoreMessages.IntroduceFactory_name);
 			boolean hitInFactoryClass= false;
 			boolean hitInCtorClass= false;
-			for (int i= 0; i < fAllCallsTo.length; i++) {
-				SearchResultGroup rg= fAllCallsTo[i];
+			for (SearchResultGroup rg : fAllCallsTo) {
 				ICompilationUnit unitHandle= rg.getCompilationUnit();
 				CompilationUnitChange cuChange= new CompilationUnitChange(getName(), unitHandle);
 
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/IntroduceIndirectionRefactoring.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/IntroduceIndirectionRefactoring.java
index 79f418c..cea7af7 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/IntroduceIndirectionRefactoring.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/IntroduceIndirectionRefactoring.java
@@ -319,11 +319,10 @@
 		try {
 			if (fIntermediaryType != null) {
 				IMethod[] toCheck= fIntermediaryType.getMethods();
-				for (int i= 0; i < toCheck.length; i++) {
-					IMethod method= toCheck[i];
+				for (IMethod method : toCheck) {
 					if (method.getElementName().equals(fIntermediaryMethodName))
 						return RefactoringStatus.createWarningStatus(Messages.format(RefactoringCoreMessages.IntroduceIndirectionRefactoring_duplicate_method_name_in_declaring_type_error,
-								BasicElementLabels.getJavaElementName(fIntermediaryMethodName)));
+							BasicElementLabels.getJavaElementName(fIntermediaryMethodName)));
 				}
 			}
 		} catch (JavaModelException e) {
@@ -647,14 +646,10 @@
 
 		int ticksPerCU= references.length == 0 ? 0 : 70 / references.length;
 
-		for (int i= 0; i < references.length; i++) {
-			SearchResultGroup group= references[i];
+		for (SearchResultGroup group : references) {
 			SearchMatch[] searchResults= group.getSearchResults();
 			CompilationUnitRewrite currentCURewrite= getCachedCURewrite(group.getCompilationUnit());
-
-			for (int j= 0; j < searchResults.length; j++) {
-
-				SearchMatch match= searchResults[j];
+			for (SearchMatch match : searchResults) {
 				if (match.isInsideDocComment())
 					continue;
 
@@ -693,10 +688,8 @@
 				if (monitor.isCanceled())
 					throw new OperationCanceledException();
 			}
-
 			if (!isRewriteKept(group.getCompilationUnit()))
 				createChangeAndDiscardRewrite(group.getCompilationUnit());
-
 			monitor.worked(ticksPerCU);
 		}
 
@@ -721,11 +714,10 @@
 		ITypeBinding[] highestAndSupers= getTypeAndAllSuperTypes(highest);
 
 		ITypeBinding foundBinding= null;
-		for (int i1= 0; i1 < currentAndSupers.length; i1++) {
-			for (int i2= 0; i2 < highestAndSupers.length; i2++) {
-				if (highestAndSupers[i2].isEqualTo(currentAndSupers[i1])
-						&& (Bindings.findMethodInHierarchy(highestAndSupers[i2], fTargetMethodBinding.getName(), fTargetMethodBinding.getParameterTypes()) != null)) {
-					foundBinding= highestAndSupers[i2];
+		for (ITypeBinding currentAndSuper : currentAndSupers) {
+			for (ITypeBinding highestAndSuper : highestAndSupers) {
+				if (highestAndSuper.isEqualTo(currentAndSuper) && (Bindings.findMethodInHierarchy(highestAndSuper, fTargetMethodBinding.getName(), fTargetMethodBinding.getParameterTypes()) != null)) {
+					foundBinding= highestAndSuper;
 					break;
 				}
 			}
@@ -823,9 +815,9 @@
 			Type t= imRewrite.getImportRewrite().addImport(fIntermediaryFirstParameterType, imRewrite.getAST(), context, TypeLocation.PARAMETER);
 			if (fIntermediaryFirstParameterType.isGenericType()) {
 				ParameterizedType parameterized= imRewrite.getAST().newParameterizedType(t);
-				ITypeBinding[] typeParameters= fIntermediaryFirstParameterType.getTypeParameters();
-				for (int i= 0; i < typeParameters.length; i++)
-					parameterized.typeArguments().add(imRewrite.getImportRewrite().addImport(typeParameters[i], imRewrite.getAST()));
+				for (ITypeBinding typeParameter : fIntermediaryFirstParameterType.getTypeParameters()) {
+					parameterized.typeArguments().add(imRewrite.getImportRewrite().addImport(typeParameter, imRewrite.getAST()));
+				}
 				t= parameterized;
 			}
 			parameter.setType(t);
@@ -888,14 +880,14 @@
 		if (enclosing != null)
 			addTypeParameters(imRewrite, list, enclosing, context);
 
-		ITypeBinding[] typeParameters= parent.getTypeParameters();
-		for (int i= 0; i < typeParameters.length; i++) {
+		for (ITypeBinding typeParameter : parent.getTypeParameters()) {
 			TypeParameter ntp= imRewrite.getAST().newTypeParameter();
-			ntp.setName(imRewrite.getAST().newSimpleName(typeParameters[i].getName()));
-			ITypeBinding[] bounds= typeParameters[i].getTypeBounds();
-			for (int j= 0; j < bounds.length; j++)
-				if (!"java.lang.Object".equals(bounds[j].getQualifiedName())) //$NON-NLS-1$
-					ntp.typeBounds().add(imRewrite.getImportRewrite().addImport(bounds[j], imRewrite.getAST(), context, TypeLocation.TYPE_BOUND));
+			ntp.setName(imRewrite.getAST().newSimpleName(typeParameter.getName()));
+			for (ITypeBinding bound : typeParameter.getTypeBounds()) {
+				if (!"java.lang.Object".equals(bound.getQualifiedName())) { //$NON-NLS-1$
+					ntp.typeBounds().add(imRewrite.getImportRewrite().addImport(bound, imRewrite.getAST(), context, TypeLocation.TYPE_BOUND));
+				}
+			}
 			list.add(ntp);
 		}
 	}
@@ -912,9 +904,9 @@
 	}
 
 	private void copyInvocationParameters(MethodInvocation invocation, AST ast) throws JavaModelException {
-		String[] names= fTargetMethod.getParameterNames();
-		for (int i= 0; i < names.length; i++)
-			invocation.arguments().add(ast.newSimpleName(names[i]));
+		for (String name : fTargetMethod.getParameterNames()) {
+			invocation.arguments().add(ast.newSimpleName(name));
+		}
 	}
 
 	private void copyArguments(MethodDeclaration intermediary, CompilationUnitRewrite rew, ImportRewriteContext context) throws JavaModelException {
@@ -937,25 +929,21 @@
 	}
 
 	private void copyTypeParameters(MethodDeclaration intermediary, CompilationUnitRewrite rew,  ImportRewriteContext context) {
-		ITypeBinding[] typeParameters= fTargetMethodBinding.getTypeParameters();
-		for (int i= 0; i < typeParameters.length; i++) {
-			ITypeBinding current= typeParameters[i];
-
+		for (ITypeBinding current : fTargetMethodBinding.getTypeParameters()) {
 			TypeParameter parameter= rew.getAST().newTypeParameter();
 			parameter.setName(rew.getAST().newSimpleName(current.getName()));
-			ITypeBinding[] bounds= current.getTypeBounds();
-			for (int j= 0; j < bounds.length; j++)
-				if (!"java.lang.Object".equals(bounds[j].getQualifiedName())) //$NON-NLS-1$
-					parameter.typeBounds().add(rew.getImportRewrite().addImport(bounds[j], rew.getAST(), context, TypeLocation.TYPE_BOUND));
-
+			for (ITypeBinding bound : current.getTypeBounds()) {
+				if (!"java.lang.Object".equals(bound.getQualifiedName())) { //$NON-NLS-1$
+					parameter.typeBounds().add(rew.getImportRewrite().addImport(bound, rew.getAST(), context, TypeLocation.TYPE_BOUND));
+				}
+			}
 			intermediary.typeParameters().add(parameter);
 		}
 	}
 
 	private void copyExceptions(MethodDeclaration intermediary, CompilationUnitRewrite imRewrite,  ImportRewriteContext context) {
-		ITypeBinding[] exceptionTypes= fTargetMethodBinding.getExceptionTypes();
-		for (int i= 0; i < exceptionTypes.length; i++) {
-			Type exceptionType= imRewrite.getImportRewrite().addImport(exceptionTypes[i], imRewrite.getAST(), context, TypeLocation.EXCEPTION);
+		for (ITypeBinding typebinding : fTargetMethodBinding.getExceptionTypes()) {
+			Type exceptionType= imRewrite.getImportRewrite().addImport(typebinding, imRewrite.getAST(), context, TypeLocation.EXCEPTION);
 			intermediary.thrownExceptionTypes().add(exceptionType);
 		}
 	}
@@ -1092,10 +1080,11 @@
 	 * Helper method for finding an IMethod inside a binding hierarchy
 	 */
 	private IMethodBinding findMethodBindingInHierarchy(ITypeBinding currentTypeBinding, IMethod methodDeclaration) {
-		IMethodBinding[] bindings= currentTypeBinding.getDeclaredMethods();
-		for (int i= 0; i < bindings.length; i++)
-			if (methodDeclaration.equals(bindings[i].getJavaElement()))
-				return bindings[i];
+		for (IMethodBinding binding : currentTypeBinding.getDeclaredMethods()) {
+			if (methodDeclaration.equals(binding.getJavaElement())) {
+				return binding;
+			}
+		}
 
 		ITypeBinding superClass= currentTypeBinding.getSuperclass();
 		if (superClass != null) {
@@ -1103,9 +1092,8 @@
 			if (b != null)
 				return b;
 		}
-		ITypeBinding[] interfaces= currentTypeBinding.getInterfaces();
-		for (int i= 0; i < interfaces.length; i++) {
-			IMethodBinding b= findMethodBindingInHierarchy(interfaces[i], methodDeclaration);
+		for (ITypeBinding intf : currentTypeBinding.getInterfaces()) {
+			IMethodBinding b= findMethodBindingInHierarchy(intf, methodDeclaration);
 			if (b != null)
 				return b;
 		}
@@ -1123,9 +1111,8 @@
 
 	private void collectSuperTypes(ITypeBinding curr, List<ITypeBinding> list) {
 		if (list.add(curr.getTypeDeclaration())) {
-			ITypeBinding[] interfaces= curr.getInterfaces();
-			for (int i= 0; i < interfaces.length; i++) {
-				collectSuperTypes(interfaces[i], list);
+			for (ITypeBinding intf : curr.getInterfaces()) {
+				collectSuperTypes(intf, list);
 			}
 			ITypeBinding superClass= curr.getSuperclass();
 			if (superClass != null) {
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/IntroduceParameterRefactoring.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/IntroduceParameterRefactoring.java
index c7e2a4e..3c6e5c8 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/IntroduceParameterRefactoring.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/IntroduceParameterRefactoring.java
@@ -276,26 +276,26 @@
 		ITypeBinding typeBinding= Bindings.normalizeForDeclarationUse(fSelectedExpression.resolveTypeBinding(), fSelectedExpression.getAST());
 		String name= fParameterName != null ? fParameterName : guessedParameterName();
 		Expression expression= fSelectedExpression instanceof ParenthesizedExpression ? ((ParenthesizedExpression)fSelectedExpression).getExpression() : fSelectedExpression;
-		
-		ImportRewrite importRewrite= cuRewrite.getImportRewrite();			
+
+		ImportRewrite importRewrite= cuRewrite.getImportRewrite();
 		ImportRewriteContext importRewriteContext= new ContextSensitiveImportRewriteContext(fSelectedExpression, importRewrite);
 		String typeName= importRewrite.addImport(typeBinding, importRewriteContext);
-		
+
 		String defaultValue= null;
 		if (expression instanceof ClassInstanceCreation && typeBinding.isParameterizedType()) {
 			ClassInstanceCreation classInstanceCreation= (ClassInstanceCreation) expression;
 			Type cicType= classInstanceCreation.getType();
 			if (cicType instanceof ParameterizedType && ((ParameterizedType) cicType).typeArguments().size() == 0) {
 				// expand the diamond:
-				AST ast= cuRewrite.getAST();				
-				Type type= importRewrite.addImport(typeBinding, ast, importRewriteContext);				
+				AST ast= cuRewrite.getAST();
+				Type type= importRewrite.addImport(typeBinding, ast, importRewriteContext);
 				classInstanceCreation.setType(type);    // Should not touch the original AST ...
 				defaultValue= ASTNodes.asFormattedString(classInstanceCreation, 0, StubUtility.getLineDelimiterUsed(cuRewrite.getCu()),
 						FormatterProfileManager.getProjectSettings(cuRewrite.getCu().getJavaProject()));
 				classInstanceCreation.setType(cicType); // ... so let's restore it right away.
 			}
 		}
-		
+
 		if (defaultValue == null) {
 			defaultValue= fSourceCU.getBuffer().getText(expression.getStartPosition(), expression.getLength());
 		}
@@ -481,8 +481,7 @@
 
 	private List<String> guessTempNamesFromMethodInvocation(MethodInvocation selectedMethodInvocation, String[] excludedVariableNames) {
 		String methodName= selectedMethodInvocation.getName().getIdentifier();
-		for (int i= 0; i < KNOWN_METHOD_NAME_PREFIXES.length; i++) {
-			String prefix= KNOWN_METHOD_NAME_PREFIXES[i];
+		for (String prefix : KNOWN_METHOD_NAME_PREFIXES) {
 			if (! methodName.startsWith(prefix))
 				continue; //not this prefix
 			if (methodName.length() == prefix.length())
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ReplaceInvocationsRefactoring.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ReplaceInvocationsRefactoring.java
index 773705a..cdf6f9e 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ReplaceInvocationsRefactoring.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ReplaceInvocationsRefactoring.java
@@ -373,8 +373,7 @@
 		checkOverridden(result, new SubProgressMonitor(pm, 4));
 		IProgressMonitor sub= new SubProgressMonitor(pm, 15);
 		sub.beginTask("", units.length * 3); //$NON-NLS-1$
-		for (int c= 0; c < units.length; c++) {
-			ICompilationUnit unit= units[c];
+		for (ICompilationUnit unit : units) {
 			sub.subTask(Messages.format(RefactoringCoreMessages.InlineMethodRefactoring_processing,  BasicElementLabels.getFileName(unit)));
 			CallInliner inliner= null;
 			try {
@@ -386,14 +385,12 @@
 				if (bodies.length == 0)
 					continue;
 				inliner= new CallInliner(unit, (CompilationUnit) bodies[0].getRoot(), fSourceProvider);
-				for (int b= 0; b < bodies.length; b++) {
-					BodyDeclaration body= bodies[b];
+				for (BodyDeclaration body : bodies) {
 					inliner.initialize(body);
 					RefactoringStatus nestedInvocations= new RefactoringStatus();
 					ASTNode[] invocations= removeNestedCalls(nestedInvocations, unit,
 						fTargetProvider.getInvocations(body, new SubProgressMonitor(sub, 2)));
-					for (int i= 0; i < invocations.length; i++) {
-						ASTNode invocation= invocations[i];
+					for (ASTNode invocation : invocations) {
 						result.merge(inliner.initialize(invocation, fTargetProvider.getStatusSeverity()));
 						if (result.hasFatalError())
 							break;
@@ -464,8 +461,8 @@
 	private IFile[] getFilesToBeModified(ICompilationUnit[] units) {
 		List<IFile> result= new ArrayList<>(units.length + 1);
 		IFile file;
-		for (int i= 0; i < units.length; i++) {
-			file= getFile(units[i]);
+		for (ICompilationUnit unit : units) {
+			file= getFile(unit);
 			if (file != null)
 				result.add(file);
 		}
@@ -519,13 +516,11 @@
 	}
 	private void checkTypes(RefactoringStatus result, IMethod method, IType[] types, String key, IProgressMonitor pm) {
 		pm.beginTask("", types.length); //$NON-NLS-1$
-		for (int i= 0; i < types.length; i++) {
+		for (IType type : types) {
 			pm.worked(1);
-			IMethod[] overridden= types[i].findMethods(method);
+			IMethod[] overridden= type.findMethods(method);
 			if (overridden != null && overridden.length > 0) {
-				result.addError(
-					Messages.format(key, BasicElementLabels.getJavaElementName(types[i].getElementName())),
-					JavaStatusContext.create(overridden[0]));
+				result.addError(Messages.format(key, BasicElementLabels.getJavaElementName(type.getElementName())), JavaStatusContext.create(overridden[0]));
 			}
 		}
 	}
@@ -541,17 +536,17 @@
 			removeNestedCalls(status, unit, parents, invocations, i);
 		}
 		List<ASTNode> result= new ArrayList<>();
-		for (int i= 0; i < invocations.length; i++) {
-			if (invocations[i] != null)
-				result.add(invocations[i]);
+		for (ASTNode invocation : invocations) {
+			if (invocation != null) {
+				result.add(invocation);
+			}
 		}
 		return result.toArray(new ASTNode[result.size()]);
 	}
 
 	private void removeNestedCalls(RefactoringStatus status, ICompilationUnit unit, ASTNode[] parents, ASTNode[] invocations, int index) {
 		ASTNode invocation= invocations[index];
-		for (int i= 0; i < parents.length; i++) {
-			ASTNode parent= parents[i];
+		for (ASTNode parent : parents) {
 			while (parent != null) {
 				if (parent == invocation) {
 					status.addError(RefactoringCoreMessages.InlineMethodRefactoring_nestedInvocation,
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/SnippetFinder.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/SnippetFinder.java
index a46128b..0b33853 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/SnippetFinder.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/SnippetFinder.java
@@ -88,12 +88,12 @@
 		public boolean isEmpty() {
 			return fNodes.isEmpty() && fLocalMappings.isEmpty();
 		}
-		
+
 		/**
 		 * Tests whether the node to be replaced is invalid.
-		 * 
+		 *
 		 * @return true if the node is invalid, false otherwise
-		 * 
+		 *
 		 */
 		public boolean isInvalidNode() {
 			ASTNode first= fNodes.get(0);
@@ -105,12 +105,12 @@
 				return true;
 			return false;
 		}
-		
+
 		public MethodDeclaration getEnclosingMethod() {
 			ASTNode first= fNodes.get(0);
 			return (MethodDeclaration)ASTNodes.getParent(first, ASTNode.METHOD_DECLARATION);
 		}
-		
+
 		public boolean isNodeInStaticContext(){
 			ASTNode first= fNodes.get(0);
 			return ASTResolving.isInStaticContext(first);
@@ -281,9 +281,10 @@
 	}
 
 	private boolean isSnippetNode(ASTNode node) {
-		for (int i= 0; i < fSnippet.length; i++) {
-			if (node == fSnippet[i])
+		for (ASTNode a : fSnippet) {
+			if (node == a) {
 				return true;
+			}
 		}
 		return false;
 	}
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/generics/InferTypeArgumentsConstraintCreator.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/generics/InferTypeArgumentsConstraintCreator.java
index 7c53036..a6e10ee 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/generics/InferTypeArgumentsConstraintCreator.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/generics/InferTypeArgumentsConstraintCreator.java
@@ -16,7 +16,6 @@
 
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
@@ -426,16 +425,16 @@
 
 	private void addConstraintsForOverriding(IMethodBinding methodBinding, ConstraintVariable2 returnTypeCv, ConstraintVariable2[] parameterTypeCvs) {
 		boolean hasParameterElementCvs= false;
-		for (int i= 0; i < parameterTypeCvs.length; i++)
-			if (parameterTypeCvs[i] != null)
+		for (ConstraintVariable2 parameterTypeCv : parameterTypeCvs) {
+			if (parameterTypeCv != null) {
 				hasParameterElementCvs= true;
+			}
+		}
 
 		if (returnTypeCv == null && ! hasParameterElementCvs)
 			return;
 
-		ITypeBinding[] allSuperTypes= Bindings.getAllSuperTypes(methodBinding.getDeclaringClass());
-		for (int i= 0; i < allSuperTypes.length; i++) {
-			ITypeBinding superType= allSuperTypes[i];
+		for (ITypeBinding superType : Bindings.getAllSuperTypes(methodBinding.getDeclaringClass())) {
 			IMethodBinding superMethod= Bindings.findOverriddenMethodInType(superType, methodBinding);
 			if (superMethod == null)
 				continue;
@@ -513,8 +512,7 @@
 			methodTypeVariables= Collections.emptyMap();
 		} else {
 			methodTypeVariables= new HashMap<>();
-			for (int i= 0; i < methodTypeParameters.length; i++) {
-				ITypeBinding methodTypeParameter= methodTypeParameters[i];
+			for (ITypeBinding methodTypeParameter : methodTypeParameters) {
 				//TODO: typeVariable does not need a type binding - only used in equality constraints
 				TypeVariable typeVariable= (TypeVariable) fTCModel.createTType(methodTypeParameter);
 				IndependentTypeVariable2 typeVariableCv= fTCModel.makeIndependentTypeVariable(typeVariable);
@@ -824,8 +822,7 @@
 		setConstraintVariable(node, typeCv);
 
 		List<VariableDeclarationFragment> fragments= node.fragments();
-		for (Iterator<VariableDeclarationFragment> iter= fragments.iterator(); iter.hasNext();) {
-			VariableDeclarationFragment fragment= iter.next();
+		for (VariableDeclarationFragment fragment : fragments) {
 			ConstraintVariable2 fragmentCv= getConstraintVariable(fragment);
 			fTCModel.createElementEqualsConstraints(typeCv, fragmentCv);
 		}
@@ -852,8 +849,7 @@
 		if (typeCv == null)
 			return;
 
-		for (Iterator<VariableDeclarationFragment> iter= list.iterator(); iter.hasNext();) {
-			VariableDeclarationFragment fragment= iter.next();
+		for (VariableDeclarationFragment fragment : list) {
 			ConstraintVariable2 fragmentCv= getConstraintVariable(fragment);
 			fTCModel.createElementEqualsConstraints(typeCv, fragmentCv);
 		}
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/generics/InferTypeArgumentsConstraintsSolver.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/generics/InferTypeArgumentsConstraintsSolver.java
index 8c34219..5fd6887 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/generics/InferTypeArgumentsConstraintsSolver.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/generics/InferTypeArgumentsConstraintsSolver.java
@@ -101,13 +101,12 @@
 
 		//loop over all TypeEquivalenceSets and unify the elements from the fElemStructureEnv with the existing TypeEquivalenceSets
 		HashSet<TypeEquivalenceSet> allTypeEquivalenceSets= new HashSet<>();
-		for (int i= 0; i < allConstraintVariables.length; i++) {
-			TypeEquivalenceSet typeEquivalenceSet= allConstraintVariables[i].getTypeEquivalenceSet();
+		for (ConstraintVariable2 allConstraintVariable : allConstraintVariables) {
+			TypeEquivalenceSet typeEquivalenceSet= allConstraintVariable.getTypeEquivalenceSet();
 			if (typeEquivalenceSet != null)
 				allTypeEquivalenceSets.add(typeEquivalenceSet);
 		}
-		for (Iterator<TypeEquivalenceSet> iter= allTypeEquivalenceSets.iterator(); iter.hasNext();) {
-			TypeEquivalenceSet typeEquivalenceSet= iter.next();
+		for (TypeEquivalenceSet typeEquivalenceSet : allTypeEquivalenceSets) {
 			ConstraintVariable2[] contributingVariables= typeEquivalenceSet.getContributingVariables();
 			for (int i= 0; i < contributingVariables.length; i++) {
 				for (int j= i + 1; j < contributingVariables.length; j++) {
@@ -117,9 +116,7 @@
 				}
 			}
 		}
-		ITypeConstraint2[] allTypeConstraints= fTCModel.getAllTypeConstraints();
-		for (int i= 0; i < allTypeConstraints.length; i++) {
-			ITypeConstraint2 typeConstraint= allTypeConstraints[i];
+		for (ITypeConstraint2 typeConstraint : fTCModel.getAllTypeConstraints()) {
 			fTCModel.createElementEqualsConstraints(typeConstraint.getLeft(), typeConstraint.getRight());
 		}
 
@@ -134,8 +131,7 @@
 	}
 
 	private void initializeTypeEstimates(ConstraintVariable2[] allConstraintVariables) {
-		for (int i= 0; i < allConstraintVariables.length; i++) {
-			ConstraintVariable2 cv= allConstraintVariables[i];
+		for (ConstraintVariable2 cv : allConstraintVariables) {
 			//TODO: not necessary for types that are not used in a TypeConstraint but only as type in CollectionElementVariable
 			//TODO: handle nested element variables; see ParametricStructureComputer.createAndInitVars()
 			TypeEquivalenceSet set= cv.getTypeEquivalenceSet();
@@ -146,10 +142,10 @@
 			} else {
 				TypeSet typeEstimate= (TypeSet) cv.getTypeEstimate();
 				if (typeEstimate == null) {
-					ConstraintVariable2[] cvs= set.getContributingVariables();
 					typeEstimate= fTypeSetEnvironment.getUniverseTypeSet();
-					for (int j= 0; j < cvs.length; j++) //TODO: optimize: just try to find an immutable CV; if not found, use Universe
-						typeEstimate= typeEstimate.intersectedWith(createInitialEstimate(cvs[j]));
+					for (ConstraintVariable2 c : set.getContributingVariables()) { //TODO: optimize: just try to find an immutable CV; if not found, use Universe
+						typeEstimate= typeEstimate.intersectedWith(createInitialEstimate(c));
+					}
 					set.setTypeEstimate(typeEstimate);
 				}
 			}
@@ -271,9 +267,7 @@
 
 	private void chooseTypes(ConstraintVariable2[] allConstraintVariables, SubProgressMonitor pm) {
 		pm.beginTask("", allConstraintVariables.length); //$NON-NLS-1$
-		for (int i= 0; i < allConstraintVariables.length; i++) {
-			ConstraintVariable2 cv= allConstraintVariables[i];
-
+		for (ConstraintVariable2 cv : allConstraintVariables) {
 			TypeEquivalenceSet set= cv.getTypeEquivalenceSet();
 			if (set == null)
 				continue; //TODO: should not happen iff all unused constraint variables got pruned
@@ -352,9 +346,7 @@
 		}
 
 		if (unresolvedTypes.size() != 0) {
-			TType[] interfaces= unresolvedTypes.toArray(new TType[unresolvedTypes.size()]);
-			for (int i= 0; i < interfaces.length; i++) {
-				TType interf= interfaces[i];
+			for (TType interf : unresolvedTypes) {
 				if (isTaggingInterface(interf)) {
 					fInterfaceTaggingCache.put(interf, Boolean.TRUE);
 				} else {
@@ -379,8 +371,7 @@
 	}
 
 	private void findCastsToRemove(CastVariable2[] castVariables) {
-		for (int i= 0; i < castVariables.length; i++) {
-			CastVariable2 castCv= castVariables[i];
+		for (CastVariable2 castCv : castVariables) {
 			ConstraintVariable2 expressionVariable= castCv.getExpressionVariable();
 			TType chosenType= InferTypeArgumentsConstraintsSolver.getChosenType(expressionVariable);
 			TType castType= castCv.getType();
@@ -388,8 +379,8 @@
 			if (chosenType != null && TTypes.canAssignTo(chosenType, castType)) {
 				if (chosenType.equals(expressionType))
 					continue; // The type has not changed. Don't remove the cast, since it could be
-							   // there to get access to default-visible members or to
-							   // unify types of conditional expressions.
+							// there to get access to default-visible members or to
+							// unify types of conditional expressions.
 				fUpdate.addCastToRemove(castCv);
 
 			} else if (expressionVariable instanceof ArrayTypeVariable2 && castType.isArrayType()) { // bug 97258
@@ -400,7 +391,7 @@
 				if (chosenArrayElementType != null && TTypes.canAssignTo(chosenArrayElementType, ((ArrayType) castType).getComponentType())) {
 					if (expressionType instanceof ArrayType && chosenArrayElementType.equals(((ArrayType) expressionType).getComponentType()))
 						continue; // The type has not changed. Don't remove the cast, since it could be
-								   // there to unify types of conditional expressions.
+								// there to unify types of conditional expressions.
 					fUpdate.addCastToRemove(castCv);
 				}
 			}
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/generics/InferTypeArgumentsRefactoring.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/generics/InferTypeArgumentsRefactoring.java
index 5b745ac..a766654 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/generics/InferTypeArgumentsRefactoring.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/generics/InferTypeArgumentsRefactoring.java
@@ -18,7 +18,6 @@
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
@@ -171,13 +170,11 @@
 			fTCModel= new InferTypeArgumentsTCModel();
 			final InferTypeArgumentsConstraintCreator unitCollector= new InferTypeArgumentsConstraintCreator(fTCModel, fAssumeCloneReturnsSameType);
 
-			for (Iterator<Entry<IJavaProject, ArrayList<IJavaElement>>> iter= projectsToElements.entrySet().iterator(); iter.hasNext(); ) {
-				Entry<IJavaProject, ArrayList<IJavaElement>> entry= iter.next();
+			for (Entry<IJavaProject, ArrayList<IJavaElement>> entry : projectsToElements.entrySet()) {
 				IJavaProject project= entry.getKey();
 				ArrayList<IJavaElement> javaElementsList= entry.getValue();
 				IJavaElement[] javaElements= javaElementsList.toArray(new IJavaElement[javaElementsList.size()]);
 				List<ICompilationUnit> cus= Arrays.asList(JavaModelUtil.getAllCompilationUnits(javaElements));
-
 				int batchSize= 150;
 				int batches= ((cus.size()-1) / batchSize) + 1;
 				SubProgressMonitor projectMonitor= new SubProgressMonitor(pm, 1);
@@ -188,7 +185,6 @@
 					ICompilationUnit[] batchCus= batch.toArray(new ICompilationUnit[batch.size()]);
 					final SubProgressMonitor batchMonitor= new SubProgressMonitor(projectMonitor, 1);
 					batchMonitor.subTask(RefactoringCoreMessages.InferTypeArgumentsRefactoring_calculating_dependencies);
-
 					ASTParser parser= ASTParser.newParser(IASTSharedValues.SHARED_AST_LEVEL);
 					parser.setProject(project);
 					parser.setCompilerOptions(RefactoringASTParser.getCompilerOptions(project));
@@ -197,21 +193,20 @@
 						@Override
 						public void acceptAST(final ICompilationUnit source, final CompilationUnit ast) {
 							batchMonitor.subTask(BasicElementLabels.getFileName(source));
-
 							SafeRunner.run(new ISafeRunnable() {
 								@Override
 								public void run() throws Exception {
-									IProblem[] problems= ast.getProblems();
-									for (int p= 0; p < problems.length; p++) {
-										if (problems[p].isError()) {
+									for (IProblem problem : ast.getProblems()) {
+										if (problem.isError()) {
 											String cuName= JavaElementLabels.getElementLabel(source, JavaElementLabels.CU_QUALIFIED);
 											String msg= Messages.format(RefactoringCoreMessages.InferTypeArgumentsRefactoring_error_in_cu_skipped, new Object[] {cuName});
-											result.addError(msg, JavaStatusContext.create(source, SourceRangeFactory.create(problems[p])));
+											result.addError(msg, JavaStatusContext.create(source, SourceRangeFactory.create(problem)));
 											return;
 										}
 									}
 									ast.accept(unitCollector);
 								}
+
 								@Override
 								public void handleException(Throwable exception) {
 									String cuName= JavaElementLabels.getElementLabel(source, JavaElementLabels.CU_QUALIFIED);
@@ -221,16 +216,15 @@
 									result.addError(msg2, JavaStatusContext.create(source));
 								}
 							});
-
 							fTCModel.newCu();
 						}
+
 						@Override
 						public void acceptBinding(String bindingKey, IBinding binding) {
 							//do nothing
 						}
 					}, batchMonitor);
 				}
-
 				projectMonitor.done();
 				fTCModel.newCu();
 			}
@@ -266,8 +260,7 @@
 
 	private HashMap<IJavaProject, ArrayList<IJavaElement>> getJavaElementsPerProject(IJavaElement[] elements) {
 		HashMap<IJavaProject, ArrayList<IJavaElement>> result= new HashMap<>();
-		for (int i= 0; i < elements.length; i++) {
-			IJavaElement element= elements[i];
+		for (IJavaElement element : elements) {
 			IJavaProject javaProject= element.getJavaProject();
 			ArrayList<IJavaElement> javaElements= result.get(javaProject);
 			if (javaElements == null) {
@@ -283,8 +276,8 @@
 		RefactoringStatus result= new RefactoringStatus();
 		HashSet<IJavaProject> checkedProjects= new HashSet<>();
 
-		for (int i= 0; i < fElements.length; i++) {
-			IJavaProject javaProject= fElements[i].getJavaProject();
+		for (IJavaElement element : fElements) {
+			IJavaProject javaProject= element.getJavaProject();
 			if (! checkedProjects.contains(javaProject)) {
 				if (! JavaModelUtil.is50OrHigher(javaProject)) {
 					String message= Messages.format(RefactoringCoreMessages.InferTypeArgumentsRefactoring_not50, BasicElementLabels.getJavaElementName(javaProject.getElementName()));
@@ -305,11 +298,10 @@
 		Set<Entry<ICompilationUnit, CuUpdate>> entrySet= updates.entrySet();
 		pm.beginTask("", entrySet.size()); //$NON-NLS-1$
 		pm.setTaskName(RefactoringCoreMessages.InferTypeArgumentsRefactoring_creatingChanges);
-		for (Iterator<Entry<ICompilationUnit, CuUpdate>> iter= entrySet.iterator(); iter.hasNext();) {
+		for (Entry<ICompilationUnit, CuUpdate> entry : entrySet) {
 			if (pm.isCanceled())
 				throw new OperationCanceledException();
 
-			Entry<ICompilationUnit, CuUpdate> entry= iter.next();
 			ICompilationUnit cu= entry.getKey();
 			pm.worked(1);
 			pm.subTask(BasicElementLabels.getFileName(cu));
@@ -318,13 +310,10 @@
 			rewrite.setResolveBindings(false);
 			CuUpdate cuUpdate= entry.getValue();
 
-			for (Iterator<CollectionElementVariable2> cvIter= cuUpdate.getDeclarations().iterator(); cvIter.hasNext();) {
-				ConstraintVariable2 cv= cvIter.next();
+			for (ConstraintVariable2 cv : cuUpdate.getDeclarations()) {
 				rewriteConstraintVariable(cv, rewrite, fTCModel, fLeaveUnconstrainedRaw, null);
 			}
-
-			for (Iterator<CastVariable2> castsIter= cuUpdate.getCastsToRemove().iterator(); castsIter.hasNext();) {
-				CastVariable2 castCv= castsIter.next();
+			for (CastVariable2 castCv : cuUpdate.getCastsToRemove()) {
 				rewriteCastVariable(castCv, rewrite, fTCModel);
 			}
 
@@ -337,21 +326,14 @@
 	}
 
 	public static ParameterizedType[] inferArguments(SimpleType[] types, InferTypeArgumentsUpdate update, InferTypeArgumentsTCModel model, CompilationUnitRewrite rewrite) {
-		for (int i= 0; i < types.length; i++) {
-			types[i].setProperty(REWRITTEN, null);
+		for (SimpleType type : types) {
+			type.setProperty(REWRITTEN, null);
 		}
 		List<ParameterizedType> result= new ArrayList<>();
 		HashMap<ICompilationUnit, CuUpdate> updates= update.getUpdates();
-		Set<Entry<ICompilationUnit, CuUpdate>> entrySet= updates.entrySet();
-		for (Iterator<Entry<ICompilationUnit, CuUpdate>> iter= entrySet.iterator(); iter.hasNext();) {
-
-			Entry<ICompilationUnit, CuUpdate> entry= iter.next();
-
+		for (Entry<ICompilationUnit, CuUpdate> entry : updates.entrySet()) {
 			rewrite.setResolveBindings(false);
-			CuUpdate cuUpdate= entry.getValue();
-
-			for (Iterator<CollectionElementVariable2> cvIter= cuUpdate.getDeclarations().iterator(); cvIter.hasNext();) {
-				ConstraintVariable2 cv= cvIter.next();
+			for (ConstraintVariable2 cv : entry.getValue().getDeclarations()) {
 				ParameterizedType newNode= rewriteConstraintVariable(cv, rewrite, model, false, types);
 				if (newNode != null)
 					result.add(newNode);
@@ -405,9 +387,10 @@
 	}
 
 	private static boolean has(SimpleType[] types, Type originalType) {
-		for (int i= 0; i < types.length; i++) {
-			if (types[i] == originalType)
+		for (SimpleType type : types) {
+			if (type == originalType) {
 				return true;
+			}
 		}
 		return false;
 	}
@@ -478,8 +461,7 @@
 	private static ArrayList<CollectionElementVariable2> getTypeArgumentCvs(ConstraintVariable2 baseCv, InferTypeArgumentsTCModel tCModel) {
 		Map<String, CollectionElementVariable2> elementCvs= tCModel.getElementVariables(baseCv);
 		ArrayList<CollectionElementVariable2> typeArgumentCvs= new ArrayList<>();
-		for (Iterator<CollectionElementVariable2> iter= elementCvs.values().iterator(); iter.hasNext();) {
-			CollectionElementVariable2 elementCv= iter.next();
+		for (CollectionElementVariable2 elementCv : elementCvs.values()) {
 			int index= elementCv.getDeclarationTypeVariableIndex();
 			if (index != CollectionElementVariable2.NOT_DECLARED_TYPE_VARIABLE_INDEX) {
 				while (index >= typeArgumentCvs.size())
@@ -535,9 +517,7 @@
 	}
 
 	private static boolean hasUnboundElement(ConstraintVariable2 methodReceiverCv, InferTypeArgumentsTCModel tCModel) {
-		ArrayList<CollectionElementVariable2> typeArgumentCvs= getTypeArgumentCvs(methodReceiverCv, tCModel);
-		for (Iterator<CollectionElementVariable2> iter= typeArgumentCvs.iterator(); iter.hasNext();) {
-			CollectionElementVariable2 elementCv= iter.next();
+		for (CollectionElementVariable2 elementCv : getTypeArgumentCvs(methodReceiverCv, tCModel)) {
 			TType chosenElementType= InferTypeArgumentsConstraintsSolver.getChosenType(elementCv);
 			if (chosenElementType == null)
 				return true;
@@ -586,8 +566,8 @@
 
 	private IJavaProject getSingleProject() {
 		IJavaProject first= null;
-		for (int index= 0; index < fElements.length; index++) {
-			final IJavaProject project= fElements[index].getJavaProject();
+		for (IJavaElement element : fElements) {
+			final IJavaProject project= element.getJavaProject();
 			if (project != null) {
 				if (first == null)
 					first= project;
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/generics/InferTypeArgumentsTCModel.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/generics/InferTypeArgumentsTCModel.java
index 1504c1e..b187625 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/generics/InferTypeArgumentsTCModel.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/generics/InferTypeArgumentsTCModel.java
@@ -162,8 +162,7 @@
 	}
 
 	private void pruneUnusedCuScopedCvs() {
-		for (Iterator<ConstraintVariable2> iter= fCuScopedConstraintVariables.iterator(); iter.hasNext();) {
-			ConstraintVariable2 cv= iter.next();
+		for (ConstraintVariable2 cv : fCuScopedConstraintVariables) {
 			pruneCvIfUnused(cv);
 		}
 	}
@@ -182,8 +181,7 @@
 			return false;
 
 		Map<String, CollectionElementVariable2> elementVariables= getElementVariables(cv);
-		for (Iterator<CollectionElementVariable2> iter= elementVariables.values().iterator(); iter.hasNext();) {
-			CollectionElementVariable2 elementVariable= iter.next();
+		for (CollectionElementVariable2 elementVariable : elementVariables.values()) {
 			if (! pruneCvIfUnused(elementVariable))
 				return false;
 		}
@@ -278,8 +276,9 @@
 			} else {
 				ConstraintVariable2[] cvs= rightSet.getContributingVariables();
 				leftSet.addAll(cvs);
-				for (int i= 0; i < cvs.length; i++)
-					cvs[i].setTypeEquivalenceSet(leftSet);
+				for (ConstraintVariable2 cv : cvs) {
+					cv.setTypeEquivalenceSet(leftSet);
+				}
 			}
 		}
 	}
@@ -580,9 +579,8 @@
 			makeSupertypeElementVariables(expressionCv, superclass);
 		}
 
-		TType[] interfaces= type.getInterfaces();
-		for (int i= 0; i < interfaces.length; i++) {
-			makeSupertypeElementVariables(expressionCv, interfaces[i]);
+		for (TType intf : type.getInterfaces()) {
+			makeSupertypeElementVariables(expressionCv, intf);
 		}
 
 	}
@@ -646,9 +644,9 @@
 		if (superclass != null)
 			makeFixedSupertypeElementVariables(expressionCv, superclass);
 
-		TType[] interfaces= type.getInterfaces();
-		for (int i= 0; i < interfaces.length; i++)
-			makeFixedSupertypeElementVariables(expressionCv, interfaces[i]);
+		for (TType intf : type.getInterfaces()) {
+			makeFixedSupertypeElementVariables(expressionCv, intf);
+		}
 	}
 
 	private void makeFixedSupertypeElementVariables(ConstraintVariable2 expressionCv, TType supertype) {
@@ -820,8 +818,7 @@
 
 		Map<String, CollectionElementVariable2> leftElements= getElementVariables(cv);
 		Map<String, CollectionElementVariable2> rightElements= getElementVariables(initializerCv);
-		for (Iterator<Entry<String, CollectionElementVariable2>> leftIter= leftElements.entrySet().iterator(); leftIter.hasNext();) {
-			Entry<String, CollectionElementVariable2> leftEntry= leftIter.next();
+		for (Entry<String, CollectionElementVariable2> leftEntry : leftElements.entrySet()) {
 			String leftTypeVariableKey= leftEntry.getKey();
 			CollectionElementVariable2 rightElementVariable= rightElements.get(leftTypeVariableKey);
 			if (rightElementVariable != null) {
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/generics/ParametricStructureComputer.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/generics/ParametricStructureComputer.java
index 9beac28..1f41d63 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/generics/ParametricStructureComputer.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/generics/ParametricStructureComputer.java
@@ -19,7 +19,6 @@
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Stack;
 
@@ -95,8 +94,7 @@
 
 	private void dumpContainerStructure() {
 		System.out.println("\n*** Container Structure: ***\n"); //$NON-NLS-1$
-		for (int i= 0; i < fAllConstraintVariables.length; i++) {
-			ConstraintVariable2 v= fAllConstraintVariables[i];
+		for (ConstraintVariable2 v : fAllConstraintVariables) {
 			if (elemStructure(v) != null && !(elemStructure(v) == ParametricStructure.NONE))
 				System.out.println("elemStructure(" + v.toString() + ") = " + elemStructure(v)); //$NON-NLS-1$ //$NON-NLS-2$
 		}
@@ -116,8 +114,7 @@
 	private void initializeContainerStructure(){
 		if (DEBUG_INITIALIZATION)
 			System.out.println("  *** Seeding container structure ***"); //$NON-NLS-1$
-		for (int i= 0; i < fAllConstraintVariables.length; i++) {
-			ConstraintVariable2 v= fAllConstraintVariables[i];
+		for (ConstraintVariable2 v : fAllConstraintVariables) {
 			TType varType= declaredTypeOf(v);
 
 			if (varType != null) {
@@ -209,10 +206,9 @@
 
 		while (!fWorkList2.isEmpty()) {
 			ConstraintVariable2 v= fWorkList2.pop();
-			List<ITypeConstraint2> usedIn= fTCModel.getUsedIn(v);
 
-			for(Iterator<ITypeConstraint2> iter= usedIn.iterator(); iter.hasNext(); ) {
-				SubTypeConstraint2 stc= (SubTypeConstraint2) iter.next();
+			for (ITypeConstraint2 constraint : fTCModel.getUsedIn(v)) {
+				SubTypeConstraint2 stc= (SubTypeConstraint2) constraint;
 
 				ConstraintVariable2 lhs= stc.getLeft();
 				ConstraintVariable2 rhs= stc.getRight();
@@ -317,8 +313,7 @@
 		// Propagate structure from container variable to any subsidiary element variables
 		if (elemStructure(v) != ParametricStructure.NONE && fTCModel.getElementVariables(v).size() > 0) {
 			ParametricStructure t= elemStructure(v);
-			for(Iterator<CollectionElementVariable2> iterator=fTCModel.getElementVariables(v).values().iterator(); iterator.hasNext(); ) {
-				CollectionElementVariable2 typeVar= iterator.next();
+			for (CollectionElementVariable2 typeVar : fTCModel.getElementVariables(v).values()) {
 				int declarationTypeVariableIndex= typeVar.getDeclarationTypeVariableIndex();
 
 				if (declarationTypeVariableIndex != CollectionElementVariable2.NOT_DECLARED_TYPE_VARIABLE_INDEX)
@@ -372,9 +367,7 @@
 		if (containingStructure == null)
 			return false;
 
-		ParametricStructure[] parameters= containingStructure.getParameters();
-		for (int i= 0; i < parameters.length; i++) {
-			ParametricStructure parameter= parameters[i];
+		for (ParametricStructure parameter : containingStructure.getParameters()) {
 			if (parameter == subStructure)
 				return true;
 			else if (containsSubStructure(parameter, subStructure))
@@ -488,9 +481,8 @@
 
 		if (DEBUG_INITIALIZATION)
 			System.out.println("\n*** Creating Element Variables: ***\n"); //$NON-NLS-1$
-
-		for(int i= 0; i < fAllConstraintVariables.length; i++) {
-			newVars.addAll(createVariablesFor(fAllConstraintVariables[i]));
+		for (ConstraintVariable2 constraintVariable : fAllConstraintVariables) {
+			newVars.addAll(createVariablesFor(constraintVariable));
 		}
 
 //		// rmf 12/1/2004 - Add all the non-binary created vars to candidates for
@@ -540,16 +532,14 @@
 	private Collection<CollectionElementVariable2> createVars(Collection<CollectionElementVariable2> cvs, ParametricStructure[] parms) {
 		if (parms.length > 0) { // happens, e.g., for Properties (non-parametric)
 //			Assert.isTrue(cvs.size() == parms.length, "cvs.length==" + cvs.size() + " parms.length=" + parms.length); //assumption is wrong in presence of NOT_DECLARED_TYPE_VARIABLE_INDEX
-			for (Iterator<CollectionElementVariable2> iter= cvs.iterator(); iter.hasNext(); ) {
-				CollectionElementVariable2 childVar= iter.next();
+			for (CollectionElementVariable2 childVar : cvs) {
 				int declarationTypeVariableIndex= childVar.getDeclarationTypeVariableIndex();
 
 				if (declarationTypeVariableIndex != CollectionElementVariable2.NOT_DECLARED_TYPE_VARIABLE_INDEX)
 					setElemStructure(childVar, parms[declarationTypeVariableIndex]);
 			}
 		} else {
-			for (Iterator<CollectionElementVariable2> iter= cvs.iterator(); iter.hasNext(); ) {
-				CollectionElementVariable2 childVar= iter.next();
+			for (CollectionElementVariable2 childVar : cvs) {
 				int declarationTypeVariableIndex= childVar.getDeclarationTypeVariableIndex();
 
 				if (declarationTypeVariableIndex != CollectionElementVariable2.NOT_DECLARED_TYPE_VARIABLE_INDEX)
@@ -557,8 +547,7 @@
 			}
 		}
 		List<CollectionElementVariable2> result= new ArrayList<>(cvs.size() * 2);//roughly
-		for (Iterator<CollectionElementVariable2> iter= cvs.iterator(); iter.hasNext(); ) {
-			CollectionElementVariable2 childVar= iter.next();
+		for (CollectionElementVariable2 childVar : cvs) {
 			int declarationTypeVariableIndex= childVar.getDeclarationTypeVariableIndex();
 
 			if (declarationTypeVariableIndex != CollectionElementVariable2.NOT_DECLARED_TYPE_VARIABLE_INDEX) {
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/AccessorClassCreator.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/AccessorClassCreator.java
index 212d656..fb9f174 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/AccessorClassCreator.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/AccessorClassCreator.java
@@ -17,7 +17,6 @@
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.List;
 
 import com.ibm.icu.text.Collator;
@@ -227,8 +226,7 @@
 	private String createStaticFields() {
 		HashSet<String> added= new HashSet<>();
 		List<NLSSubstitution> subs= new ArrayList<>();
-		for (int i= 0; i < fNLSSubstitutions.length; i++) {
-			NLSSubstitution substitution= fNLSSubstitutions[i];
+		for (NLSSubstitution substitution : fNLSSubstitutions) {
 			int newState= substitution.getState();
 			if ((substitution.hasStateChanged() || substitution.isAccessorRename())&& newState == NLSSubstitution.EXTERNALIZED) {
 				if (added.add(substitution.getKey()))
@@ -243,8 +241,7 @@
 			}
 		});
 		StringBuilder buf= new StringBuilder();
-		for (Iterator<NLSSubstitution> iter= subs.iterator(); iter.hasNext();) {
-			NLSSubstitution element= iter.next();
+		for (NLSSubstitution element : subs) {
 			appendStaticField(buf, element);
 		}
 		return buf.toString();
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/AccessorClassModifier.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/AccessorClassModifier.java
index b875c42..a018fd0 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/AccessorClassModifier.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/AccessorClassModifier.java
@@ -150,20 +150,17 @@
 		MultiTextEdit multiTextEdit= new MultiTextEdit();
 		change.setEdit(multiTextEdit);
 
-		for (int i= 0; i < substitutions.length; i++) {
-			NLSSubstitution substitution= substitutions[i];
+		for (NLSSubstitution substitution : substitutions) {
 			if (NLSPropertyFileModifier.doRemove(substitution, newKeyToSubstMap, oldKeyToSubstMap)) {
 				sourceModification.removeKey(substitution, change);
 			}
 		}
-		for (int i= 0; i < substitutions.length; i++) {
-			NLSSubstitution substitution= substitutions[i];
+		for (NLSSubstitution substitution : substitutions) {
 			if (substitution.isKeyRename() && NLSPropertyFileModifier.doReplace(substitution, newKeyToSubstMap, oldKeyToSubstMap)) {
 				sourceModification.renameKey(substitution, change);
 			}
 		}
-		for (int i= 0; i < substitutions.length; i++) {
-			NLSSubstitution substitution= substitutions[i];
+		for (NLSSubstitution substitution : substitutions) {
 			if (NLSPropertyFileModifier.doInsert(substitution, newKeyToSubstMap, oldKeyToSubstMap)) {
 				sourceModification.addKey(substitution, change);
 			}
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSAccessorFieldRenameParticipant.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSAccessorFieldRenameParticipant.java
index 04ec18a..913e60f 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSAccessorFieldRenameParticipant.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSAccessorFieldRenameParticipant.java
@@ -174,9 +174,8 @@
 		if (!importsOSGIUtil(unit))
 			return false;
 
-		IInitializer[] initializers= type.getInitializers();
-		for (int i= 0; i < initializers.length; i++) {
-			if (Modifier.isStatic(initializers[0].getFlags()))
+		for (IInitializer initializer : type.getInitializers()) {
+			if (Modifier.isStatic(initializer.getFlags()))
 				return true;
 		}
 
@@ -184,19 +183,20 @@
 	}
 
 	private static IField getBundleNameField(IField[] fields) {
-		for (int i= 0; i < fields.length; i++) {
-			if ("BUNDLE_NAME".equals(fields[i].getElementName())) //$NON-NLS-1$
-				return fields[i];
+		for (IField field : fields) {
+			if ("BUNDLE_NAME".equals(field.getElementName())) { //$NON-NLS-1$
+				return field;
+			}
 		}
 
 		return null;
 	}
 
 	private static boolean importsOSGIUtil(ICompilationUnit unit) throws JavaModelException {
-		IImportDeclaration[] imports= unit.getImports();
-		for (int i= 0; i < imports.length; i++) {
-			if (imports[i].getElementName().startsWith("org.eclipse.osgi.util.")) //$NON-NLS-1$
+		for (IImportDeclaration importDecl : unit.getImports()) {
+			if (importDecl.getElementName().startsWith("org.eclipse.osgi.util.")) { //$NON-NLS-1$
 				return true;
+			}
 		}
 
 		return false;
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSHint.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSHint.java
index 5a2b843..352cc0a 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSHint.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSHint.java
@@ -209,10 +209,8 @@
 	private NLSSubstitution[] createSubstitutions(NLSLine[] lines, Properties props, CompilationUnit astRoot) {
 		List<NLSSubstitution> result= new ArrayList<>();
 
-		for (int i= 0; i < lines.length; i++) {
-			NLSElement[] elements= lines[i].getElements();
-			for (int j= 0; j < elements.length; j++) {
-				NLSElement nlsElement= elements[j];
+		for (NLSLine line : lines) {
+			for (NLSElement nlsElement : line.getElements()) {
 				if (nlsElement.hasTag()) {
 					AccessorClassReference accessorClassReference= NLSHintHelper.getAccessorClassReference(astRoot, nlsElement);
 					if (accessorClassReference == null) {
@@ -235,10 +233,8 @@
 	}
 
 	private static AccessorClassReference findFirstAccessorReference(NLSLine[] lines, CompilationUnit astRoot) {
-		for (int i= 0; i < lines.length; i++) {
-			NLSElement[] elements= lines[i].getElements();
-			for (int j= 0; j < elements.length; j++) {
-				NLSElement nlsElement= elements[j];
+		for (NLSLine line : lines) {
+			for (NLSElement nlsElement : line.getElements()) {
 				if (nlsElement.hasTag()) {
 					AccessorClassReference accessorClassReference= NLSHintHelper.getAccessorClassReference(astRoot, nlsElement);
 					if (accessorClassReference != null) {
@@ -247,12 +243,9 @@
 				}
 			}
 		}
-
 		// try to find a access with missing //non-nls tag (bug 75155)
-		for (int i= 0; i < lines.length; i++) {
-			NLSElement[] elements= lines[i].getElements();
-			for (int j= 0; j < elements.length; j++) {
-				NLSElement nlsElement= elements[j];
+		for (NLSLine line : lines) {
+			for (NLSElement nlsElement : line.getElements()) {
 				if (!nlsElement.hasTag()) {
 					AccessorClassReference accessorClassReference= NLSHintHelper.getAccessorClassReference(astRoot, nlsElement);
 					if (accessorClassReference != null) {
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSHintHelper.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSHintHelper.java
index 8068578..909a8bb 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSHintHelper.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSHintHelper.java
@@ -101,7 +101,7 @@
 
 	/**
 	 * Returns the accessor binding info or <code>null</code> if this element is not a nls'ed entry
-	 * 
+	 *
 	 * @param astRoot the ast root
 	 * @param region the text region
 	 * @param usedFullyQualifiedName boolean flag to indicate that fully qualified name is used to
@@ -333,15 +333,11 @@
 	}
 
 	public static IPackageFragment getResourceBundlePackage(IJavaProject javaProject, String packageName, String resourceName) throws JavaModelException {
-		IPackageFragmentRoot[] allRoots= javaProject.getAllPackageFragmentRoots();
-		for (int i= 0; i < allRoots.length; i++) {
-			IPackageFragmentRoot root= allRoots[i];
+		for (IPackageFragmentRoot root : javaProject.getAllPackageFragmentRoots()) {
 			if (root.getKind() == IPackageFragmentRoot.K_SOURCE) {
 				IPackageFragment packageFragment= root.getPackageFragment(packageName);
 				if (packageFragment.exists()) {
-					Object[] resources= packageFragment.isDefaultPackage() ? root.getNonJavaResources() : packageFragment.getNonJavaResources();
-					for (int j= 0; j < resources.length; j++) {
-						Object object= resources[j];
+					for (Object object : packageFragment.isDefaultPackage() ? root.getNonJavaResources() : packageFragment.getNonJavaResources()) {
 						if (object instanceof IFile) {
 							IFile file= (IFile) object;
 							if (file.getName().equals(resourceName)) {
@@ -371,9 +367,7 @@
 	}
 
 	public static IStorage getResourceBundle(IJavaProject javaProject, String packageName, String resourceName) throws JavaModelException {
-		IPackageFragmentRoot[] allRoots= javaProject.getAllPackageFragmentRoots();
-		for (int i= 0; i < allRoots.length; i++) {
-			IPackageFragmentRoot root= allRoots[i];
+		for (IPackageFragmentRoot root : javaProject.getAllPackageFragmentRoots()) {
 			if (root.getKind() == IPackageFragmentRoot.K_SOURCE) {
 				IStorage storage= getResourceBundle(root, packageName, resourceName);
 				if (storage != null)
@@ -386,9 +380,7 @@
 	public static IStorage getResourceBundle(IPackageFragmentRoot root, String packageName, String resourceName) throws JavaModelException {
 		IPackageFragment packageFragment= root.getPackageFragment(packageName);
 		if (packageFragment.exists()) {
-			Object[] resources= packageFragment.isDefaultPackage() ? root.getNonJavaResources() : packageFragment.getNonJavaResources();
-			for (int j= 0; j < resources.length; j++) {
-				Object object= resources[j];
+			for (Object object : packageFragment.isDefaultPackage() ? root.getNonJavaResources() : packageFragment.getNonJavaResources()) {
 				if (JavaModelUtil.isOpenableStorage(object)) {
 					IStorage storage= (IStorage)object;
 					if (storage.getName().equals(resourceName)) {
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSPropertyFileModifier.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSPropertyFileModifier.java
index b5f6a0f..77724dd 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSPropertyFileModifier.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSPropertyFileModifier.java
@@ -15,7 +15,6 @@
 
 import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
@@ -38,12 +37,12 @@
 import org.eclipse.ltk.core.refactoring.TextChange;
 import org.eclipse.ltk.core.refactoring.TextFileChange;
 
+import org.eclipse.jdt.internal.core.manipulation.StubUtility;
+import org.eclipse.jdt.internal.core.manipulation.util.BasicElementLabels;
 import org.eclipse.jdt.internal.corext.refactoring.Checks;
 import org.eclipse.jdt.internal.corext.refactoring.changes.TextChangeCompatibility;
 import org.eclipse.jdt.internal.corext.refactoring.nls.changes.CreateTextFileChange;
 import org.eclipse.jdt.internal.corext.util.Messages;
-import org.eclipse.jdt.internal.core.manipulation.StubUtility;
-import org.eclipse.jdt.internal.core.manipulation.util.BasicElementLabels;
 
 
 public class NLSPropertyFileModifier {
@@ -90,13 +89,11 @@
 
 		PropertyFileDocumentModel model= new PropertyFileDocumentModel(textChange.getCurrentDocument(new NullProgressMonitor()));
 
-		for (Iterator<String> iterator= keys.iterator(); iterator.hasNext();) {
-			String key= iterator.next();
+		for (String key : keys) {
 			TextEdit edit= model.remove(key);
 			if (edit != null) {
 				TextChangeCompatibility.addTextEdit(textChange, Messages.format(NLSMessages.NLSPropertyFileModifier_remove_entry, BasicElementLabels.getJavaElementName(key)), edit);
 			}
-
 		}
 		return textChange;
 	}
@@ -131,8 +128,7 @@
 	static HashMap<String, NLSSubstitution> getNewKeyToSubstitutionMap(NLSSubstitution[] substitutions) {
 		HashMap<String, NLSSubstitution> keyToSubstMap= new HashMap<>(substitutions.length);
 		// find all duplicates
-		for (int i= 0; i < substitutions.length; i++) {
-			NLSSubstitution curr= substitutions[i];
+		for (NLSSubstitution curr : substitutions) {
 			if (curr.getState() == NLSSubstitution.EXTERNALIZED) {
 				NLSSubstitution val= keyToSubstMap.get(curr.getKey());
 				if (val == null || (val.hasPropertyFileChange() && !curr.hasPropertyFileChange())) {
@@ -152,8 +148,7 @@
 	static HashMap<String, NLSSubstitution> getOldKeyToSubstitutionMap(NLSSubstitution[] substitutions) {
 		HashMap<String, NLSSubstitution> keyToSubstMap= new HashMap<>(substitutions.length);
 		// find all duplicates
-		for (int i= 0; i < substitutions.length; i++) {
-			NLSSubstitution curr= substitutions[i];
+		for (NLSSubstitution curr : substitutions) {
 			if (curr.getInitialState() == NLSSubstitution.EXTERNALIZED) {
 				String key= curr.getInitialKey();
 				if (key != null) {
@@ -183,8 +178,7 @@
 	}
 
 	private static void addReplaceEdits(TextChange textChange, NLSSubstitution[] substitutions, Map<String, NLSSubstitution> newKeyToSubstMap, Map<String, NLSSubstitution> oldKeyToSubstMap, PropertyFileDocumentModel model) {
-		for (int i= 0; i < substitutions.length; i++) {
-			NLSSubstitution substitution= substitutions[i];
+		for (NLSSubstitution substitution : substitutions) {
 			if (doReplace(substitution, newKeyToSubstMap, oldKeyToSubstMap)) {
 				KeyValuePair initialPair= new KeyValuePair(substitution.getInitialKey(), substitution.getInitialValue());
 
@@ -217,9 +211,7 @@
 	private static void addInsertEdits(TextChange textChange, NLSSubstitution[] substitutions, Map<String, NLSSubstitution> newKeyToSubstMap, Map<String, NLSSubstitution> oldKeyToSubstMap, PropertyFileDocumentModel model) {
 		ArrayList<KeyValuePair> keyValuePairsToAdd= new ArrayList<>();
 
-		for (int i= 0; i < substitutions.length; i++) {
-			NLSSubstitution substitution= substitutions[i];
-
+		for (NLSSubstitution substitution : substitutions) {
 			if (doInsert(substitution, newKeyToSubstMap, oldKeyToSubstMap)) {
 				String value= PropertyFileDocumentModel.escape(substitution.getValueNonEmpty(), true) + model.getLineDelimiter();
 				String key= PropertyFileDocumentModel.escape(substitution.getKey(), false);
@@ -250,8 +242,7 @@
 	}
 
 	private static void addRemoveEdits(TextChange textChange, NLSSubstitution[] substitutions, Map<String, NLSSubstitution> newKeyToSubstMap, Map<String, NLSSubstitution> oldKeyToSubstMap, PropertyFileDocumentModel model) {
-		for (int i= 0; i < substitutions.length; i++) {
-			NLSSubstitution substitution= substitutions[i];
+		for (NLSSubstitution substitution : substitutions) {
 			if (doRemove(substitution, newKeyToSubstMap, oldKeyToSubstMap)) {
 				TextEdit edit= model.remove(substitution.getInitialKey());
 				if (edit != null) {
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSRefactoring.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSRefactoring.java
index 9ad26d5..5695747 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSRefactoring.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSRefactoring.java
@@ -341,7 +341,7 @@
 			result.addError(NLSMessages.NLSRefactoring_pattern_empty);
 		}
 
-		if (pattern.indexOf(KEY) == -1) {
+		if (!pattern.contains(KEY)) {
 			String msg= Messages.format(NLSMessages.NLSRefactoring_pattern_does_not_contain, KEY);
 			result.addWarning(msg);
 		}
@@ -356,9 +356,7 @@
 
 	private RefactoringStatus checkKeys() {
 		RefactoringStatus result= new RefactoringStatus();
-		NLSSubstitution[] subs= fSubstitutions;
-		for (int i= 0; i < subs.length; i++) {
-			NLSSubstitution substitution= subs[i];
+		for (NLSSubstitution substitution : fSubstitutions) {
 			if ((substitution.getState() == NLSSubstitution.EXTERNALIZED) && substitution.hasStateChanged()) {
 				result.merge(checkKey(substitution.getKey()));
 			}
@@ -382,9 +380,9 @@
 
 		final String[] UNWANTED_STRINGS= {" ", ":", "\"", "\\", "'", "?", "="}; //$NON-NLS-7$ //$NON-NLS-6$ //$NON-NLS-5$ //$NON-NLS-4$ //$NON-NLS-3$ //$NON-NLS-2$ //$NON-NLS-1$
 		//feature in resource bundle - does not work properly if keys have ":"
-		for (int i= 0; i < UNWANTED_STRINGS.length; i++) {
-			if (key.indexOf(UNWANTED_STRINGS[i]) != -1) {
-				String[] args= {key, UNWANTED_STRINGS[i]};
+		for (String s : UNWANTED_STRINGS) {
+			if (key.contains(s)) {
+				String[] args= {key, s};
 				String msg= Messages.format(NLSMessages.NLSRefactoring_should_not_contain, args);
 				result.addError(msg);
 			}
@@ -412,17 +410,16 @@
 
 	private boolean willModifySource() {
 		NLSSubstitution[] subs= fSubstitutions;
-		for (int i= 0; i < subs.length; i++) {
-			if (subs[i].hasSourceChange())
+		for (NLSSubstitution sub : subs) {
+			if (sub.hasSourceChange()) {
 				return true;
+			}
 		}
 		return false;
 	}
 
 	private boolean willModifyPropertyFile() {
-		NLSSubstitution[] subs= fSubstitutions;
-		for (int i= 0; i < subs.length; i++) {
-			NLSSubstitution substitution= subs[i];
+		for (NLSSubstitution substitution : fSubstitutions) {
 			if (substitution.hasPropertyFileChange()) {
 				return true;
 			}
@@ -434,9 +431,7 @@
 		if (!isEclipseNLS())
 			return false;
 
-		NLSSubstitution[] subs= fSubstitutions;
-		for (int i= 0; i < subs.length; i++) {
-			NLSSubstitution substitution= subs[i];
+		for (NLSSubstitution substitution : fSubstitutions) {
 			if (substitution.hasAccessorClassChange()) {
 				return true;
 			}
@@ -467,8 +462,9 @@
 	public void setPrefix(String prefix) {
 		fPrefix= prefix;
 		if (fSubstitutions != null) {
-			for (int i= 0; i < fSubstitutions.length; i++)
-				fSubstitutions[i].setPrefix(prefix);
+			for (NLSSubstitution fSubstitution : fSubstitutions) {
+				fSubstitution.setPrefix(prefix);
+			}
 		}
 	}
 
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSSourceModifier.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSSourceModifier.java
index c06ae4e..ede01c2 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSSourceModifier.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSSourceModifier.java
@@ -65,8 +65,7 @@
 		change.setEdit(multiTextEdit);
 
 		boolean createImportForAccessor= true;
-		for (int i= 0; i < subs.length; i++) {
-			NLSSubstitution substitution= subs[i];
+		for (NLSSubstitution substitution : subs) {
 			int newState= substitution.getState();
 			if (newState == NLSSubstitution.EXTERNALIZED && createImportForAccessor) {
 				accessorClassName= sourceModification.createImportForAccessor(multiTextEdit, accessorClassName, accessorPackage, cu);
@@ -198,7 +197,7 @@
 	private int getLineEnd(IBuffer buffer, int offset) {
 		int pos= offset;
 		int length= buffer.getLength();
-		while (pos < length && !isDelemiter(buffer.getChar(pos))) {
+		while (pos < length && !isDelimiter(buffer.getChar(pos))) {
 			pos++;
 		}
 		return pos;
@@ -206,17 +205,17 @@
 
 	private int getLineStart(IBuffer buffer, int offset) {
 		int pos= offset;
-		while (pos >= 0 && !isDelemiter(buffer.getChar(pos))) {
+		while (pos >= 0 && !isDelimiter(buffer.getChar(pos))) {
 			pos--;
 		}
 		return pos + 1;
 	}
 
-	private boolean isDelemiter(char ch) {
-		String[] delem= TextUtilities.DELIMITERS;
-		for (int i= 0; i < delem.length; i++) {
-			if (delem[i].length() == 1 && ch == delem[i].charAt(0))
+	private boolean isDelimiter(char ch) {
+		for (String delim : TextUtilities.DELIMITERS) {
+			if (delim.length() == 1 && ch == delim.charAt(0)) {
 				return true;
+			}
 		}
 		return false;
 	}
@@ -227,9 +226,7 @@
 	}
 
 	private static NLSElement findElement(NLSLine line, int position) {
-		NLSElement[] elements= line.getElements();
-		for (int i= 0; i < elements.length; i++) {
-			NLSElement element= elements[i];
+		for (NLSElement element : line.getElements()) {
 			if (isPositionInElement(element, position))
 				return element;
 		}
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSSubstitution.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSSubstitution.java
index ec4bff0..e8d7488 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSSubstitution.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSSubstitution.java
@@ -78,8 +78,8 @@
 	public static int countItems(NLSSubstitution[] elems, int task) {
 		Assert.isTrue(task == NLSSubstitution.EXTERNALIZED || task == NLSSubstitution.IGNORED || task == NLSSubstitution.INTERNALIZED);
 		int result= 0;
-		for (int i= 0; i < elems.length; i++) {
-			if (elems[i].fState == task) {
+		for (NLSSubstitution substitution : elems) {
+			if (substitution.fState == task) {
 				result++;
 			}
 		}
@@ -267,8 +267,7 @@
 		if (fState == EXTERNALIZED) {
 			String currKey= getKey();
 			String currValue= getValueNonEmpty();
-			for (int i= 0; i < substitutions.length; i++) {
-				NLSSubstitution substitution= substitutions[i];
+			for (NLSSubstitution substitution : substitutions) {
 				if (substitution != this && substitution.getState() == EXTERNALIZED) {
 					// same key but different value
 					if (currKey.equals(substitution.getKey()) && !currValue.equals(substitution.getValueNonEmpty())) {
@@ -302,8 +301,7 @@
 	}
 
 	private boolean containsKey(NLSSubstitution[] substitutions, String key) {
-		for (int i= 0; i < substitutions.length; i++) {
-			NLSSubstitution substitution= substitutions[i];
+		for (NLSSubstitution substitution : substitutions) {
 			if (substitution == this || substitution.fState != EXTERNALIZED)
 				continue;
 
@@ -315,8 +313,7 @@
 	}
 
 	public static void updateSubtitutions(NLSSubstitution[] substitutions, Properties props, String accessorClassName) {
-		for (int i= 0; i < substitutions.length; i++) {
-			NLSSubstitution substitution= substitutions[i];
+		for (NLSSubstitution substitution : substitutions) {
 			if ((substitution.getState() == NLSSubstitution.EXTERNALIZED) && !substitution.hasStateChanged()) {
 				substitution.setInitialValue(props.getProperty(substitution.getKey()));
 				substitution.setUpdatedAccessor(accessorClassName);
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/PropertyFileDocumentModel.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/PropertyFileDocumentModel.java
index 6157e02..8569001 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/PropertyFileDocumentModel.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/PropertyFileDocumentModel.java
@@ -16,8 +16,6 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
-import java.util.Comparator;
-import java.util.Iterator;
 import java.util.List;
 
 import com.ibm.icu.text.Collator;
@@ -32,12 +30,12 @@
 
 import org.eclipse.ltk.core.refactoring.TextChange;
 
+import org.eclipse.jdt.internal.core.manipulation.util.BasicElementLabels;
+import org.eclipse.jdt.internal.core.manipulation.util.Strings;
 import org.eclipse.jdt.internal.corext.refactoring.changes.TextChangeCompatibility;
 import org.eclipse.jdt.internal.corext.util.Messages;
-import org.eclipse.jdt.internal.core.manipulation.util.Strings;
 
 import org.eclipse.jdt.internal.ui.propertiesfileeditor.PropertiesFileEscapes;
-import org.eclipse.jdt.internal.core.manipulation.util.BasicElementLabels;
 
 public class PropertyFileDocumentModel {
 
@@ -63,8 +61,7 @@
 	 * @return the pair with the key or <b>null</b> if no such pair.
 	 */
     public KeyValuePair getKeyValuePair(String key) {
-    	for (int i= 0; i < fKeyValuePairs.size(); i++) {
-            KeyValuePairModell keyValuePair = fKeyValuePairs.get(i);
+    	for (KeyValuePairModell keyValuePair : fKeyValuePairs) {
             if (keyValuePair.getKey().equals(key)) {
             	return keyValuePair;
             }
@@ -117,16 +114,10 @@
     public void insert(KeyValuePair[] keyValuePairs, TextChange change) {
 
         ArrayList<KeyValuePair> sorted= new ArrayList<>(Arrays.asList(keyValuePairs));
-        Collections.sort(sorted, new Comparator<KeyValuePair>() {
-			@Override
-			public int compare(KeyValuePair p1, KeyValuePair p2) {
-				return Collator.getInstance().compare(p1.fKey, p2.fKey);
-			}
-        });
+        Collections.sort(sorted, (p1, p2) -> Collator.getInstance().compare(p1.fKey, p2.fKey));
 
-        for (int i = 0; i < sorted.size(); i++) {
-            KeyValuePair curr= sorted.get(i);
-			InsertEdit insertEdit= insert(curr);
+        for (KeyValuePair curr : sorted) {
+            InsertEdit insertEdit= insert(curr);
 
             String message= Messages.format(NLSMessages.NLSPropertyFileModifier_add_entry, BasicElementLabels.getJavaElementName(curr.getKey()));
 			TextChangeCompatibility.addTextEdit(change, message, insertEdit);
@@ -134,30 +125,28 @@
     }
 
     public DeleteEdit remove(String key) {
-    	for (Iterator<KeyValuePairModell> iter = fKeyValuePairs.iterator(); iter.hasNext();) {
-            KeyValuePairModell keyValuePair = iter.next();
-            if (keyValuePair.fKey.equals(key)) {
-            	return new DeleteEdit(keyValuePair.fOffset, keyValuePair.getLength());
-            }
-        }
+		for (KeyValuePairModell keyValuePair : fKeyValuePairs) {
+			if (keyValuePair.fKey.equals(key)) {
+				return new DeleteEdit(keyValuePair.fOffset, keyValuePair.getLength());
+			}
+		}
         return null;
     }
 
     public ReplaceEdit replace(KeyValuePair toReplace, KeyValuePair replaceWith) {
-        for (Iterator<KeyValuePairModell> iter = fKeyValuePairs.iterator(); iter.hasNext();) {
-            KeyValuePairModell keyValuePair = iter.next();
-            if (keyValuePair.fKey.equals(toReplace.getKey())) {
-                String newText= new KeyValuePairModell(replaceWith).getKeyValueText();
-                return new ReplaceEdit(keyValuePair.fOffset, keyValuePair.getLength(), newText);
-            }
-        }
+		for (KeyValuePairModell keyValuePair : fKeyValuePairs) {
+			if (keyValuePair.fKey.equals(toReplace.getKey())) {
+				String newText= new KeyValuePairModell(replaceWith).getKeyValueText();
+				return new ReplaceEdit(keyValuePair.fOffset, keyValuePair.getLength(), newText);
+			}
+		}
         return null;
     }
 
     private int findInsertPosition(KeyValuePairModell keyValuePair) {
     	ArrayList<String> keys= new ArrayList<>();
-        for (int i= 0; i < fKeyValuePairs.size(); i++) {
-            KeyValuePairModell element = fKeyValuePairs.get(i);
+        for (KeyValuePairModell keyValuePairmodel : fKeyValuePairs) {
+            KeyValuePairModell element= keyValuePairmodel;
             if (! (element instanceof LastKeyValuePair))
             	keys.add(element.getKey());
         }
@@ -298,7 +287,7 @@
 		public int getLength() {
 			return fLength;
 		}
-		
+
         private String getKeyValueText() {
 			return fKey + '=' + fValue;
         }
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/participants/ResourceModifications.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/participants/ResourceModifications.java
index 105f191..5072f50 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/participants/ResourceModifications.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/participants/ResourceModifications.java
@@ -15,7 +15,6 @@
 
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Iterator;
 import java.util.List;
 
 import org.eclipse.core.runtime.Assert;
@@ -257,18 +256,18 @@
 		List<RefactoringParticipant> result= new ArrayList<>(5);
 		if (fDelete != null) {
 			DeleteArguments arguments= new DeleteArguments();
-			for (Iterator<IResource> iter= fDelete.iterator(); iter.hasNext();) {
+			for (IResource resource : fDelete) {
 				DeleteParticipant[] deletes= ParticipantManager.loadDeleteParticipants(status,
-					processor, iter.next(),
+					processor, resource,
 					arguments, natures, shared);
 				result.addAll(Arrays.asList(deletes));
 			}
 		}
 		if (fCreate != null) {
 			CreateArguments arguments= new CreateArguments();
-			for (Iterator<IResource> iter= fCreate.iterator(); iter.hasNext();) {
+			for (IResource resource : fCreate) {
 				CreateParticipant[] creates= ParticipantManager.loadCreateParticipants(status,
-					processor, iter.next(),
+					processor, resource,
 					arguments, natures, shared);
 				result.addAll(Arrays.asList(creates));
 			}
@@ -339,8 +338,7 @@
 		if (fDeltaDescriptions == null)
 			return false;
 		IPath fullPath= resource.getFullPath();
-		for (Iterator<DeltaDescription> iter= fDeltaDescriptions.iterator(); iter.hasNext();) {
-			DeltaDescription delta= iter.next();
+		for (DeltaDescription delta : fDeltaDescriptions) {
 			if (fullPath.equals(delta.getDestinationPath()))
 				return true;
 		}
@@ -350,8 +348,8 @@
 	public void buildDelta(IResourceChangeDescriptionFactory builder) {
 		if (fDeltaDescriptions == null)
 			return;
-		for (Iterator<DeltaDescription> iter= fDeltaDescriptions.iterator(); iter.hasNext();) {
-			iter.next().buildDelta(builder);
+		for (DeltaDescription delta : fDeltaDescriptions) {
+			delta.buildDelta(builder);
 		}
 	}
 
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/JavaRenameProcessor.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/JavaRenameProcessor.java
index f8780d7..0000ea3 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/JavaRenameProcessor.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/JavaRenameProcessor.java
@@ -51,9 +51,8 @@
 		RefactoringStatus result= doCheckFinalConditions(pm, context);
 		if (result.hasFatalError())
 			return result;
-		IFile[] changed= getChangedFiles();
-		for (int i= 0; i < changed.length; i++) {
-			deltaFactory.change(changed[i]);
+		for (IFile f : getChangedFiles()) {
+			deltaFactory.change(f);
 		}
 		fRenameModifications= computeRenameModifications();
 		fRenameModifications.buildDelta(deltaFactory);
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/MethodChecks.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/MethodChecks.java
index cb98755..d1a16a4 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/MethodChecks.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/MethodChecks.java
@@ -109,15 +109,14 @@
 		try {
 			IType[] classes= hierarchy.getAllClasses();
 			subMonitor.beginTask("", classes.length); //$NON-NLS-1$
-			for (int i= 0; i < classes.length; i++) {
-				final IType clazz= classes[i];
+			for (IType clazz : classes) {
 				IType[] superinterfaces= null;
 				if (clazz.equals(hierarchy.getType()))
 					superinterfaces= hierarchy.getAllSuperInterfaces(clazz);
 				else
 					superinterfaces= clazz.newSupertypeHierarchy(new SubProgressMonitor(subMonitor, 1)).getAllSuperInterfaces(clazz);
-				for (int j= 0; j < superinterfaces.length; j++) {
-					IMethod found= Checks.findSimilarMethod(method, superinterfaces[j]);
+				for (IType superinterface : superinterfaces) {
+					IMethod found= Checks.findSimilarMethod(method, superinterface);
 					if (found != null && !found.equals(method))
 						return found;
 				}
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/MethodOccurenceCollector.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/MethodOccurenceCollector.java
index 19207f6..78a7488 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/MethodOccurenceCollector.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/MethodOccurenceCollector.java
@@ -35,7 +35,7 @@
 	 */
 	@SuppressWarnings("deprecation")
 	private static final int InternalTokenNameIdentifier= ITerminalSymbols.TokenNameIdentifier;
-	
+
 	private final String fName;
 
 	public MethodOccurenceCollector(String methodName) {
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RefactoringScanner.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RefactoringScanner.java
index f46c57d..7d7c688 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RefactoringScanner.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RefactoringScanner.java
@@ -89,7 +89,7 @@
 	 * <p>
 	 * <strong>NOTE:</strong> Use only for testing.
 	 * </p>
-	 * 
+	 *
 	 * @param text the text
 	 */
 	public void scan(String text) {
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameCompilationUnitProcessor.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameCompilationUnitProcessor.java
index 1b8e163..a88a5c1 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameCompilationUnitProcessor.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameCompilationUnitProcessor.java
@@ -382,11 +382,11 @@
 
 	private IType getTypeWithTheSameName() {
 		try {
-			IType[] topLevelTypes= fCu.getTypes();
 			String name= getSimpleCUName();
-			for (int i = 0; i < topLevelTypes.length; i++) {
-				if (name.equals(topLevelTypes[i].getElementName()))
-					return topLevelTypes[i];
+			for (IType topLevelType : fCu.getTypes()) {
+				if (name.equals(topLevelType.getElementName())) {
+					return topLevelType;
+				}
 			}
 			return null;
 		} catch (CoreException e) {
@@ -400,7 +400,7 @@
 
 	/**
 	 * Removes the extension (whatever comes after the last '.') from the given file name.
-	 * 
+	 *
 	 * @param fileName the file name
 	 * @return main type name
 	 */
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameFieldProcessor.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameFieldProcessor.java
index dfae5af..c0a29ef 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameFieldProcessor.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameFieldProcessor.java
@@ -552,15 +552,13 @@
 		if (nestedTypes == null)
 			return null;
 		RefactoringStatus result= new RefactoringStatus();
-		for (int i= 0; i < nestedTypes.length; i++){
-			IField otherField= nestedTypes[i].getField(getNewElementName());
-			if (otherField.exists()){
-				String msg= Messages.format(
-					RefactoringCoreMessages.RenameFieldRefactoring_hiding,
-					new String[]{ BasicElementLabels.getJavaElementName(fField.getElementName()), BasicElementLabels.getJavaElementName(getNewElementName()), BasicElementLabels.getJavaElementName(nestedTypes[i].getFullyQualifiedName('.'))});
+		for (IType nestedType : nestedTypes) {
+			IField otherField= nestedType.getField(getNewElementName());
+			if (otherField.exists()) {
+				String msg= Messages.format(RefactoringCoreMessages.RenameFieldRefactoring_hiding, new String[]{BasicElementLabels.getJavaElementName(fField.getElementName()), BasicElementLabels.getJavaElementName(getNewElementName()), BasicElementLabels.getJavaElementName(nestedType.getFullyQualifiedName('.'))});
 				result.addWarning(msg, JavaStatusContext.create(otherField));
 			}
-			result.merge(checkNestedHierarchy(nestedTypes[i]));
+			result.merge(checkNestedHierarchy(nestedType));
 		}
 		return result;
 	}
@@ -788,13 +786,12 @@
 	private void addReferenceUpdates(IProgressMonitor pm) {
 		pm.beginTask("", fReferences.length); //$NON-NLS-1$
 		String editName= RefactoringCoreMessages.RenameFieldRefactoring_Update_field_reference;
-		for (int i= 0; i < fReferences.length; i++){
-			ICompilationUnit cu= fReferences[i].getCompilationUnit();
+		for (SearchResultGroup reference : fReferences) {
+			ICompilationUnit cu= reference.getCompilationUnit();
 			if (cu == null)
 				continue;
-			SearchMatch[] results= fReferences[i].getSearchResults();
-			for (int j= 0; j < results.length; j++){
-				addTextEdit(fChangeManager.get(cu), editName, createTextChange(results[j]));
+			for (SearchMatch result : reference.getSearchResults()) {
+				addTextEdit(fChangeManager.get(cu), editName, createTextChange(result));
 			}
 			pm.worked(1);
 		}
@@ -820,13 +817,12 @@
 		SearchResultGroup[] groupedResults= RefactoringSearchEngine.search(
 			pattern, scope, new MethodOccurenceCollector(accessor.getElementName()), pm, status);
 
-		for (int i= 0; i < groupedResults.length; i++) {
-			ICompilationUnit cu= groupedResults[i].getCompilationUnit();
+		for (SearchResultGroup groupedResult : groupedResults) {
+			ICompilationUnit cu= groupedResult.getCompilationUnit();
 			if (cu == null)
 				continue;
-			SearchMatch[] results= groupedResults[i].getSearchResults();
-			for (int j= 0; j < results.length; j++){
-				SearchMatch searchResult= results[j];
+			SearchMatch[] results= groupedResult.getSearchResults();
+			for (SearchMatch searchResult : results) {
 				TextEdit edit= new ReplaceEdit(searchResult.getOffset(), searchResult.getLength(), newAccessorName);
 				addTextEdit(fChangeManager.get(cu), editName, edit);
 			}
@@ -849,8 +845,9 @@
 			List<ICompilationUnit> compilationUnitsToModify= new ArrayList<>();
 			if (fIsComposite) {
 				// limited change set, no accessors.
-				for (int i= 0; i < oldReferences.length; i++)
-					compilationUnitsToModify.add(oldReferences[i].getCompilationUnit());
+				for (SearchResultGroup oldReference : oldReferences) {
+					compilationUnitsToModify.add(oldReference.getCompilationUnit());
+				}
 				compilationUnitsToModify.add(fField.getCompilationUnit());
 			} else {
 				// include all cus, including accessors
@@ -866,8 +863,8 @@
 		} finally{
 			pm.done();
 			if (newWorkingCopies != null){
-				for (int i= 0; i < newWorkingCopies.length; i++) {
-					newWorkingCopies[i].discardWorkingCopy();
+				for (ICompilationUnit newWorkingCopy : newWorkingCopies) {
+					newWorkingCopy.discardWorkingCopy();
 				}
 			}
 		}
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameLocalVariableProcessor.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameLocalVariableProcessor.java
index 4e2387e..bde66af 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameLocalVariableProcessor.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameLocalVariableProcessor.java
@@ -438,8 +438,7 @@
 					try {
 						final IJavaElement[] elements= fCu.codeSelect(offset, length);
 						if (elements != null) {
-							for (int index= 0; index < elements.length; index++) {
-								final IJavaElement element= elements[index];
+							for (IJavaElement element : elements) {
 								if (element instanceof ILocalVariable)
 									fLocalVariable= (ILocalVariable) element;
 							}
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameMethodProcessor.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameMethodProcessor.java
index d3b0dca..93c2414 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameMethodProcessor.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameMethodProcessor.java
@@ -192,8 +192,7 @@
 	protected RenameModifications computeRenameModifications() throws CoreException {
 		RenameModifications result= new RenameModifications();
 		RenameArguments args= new RenameArguments(getNewElementName(), getUpdateReferences());
-		for (Iterator<IMethod> iter= fMethodsToRename.iterator(); iter.hasNext();) {
-			IMethod method= iter.next();
+		for (IMethod method : fMethodsToRename) {
 			result.rename(method, args);
 		}
 		return result;
@@ -497,9 +496,7 @@
 
 	private RefactoringStatus checkRelatedMethods() throws CoreException {
 		RefactoringStatus result= new RefactoringStatus();
-		for (Iterator<IMethod> iter= fMethodsToRename.iterator(); iter.hasNext(); ) {
-			IMethod method= iter.next();
-
+		for (IMethod method : fMethodsToRename) {
 			result.merge(Checks.checkIfConstructorName(method, getNewElementName(), method.getDeclaringType().getElementName()));
 
 			String[] msgData= new String[]{BasicElementLabels.getJavaElementName(method.getElementName()), BasicElementLabels.getJavaElementName(method.getDeclaringType().getFullyQualifiedName('.'))};
@@ -568,8 +565,8 @@
 		} finally{
 			pm.done();
 			if (newDeclarationWCs != null){
-				for (int i= 0; i < newDeclarationWCs.length; i++) {
-					newDeclarationWCs[i].discardWorkingCopy();
+				for (ICompilationUnit newDeclarationWC : newDeclarationWCs) {
+					newDeclarationWC.discardWorkingCopy();
 				}
 			}
 		}
@@ -624,9 +621,11 @@
 			requestor= new MethodOccurenceCollector(getNewElementName()) {
 				@Override
 				public void acceptSearchMatch(ICompilationUnit unit, SearchMatch match) throws CoreException {
-					for (int i= 0; i < wcOldMethods.length; i++)
-						if (wcOldMethods[i].equals(match.getElement()))
+					for (IMethod occurrence : wcOldMethods) {
+						if (occurrence.equals(match.getElement())) {
 							return;
+						}
+					}
 					super.acceptSearchMatch(unit, match);
 				}
 			};
@@ -637,10 +636,11 @@
 
 		ArrayList<ICompilationUnit> needWCs= new ArrayList<>();
 		HashSet<ICompilationUnit> declaringCUs= new HashSet<>(newDeclarationWCs.length);
-		for (int i= 0; i < newDeclarationWCs.length; i++)
-			declaringCUs.add(newDeclarationWCs[i].getPrimary());
-		for (int i= 0; i < fOccurrences.length; i++) {
-			ICompilationUnit cu= fOccurrences[i].getCompilationUnit();
+		for (ICompilationUnit newDeclarationWC : newDeclarationWCs) {
+			declaringCUs.add(newDeclarationWC.getPrimary());
+		}
+		for (SearchResultGroup occurrence : fOccurrences) {
+			ICompilationUnit cu= occurrence.getCompilationUnit();
 			if (! declaringCUs.contains(cu))
 				needWCs.add(cu);
 		}
@@ -653,8 +653,8 @@
 		} finally {
 			pm.done();
 			if (otherWCs != null) {
-				for (int i= 0; i < otherWCs.length; i++) {
-					otherWCs[i].discardWorkingCopy();
+				for (ICompilationUnit otherWC : otherWCs) {
+					otherWC.discardWorkingCopy();
 				}
 			}
 		}
@@ -664,8 +664,7 @@
 
 	private ICompilationUnit[] getDeclarationCUs() {
 		Set<ICompilationUnit> cus= new HashSet<>();
-		for (Iterator<IMethod> iter= fMethodsToRename.iterator(); iter.hasNext();) {
-			IMethod method= iter.next();
+		for (IMethod method : fMethodsToRename) {
 			cus.add(method.getCompilationUnit());
 		}
 		return cus.toArray(new ICompilationUnit[cus.size()]);
@@ -685,18 +684,17 @@
 		int parameterCount= method.getParameterTypes().length;
 		boolean isMethodPrivate= JdtFlags.isPrivate(method);
 
-		for (Iterator<IType> iter= classes.iterator(); iter.hasNext(); ){
-			IType clazz= iter.next();
-			IMethod[] methods= clazz.getMethods();
+		for (IType clazz : classes) {
 			boolean isSubclass= subtypes.contains(clazz);
-			for (int j= 0; j < methods.length; j++) {
-				IMethod foundMethod= Checks.findMethod(newName, parameterCount, false, new IMethod[] {methods[j]});
+			for (IMethod m : clazz.getMethods()) {
+				IMethod foundMethod= Checks.findMethod(newName, parameterCount, false, new IMethod[]{m});
 				if (foundMethod == null)
 					continue;
-				if (isSubclass || type.equals(clazz))
+				if (isSubclass || type.equals(clazz)) {
 					result.add(foundMethod);
-				else if ((! isMethodPrivate) && (! JdtFlags.isPrivate(methods[j])))
+				} else if ((! isMethodPrivate) && (!JdtFlags.isPrivate(m))) {
 					result.add(foundMethod);
+				}
 			}
 		}
 		return result.toArray(new IMethod[result.size()]);
@@ -784,25 +782,21 @@
 	 */
 	protected void addOccurrences(TextChangeManager manager, IProgressMonitor pm, RefactoringStatus status) throws CoreException/*thrown in subtype*/{
 		pm.beginTask("", fOccurrences.length);				 //$NON-NLS-1$
-		for (int i= 0; i < fOccurrences.length; i++){
-			ICompilationUnit cu= fOccurrences[i].getCompilationUnit();
+		for (SearchResultGroup occurrence : fOccurrences) {
+			ICompilationUnit cu= occurrence.getCompilationUnit();
 			if (cu == null)
 				continue;
-
-			SearchMatch[] results= fOccurrences[i].getSearchResults();
-
 			// Split matches into declaration and non-declaration matches
 
 			List<SearchMatch> declarationsInThisCu= new ArrayList<>();
 			List<SearchMatch> referencesInThisCu= new ArrayList<>();
-
-			for (int j= 0; j < results.length; j++) {
-				if (results[j] instanceof MethodDeclarationMatch)
-					declarationsInThisCu.add(results[j]);
-				else
-					referencesInThisCu.add(results[j]);
+			for (SearchMatch result : occurrence.getSearchResults()) {
+				if (result instanceof MethodDeclarationMatch) {
+					declarationsInThisCu.add(result);
+				} else {
+					referencesInThisCu.add(result);
+				}
 			}
-
 			// First, handle the declarations
 			if (declarationsInThisCu.size() > 0) {
 
@@ -811,8 +805,7 @@
 					CompilationUnitRewrite rewrite= new CompilationUnitRewrite(cu);
 					rewrite.setResolveBindings(true);
 
-					for (Iterator<SearchMatch> iter= declarationsInThisCu.iterator(); iter.hasNext();) {
-						SearchMatch element= iter.next();
+					for (SearchMatch element : declarationsInThisCu) {
 						MethodDeclaration method= ASTNodeSearchUtil.getMethodDeclarationNode((IMethod) element.getElement(), rewrite.getRoot());
 						DelegateCreator creator= new DelegateMethodCreator();
 						creator.setDeclareDeprecated(fDelegateDeprecation);
@@ -830,16 +823,14 @@
 				}
 
 				// Update the normal methods
-				for (Iterator<SearchMatch> iter= declarationsInThisCu.iterator(); iter.hasNext();) {
-					SearchMatch element= iter.next();
+				for (SearchMatch element : declarationsInThisCu) {
 					simpleUpdate(element, cu, manager.get(cu));
 				}
 			}
 
 			// Second, handle references
 			if (fUpdateReferences) {
-				for (Iterator<SearchMatch> iter= referencesInThisCu.iterator(); iter.hasNext();) {
-					SearchMatch element= iter.next();
+				for (SearchMatch element : referencesInThisCu) {
 					simpleUpdate(element, cu, manager.get(cu));
 				}
 			}
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameModifications.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameModifications.java
index 3c24368..7dcecf6 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameModifications.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameModifications.java
@@ -80,9 +80,8 @@
 		IProject rProject= project.getProject();
 		if (rProject != null) {
 			getResourceModifications().addRename(rProject, args);
-			IProject[] referencingProjects= rProject.getReferencingProjects();
-			for (int i= 0; i < referencingProjects.length; i++) {
-				IFile classpath= getClasspathFile(referencingProjects[i]);
+			for (IProject referencingProject : rProject.getReferencingProjects()) {
+				IFile classpath= getClasspathFile(referencingProject);
 				if (classpath != null) {
 					getResourceModifications().addChanged(classpath);
 				}
@@ -102,8 +101,7 @@
 		IPackageFragment[] allSubPackages= null;
 		if (renameSubPackages) {
 			allSubPackages= getSubpackages(rootPackage);
-			for (int i= 0; i < allSubPackages.length; i++) {
-				IPackageFragment pack= allSubPackages[i];
+			for (IPackageFragment pack : allSubPackages) {
 				RenameArguments subArgs= new RenameArguments(
 					getNewPackageName(rootPackage, args.getNewName(), pack.getElementName()),
 					args.getUpdateReferences());
@@ -177,8 +175,7 @@
 
 	@Override
 	public void buildValidateEdits(ValidateEditChecker checker) {
-		for (Iterator<Object> iter= fRename.iterator(); iter.hasNext();) {
-			Object element= iter.next();
+		for (Object element : fRename) {
 			if (element instanceof ICompilationUnit) {
 				ICompilationUnit unit= (ICompilationUnit)element;
 				IResource resource= unit.getResource();
@@ -218,8 +215,7 @@
 			if (container == null)
 				return;
 			boolean removeContainer= ! container.contains(target);
-			for (int i= 0; i < allSubPackages.length; i++) {
-				IPackageFragment pack= allSubPackages[i];
+			for (IPackageFragment pack : allSubPackages) {
 				IFolder subTarget= addResourceModifications(rootPackage, args, pack, renameSubPackages);
 				if (container.contains(subTarget))
 					removeContainer= false;
@@ -237,10 +233,8 @@
 		IFolder target= computeTargetFolder(rootPackage, args, pack);
 		createIncludingParents(target);
 		MoveArguments arguments= new MoveArguments(target, args.getUpdateReferences());
-		IResource[] resourcesToMove= collectResourcesOfInterest(pack);
 		Set<IResource> allMembers= new HashSet<>(Arrays.asList(container.members()));
-		for (int i= 0; i < resourcesToMove.length; i++) {
-			IResource toMove= resourcesToMove[i];
+		for (IResource toMove : collectResourcesOfInterest(pack)) {
 			getResourceModifications().addMove(toMove, arguments);
 			allMembers.remove(toMove);
 		}
@@ -263,13 +257,12 @@
 
 	private IPackageFragment[] getSubpackages(IPackageFragment pack) throws CoreException {
 		IPackageFragmentRoot root= (IPackageFragmentRoot) pack.getParent();
-		IJavaElement[] allPackages= root.getChildren();
 		if (pack.isDefaultPackage())
 			return new IPackageFragment[0];
 		ArrayList<IPackageFragment> result= new ArrayList<>();
 		String prefix= pack.getElementName() + '.';
-		for (int i= 0; i < allPackages.length; i++) {
-			IPackageFragment currentPackage= (IPackageFragment) allPackages[i];
+		for (IJavaElement element : root.getChildren()) {
+			IPackageFragment currentPackage= (IPackageFragment) element;
 			if (currentPackage.getElementName().startsWith(prefix))
 				result.add(currentPackage);
 		}
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameNonVirtualMethodProcessor.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameNonVirtualMethodProcessor.java
index fc5deb2..d79c7b0 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameNonVirtualMethodProcessor.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameNonVirtualMethodProcessor.java
@@ -107,8 +107,7 @@
 			IMethod[] hierarchyMethods= hierarchyDeclaresMethodName(
 				new SubProgressMonitor(pm, 1), declaring.newTypeHierarchy(new SubProgressMonitor(pm, 1)), method, name);
 
-			for (int i= 0; i < hierarchyMethods.length; i++) {
-				IMethod hierarchyMethod= hierarchyMethods[i];
+			for (IMethod hierarchyMethod : hierarchyMethods) {
 				RefactoringStatusContext context= JavaStatusContext.create(hierarchyMethod);
 				if (Checks.compareParamTypes(method.getParameterTypes(), hierarchyMethod.getParameterTypes())) {
 					String message= Messages.format(
@@ -174,14 +173,10 @@
 	}
 
 	private void addReferenceUpdates(TextChangeManager manager, IProgressMonitor pm) {
-		SearchResultGroup[] grouped= getOccurrences();
-		for (int i= 0; i < grouped.length; i++) {
-			SearchResultGroup group= grouped[i];
-			SearchMatch[] results= group.getSearchResults();
+		for (SearchResultGroup group : getOccurrences()) {
 			ICompilationUnit cu= group.getCompilationUnit();
 			TextChange change= manager.get(cu);
-			for (int j= 0; j < results.length; j++){
-				SearchMatch match= results[j];
+			for (SearchMatch match : group.getSearchResults()) {
 				if (!(match instanceof MethodDeclarationMatch)) {
 					ReplaceEdit replaceEdit= createReplaceEdit(match, cu);
 					String editName= RefactoringCoreMessages.RenamePrivateMethodRefactoring_update;
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenamePackageProcessor.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenamePackageProcessor.java
index 28d2500..fbcebe3 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenamePackageProcessor.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenamePackageProcessor.java
@@ -192,9 +192,8 @@
 		Set<IFile> combined= new HashSet<>();
 		combined.addAll(Arrays.asList(ResourceUtil.getFiles(fChangeManager.getAllCompilationUnits())));
 		if (fRenameSubpackages) {
-			IPackageFragment[] allPackages= JavaElementUtil.getPackageAndSubpackages(fPackage);
-			for (int i= 0; i < allPackages.length; i++) {
-				combined.addAll(Arrays.asList(ResourceUtil.getFiles(allPackages[i].getCompilationUnits())));
+			for (IPackageFragment pack : JavaElementUtil.getPackageAndSubpackages(fPackage)) {
+				combined.addAll(Arrays.asList(ResourceUtil.getFiles(pack.getCompilationUnits())));
 			}
 		} else {
 			combined.addAll(Arrays.asList(ResourceUtil.getFiles(fPackage.getCompilationUnits())));
@@ -433,8 +432,8 @@
 			if (fRenameSubpackages) {
 				IPackageFragment[] allSubpackages= JavaElementUtil.getPackageAndSubpackages(fPackage);
 				subPm.beginTask("", allSubpackages.length); //$NON-NLS-1$
-				for (int i= 0; i < allSubpackages.length; i++) {
-					new PackageRenamer(allSubpackages[i], this, fChangeManager, fImportsManager).doRename(new SubProgressMonitor(subPm, 1), result);
+				for (IPackageFragment pack : allSubpackages) {
+					new PackageRenamer(pack, this, fChangeManager, fImportsManager).doRename(new SubProgressMonitor(subPm, 1), result);
 				}
 				subPm.done();
 			} else {
@@ -464,16 +463,15 @@
 	private RefactoringStatus checkForMainAndNativeMethods() throws CoreException{
 		RefactoringStatus result= new RefactoringStatus();
 		if (fRenameSubpackages) {
-			IPackageFragment[] allSubpackages= JavaElementUtil.getPackageAndSubpackages(fPackage);
-			for (int i= 0; i < allSubpackages.length; i++) {
-				ICompilationUnit[] cus= allSubpackages[i].getCompilationUnits();
-				for (int c= 0; c < cus.length; c++)
-					result.merge(Checks.checkForMainAndNativeMethods(cus[c]));
+			for (IPackageFragment pack : JavaElementUtil.getPackageAndSubpackages(fPackage)) {
+				for (ICompilationUnit cu : pack.getCompilationUnits()) {
+					result.merge(Checks.checkForMainAndNativeMethods(cu));
+				}
 			}
 		} else {
-			ICompilationUnit[] cus= fPackage.getCompilationUnits();
-			for (int i= 0; i < cus.length; i++)
-				result.merge(Checks.checkForMainAndNativeMethods(cus[i]));
+			for (ICompilationUnit cu : fPackage.getCompilationUnits()) {
+				result.merge(Checks.checkForMainAndNativeMethods(cu));
+			}
 		}
 		return result;
 	}
@@ -511,9 +509,7 @@
 			// renaming to superpackage (a.b -> a) or another package is OK iff
 			// 'a.b' does not contain any subpackage that would collide with another subpackage of 'a'
 			// (e.g. a.b.c collides if a.c already exists, but a.b.b does not collide with a.b)
-			IPackageFragment[] packsToRename= JavaElementUtil.getPackageAndSubpackages(fPackage);
-			for (int i = 0; i < packsToRename.length; i++) {
-				IPackageFragment pack = packsToRename[i];
+			for (IPackageFragment pack : JavaElementUtil.getPackageAndSubpackages(fPackage)) {
 				String newPack= newName + pack.getElementName().substring(currentName.length());
 				if (! isAncestorPackage(currentName, newPack) && ! isPackageNameOkInRoot(newPack, getPackageFragmentRoot())) {
 					String msg= Messages.format(RefactoringCoreMessages.RenamePackageProcessor_subpackage_collides, BasicElementLabels.getJavaElementName(newPack));
@@ -544,10 +540,8 @@
 
 	private RefactoringStatus checkPackageName(String newName) throws CoreException {
 		RefactoringStatus status= new RefactoringStatus();
-		IPackageFragmentRoot[] roots= fPackage.getJavaProject().getPackageFragmentRoots();
 		Set<String> topLevelTypeNames= getTopLevelTypeNames();
-		for (int i= 0; i < roots.length; i++) {
-			IPackageFragmentRoot root= roots[i];
+		for (IPackageFragmentRoot root : fPackage.getJavaProject().getPackageFragmentRoots()) {
 			if (! isPackageNameOkInRoot(newName, root)) {
 				String rootLabel = JavaElementLabels.getElementLabel(root, JavaElementLabels.ALL_DEFAULT);
 				String newPackageName= BasicElementLabels.getJavaElementName(getNewElementName());
@@ -562,8 +556,8 @@
 	private Set<String> getTopLevelTypeNames() throws CoreException {
 		ICompilationUnit[] cus= fPackage.getCompilationUnits();
 		Set<String> result= new HashSet<>(2 * cus.length);
-		for (int i= 0; i < cus.length; i++) {
-			result.addAll(getTopLevelTypeNames(cus[i]));
+		for (ICompilationUnit cu : cus) {
+			result.addAll(getTopLevelTypeNames(cu));
 		}
 		return result;
 	}
@@ -571,8 +565,8 @@
 	private static Collection<String> getTopLevelTypeNames(ICompilationUnit iCompilationUnit) throws CoreException {
 		IType[] types= iCompilationUnit.getTypes();
 		List<String> result= new ArrayList<>(types.length);
-		for (int i= 0; i < types.length; i++) {
-			result.add(types[i].getElementName());
+		for (IType type : types) {
+			result.add(type.getElementName());
 		}
 		return result;
 	}
@@ -581,24 +575,22 @@
 		IPackageFragment otherPack= root.getPackageFragment(newName);
 		if (fPackage.equals(otherPack))
 			return null;
-		ICompilationUnit[] cus= otherPack.getCompilationUnits();
 		RefactoringStatus result= new RefactoringStatus();
-		for (int i= 0; i < cus.length; i++) {
-			result.merge(checkTypeNameConflicts(cus[i], topLevelTypeNames));
+		for (ICompilationUnit cu : otherPack.getCompilationUnits()) {
+			result.merge(checkTypeNameConflicts(cu, topLevelTypeNames));
 		}
 		return result;
 	}
 
 	private RefactoringStatus checkTypeNameConflicts(ICompilationUnit iCompilationUnit, Set<String> topLevelTypeNames) throws CoreException {
 		RefactoringStatus result= new RefactoringStatus();
-		IType[] types= iCompilationUnit.getTypes();
 
-		for (int i= 0; i < types.length; i++) {
-			String name= types[i].getElementName();
-			if (topLevelTypeNames.contains(name)){
-				String[] keys= {getElementLabel(iCompilationUnit.getParent()), getElementLabel(types[i])};
+		for (IType type : iCompilationUnit.getTypes()) {
+			String name= type.getElementName();
+			if (topLevelTypeNames.contains(name)) {
+				String[] keys= {getElementLabel(iCompilationUnit.getParent()), getElementLabel(type)};
 				String msg= Messages.format(RefactoringCoreMessages.RenamePackageRefactoring_contains_type, keys);
-				RefactoringStatusContext context= JavaStatusContext.create(types[i]);
+				RefactoringStatusContext context= JavaStatusContext.create(type);
 				result.addError(msg, context);
 			}
 		}
@@ -758,13 +750,11 @@
 
 		private void addReferenceUpdates(IProgressMonitor pm) throws CoreException {
 			pm.beginTask("", fOccurrences.length + fReferencesToTypesInPackage.size() + fReferencesToTypesInNamesakes.size()); //$NON-NLS-1$
-			for (int i= 0; i < fOccurrences.length; i++){
-				ICompilationUnit cu= fOccurrences[i].getCompilationUnit();
+			for (SearchResultGroup occurrence : fOccurrences) {
+				ICompilationUnit cu= occurrence.getCompilationUnit();
 				if (cu == null)
 					continue;
-				SearchMatch[] results= fOccurrences[i].getSearchResults();
-				for (int j= 0; j < results.length; j++){
-					SearchMatch result= results[j];
+				for (SearchMatch result : occurrence.getSearchResults()) {
 					IJavaElement enclosingElement= SearchUtils.getEnclosingJavaElement(result);
 					if (enclosingElement instanceof IImportDeclaration) {
 						IImportDeclaration importDeclaration= (IImportDeclaration) enclosingElement;
@@ -788,15 +778,13 @@
 			}
 
 			if (fReferencesToTypesInNamesakes.size() != 0) {
-				for (Iterator<SearchResultGroup> iter= fReferencesToTypesInNamesakes.iterator(); iter.hasNext();) {
-					SearchResultGroup referencesToTypesInNamesakes= iter.next();
+				for (SearchResultGroup referencesToTypesInNamesakes : fReferencesToTypesInNamesakes) {
 					addTypeImports(referencesToTypesInNamesakes);
 					pm.worked(1);
 				}
 			}
 			if (fReferencesToTypesInPackage.size() != 0) {
-				for (Iterator<SearchResultGroup> iter= fReferencesToTypesInPackage.iterator(); iter.hasNext();) {
-					SearchResultGroup namesakeReferencesToPackage= iter.next();
+				for (SearchResultGroup namesakeReferencesToPackage : fReferencesToTypesInPackage) {
 					updateTypeImports(namesakeReferencesToPackage);
 					pm.worked(1);
 				}
@@ -842,8 +830,8 @@
 		private IJavaSearchScope getPackageAndOccurrencesWithoutNamesakesScope() {
 			List<IJavaElement> scopeList= new ArrayList<>();
 			scopeList.add(fPackage);
-			for (int i= 0; i < fOccurrences.length; i++) {
-				ICompilationUnit cu= fOccurrences[i].getCompilationUnit();
+			for (SearchResultGroup occurrence : fOccurrences) {
+				ICompilationUnit cu= occurrence.getCompilationUnit();
 				if (cu == null)
 					continue;
 				IPackageFragment pack= (IPackageFragment) cu.getParent();
@@ -942,17 +930,14 @@
 
 		private IType[] getTypesInPackages(IPackageFragment[] packageFragments) throws JavaModelException {
 			List<IType> types= new ArrayList<>();
-			for (int i= 0; i < packageFragments.length; i++) {
-				IPackageFragment pack= packageFragments[i];
+			for (IPackageFragment pack : packageFragments) {
 				addContainedTypes(pack, types);
 			}
 			return types.toArray(new IType[types.size()]);
 		}
 
 		private void addContainedTypes(IPackageFragment pack, List<IType> typesCollector) throws JavaModelException {
-			IJavaElement[] children= pack.getChildren();
-			for (int c= 0; c < children.length; c++) {
-				IJavaElement child= children[c];
+			for (IJavaElement child : pack.getChildren()) {
 				if (child instanceof ICompilationUnit) {
 					typesCollector.addAll(Arrays.asList(((ICompilationUnit) child).getTypes()));
 				} else if (child instanceof IOrdinaryClassFile) {
@@ -978,9 +963,7 @@
 		 * @throws CoreException should not happen
 		 */
 		private void addTypeImports(SearchResultGroup typeReferences) throws CoreException {
-			SearchMatch[] searchResults= typeReferences.getSearchResults();
-			for (int i= 0; i < searchResults.length; i++) {
-				SearchMatch result= searchResults[i];
+			for (SearchMatch result : typeReferences.getSearchResults()) {
 				IJavaElement enclosingElement= SearchUtils.getEnclosingJavaElement(result);
 				if (! (enclosingElement instanceof IImportDeclaration)) {
 					String reference= getNormalizedTypeReference(result);
@@ -1001,9 +984,7 @@
 		 * @throws CoreException should not happen
 		 */
 		private void updateTypeImports(SearchResultGroup typeReferences) throws CoreException {
-			SearchMatch[] searchResults= typeReferences.getSearchResults();
-			for (int i= 0; i < searchResults.length; i++) {
-				SearchMatch result= searchResults[i];
+			for (SearchMatch result : typeReferences.getSearchResults()) {
 				IJavaElement enclosingElement= SearchUtils.getEnclosingJavaElement(result);
 				if (enclosingElement instanceof IImportDeclaration) {
 					IImportDeclaration importDeclaration= (IImportDeclaration) enclosingElement;
@@ -1086,25 +1067,22 @@
 		}
 
 		public void rewriteImports(TextChangeManager changeManager, IProgressMonitor pm) throws CoreException {
-			for (Iterator<Entry<ICompilationUnit, ImportChange>> iter= fImportChanges.entrySet().iterator(); iter.hasNext();) {
-				Entry<ICompilationUnit, ImportChange> entry= iter.next();
+			for (Entry<ICompilationUnit, ImportChange> entry : fImportChanges.entrySet()) {
 				ICompilationUnit cu= entry.getKey();
 				ImportChange importChange= entry.getValue();
-
 				ImportRewrite importRewrite= StubUtility.createImportRewrite(cu, true);
 				importRewrite.setFilterImplicitImports(false);
-				for (Iterator<String> iterator= importChange.fStaticToRemove.iterator(); iterator.hasNext();) {
-					importRewrite.removeStaticImport(iterator.next());
+				for (String toRemove : importChange.fStaticToRemove) {
+					importRewrite.removeStaticImport(toRemove);
 				}
-				for (Iterator<String> iterator= importChange.fToRemove.iterator(); iterator.hasNext();) {
-					importRewrite.removeImport(iterator.next());
+				for (String toRemove : importChange.fToRemove) {
+					importRewrite.removeImport(toRemove);
 				}
-				for (Iterator<String[]> iterator= importChange.fStaticToAdd.iterator(); iterator.hasNext();) {
-					String[] toAdd= iterator.next();
+				for (String[] toAdd : importChange.fStaticToAdd) {
 					importRewrite.addStaticImport(toAdd[0], toAdd[1], true);
 				}
-				for (Iterator<String> iterator= importChange.fToAdd.iterator(); iterator.hasNext();) {
-					importRewrite.addImport(iterator.next());
+				for (String toAdd : importChange.fToAdd) {
+					importRewrite.addImport(toAdd);
 				}
 
 				if (importRewrite.hasRecordedChanges()) {
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameSourceFolderProcessor.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameSourceFolderProcessor.java
index 63883cb..e32c3dc 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameSourceFolderProcessor.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameSourceFolderProcessor.java
@@ -103,10 +103,10 @@
 
 	@Override
 	public Object getNewElement() throws CoreException {
-		IPackageFragmentRoot[] roots= fSourceFolder.getJavaProject().getPackageFragmentRoots();
-		for (int i= 0; i < roots.length; i++) {
-			if (roots[i].getElementName().equals(getNewElementName()))
-				return roots[i];
+		for (IPackageFragmentRoot root : fSourceFolder.getJavaProject().getPackageFragmentRoots()) {
+			if (root.getElementName().equals(getNewElementName())) {
+				return root;
+			}
 		}
 		return null;
 	}
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameTypeProcessor.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameTypeProcessor.java
index cc9bff4..264bc74 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameTypeProcessor.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameTypeProcessor.java
@@ -1025,7 +1025,7 @@
 				}
 			}
 		}
-		
+
 		for (ICompilationUnit conflict : conflicts) {
 			RefactoringStatusContext context= JavaStatusContext.create(conflict);
 			String message= Messages.format(RefactoringCoreMessages.RenameTypeRefactoring_another_type,
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameVirtualMethodProcessor.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameVirtualMethodProcessor.java
index d60fe96..0f58862 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameVirtualMethodProcessor.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameVirtualMethodProcessor.java
@@ -15,7 +15,6 @@
 
 import java.util.Arrays;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.Set;
 
 import org.eclipse.core.runtime.Assert;
@@ -158,9 +157,7 @@
 				if (isSpecialCase())
 					result.addError(RefactoringCoreMessages.RenameMethodInInterfaceRefactoring_special_case);
 				pm.worked(1);
-				IMethod[] relatedMethods= relatedTypeDeclaresMethodName(new SubProgressMonitor(pm, 1), method, name);
-				for (int i= 0; i < relatedMethods.length; i++) {
-					IMethod relatedMethod= relatedMethods[i];
+				for (IMethod relatedMethod : relatedTypeDeclaresMethodName(new SubProgressMonitor(pm, 1), method, name)) {
 					RefactoringStatusContext context= JavaStatusContext.create(relatedMethod);
 					result.addError(RefactoringCoreMessages.RenameMethodInInterfaceRefactoring_already_defined, context);
 				}
@@ -171,9 +168,7 @@
 						new String[]{ BasicElementLabels.getJavaElementName(method.getElementName()), "UnsatisfiedLinkError"})); //$NON-NLS-1$
 				}
 
-				IMethod[] hierarchyMethods= hierarchyDeclaresMethodName(new SubProgressMonitor(pm, 1), hierarchy, method, name);
-				for (int i= 0; i < hierarchyMethods.length; i++) {
-					IMethod hierarchyMethod= hierarchyMethods[i];
+				for (IMethod hierarchyMethod : hierarchyDeclaresMethodName(new SubProgressMonitor(pm, 1), hierarchy, method, name)) {
 					RefactoringStatusContext context= JavaStatusContext.create(hierarchyMethod);
 					if (Checks.compareParamTypes(method.getParameterTypes(), hierarchyMethod.getParameterTypes())) {
 						result.addError(Messages.format(
@@ -200,8 +195,8 @@
 			Set<IMethod> result= new HashSet<>();
 			Set<IType> types= getRelatedTypes();
 			pm.beginTask("", types.size()); //$NON-NLS-1$
-			for (Iterator<IType> iter= types.iterator(); iter.hasNext(); ) {
-				final IMethod found= Checks.findMethod(method, iter.next());
+			for (IType type : types) {
+				final IMethod found= Checks.findMethod(method, type);
 				final IType declaring= found.getDeclaringType();
 				result.addAll(Arrays.asList(hierarchyDeclaresMethodName(new SubProgressMonitor(pm, 1), declaring.newTypeHierarchy(new SubProgressMonitor(pm, 1)), found, newName)));
 			}
@@ -238,8 +233,8 @@
 	private Set<IType> getRelatedTypes() {
 		Set<IMethod> methods= getMethodsToRename();
 		Set<IType> result= new HashSet<>(methods.size());
-		for (Iterator<IMethod> iter= methods.iterator(); iter.hasNext(); ){
-			result.add(iter.next().getDeclaringType());
+		for (IMethod method : methods) {
+			result.add(method.getDeclaringType());
 		}
 		return result;
 	}
@@ -247,13 +242,11 @@
 	//---- Class checks -------------------------------------
 
 	private boolean classesDeclareOverridingNativeMethod(IType[] classes) throws CoreException {
-		for (int i= 0; i < classes.length; i++){
-			IMethod[] methods= classes[i].getMethods();
-			for (int j= 0; j < methods.length; j++){
-				if ((!methods[j].equals(getMethod()))
-					&& (JdtFlags.isNative(methods[j]))
-					&& (null != Checks.findSimilarMethod(getMethod(), new IMethod[]{methods[j]})))
-						return true;
+ 		for (IType type : classes) {
+			for (IMethod method : type.getMethods()) {
+				if ((!method.equals(getMethod())) && (JdtFlags.isNative(method)) && (null != Checks.findSimilarMethod(getMethod(), new IMethod[]{method}))) {
+					return true;
+				}
 			}
 		}
 		return false;
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RippleMethodFinder2.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RippleMethodFinder2.java
index 8150d70..3c25bd2 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RippleMethodFinder2.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RippleMethodFinder2.java
@@ -290,10 +290,8 @@
 				IType alienType= iter.next();
 				IMethod alienMethod= fTypeToMethod.get(alienType);
 				ITypeHierarchy hierarchy= hierarchy(pm, owner, alienType);
-				IType[] allSubtypes= hierarchy.getAllSubtypes(alienType);
 
-				for (int i= 0; i < allSubtypes.length; i++) {
-					IType subtype= allSubtypes[i];
+				for (IType subtype : hierarchy.getAllSubtypes(alienType)) {
 					if (relatedSubTypes.contains(subtype)) {
 						if (JavaModelUtil.isVisibleInHierarchy(alienMethod, subtype.getPackageFragment())) {
 							marriedAlienTypeReps.add(fUnionFind.find(alienType));
@@ -490,9 +488,7 @@
 	}
 
 	private void uniteWithSupertypes(IType anchor, IType type) throws JavaModelException {
-		IType[] supertypes= fHierarchy.getSupertypes(type);
-		for (int i= 0; i < supertypes.length; i++) {
-			IType supertype= supertypes[i];
+		for (IType supertype : fHierarchy.getSupertypes(type)) {
 			IType superRep= fUnionFind.find(supertype);
 			if (superRep == null) {
 				//Type doesn't declare method, but maybe supertypes?
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/TextMatchUpdater.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/TextMatchUpdater.java
index dd77123..e3d0359 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/TextMatchUpdater.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/TextMatchUpdater.java
@@ -97,11 +97,10 @@
 			IProject[] projectsInScope= getProjectsInScope();
 
 			pm.beginTask("", projectsInScope.length); //$NON-NLS-1$
-
-			for (int i =0 ; i < projectsInScope.length; i++){
+			for (IProject project : projectsInScope) {
 				if (pm.isCanceled())
 					throw new OperationCanceledException();
-				addTextMatches(projectsInScope[i], new SubProgressMonitor(pm, 1));
+				addTextMatches(project, new SubProgressMonitor(pm, 1));
 			}
 		} finally{
 			pm.done();
@@ -114,10 +113,10 @@
 		enclosingProjectSet.addAll(Arrays.asList(enclosingProjects));
 
 		ArrayList<IProject> projectsInScope= new ArrayList<>();
-		IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
-		for (int i =0 ; i < projects.length; i++){
-			if (enclosingProjectSet.contains(projects[i].getFullPath()))
-				projectsInScope.add(projects[i]);
+		for (IProject project : ResourcesPlugin.getWorkspace().getRoot().getProjects()) {
+			if (enclosingProjectSet.contains(project.getFullPath())) {
+				projectsInScope.add(project);
+			}
 		}
 
 		return projectsInScope.toArray(new IProject[projectsInScope.size()]);
@@ -141,11 +140,10 @@
 				IResource[] members= ((IContainer) resource).members();
 				pm.beginTask(task, members.length);
 				pm.subTask(task);
-				for (int i = 0; i < members.length; i++) {
+				for (IResource member : members) {
 					if (pm.isCanceled())
 						throw new OperationCanceledException();
-
-					addTextMatches(members[i], new SubProgressMonitor(pm, 1));
+					addTextMatches(member, new SubProgressMonitor(pm, 1));
 				}
 			}
 		} catch (JavaModelException e){
@@ -169,8 +167,7 @@
 	}
 
 	private void removeReferences(ICompilationUnit cu, Set<TextMatch> matches) {
-		for (int i= 0; i < fReferences.length; i++) {
-			SearchResultGroup group= fReferences[i];
+		for (SearchResultGroup group : fReferences) {
 			if (cu.equals(group.getCompilationUnit())) {
 				removeReferences(matches, group);
 			}
@@ -178,10 +175,9 @@
 	}
 
 	private void removeReferences(Set<TextMatch> matches, SearchResultGroup group) {
-		SearchMatch[] searchResults= group.getSearchResults();
-		for (int r= 0; r < searchResults.length; r++) {
+		for (SearchMatch searchResult : group.getSearchResults()) {
 			//int start= searchResults[r].getStart(); // doesn't work for pack.ReferencedType
-			int unqualifiedStart= searchResults[r].getOffset() + searchResults[r].getLength() - fCurrentNameLength;
+			int unqualifiedStart= searchResult.getOffset() + searchResult.getLength() - fCurrentNameLength;
 			for (Iterator<TextMatch> iter= matches.iterator(); iter.hasNext();) {
 				TextMatch element= iter.next();
 				if (element.getStartPosition() == unqualifiedStart)
@@ -191,8 +187,7 @@
 	}
 
 	private void addTextUpdates(ICompilationUnit cu, Set<TextMatch> matches) {
-		for (Iterator<TextMatch> resultIter= matches.iterator(); resultIter.hasNext();){
-			TextMatch match= resultIter.next();
+		for (TextMatch match : matches) {
 			if (!match.isQualified() && fOnlyQualified)
 				continue;
 			int matchStart= match.getStartPosition();
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/ASTNodeDeleteUtil.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/ASTNodeDeleteUtil.java
index 1906a3d..269b30e 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/ASTNodeDeleteUtil.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/ASTNodeDeleteUtil.java
@@ -15,7 +15,6 @@
 
 import java.util.ArrayList;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
 
@@ -93,16 +92,14 @@
 
 	public static void markAsDeleted(IJavaElement[] javaElements, CompilationUnitRewrite rewrite, TextEditGroup group) throws JavaModelException {
 		final List<ASTNode> removed= new ArrayList<>();
-		for (int i= 0; i < javaElements.length; i++) {
-			markAsDeleted(removed, javaElements[i], rewrite, group);
+		for (IJavaElement javaElement : javaElements) {
+			markAsDeleted(removed, javaElement, rewrite, group);
 		}
 		propagateFieldDeclarationNodeDeletions(removed, rewrite, group);
 	}
 
 	private static void markAsDeleted(List<ASTNode> list, IJavaElement element, CompilationUnitRewrite rewrite, TextEditGroup group) throws JavaModelException {
-		ASTNode[] declarationNodes= getNodesToDelete(element, rewrite.getRoot());
-		for (int i= 0; i < declarationNodes.length; i++) {
-			ASTNode node= declarationNodes[i];
+		for (ASTNode node : getNodesToDelete(element, rewrite.getRoot())) {
 			if (node != null) {
 				list.add(node);
 				rewrite.getASTRewrite().remove(node, group);
@@ -113,8 +110,7 @@
 
 	private static void propagateFieldDeclarationNodeDeletions(final List<ASTNode> removed, final CompilationUnitRewrite rewrite, final TextEditGroup group) {
 		Set<ASTNode> removedNodes= getRemovedNodes(removed, rewrite);
-		for (Iterator<ASTNode> iter= removedNodes.iterator(); iter.hasNext();) {
-			ASTNode node= iter.next();
+		for (ASTNode node : removedNodes) {
 			if (node instanceof VariableDeclarationFragment) {
 				if (node.getParent() instanceof FieldDeclaration) {
 					FieldDeclaration fd= (FieldDeclaration) node.getParent();
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/CopyModifications.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/CopyModifications.java
index bbb1dcc..0670b76 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/CopyModifications.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/CopyModifications.java
@@ -114,9 +114,7 @@
 			IContainer resourceDestination= (IContainer) newPack.getResource();
 			createIncludingParents(resourceDestination);
 			CopyArguments arguments= new CopyArguments(resourceDestination, resourceArgs.getExecutionLog());
-			IResource[] resourcesToCopy= collectResourcesOfInterest(pack);
-			for (int i= 0; i < resourcesToCopy.length; i++) {
-				IResource toCopy= resourcesToCopy[i];
+			for (IResource toCopy : collectResourcesOfInterest(pack)) {
 				getResourceModifications().addCopyDelta(toCopy, arguments);
 			}
 		}
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/CreateCopyOfCompilationUnitChange.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/CreateCopyOfCompilationUnitChange.java
index 36d776c..332a198 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/CreateCopyOfCompilationUnitChange.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/CreateCopyOfCompilationUnitChange.java
@@ -68,9 +68,7 @@
 			return manager;
 
 		String name= RefactoringCoreMessages.CopyRefactoring_update_ref;
-		SearchMatch[] results= refs.getSearchResults();
-		for (int j= 0; j < results.length; j++) {
-			SearchMatch searchResult= results[j];
+		for (SearchMatch searchResult : refs.getSearchResults()) {
 			if (searchResult.getAccuracy() == SearchMatch.A_INACCURATE)
 				continue;
 			int offset= searchResult.getOffset();
@@ -122,14 +120,13 @@
 				}
 			}
 		});
-		
+
 		engine.searchPattern(monitor);
-		final Object[] results= engine.getResults();
 		// Assert.isTrue(results.length <= 1);
 		// just 1 file or none, but inaccurate matches can play bad here (see
 		// https://bugs.eclipse.org/bugs/show_bug.cgi?id=106127)
-		for (int index= 0; index < results.length; index++) {
-			SearchResultGroup group= (SearchResultGroup) results[index];
+		for (Object result : engine.getResults()) {
+			SearchResultGroup group= (SearchResultGroup) result;
 			if (group.getCompilationUnit().equals(copy))
 				return group;
 		}
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/DeleteChangeCreator.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/DeleteChangeCreator.java
index 385c4de..6b6b9fc 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/DeleteChangeCreator.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/DeleteChangeCreator.java
@@ -14,7 +14,6 @@
 package org.eclipse.jdt.internal.corext.refactoring.reorg;
 
 import java.util.ArrayList;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
@@ -94,21 +93,18 @@
 			result= new DynamicValidationStateChange(changeName);
 		}
 
-		for (int i= 0; i < javaElements.length; i++) {
-			IJavaElement element= javaElements[i];
+		for (IJavaElement element : javaElements) {
 			if (! ReorgUtils.isInsideCompilationUnit(element))
 				result.add(createDeleteChange(element));
 		}
-
-		for (int i= 0; i < resources.length; i++) {
-			result.add(createDeleteChange(resources[i]));
+		for (IResource resource : resources) {
+			result.add(createDeleteChange(resource));
 		}
 
 		Map<ICompilationUnit, List<IJavaElement>> grouped= ReorgUtils.groupByCompilationUnit(getElementsSmallerThanCu(javaElements));
 		if (grouped.size() != 0 ){
 			Assert.isNotNull(manager);
-			for (Iterator<ICompilationUnit> iter= grouped.keySet().iterator(); iter.hasNext();) {
-				ICompilationUnit cu= iter.next();
+			for (ICompilationUnit cu : grouped.keySet()) {
 				result.add(createDeleteChange(cu, grouped.get(cu), manager));
 			}
 		}
@@ -153,8 +149,7 @@
 	//List<IJavaElement>
 	private static List<IJavaElement> getElementsSmallerThanCu(IJavaElement[] javaElements){
 		List<IJavaElement> result= new ArrayList<>();
-		for (int i= 0; i < javaElements.length; i++) {
-			IJavaElement element= javaElements[i];
+		for (IJavaElement element : javaElements) {
 			if (ReorgUtils.isInsideCompilationUnit(element))
 				result.add(element);
 		}
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/DeleteModifications.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/DeleteModifications.java
index 74c5ce4..0df1e2c 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/DeleteModifications.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/DeleteModifications.java
@@ -15,7 +15,6 @@
 
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Iterator;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Set;
@@ -73,14 +72,14 @@
 	}
 
 	public void delete(IResource[] resources) {
-		for (int i= 0; i < resources.length; i++) {
-			delete(resources[i]);
+		for (IResource resource : resources) {
+			delete(resource);
 		}
 	}
 
 	public void delete(IJavaElement[] elements) throws CoreException {
-		for (int i= 0; i < elements.length; i++) {
-			delete(elements[i]);
+		for (IJavaElement element : elements) {
+			delete(element);
 		}
 	}
 
@@ -101,9 +100,8 @@
 				// change.
 				if (resource != null)
 					getResourceModifications().addDelete(resource);
-				IJavaProject[] referencingProjects= JavaElementUtil.getReferencingProjects((IPackageFragmentRoot) element);
-				for (int i= 0; i < referencingProjects.length; i++) {
-					IFile classpath= referencingProjects[i].getProject().getFile(".classpath"); //$NON-NLS-1$
+				for (IJavaProject referencingProject : JavaElementUtil.getReferencingProjects((IPackageFragmentRoot) element)) {
+					IFile classpath= referencingProject.getProject().getFile(".classpath"); //$NON-NLS-1$
 					getResourceModifications().addChanged(classpath);
 				}
 				return;
@@ -144,9 +142,8 @@
 		IsCompletelySelected isCompletelySelected = new IsCompletelySelected(fPackagesToDelete, subMonitor);
 
 		ArrayList<IResource> resourcesCollector= new ArrayList<>();
-		for (Iterator<IPackageFragment> iter= fPackagesToDelete.iterator(); iter.hasNext(); ) {
+		for (IPackageFragment pack : fPackagesToDelete) {
 			subMonitor.checkCanceled();
-			IPackageFragment pack= iter.next();
 			handlePackageFragmentDelete(pack, resourcesCollector, isCompletelySelected);
 			subMonitor.worked(1);
 		}
@@ -161,9 +158,9 @@
 	@Override
 	public RefactoringParticipant[] loadParticipants(RefactoringStatus status, RefactoringProcessor owner, String[] natures, SharableParticipants shared) {
 		List<RefactoringParticipant> result= new ArrayList<>();
-		for (Iterator<IJavaElement> iter= fDelete.iterator(); iter.hasNext();) {
+		for (IJavaElement javaElement : fDelete) {
 			result.addAll(Arrays.asList(ParticipantManager.loadDeleteParticipants(status,
-				owner, iter.next(),
+				owner, javaElement,
 				new DeleteArguments(), natures, shared)));
 		}
 		result.addAll(Arrays.asList(getResourceModifications().getParticipants(status, owner, natures, shared)));
@@ -233,8 +230,7 @@
 			// This package is only cleared because it has subpackages (=subfolders)
 			// which are not deleted. As the package is only cleared, its folder
 			// will not be removed and so we must notify the participant of the deleted children.
-			for (int m= 0; m < members.length; m++) {
-				IResource member= members[m];
+			for (IResource member : members) {
 				if (member instanceof IFile) {
 					IFile file= (IFile)member;
 					if ("class".equals(file.getFileExtension()) && file.isDerived()) //$NON-NLS-1$
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/JavaDeleteProcessor.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/JavaDeleteProcessor.java
index c437b18..f350bbb 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/JavaDeleteProcessor.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/JavaDeleteProcessor.java
@@ -17,7 +17,6 @@
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.Comparator;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -136,13 +135,15 @@
 			return false;
 		if (fElements.length != fResources.length + fJavaElements.length)
 			return false;
-		for (int i= 0; i < fResources.length; i++) {
-			if (!RefactoringAvailabilityTester.isDeleteAvailable(fResources[i]))
+		for (IResource resource : fResources) {
+			if (!RefactoringAvailabilityTester.isDeleteAvailable(resource)) {
 				return false;
+			}
 		}
-		for (int i= 0; i < fJavaElements.length; i++) {
-			if (!RefactoringAvailabilityTester.isDeleteAvailable(fJavaElements[i]))
+		for (IJavaElement javaElement : fJavaElements) {
+			if (!RefactoringAvailabilityTester.isDeleteAvailable(javaElement)) {
 				return false;
+			}
 		}
 		return true;
 	}
@@ -151,8 +152,8 @@
 		if (fResources != null && fResources.length > 0)
 			return true;
 		if (fJavaElements != null) {
-			for (int i= 0; i < fJavaElements.length; i++) {
-				int type= fJavaElements[i].getElementType();
+			for (IJavaElement javaElement : fJavaElements) {
+				int type= javaElement.getElementType();
 				if (type <= IJavaElement.CLASS_FILE)
 					return true;
 			}
@@ -203,9 +204,9 @@
 
 	public boolean hasSubPackagesToDelete() {
 		try {
-			for (int i= 0; i < fJavaElements.length; i++) {
-				if (fJavaElements[i] instanceof IPackageFragment) {
-					IPackageFragment packageFragment= (IPackageFragment) fJavaElements[i];
+			for (IJavaElement javaElement : fJavaElements) {
+				if (javaElement instanceof IPackageFragment) {
+					IPackageFragment packageFragment = (IPackageFragment) javaElement;
 					if (packageFragment.isDefaultPackage())
 						continue; // see bug 132576 (can remove this if(..) continue; statement when bug is fixed)
 					if (packageFragment.hasSubpackages())
@@ -242,8 +243,7 @@
 		result.merge(RefactoringStatus.create(Resources.checkInSync(ReorgUtils.getNotLinked(fResources))));
 		IResource[] javaResources= ReorgUtils.getResources(fJavaElements);
 		result.merge(RefactoringStatus.create(Resources.checkInSync(ReorgUtils.getNotNulls(javaResources))));
-		for (int i= 0; i < fJavaElements.length; i++) {
-			IJavaElement element= fJavaElements[i];
+		for (IJavaElement element : fJavaElements) {
 			if (element instanceof IType && ((IType)element).isAnonymous()) {
 				// work around for bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=44450
 				// result.addFatalError("Currently, there isn't any support to delete an anonymous type.");
@@ -274,9 +274,8 @@
 			ResourceChangeChecker checker= context.getChecker(ResourceChangeChecker.class);
 			IResourceChangeDescriptionFactory deltaFactory= checker.getDeltaFactory();
 			fDeleteModifications.buildDelta(deltaFactory);
-			IFile[] files= ResourceUtil.getFiles(manager.getAllCompilationUnits());
-			for (int i= 0; i < files.length; i++) {
-				deltaFactory.change(files[i]);
+			for (IFile file : ResourceUtil.getFiles(manager.getAllCompilationUnits())) {
+				deltaFactory.change(file);
 			}
 			return result;
 		} catch (OperationCanceledException e) {
@@ -290,14 +289,12 @@
 	private void checkDirtyCompilationUnits(RefactoringStatus result) throws CoreException {
 		if (fJavaElements == null || fJavaElements.length == 0)
 			return;
-		for (int je= 0; je < fJavaElements.length; je++) {
-			IJavaElement element= fJavaElements[je];
+		for (IJavaElement element : fJavaElements) {
 			if (element instanceof ICompilationUnit) {
 				checkDirtyCompilationUnit(result, (ICompilationUnit)element);
 			} else if (element instanceof IPackageFragment) {
-				ICompilationUnit[] units= ((IPackageFragment)element).getCompilationUnits();
-				for (int u = 0; u < units.length; u++) {
-					checkDirtyCompilationUnit(result, units[u]);
+				for (ICompilationUnit unit : ((IPackageFragment)element).getCompilationUnits()) {
+					checkDirtyCompilationUnit(result, unit);
 				}
 			}
 		}
@@ -311,16 +308,12 @@
 	}
 
 	private void checkDirtyResources(final RefactoringStatus result) throws CoreException {
-		for (int i= 0; i < fResources.length; i++) {
-			IResource resource= fResources[i];
-			resource.accept(new IResourceVisitor() {
-				@Override
-				public boolean visit(IResource visitedResource) throws CoreException {
-					if (visitedResource instanceof IFile) {
-						checkDirtyFile(result, (IFile)visitedResource);
-					}
-					return true;
+		for (IResource resource : fResources) {
+			resource.accept((IResourceVisitor) visitedResource -> {
+				if (visitedResource instanceof IFile) {
+					checkDirtyFile(result, (IFile)visitedResource);
 				}
+				return true;
 			}, IResource.DEPTH_INFINITE, false);
 		}
 	}
@@ -379,11 +372,11 @@
 	private void addSubPackages() throws JavaModelException {
 
 		final Set<IJavaElement> javaElements= new HashSet<>();
-		for (int i= 0; i < fJavaElements.length; i++) {
-			if (fJavaElements[i] instanceof IPackageFragment) {
-				javaElements.addAll(Arrays.asList(JavaElementUtil.getPackageAndSubpackages((IPackageFragment) fJavaElements[i])));
+		for (IJavaElement javaElement : fJavaElements) {
+			if (javaElement instanceof IPackageFragment) {
+				javaElements.addAll(Arrays.asList(JavaElementUtil.getPackageAndSubpackages((IPackageFragment) javaElement)));
 			} else {
-				javaElements.add(fJavaElements[i]);
+				javaElements.add(javaElement);
 			}
 		}
 
@@ -404,19 +397,15 @@
 			return;
 
 		// Move from inner to outer packages
-		Collections.sort(initialPackagesToDelete, new Comparator<IPackageFragment>() {
-			@Override
-			public int compare(IPackageFragment one, IPackageFragment two) {
-				return two.getElementName().compareTo(one.getElementName());
-			}
-		});
+		Collections.sort(initialPackagesToDelete, (one, two) -> two.getElementName().compareTo(one.getElementName()));
 
 		// Get resources and java elements which will be deleted as well
 		final Set<IResource> deletedChildren= new HashSet<>();
 		deletedChildren.addAll(Arrays.asList(fResources));
-		for (int i= 0; i < fJavaElements.length; i++) {
-			if (!ReorgUtils.isInsideCompilationUnit(fJavaElements[i]))
-				deletedChildren.add(fJavaElements[i].getResource());
+		for (IJavaElement javaElement : fJavaElements) {
+			if (!ReorgUtils.isInsideCompilationUnit(javaElement)) {
+				deletedChildren.add(javaElement.getResource());
+			}
 		}
 
 		// new package list in the right sequence
@@ -425,9 +414,7 @@
 		IsCompletelySelected isCompletelySelected = new IsCompletelySelected(initialPackagesToDelete);
 		Set<IPackageFragment> packagesToDelete = new HashSet<>(initialPackagesToDelete); // or use binary search, since the array is sorted?
 
-		for (Iterator<IPackageFragment> outerIter= initialPackagesToDelete.iterator(); outerIter.hasNext();) {
-			final IPackageFragment currentPackageFragment= outerIter.next();
-
+		for (IPackageFragment currentPackageFragment : initialPackagesToDelete) {
 			// The package will at least be cleared
 			allFragmentsToDelete.add(currentPackageFragment);
 
@@ -448,12 +435,13 @@
 
 		// Remove resources in deleted packages; and the packages as well
 		final List<IJavaElement>javaElements= new ArrayList<>();
-		for (int i= 0; i < fJavaElements.length; i++) {
-			if (!(fJavaElements[i] instanceof IPackageFragment)) {
+		for (IJavaElement javaElement : fJavaElements) {
+			if (!(javaElement instanceof IPackageFragment)) {
 				// remove children of deleted packages
-				final IPackageFragment frag= (IPackageFragment) fJavaElements[i].getAncestor(IJavaElement.PACKAGE_FRAGMENT);
-				if (!allFragmentsToDelete.contains(frag))
-					javaElements.add(fJavaElements[i]);
+				final IPackageFragment frag= (IPackageFragment) javaElement.getAncestor(IJavaElement.PACKAGE_FRAGMENT);
+				if (!allFragmentsToDelete.contains(frag)) {
+					javaElements.add(javaElement);
+				}
 			}
 		}
 		// Re-add deleted packages - note the (new) sequence
@@ -461,8 +449,7 @@
 
 		// Remove resources in deleted folders
 		final List<IResource>resources= new ArrayList<>();
-		for (int i= 0; i < fResources.length; i++) {
-			IResource resource= fResources[i];
+		for (IResource resource : fResources) {
 			IContainer parent= resource.getParent();
 			if (!deletedChildren.contains(parent))
 				resources.add(resource);
@@ -491,12 +478,12 @@
 					return;
 		}
 
-		final IResource[] children= ((IContainer) frag.getResource()).members();
-		for (int i= 0; i < children.length; i++) {
+		for (IResource child : ((IContainer) frag.getResource()).members()) {
 			// Child must be a package fragment already in the list,
 			// or a resource which is deleted as well.
-			if (!resourcesToDelete.contains(children[i]))
+			if (!resourcesToDelete.contains(child)) {
 				return;
+			}
 		}
 		resourcesToDelete.add(frag.getResource());
 		deletableParentPackages.add(frag);
@@ -517,8 +504,7 @@
 
 	private void removeUnconfirmedReferencedArchiveFiles(IConfirmQuery query) throws JavaModelException, OperationCanceledException {
 		List<IResource> filesToSkip= new ArrayList<>(0);
-		for (int i= 0; i < fResources.length; i++) {
-			IResource resource= fResources[i];
+		for (IResource resource : fResources) {
 			if (! (resource instanceof IFile))
 				continue;
 
@@ -537,8 +523,7 @@
 
 	private void removeUnconfirmedReferencedPackageFragmentRoots(IConfirmQuery query) throws JavaModelException, OperationCanceledException {
 		List<IPackageFragmentRoot> rootsToSkip= new ArrayList<>(0);
-		for (int i= 0; i < fJavaElements.length; i++) {
-			IJavaElement element= fJavaElements[i];
+		for (IJavaElement element : fJavaElements) {
 			if (! (element instanceof IPackageFragmentRoot))
 				continue;
 			IPackageFragmentRoot root= (IPackageFragmentRoot)element;
@@ -563,8 +548,7 @@
 		String queryTitle= RefactoringCoreMessages.DeleteRefactoring_4;
 		IConfirmQuery query= fDeleteQueries.createYesYesToAllNoNoToAllQuery(queryTitle, true, IReorgQueries.CONFIRM_DELETE_FOLDERS_CONTAINING_SOURCE_FOLDERS);
 		List<IFolder> foldersToSkip= new ArrayList<>(0);
-		for (int i= 0; i < fResources.length; i++) {
-			IResource resource= fResources[i];
+		for (IResource resource : fResources) {
 			if (resource instanceof IFolder){
 				IFolder folder= (IFolder)resource;
 				if (containsSourceFolder(folder)){
@@ -578,17 +562,18 @@
 	}
 
 	private static boolean containsSourceFolder(IFolder folder) throws CoreException {
-		IResource[] subFolders= folder.members();
-		for (int i = 0; i < subFolders.length; i++) {
-			if (! (subFolders[i] instanceof IFolder))
+		for (IResource subFolder : folder.members()) {
+			if (!(subFolder instanceof IFolder)) {
 				continue;
+			}
 			IJavaElement element= JavaCore.create(folder);
 			if (element instanceof IPackageFragmentRoot)
 				return true;
 			if (element instanceof IPackageFragment)
 				continue;
-			if (containsSourceFolder((IFolder)subFolders[i]))
+			if (containsSourceFolder((IFolder) subFolder)) {
 				return true;
+			}
 		}
 		return false;
 	}
@@ -640,12 +625,13 @@
 
 	private IProject getSingleProject() {
 		IProject first= null;
-		for (int index= 0; index < fElements.length; index++) {
+		for (Object javaElement : fElements) {
 			IProject project= null;
-			if (fElements[index] instanceof IJavaElement)
-				project= ((IJavaElement) fElements[index]).getJavaProject().getProject();
-			else if (fElements[index] instanceof IResource)
-				project= ((IResource) fElements[index]).getProject();
+			if (javaElement instanceof IJavaElement) {
+				project= ((IJavaElement) javaElement).getJavaProject().getProject();
+			} else if (javaElement instanceof IResource) {
+				project= ((IResource) javaElement).getProject();
+			}
 			if (project != null) {
 				if (first == null)
 					first= project;
@@ -688,8 +674,7 @@
 		List<IMethod> gettersSettersToAdd= new ArrayList<>(getterSetterMapping.size());
 		String queryTitle= RefactoringCoreMessages.DeleteRefactoring_8;
 		IConfirmQuery getterSetterQuery= fDeleteQueries.createYesYesToAllNoNoToAllQuery(queryTitle, true, IReorgQueries.CONFIRM_DELETE_GETTER_SETTER);
-		for (Iterator<IField> iter= getterSetterMapping.keySet().iterator(); iter.hasNext();) {
-			IField field= iter.next();
+		for (IField field : getterSetterMapping.keySet()) {
 			Assert.isTrue(hasGetter(getterSetterMapping, field) || hasSetter(getterSetterMapping, field));
 			String deleteGetterSetter= Messages.format(RefactoringCoreMessages.DeleteRefactoring_9, JavaElementUtil.createFieldSignature(field));
 			if (getterSetterQuery.confirm(deleteGetterSetter)){
@@ -728,8 +713,7 @@
 	 */
 	private static Map<IField, IMethod[]> createGetterSetterMapping(IField[] fields) throws JavaModelException {
 		Map<IField, IMethod[]> result= new HashMap<>();
-		for (int i= 0; i < fields.length; i++) {
-			IField field= fields[i];
+		for (IField field : fields) {
 			IMethod[] getterSetter= getGetterSetter(field);
 			if (getterSetter != null)
 				result.put(field, getterSetter);
@@ -758,9 +742,10 @@
 	}
 	private static IField[] getFields(IJavaElement[] elements){
 		List<IJavaElement> fields= new ArrayList<>(3);
-		for (int i= 0; i < elements.length; i++) {
-			if (elements[i] instanceof IField)
-				fields.add(elements[i]);
+		for (IJavaElement element : elements) {
+			if (element instanceof IField) {
+				fields.add(element);
+			}
 		}
 		return fields.toArray(new IField[fields.size()]);
 	}
@@ -792,8 +777,7 @@
 	private Set<ICompilationUnit> getCusToEmpty() throws JavaModelException {
 		Set<IJavaElement> deletedElements= new HashSet<>(Arrays.asList(fJavaElements));
 		Set<ICompilationUnit> result= new HashSet<>();
-		for (int i= 0; i < fJavaElements.length; i++) {
-			IJavaElement element= fJavaElements[i];
+		for (IJavaElement element : fJavaElements) {
 			ICompilationUnit cu= ReorgUtils.getCompilationUnit(element);
 			if (cu != null && !result.contains(cu) && deletedElements.containsAll(topLevelTypes(cu)))
 				result.add(cu);
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/JavaElementTransfer.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/JavaElementTransfer.java
index 4ec1f26..cf4cd75 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/JavaElementTransfer.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/JavaElementTransfer.java
@@ -81,8 +81,8 @@
 			dataOut.writeInt(javaElements.length);
 
 			//write each element
-			for (int i= 0; i < javaElements.length; i++) {
-				writeJavaElement(dataOut, javaElements[i]);
+			for (IJavaElement javaElement : javaElements) {
+				writeJavaElement(dataOut, javaElement);
 			}
 
 			//cleanup
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/JavaMoveProcessor.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/JavaMoveProcessor.java
index 415d302..710b853 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/JavaMoveProcessor.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/JavaMoveProcessor.java
@@ -93,7 +93,7 @@
 	 * Checks if <b>Java</b> references to the selected element(s) can be updated if moved to
 	 * the selected destination. Even if <code>false</code>, participants could still update
 	 * non-Java references.
-	 * 
+	 *
 	 * @return <code>true</code> iff <b>Java</b> references to the moved element can be updated
 	 * @since 3.5
 	 */
@@ -110,7 +110,7 @@
 	public boolean canUpdateReferences() {
 		return canUpdateJavaReferences();
 	}
-	
+
 	@Override
 	public RefactoringStatus checkFinalConditions(IProgressMonitor pm, CheckConditionsContext context) throws CoreException {
 		try {
@@ -152,10 +152,10 @@
 				@Override
 				public Change perform(IProgressMonitor pm2) throws CoreException {
 					Change change= super.perform(pm2);
-					Change[] changes= getChildren();
-					for (int index= 0; index < changes.length; index++) {
-						if (!(changes[index] instanceof TextEditBasedChange))
+					for (Change c : getChildren()) {
+						if (!(c instanceof TextEditBasedChange)) {
 							return null;
+						}
 					}
 					return change;
 				}
@@ -168,9 +168,8 @@
 					log= queries.getCreateTargetExecutionLog();
 			}
 			if (log != null) {
-				final Object[] selected= log.getSelectedElements();
-				for (int index= 0; index < selected.length; index++) {
-					result.add(new LoggedCreateTargetChange(selected[index], fCreateTargetQueries));
+				for (Object element : log.getSelectedElements()) {
+					result.add(new LoggedCreateTargetChange(element, fCreateTargetQueries));
 				}
 			}
 			Change change= fMovePolicy.createChange(pm);
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/LoggedNewNameQueries.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/LoggedNewNameQueries.java
index c65d47e..2b7ac8e 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/LoggedNewNameQueries.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/LoggedNewNameQueries.java
@@ -118,12 +118,6 @@
 
 	@Override
 	public INewNameQuery createStaticQuery(final String name) {
-		return new INewNameQuery() {
-
-			@Override
-			public String getNewName() {
-				return name;
-			}
-		};
+		return () -> name;
 	}
 }
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/MonitoringNewNameQueries.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/MonitoringNewNameQueries.java
index 01c0b85..c890271 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/MonitoringNewNameQueries.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/MonitoringNewNameQueries.java
@@ -13,8 +13,6 @@
  *******************************************************************************/
 package org.eclipse.jdt.internal.corext.refactoring.reorg;
 
-import org.eclipse.core.runtime.OperationCanceledException;
-
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.mapping.ResourceMapping;
 
@@ -37,61 +35,49 @@
 	}
 	@Override
 	public INewNameQuery createNewCompilationUnitNameQuery(final ICompilationUnit cu, final String initialSuggestedName) {
-		return new INewNameQuery() {
-			@Override
-			public String getNewName() throws OperationCanceledException {
-				String result= fDelegate.createNewCompilationUnitNameQuery(cu, initialSuggestedName).getNewName();
-				String newName= JavaModelUtil.getRenamedCUName(cu, result);
-				fExecutionLog.setNewName(cu, newName);
-				ResourceMapping mapping= JavaElementResourceMapping.create(cu);
-				if (mapping != null) {
-					fExecutionLog.setNewName(mapping, newName);
-				}
-				return result;
+		return () -> {
+			String result= fDelegate.createNewCompilationUnitNameQuery(cu, initialSuggestedName).getNewName();
+			String newName= JavaModelUtil.getRenamedCUName(cu, result);
+			fExecutionLog.setNewName(cu, newName);
+			ResourceMapping mapping= JavaElementResourceMapping.create(cu);
+			if (mapping != null) {
+				fExecutionLog.setNewName(mapping, newName);
 			}
+			return result;
 		};
 	}
 	@Override
 	public INewNameQuery createNewPackageFragmentRootNameQuery(final IPackageFragmentRoot root, final String initialSuggestedName) {
-		return new INewNameQuery() {
-			@Override
-			public String getNewName() throws OperationCanceledException {
-				String result= fDelegate.createNewPackageFragmentRootNameQuery(root, initialSuggestedName).getNewName();
-				fExecutionLog.setNewName(root, result);
-				ResourceMapping mapping= JavaElementResourceMapping.create(root);
-				if (mapping != null) {
-					fExecutionLog.setNewName(mapping, result);
-				}
-				return result;
+		return () -> {
+			String result= fDelegate.createNewPackageFragmentRootNameQuery(root, initialSuggestedName).getNewName();
+			fExecutionLog.setNewName(root, result);
+			ResourceMapping mapping= JavaElementResourceMapping.create(root);
+			if (mapping != null) {
+				fExecutionLog.setNewName(mapping, result);
 			}
+			return result;
 		};
 	}
 	@Override
 	public INewNameQuery createNewPackageNameQuery(final IPackageFragment pack, final String initialSuggestedName) {
-		return new INewNameQuery() {
-			@Override
-			public String getNewName() throws OperationCanceledException {
-				String result= fDelegate.createNewPackageNameQuery(pack, initialSuggestedName).getNewName();
-				fExecutionLog.setNewName(pack, result);
-				ResourceMapping mapping= JavaElementResourceMapping.create(pack);
-				if (mapping != null) {
-					int index= result.lastIndexOf('.');
-					String newFolderName= index == -1 ? result : result.substring(index + 1);
-					fExecutionLog.setNewName(mapping, newFolderName);
-				}
-				return result;
+		return () -> {
+			String result= fDelegate.createNewPackageNameQuery(pack, initialSuggestedName).getNewName();
+			fExecutionLog.setNewName(pack, result);
+			ResourceMapping mapping= JavaElementResourceMapping.create(pack);
+			if (mapping != null) {
+				int index= result.lastIndexOf('.');
+				String newFolderName= index == -1 ? result : result.substring(index + 1);
+				fExecutionLog.setNewName(mapping, newFolderName);
 			}
+			return result;
 		};
 	}
 	@Override
 	public INewNameQuery createNewResourceNameQuery(final IResource res, final String initialSuggestedName) {
-		return new INewNameQuery() {
-			@Override
-			public String getNewName() throws OperationCanceledException {
-				String result= fDelegate.createNewResourceNameQuery(res, initialSuggestedName).getNewName();
-				fExecutionLog.setNewName(res, result);
-				return result;
-			}
+		return () -> {
+			String result= fDelegate.createNewResourceNameQuery(res, initialSuggestedName).getNewName();
+			fExecutionLog.setNewName(res, result);
+			return result;
 		};
 	}
 	@Override
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/MoveCuUpdateCreator.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/MoveCuUpdateCreator.java
index 85e5c25..9f01681 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/MoveCuUpdateCreator.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/MoveCuUpdateCreator.java
@@ -17,7 +17,6 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
@@ -112,8 +111,7 @@
 	}
 
 	private void addImportRewriteUpdates(TextChangeManager changeManager) throws CoreException {
-		for (Iterator<ICompilationUnit> iter= fImportRewrites.keySet().iterator(); iter.hasNext();) {
-			ICompilationUnit cu= iter.next();
+		for (ICompilationUnit cu : fImportRewrites.keySet()) {
 			ImportRewrite importRewrite= fImportRewrites.get(cu);
 			if (importRewrite != null && importRewrite.hasRecordedChanges()) {
 				TextChangeCompatibility.addTextEdit(changeManager.get(cu), RefactoringCoreMessages.MoveCuUpdateCreator_update_imports, importRewrite.rewriteImports(null));
@@ -123,11 +121,10 @@
 
 	private void addUpdates(TextChangeManager changeManager, IProgressMonitor pm, RefactoringStatus status) throws CoreException {
 		pm.beginTask("", fCus.length);  //$NON-NLS-1$
-		for (int i= 0; i < fCus.length; i++){
+		for (ICompilationUnit cu : fCus) {
 			if (pm.isCanceled())
 				throw new OperationCanceledException();
-
-			addUpdates(changeManager, fCus[i], new SubProgressMonitor(pm, 1), status);
+			addUpdates(changeManager, cu, new SubProgressMonitor(pm, 1), status);
 		}
 	}
 
@@ -151,21 +148,17 @@
 
 	private void addReferenceUpdates(TextChangeManager changeManager, ICompilationUnit movedUnit, IProgressMonitor pm, RefactoringStatus status) throws JavaModelException, CoreException {
 		List<ICompilationUnit> cuList= Arrays.asList(fCus);
-		SearchResultGroup[] references= getReferences(movedUnit, pm, status);
-		for (int i= 0; i < references.length; i++) {
-			SearchResultGroup searchResultGroup= references[i];
+		for (SearchResultGroup searchResultGroup : getReferences(movedUnit, pm, status)) {
 			ICompilationUnit referencingCu= searchResultGroup.getCompilationUnit();
 			if (referencingCu == null)
 				continue;
-
 			boolean simpleReferencesNeedNewImport= simpleReferencesNeedNewImport(movedUnit, referencingCu, cuList);
-			SearchMatch[] results= searchResultGroup.getSearchResults();
-			for (int j= 0; j < results.length; j++) {
+			for (SearchMatch result : searchResultGroup.getSearchResults()) {
 				// TODO: should update type references with results from addImport
-				TypeReference reference= (TypeReference) results[j];
+				TypeReference reference= (TypeReference) result;
 				if (reference.isImportDeclaration()) {
 					ImportRewrite rewrite= getImportRewrite(referencingCu);
-					IImportDeclaration importDecl= (IImportDeclaration) SearchUtils.getEnclosingJavaElement(results[j]);
+					IImportDeclaration importDecl= (IImportDeclaration) SearchUtils.getEnclosingJavaElement(result);
 					if (Flags.isStatic(importDecl.getFlags())) {
 						rewrite.removeStaticImport(importDecl.getElementName());
 						addStaticImport(movedUnit, importDecl, rewrite);
@@ -226,18 +219,16 @@
 
 	private void removeImportsToDestinationPackageTypes(ICompilationUnit movedUnit) throws CoreException{
 		ImportRewrite importEdit= getImportRewrite(movedUnit);
-		IType[] destinationTypes= getDestinationPackageTypes();
-		for (int i= 0; i < destinationTypes.length; i++) {
-			importEdit.removeImport(destinationTypes[i].getFullyQualifiedName('.'));
+		for (IType destinationType : getDestinationPackageTypes()) {
+			importEdit.removeImport(destinationType.getFullyQualifiedName('.'));
 		}
 	}
 
 	private IType[] getDestinationPackageTypes() throws JavaModelException {
 		List<IType> types= new ArrayList<>();
 		if (fDestination.exists()) {
-			ICompilationUnit[] cus= fDestination.getCompilationUnits();
-			for (int i= 0; i < cus.length; i++) {
-				types.addAll(Arrays.asList(cus[i].getTypes()));
+			for (ICompilationUnit cu : fDestination.getCompilationUnits()) {
+				types.addAll(Arrays.asList(cu.getTypes()));
 			}
 		}
 		return types.toArray(new IType[types.size()]);
@@ -246,19 +237,17 @@
 	private void addImportToSourcePackageTypes(ICompilationUnit movedUnit, IProgressMonitor pm) throws CoreException{
 		List<ICompilationUnit> cuList= Arrays.asList(fCus);
 		IType[] allCuTypes= movedUnit.getAllTypes();
-		IType[] referencedTypes= ReferenceFinderUtil.getTypesReferencedIn(allCuTypes, pm);
 		ImportRewrite importEdit= getImportRewrite(movedUnit);
 		importEdit.setFilterImplicitImports(false);
 		IPackageFragment srcPack= (IPackageFragment)movedUnit.getParent();
-		for (int i= 0; i < referencedTypes.length; i++) {
-				IType iType= referencedTypes[i];
-				if (! iType.exists())
-					continue;
-				if (!JavaModelUtil.isSamePackage(iType.getPackageFragment(), srcPack))
-					continue;
-				if (cuList.contains(iType.getCompilationUnit()))
-					continue;
-				importEdit.addImport(iType.getFullyQualifiedName('.'));
+		for (IType type : ReferenceFinderUtil.getTypesReferencedIn(allCuTypes, pm)) {
+			if (! type.exists())
+				continue;
+			if (!JavaModelUtil.isSamePackage(type.getPackageFragment(), srcPack))
+				continue;
+			if (cuList.contains(type.getCompilationUnit()))
+				continue;
+			importEdit.addImport(type.getFullyQualifiedName('.'));
 		}
 	}
 
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/MoveModifications.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/MoveModifications.java
index 75fde9d..827aaae 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/MoveModifications.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/MoveModifications.java
@@ -99,10 +99,8 @@
 			IContainer resourceDestination= (IContainer) newPack.getResource();
 			createIncludingParents(resourceDestination);
 			MoveArguments arguments= new MoveArguments(resourceDestination, args.getUpdateReferences());
-			IResource[] resourcesToMove= collectResourcesOfInterest(pack);
 			Set<IResource> allMembers= new HashSet<>(Arrays.asList(resourceSource.members()));
-			for (int i= 0; i < resourcesToMove.length; i++) {
-				IResource toMove= resourcesToMove[i];
+			for (IResource toMove : collectResourcesOfInterest(pack)) {
 				getResourceModifications().addMove(toMove, arguments);
 				allMembers.remove(toMove);
 			}
@@ -121,9 +119,8 @@
 
 	public void move(ICompilationUnit unit, MoveArguments args) throws CoreException {
 		add(unit, args, null);
-		IType[] types= unit.getTypes();
-		for (int tt= 0; tt < types.length; tt++) {
-			add(types[tt], args, null);
+		for (IType type : unit.getTypes()) {
+			add(type, args, null);
 		}
 		IResource resourceDestination= getResourceDestination(args);
 		if (resourceDestination != null && unit.getResource() != null) {
@@ -150,8 +147,7 @@
 
 	@Override
 	public void buildValidateEdits(ValidateEditChecker checker) {
-		for (Iterator<Object> iter= fMoves.iterator(); iter.hasNext();) {
-			Object element= iter.next();
+		for (Object element : fMoves) {
 			if (element instanceof ICompilationUnit) {
 				ICompilationUnit unit= (ICompilationUnit)element;
 				IResource resource= unit.getResource();
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/OverwriteHelper.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/OverwriteHelper.java
index 047a28b..1aea0f5 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/OverwriteHelper.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/OverwriteHelper.java
@@ -110,8 +110,7 @@
 
 	private void confirmPackageFragmentRootOverwritting(IConfirmQuery skipQuery, IConfirmQuery overwriteQuery) {
 		List<IPackageFragmentRoot> toNotOverwrite= new ArrayList<>(1);
-		for (int i= 0; i < fRoots.length; i++) {
-			IPackageFragmentRoot root= fRoots[i];
+		for (IPackageFragmentRoot root : fRoots) {
 			if (canOverwrite(root)) {
 				if (root.getResource() instanceof IContainer) {
 					if (!skip(JavaElementLabels.getElementLabel(root, JavaElementLabels.ALL_DEFAULT), skipQuery))
@@ -128,8 +127,7 @@
 
 	private void confirmCuOverwritting(IConfirmQuery overwriteQuery) {
 		List<ICompilationUnit> cusToNotOverwrite= new ArrayList<>(1);
-		for (int i= 0; i < fCus.length; i++) {
-			ICompilationUnit cu= fCus[i];
+		for (ICompilationUnit cu : fCus) {
 			if (canOverwrite(cu) && ! overwrite(cu, overwriteQuery))
 				cusToNotOverwrite.add(cu);
 		}
@@ -139,8 +137,7 @@
 
 	private void confirmFolderOverwritting(IConfirmQuery overwriteQuery) {
 		List<IFolder> foldersToNotOverwrite= new ArrayList<>(1);
-		for (int i= 0; i < fFolders.length; i++) {
-			IFolder folder= fFolders[i];
+		for (IFolder folder : fFolders) {
 			if (willOverwrite(folder) && ! skip(BasicElementLabels.getResourceName(folder), overwriteQuery))
 				foldersToNotOverwrite.add(folder);
 		}
@@ -150,8 +147,7 @@
 
 	private void confirmFileOverwritting(IConfirmQuery overwriteQuery, IConfirmQuery skipQuery) {
 		List<IFile> filesToNotOverwrite= new ArrayList<>(1);
-		for (int i= 0; i < fFiles.length; i++) {
-			IFile file= fFiles[i];
+		for (IFile file : fFiles) {
 			if (willOverwrite(file)) {
 				IContainer destination= (IContainer) ResourceUtil.getResource(fDestination);
 				if (ParentChecker.isDescendantOf(file, destination.findMember(file.getName()))) {
@@ -169,8 +165,7 @@
 
 	private void confirmPackageOverwritting(IConfirmQuery overwriteQuery){
 		List<IPackageFragment> toNotOverwrite= new ArrayList<>(1);
-		for (int i= 0; i < fPackageFragments.length; i++) {
-			IPackageFragment pack= fPackageFragments[i];
+		for (IPackageFragment pack : fPackageFragments) {
 			if (canOverwrite(pack) && ! overwrite(pack, overwriteQuery))
 				toNotOverwrite.add(pack);
 		}
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/ParentChecker.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/ParentChecker.java
index 78cafa6..d8d24dd 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/ParentChecker.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/ParentChecker.java
@@ -91,7 +91,7 @@
 		commonParent= convertedToJava == null ? commonJavaElementParent : convertedToJava;
 		if (fJarResources.length != 0) {
 			commonJarResourcesParent= getCommonJarResourceParent();
-			Assert.isNotNull(commonJarResourcesParent);			
+			Assert.isNotNull(commonJarResourcesParent);
 			if (!commonJarResourcesParent.equals(commonParent))
 				return null;
 		}
@@ -100,7 +100,7 @@
 
 	/**
 	 * Return the common parent for the jar resources.
-	 * 
+	 *
 	 * @return the common parent for the jar resources
 	 * @since 3.6
 	 */
@@ -148,7 +148,7 @@
 
 	/**
 	 * Checks whether the jar resources have the same parent.
-	 * 
+	 *
 	 * @return <code>true</code> if the jar resources have the same parent, <code>false</code>
 	 *         otherwise
 	 * @since 3.6
@@ -219,10 +219,8 @@
 
 	private void removeResourcesDescendantsOfResources() {
 		List<IResource> subResources= new ArrayList<>(3);
-		for (int i= 0; i < fResources.length; i++) {
-			IResource subResource= fResources[i];
-			for (int j= 0; j < fResources.length; j++) {
-				IResource superResource= fResources[j];
+		for (IResource subResource : fResources) {
+			for (IResource superResource : fResources) {
 				if (isDescendantOf(subResource, superResource))
 					subResources.add(subResource);
 			}
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/ReadOnlyResourceFinder.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/ReadOnlyResourceFinder.java
index cafbb25..ed43bec 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/ReadOnlyResourceFinder.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/ReadOnlyResourceFinder.java
@@ -59,9 +59,10 @@
 	}
 
 	private static boolean hasReadOnlyResourcesAndSubResources(IJavaElement[] javaElements) throws CoreException {
-		for (int i= 0; i < javaElements.length; i++) {
-			if (hasReadOnlyResourcesAndSubResources(javaElements[i]))
+		for (IJavaElement javaElement : javaElements) {
+			if (hasReadOnlyResourcesAndSubResources(javaElement)) {
 				return true;
+			}
 		}
 		return false;
 	}
@@ -81,9 +82,7 @@
 				IPackageFragment pack= (IPackageFragment)javaElement;
 				if (Resources.isReadOnly(packResource))
 					return true;
-				Object[] nonJava= pack.getNonJavaResources();
-				for (int i= 0; i < nonJava.length; i++) {
-					Object object= nonJava[i];
+				for (Object object : pack.getNonJavaResources()) {
 					if (object instanceof IResource && hasReadOnlyResourcesAndSubResources((IResource)object))
 						return true;
 				}
@@ -97,9 +96,7 @@
 					return false;
 				if (Resources.isReadOnly(pfrResource))
 					return true;
-				Object[] nonJava1= root.getNonJavaResources();
-				for (int i= 0; i < nonJava1.length; i++) {
-					Object object= nonJava1[i];
+				for (Object object : root.getNonJavaResources()) {
 					if (object instanceof IResource && hasReadOnlyResourcesAndSubResources((IResource)object))
 						return true;
 				}
@@ -120,9 +117,10 @@
 	}
 
 	private static boolean hasReadOnlyResourcesAndSubResources(IResource[] resources) throws CoreException {
-		for (int i= 0; i < resources.length; i++) {
-			if (hasReadOnlyResourcesAndSubResources(resources[i]))
+		for (IResource resource : resources) {
+			if (hasReadOnlyResourcesAndSubResources(resource)) {
 				return true;
+			}
 		}
 		return false;
 	}
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/RefactoringModifications.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/RefactoringModifications.java
index acb764d..5d08132 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/RefactoringModifications.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/RefactoringModifications.java
@@ -73,16 +73,13 @@
 			childOfInterest = IJavaElement.CLASS_FILE;
 		}
 		ArrayList<IResource> result = new ArrayList<>(children.length);
-		for (int i = 0; i < children.length; i++) {
-			IJavaElement child = children[i];
+		for (IJavaElement child : children) {
 			if (child.getElementType() == childOfInterest && child.getResource() != null) {
 				result.add(child.getResource());
 			}
 		}
 		// Gather non-java resources
-		Object[] nonJavaResources = source.getNonJavaResources();
-		for (int i= 0; i < nonJavaResources.length; i++) {
-			Object element= nonJavaResources[i];
+		for (Object element : source.getNonJavaResources()) {
 			if (element instanceof IResource) {
 				result.add((IResource) element);
 			}
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/ReorgPolicyFactory.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/ReorgPolicyFactory.java
index f493d5f..e936a4e 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/ReorgPolicyFactory.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/ReorgPolicyFactory.java
@@ -19,10 +19,8 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
-import java.util.Comparator;
 import java.util.HashMap;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -174,8 +172,7 @@
 
 		public IJavaElement[] getActualJavaElementsToReorg() throws JavaModelException {
 			List<IJavaElement> result= new ArrayList<>();
-			for (int i= 0; i < fJavaElements.length; i++) {
-				IJavaElement element= fJavaElements[i];
+			for (IJavaElement element : fJavaElements) {
 				if (element == null)
 					continue;
 				if (element instanceof IType) {
@@ -195,13 +192,16 @@
 		public IResource[] getActualResourcesToReorg() {
 			Set<IJavaElement> javaElementSet= new HashSet<>(Arrays.asList(fJavaElements));
 			List<IResource> result= new ArrayList<>();
-			for (int i= 0; i < fResources.length; i++) {
-				if (fResources[i] == null)
+			for (IResource resource : fResources) {
+				if (resource == null) {
 					continue;
-				IJavaElement element= JavaCore.create(fResources[i]);
-				if (element == null || !element.exists() || !javaElementSet.contains(element))
-					if (!result.contains(fResources[i]))
-						result.add(fResources[i]);
+				}
+				IJavaElement element= JavaCore.create(resource);
+				if (element == null || !element.exists() || !javaElementSet.contains(element)) {
+					if (!result.contains(resource)) {
+						result.add(resource);
+					}
+				}
 			}
 			return result.toArray(new IResource[result.size()]);
 
@@ -278,20 +278,20 @@
 			NewNameProposer nameProposer= new NewNameProposer();
 			CompositeChange composite= new DynamicValidationStateChange(RefactoringCoreMessages.ReorgPolicy_copy);
 			composite.markAsSynthetic();
-			for (int i= 0; i < cus.length; i++) {
-				composite.add(createChange(cus[i], nameProposer, copyQueries));
+			for (ICompilationUnit cu : cus) {
+				composite.add(createChange(cu, nameProposer, copyQueries));
 				pm.worked(1);
 			}
 			if (pm.isCanceled())
 				throw new OperationCanceledException();
-			for (int i= 0; i < file.length; i++) {
-				composite.add(createChange(file[i], nameProposer, copyQueries));
+			for (IFile f : file) {
+				composite.add(createChange(f, nameProposer, copyQueries));
 				pm.worked(1);
 			}
 			if (pm.isCanceled())
 				throw new OperationCanceledException();
-			for (int i= 0; i < folders.length; i++) {
-				composite.add(createChange(folders[i], nameProposer, copyQueries));
+			for (IFolder folder : folders) {
+				composite.add(createChange(folder, nameProposer, copyQueries));
 				pm.worked(1);
 			}
 			pm.done();
@@ -363,13 +363,11 @@
 			fReorgExecutionLog= new ReorgExecutionLog();
 			CopyArguments jArgs= new CopyArguments(getDestination(), fReorgExecutionLog);
 			CopyArguments rArgs= new CopyArguments(getDestinationAsContainer(), fReorgExecutionLog);
-			ICompilationUnit[] cus= getCus();
-			for (int i= 0; i < cus.length; i++) {
-				fModifications.copy(cus[i], jArgs, rArgs);
+			for (ICompilationUnit cu : getCus()) {
+				fModifications.copy(cu, jArgs, rArgs);
 			}
-			IResource[] resources= ReorgUtils.union(getFiles(), getFolders());
-			for (int i= 0; i < resources.length; i++) {
-				fModifications.copy(resources[i], rArgs);
+			for (IResource resource : ReorgUtils.union(getFiles(), getFolders())) {
+				fModifications.copy(resource, rArgs);
 			}
 			return fModifications;
 		}
@@ -442,11 +440,11 @@
 			CompositeChange composite= new DynamicValidationStateChange(RefactoringCoreMessages.ReorgPolicy_copy_source_folder);
 			composite.markAsSynthetic();
 			IJavaProject destination= getDestinationJavaProject();
-			for (int i= 0; i < roots.length; i++) {
+			for (IPackageFragmentRoot root : roots) {
 				if (destination == null) {
-					composite.add(createChange(roots[i], (IContainer) getResourceDestination(), nameProposer, copyQueries));
+					composite.add(createChange(root, (IContainer) getResourceDestination(), nameProposer, copyQueries));
 				} else {
-					composite.add(createChange(roots[i], destination, nameProposer, copyQueries));
+					composite.add(createChange(root, destination, nameProposer, copyQueries));
 				}
 				pm.worked(1);
 			}
@@ -490,16 +488,14 @@
 			fReorgExecutionLog= new ReorgExecutionLog();
 			IJavaProject destination= getDestinationJavaProject();
 			if (destination == null) {
-				IPackageFragmentRoot[] roots= getRoots();
-				for (int i= 0; i < roots.length; i++) {
-					fModifications.copy(roots[i].getResource(), new CopyArguments(getResourceDestination(), fReorgExecutionLog));
+				for (IPackageFragmentRoot root : getRoots()) {
+					fModifications.copy(root.getResource(), new CopyArguments(getResourceDestination(), fReorgExecutionLog));
 				}
 			} else {
 				CopyArguments javaArgs= new CopyArguments(destination, fReorgExecutionLog);
 				CopyArguments resourceArgs= new CopyArguments(destination.getProject(), fReorgExecutionLog);
-				IPackageFragmentRoot[] roots= getRoots();
-				for (int i= 0; i < roots.length; i++) {
-					fModifications.copy(roots[i], javaArgs, resourceArgs);
+				for (IPackageFragmentRoot root : getRoots()) {
+					fModifications.copy(root, javaArgs, resourceArgs);
 				}
 			}
 			return fModifications;
@@ -578,11 +574,11 @@
 			CompositeChange composite= new DynamicValidationStateChange(RefactoringCoreMessages.ReorgPolicy_copy_package);
 			composite.markAsSynthetic();
 			IPackageFragmentRoot root= getDestinationAsPackageFragmentRoot();
-			for (int i= 0; i < fragments.length; i++) {
+			for (IPackageFragment fragment : fragments) {
 				if (root == null) {
-					composite.add(createChange(fragments[i], (IContainer) getResourceDestination(), nameProposer, newNameQueries));
+					composite.add(createChange(fragment, (IContainer) getResourceDestination(), nameProposer, newNameQueries));
 				} else {
-					composite.add(createChange(fragments[i], root, nameProposer, newNameQueries));
+					composite.add(createChange(fragment, root, nameProposer, newNameQueries));
 				}
 				pm.worked(1);
 			}
@@ -626,16 +622,14 @@
 			fReorgExecutionLog= new ReorgExecutionLog();
 			IPackageFragmentRoot destination= getDestinationAsPackageFragmentRoot();
 			if (destination == null) {
-				IPackageFragment[] packages= getPackages();
-				for (int i= 0; i < packages.length; i++) {
-					fModifications.copy(packages[i].getResource(), new CopyArguments(getResourceDestination(), fReorgExecutionLog));
+				for (IPackageFragment p : getPackages()) {
+					fModifications.copy(p.getResource(), new CopyArguments(getResourceDestination(), fReorgExecutionLog));
 				}
 			} else {
 				CopyArguments javaArgs= new CopyArguments(destination, fReorgExecutionLog);
 				CopyArguments resourceArgs= new CopyArguments(destination.getResource(), fReorgExecutionLog);
-				IPackageFragment[] packages= getPackages();
-				for (int i= 0; i < packages.length; i++) {
-					fModifications.copy(packages[i], javaArgs, resourceArgs);
+				for (IPackageFragment p : getPackages()) {
+					fModifications.copy(p, javaArgs, resourceArgs);
 				}
 			}
 			return fModifications;
@@ -685,9 +679,8 @@
 				CompilationUnit sourceCuNode= createSourceCuNode();
 				ICompilationUnit targetCu= getEnclosingCompilationUnit(getJavaElementDestination());
 				CompilationUnitRewrite targetRewriter= new CompilationUnitRewrite(targetCu);
-				IJavaElement[] javaElements= getJavaElements();
-				for (int i= 0; i < javaElements.length; i++) {
-					copyToDestination(javaElements[i], targetRewriter, sourceCuNode, targetRewriter.getRoot());
+				for (IJavaElement javaElement : getJavaElements()) {
+					copyToDestination(javaElement, targetRewriter, sourceCuNode, targetRewriter.getRoot());
 				}
 				return createCompilationUnitChange(targetRewriter);
 			} catch (JavaModelException e) {
@@ -782,9 +775,8 @@
 			fModifications= new CopyModifications();
 			fReorgExecutionLog= new ReorgExecutionLog();
 			CopyArguments args= new CopyArguments(getJavaElementDestination(), fReorgExecutionLog);
-			IJavaElement[] javaElements= getJavaElements();
-			for (int i= 0; i < javaElements.length; i++) {
-				fModifications.copy(javaElements[i], args, null);
+			for (IJavaElement javaElement : getJavaElements()) {
+				fModifications.copy(javaElement, args, null);
 			}
 			return fModifications;
 		}
@@ -988,11 +980,11 @@
 						e.printStackTrace();
 					}
 				}
-				
+
 				if (copyFilesToDefaultPackage) {
 					return javaAsPackage;
 				}
-			}	
+			}
 			return getResourceDestinationAsPackageFragment(getResourceDestination());
 		}
 
@@ -1053,23 +1045,26 @@
 
 		private IProject getSingleProject() {
 			IProject result= null;
-			for (int index= 0; index < fFiles.length; index++) {
-				if (result == null)
-					result= fFiles[index].getProject();
-				else if (!result.equals(fFiles[index].getProject()))
+			for (IFile file : fFiles) {
+				if (result == null) {
+					result= file.getProject();
+				} else if (!result.equals(file.getProject())) {
 					return null;
+				}
 			}
-			for (int index= 0; index < fFolders.length; index++) {
-				if (result == null)
-					result= fFolders[index].getProject();
-				else if (!result.equals(fFolders[index].getProject()))
+			for (IFolder folder : fFolders) {
+				if (result == null) {
+					result= folder.getProject();
+				} else if (!result.equals(folder.getProject())) {
 					return null;
+				}
 			}
-			for (int index= 0; index < fCus.length; index++) {
-				if (result == null)
-					result= fCus[index].getJavaProject().getProject();
-				else if (!result.equals(fCus[index].getJavaProject().getProject()))
+			for (ICompilationUnit cu : fCus) {
+				if (result == null) {
+					result= cu.getJavaProject().getProject();
+				} else if (!result.equals(cu.getJavaProject().getProject())) {
 					return null;
+				}
 			}
 			return result;
 		}
@@ -1155,8 +1150,7 @@
 		}
 
 		private boolean isChildOfOrEqualToAnyFolder(IResource resource) {
-			for (int i= 0; i < fFolders.length; i++) {
-				IFolder folder= fFolders[i];
+			for (IFolder folder : fFolders) {
 				if (folder.equals(resource) || ParentChecker.isDescendantOf(resource, folder))
 					return true;
 			}
@@ -1270,7 +1264,7 @@
 		public boolean canEnableQualifiedNameUpdating() {
 			return getCus().length > 0 && !JavaElementUtil.isDefaultPackage(getCommonParent());
 		}
-		
+
 		@Override
 		public boolean canUpdateJavaReferences() {
 			return true;
@@ -1355,13 +1349,12 @@
 				ICompilationUnit[] cus= getCus();
 				pm.beginTask("", cus.length); //$NON-NLS-1$
 				pm.subTask(RefactoringCoreMessages.MoveRefactoring_scanning_qualified_names);
-				for (int i= 0; i < cus.length; i++) {
-					ICompilationUnit cu= cus[i];
+				for (ICompilationUnit cu : cus) {
 					IType[] types= cu.getTypes();
 					IProgressMonitor typesMonitor= new SubProgressMonitor(pm, 1);
 					typesMonitor.beginTask("", types.length); //$NON-NLS-1$
-					for (int j= 0; j < types.length; j++) {
-						handleType(types[j], destination, new SubProgressMonitor(typesMonitor, 1));
+					for (IType type : types) {
+						handleType(type, destination, new SubProgressMonitor(typesMonitor, 1));
 						if (typesMonitor.isCanceled())
 							throw new OperationCanceledException();
 					}
@@ -1463,20 +1456,20 @@
 			IFolder[] folders= getFolders();
 			ICompilationUnit[] cus= getCus();
 			pm.beginTask("", files.length + folders.length + cus.length); //$NON-NLS-1$
-			for (int i= 0; i < files.length; i++) {
-				result.add(createChange(files[i]));
+			for (IFile file : files) {
+				result.add(createChange(file));
 				pm.worked(1);
 			}
 			if (pm.isCanceled())
 				throw new OperationCanceledException();
-			for (int i= 0; i < folders.length; i++) {
-				result.add(createChange(folders[i]));
+			for (IFolder folder : folders) {
+				result.add(createChange(folder));
 				pm.worked(1);
 			}
 			if (pm.isCanceled())
 				throw new OperationCanceledException();
-			for (int i= 0; i < cus.length; i++) {
-				result.add(createChange(cus[i]));
+			for (ICompilationUnit cu : cus) {
+				result.add(createChange(cu));
 				pm.worked(1);
 			}
 			pm.done();
@@ -1566,19 +1559,16 @@
 
 			boolean updateReferenes= getUpdateReferences();
 			if (unitDestination != null) {
-				ICompilationUnit[] units= getCus();
-				for (int i= 0; i < units.length; i++) {
-					fModifications.move(units[i], new MoveArguments(unitDestination, updateReferenes));
+				for (ICompilationUnit unit : getCus()) {
+					fModifications.move(unit, new MoveArguments(unitDestination, updateReferenes));
 				}
 			}
 			if (container != null) {
-				IFile[] files= getFiles();
-				for (int i= 0; i < files.length; i++) {
-					fModifications.move(files[i], new MoveArguments(container, updateReferenes));
+				for (IFile file : getFiles()) {
+					fModifications.move(file, new MoveArguments(container, updateReferenes));
 				}
-				IFolder[] folders= getFolders();
-				for (int i= 0; i < folders.length; i++) {
-					fModifications.move(folders[i], new MoveArguments(container, updateReferenes));
+				for (IFolder folder : getFolders()) {
+					fModifications.move(folder, new MoveArguments(container, updateReferenes));
 				}
 			}
 			return fModifications;
@@ -1631,7 +1621,7 @@
 				return false;
 			if (canUpdateQualifiedNames())
 				return false;
-			
+
 			return true;
 		}
 
@@ -1728,7 +1718,7 @@
 			IJavaElement destinationContainerAsPackage= getDestinationContainerAsJavaElement();
 			if (destinationContainerAsPackage != null && destinationContainerAsPackage.equals(commonParent))
 				return RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.ReorgPolicyFactory_parent);
-			
+
 			if (cannotUpdateReferencesForDestination())
 				superStatus.addInfo(RefactoringCoreMessages.ReorgPolicyFactory_noJavaUpdates);
 
@@ -1741,9 +1731,10 @@
 		private static final String POLICY_MOVE_ROOTS= "org.eclipse.jdt.ui.moveRoots"; //$NON-NLS-1$
 
 		private static boolean isParentOfAny(IJavaProject javaProject, IPackageFragmentRoot[] roots) {
-			for (int i= 0; i < roots.length; i++) {
-				if (ReorgUtils.isParentInWorkspaceOrOnDisk(roots[i], javaProject))
+			for (IPackageFragmentRoot root : roots) {
+				if (ReorgUtils.isParentInWorkspaceOrOnDisk(root, javaProject)) {
 					return true;
+				}
 			}
 			return false;
 		}
@@ -1753,7 +1744,7 @@
 		private MoveModifications fModifications;
 
 		private boolean fUpdateReferences= true;
-		
+
 		MovePackageFragmentRootsPolicy(IPackageFragmentRoot[] roots) {
 			super(roots);
 		}
@@ -1763,10 +1754,9 @@
 			if (!super.canEnable())
 				return false;
 			IPackageFragmentRoot[] roots= getPackageFragmentRoots();
-			for (int i= 0; i < roots.length; i++) {
-				IPackageFragmentRoot root= roots[i];
+			for (IPackageFragmentRoot root : roots) {
 				if (root.isReadOnly() && !root.isArchive() && !root.isExternal()) {
-					final ResourceAttributes attributes= roots[i].getResource().getResourceAttributes();
+					final ResourceAttributes attributes= root.getResource().getResourceAttributes();
 					if (attributes == null || attributes.isReadOnly())
 						return false;
 				}
@@ -1804,11 +1794,11 @@
 			CompositeChange composite= new DynamicValidationStateChange(RefactoringCoreMessages.ReorgPolicy_move_source_folder);
 			composite.markAsSynthetic();
 			IJavaProject destination= getDestinationJavaProject();
-			for (int i= 0; i < roots.length; i++) {
+			for (IPackageFragmentRoot root : roots) {
 				if (destination == null) {
-					composite.add(new MovePackageFragmentRootChange(roots[i], (IContainer) getResourceDestination(), null));
+					composite.add(new MovePackageFragmentRootChange(root, (IContainer) getResourceDestination(), null));
 				} else {
-					composite.add(createChange(roots[i], destination));
+					composite.add(createChange(root, destination));
 				}
 				pm.worked(1);
 			}
@@ -1862,14 +1852,12 @@
 			IJavaProject destination= getDestinationJavaProject();
 			boolean updateReferences= getUpdateReferences();
 			if (destination != null) {
-				IPackageFragmentRoot[] roots= getPackageFragmentRoots();
-				for (int i= 0; i < roots.length; i++) {
-					fModifications.move(roots[i], new MoveArguments(destination, updateReferences));
+				for (IPackageFragmentRoot root : getPackageFragmentRoots()) {
+					fModifications.move(root, new MoveArguments(destination, updateReferences));
 				}
 			} else {
-				IPackageFragmentRoot[] roots= getPackageFragmentRoots();
-				for (int i= 0; i < roots.length; i++) {
-					fModifications.move(roots[i], new MoveArguments(getResourceDestination(), updateReferences));
+				for (IPackageFragmentRoot root : getPackageFragmentRoots()) {
+					fModifications.move(root, new MoveArguments(getResourceDestination(), updateReferences));
 				}
 			}
 			return fModifications;
@@ -1983,8 +1971,7 @@
 		private static final String POLICY_MOVE_PACKAGES= "org.eclipse.jdt.ui.movePackages"; //$NON-NLS-1$
 
 		private static boolean isParentOfAny(IPackageFragmentRoot root, IPackageFragment[] fragments) {
-			for (int i= 0; i < fragments.length; i++) {
-				IPackageFragment fragment= fragments[i];
+			for (IPackageFragment fragment : fragments) {
 				if (ReorgUtils.isParentInWorkspaceOrOnDisk(fragment, root))
 					return true;
 			}
@@ -2034,11 +2021,11 @@
 			CompositeChange result= new DynamicValidationStateChange(RefactoringCoreMessages.ReorgPolicy_move_package);
 			result.markAsSynthetic();
 			IPackageFragmentRoot root= getDestinationAsPackageFragmentRoot();
-			for (int i= 0; i < fragments.length; i++) {
+			for (IPackageFragment fragment : fragments) {
 				if (root == null) {
-					result.add(createChange(fragments[i], (IContainer)getResourceDestination()));
+					result.add(createChange(fragment, (IContainer)getResourceDestination()));
 				} else {
-					result.add(createChange(fragments[i], root));
+					result.add(createChange(fragment, root));
 				}
 				pm.worked(1);
 				if (pm.isCanceled())
@@ -2093,13 +2080,12 @@
 
 			fModifications= new MoveModifications();
 			boolean updateReferences= getUpdateReferences();
-			IPackageFragment[] packages= getPackages();
 			IPackageFragmentRoot javaDestination= getDestinationAsPackageFragmentRoot();
-			for (int i= 0; i < packages.length; i++) {
+			for (IPackageFragment p : getPackages()) {
 				if (javaDestination == null) {
-					fModifications.move(packages[i].getResource(), new MoveArguments(getResourceDestination(), updateReferences));
+					fModifications.move(p.getResource(), new MoveArguments(getResourceDestination(), updateReferences));
 				} else {
-					fModifications.move(packages[i], new MoveArguments(javaDestination, updateReferences));
+					fModifications.move(p, new MoveArguments(javaDestination, updateReferences));
 				}
 			}
 			return fModifications;
@@ -2212,7 +2198,7 @@
 	private static abstract class MoveSubCuElementsPolicy extends SubCuElementReorgPolicy implements IMovePolicy {
 
 		private CreateTargetExecutionLog fCreateTargetExecutionLog= new CreateTargetExecutionLog();
-		
+
 		private boolean fUpdateReferences= true;
 
 		MoveSubCuElementsPolicy(IJavaElement[] javaElements) {
@@ -2241,8 +2227,8 @@
 					targetRewriter= new CompilationUnitRewrite(destinationCu, destinationCuNode);
 				}
 				IJavaElement[] javaElements= getJavaElements();
-				for (int i= 0; i < javaElements.length; i++) {
-					copyToDestination(javaElements[i], targetRewriter, sourceRewriter.getRoot(), targetRewriter.getRoot());
+				for (IJavaElement javaElement : javaElements) {
+					copyToDestination(javaElement, targetRewriter, sourceRewriter.getRoot(), targetRewriter.getRoot());
 				}
 				ASTNodeDeleteUtil.markAsDeleted(javaElements, sourceRewriter, null);
 				Change targetCuChange= createCompilationUnitChange(targetRewriter);
@@ -2370,11 +2356,12 @@
 		@Override
 		protected RefactoringStatus verifyDestination(IJavaElement destination, int location) throws JavaModelException {
 			IJavaElement[] elements= getJavaElements();
-			for (int i= 0; i < elements.length; i++) {
+			for (IJavaElement element : elements) {
 				IJavaElement parent= destination.getParent();
 				while (parent != null) {
-					if (parent.equals(elements[i]))
+					if (parent.equals(element)) {
 						return RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.ReorgPolicyFactory_cannot);
+					}
 					parent= parent.getParent();
 				}
 			}
@@ -2404,11 +2391,10 @@
 
 				int destinationIndex= sortedChildren.indexOf(destination);
 
-				for (int i= 0; i < elements.length; i++) {
-					int elementIndex= sortedChildren.indexOf(elements[i]);
+				for (IJavaElement element : elements) {
+					int elementIndex= sortedChildren.indexOf(element);
 					if (location == IReorgDestination.LOCATION_AFTER && elementIndex == destinationIndex + 1)
 						return RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.ReorgPolicyFactory_cannot);
-
 					if (location == IReorgDestination.LOCATION_BEFORE && elementIndex == destinationIndex - 1)
 						return RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.ReorgPolicyFactory_cannot);
 				}
@@ -2420,43 +2406,42 @@
 		private ArrayList<IJavaElement> getSortedChildren(IType parent) throws JavaModelException {
 			IJavaElement[] children= parent.getChildren();
 			ArrayList<IJavaElement> sortedChildren= new ArrayList<>(Arrays.asList(children));
-			Collections.sort(sortedChildren, new Comparator<IJavaElement>() {
-				@Override
-				public int compare(IJavaElement e1, IJavaElement e2) {
-					if (!(e1 instanceof ISourceReference))
-						return 0;
-					if (!(e2 instanceof ISourceReference))
+			Collections.sort(sortedChildren, (e1, e2) -> {
+				if (!(e1 instanceof ISourceReference))
+					return 0;
+				if (!(e2 instanceof ISourceReference))
+					return 0;
+
+				try {
+					ISourceRange sr1= ((ISourceReference)e1).getSourceRange();
+					ISourceRange sr2= ((ISourceReference)e2).getSourceRange();
+					if (sr1 == null || sr2 == null)
 						return 0;
 
-					try {
-						ISourceRange sr1= ((ISourceReference)e1).getSourceRange();
-						ISourceRange sr2= ((ISourceReference)e2).getSourceRange();
-						if (sr1 == null || sr2 == null)
-							return 0;
+					return sr1.getOffset() - sr2.getOffset();
 
-						return sr1.getOffset() - sr2.getOffset();
-
-					} catch (JavaModelException e) {
-						return 0;
-					}
+				} catch (JavaModelException e) {
+					return 0;
 				}
 			});
 			return sortedChildren;
 		}
 
 		private boolean contains(IJavaElement[] elements, IJavaElement element) {
-			for (int i= 0; i < elements.length; i++) {
-				if (element.equals(elements[i]))
+			for (IJavaElement e : elements) {
+				if (element.equals(e)) {
 					return true;
+				}
 			}
 
 			return false;
 		}
 
 		private boolean allInSameParent(IJavaElement[] elements, IJavaElement parent) {
-			for (int i= 0; i < elements.length; i++) {
-				if (!elements[i].getParent().equals(parent))
+			for (IJavaElement element : elements) {
+				if (!element.getParent().equals(parent)) {
 					return false;
+				}
 			}
 
 			return true;
@@ -2913,8 +2898,7 @@
 		public boolean canEnable() throws JavaModelException {
 			if (!super.canEnable() || fPackageFragmentRoots.length == 0)
 				return false;
-			for (int i= 0; i < fPackageFragmentRoots.length; i++) {
-				IPackageFragmentRoot root= fPackageFragmentRoots[i];
+			for (IPackageFragmentRoot root : fPackageFragmentRoots) {
 				if (!(ReorgUtils.isSourceFolder(root) || root.isArchive() && !root.isExternal()))
 					return false;
 			}
@@ -2995,11 +2979,12 @@
 
 		private IProject getSingleProject() {
 			IProject result= null;
-			for (int index= 0; index < fPackageFragmentRoots.length; index++) {
-				if (result == null)
-					result= fPackageFragmentRoots[index].getJavaProject().getProject();
-				else if (!result.equals(fPackageFragmentRoots[index].getJavaProject().getProject()))
+			for (IPackageFragmentRoot root : fPackageFragmentRoots) {
+				if (result == null) {
+					result= root.getJavaProject().getProject();
+				} else if (!result.equals(root.getJavaProject().getProject())) {
 					return null;
+				}
 			}
 			return result;
 		}
@@ -3078,8 +3063,8 @@
 		}
 
 		private boolean isChildOfOrEqualToAnyFolder(IResource resource) {
-			for (int i= 0; i < fPackageFragmentRoots.length; i++) {
-				IResource fragmentRootResource= fPackageFragmentRoots[i].getResource();
+			for (IPackageFragmentRoot root : fPackageFragmentRoots) {
+				IResource fragmentRootResource= root.getResource();
 				if (fragmentRootResource.equals(resource) || ParentChecker.isDescendantOf(resource, fragmentRootResource))
 					return true;
 			}
@@ -3087,9 +3072,10 @@
 		}
 
 		protected boolean containsLinkedResources() {
-			for (int i= 0; i < fPackageFragmentRoots.length; i++) {
-				if (fPackageFragmentRoots[i].getResource().isLinked())
+			for (IPackageFragmentRoot root : fPackageFragmentRoots) {
+				if (root.getResource().isLinked()) {
 					return true;
+				}
 			}
 			return false;
 		}
@@ -3143,9 +3129,10 @@
 		public boolean canEnable() throws JavaModelException {
 			if (fPackageFragments.length == 0)
 				return false;
-			for (int i= 0; i < fPackageFragments.length; i++) {
-				if (JavaElementUtil.isDefaultPackage(fPackageFragments[i]) || fPackageFragments[i].isReadOnly())
+			for (IPackageFragment pack : fPackageFragments) {
+				if (JavaElementUtil.isDefaultPackage(pack) || pack.isReadOnly()) {
 					return false;
+				}
 			}
 			if (ReorgUtils.containsLinkedResources(fPackageFragments))
 				return false;
@@ -3232,11 +3219,12 @@
 
 		private IProject getSingleProject() {
 			IProject result= null;
-			for (int index= 0; index < fPackageFragments.length; index++) {
-				if (result == null)
-					result= fPackageFragments[index].getJavaProject().getProject();
-				else if (!result.equals(fPackageFragments[index].getJavaProject().getProject()))
+			for (IPackageFragment pack : fPackageFragments) {
+				if (result == null) {
+					result= pack.getJavaProject().getProject();
+				} else if (!result.equals(pack.getJavaProject().getProject())) {
 					return null;
+				}
 			}
 			return result;
 		}
@@ -3312,8 +3300,8 @@
 		}
 
 		private boolean isChildOfOrEqualToAnyFolder(IResource resource) {
-			for (int i= 0; i < fPackageFragments.length; i++) {
-				IFolder folder= (IFolder) fPackageFragments[i].getResource();
+			for (IPackageFragment pack : fPackageFragments) {
+				IFolder folder= (IFolder) pack.getResource();
 				if (folder.equals(resource) || ParentChecker.isDescendantOf(resource, folder))
 					return true;
 			}
@@ -3321,9 +3309,10 @@
 		}
 
 		protected boolean containsLinkedResources() {
-			for (int i= 0; i < fPackageFragments.length; i++) {
-				if (fPackageFragments[i].getResource().isLinked())
+			for (IPackageFragment pack : fPackageFragments) {
+				if (pack.getResource().isLinked()) {
 					return true;
+				}
 			}
 			return false;
 		}
@@ -3412,15 +3401,13 @@
 		@Override
 		public boolean canEnable() throws JavaModelException {
 			IResource[] resources= getResources();
-			for (int i= 0; i < resources.length; i++) {
-				IResource resource= resources[i];
+			for (IResource resource : resources) {
 				if (!resource.exists() || resource.isPhantom() || !resource.isAccessible())
 					return false;
 			}
 
 			IJavaElement[] javaElements= getJavaElements();
-			for (int i= 0; i < javaElements.length; i++) {
-				IJavaElement element= javaElements[i];
+			for (IJavaElement element : javaElements) {
 				if (!element.exists())
 					return false;
 			}
@@ -3436,11 +3423,10 @@
 		public RefactoringStatus checkFinalConditions(IProgressMonitor pm, CheckConditionsContext context, IReorgQueries reorgQueries) throws CoreException {
 			Assert.isNotNull(reorgQueries);
 			ResourceChangeChecker checker= context.getChecker(ResourceChangeChecker.class);
-			IFile[] allModifiedFiles= getAllModifiedFiles();
 			RefactoringModifications modifications= getModifications();
 			IResourceChangeDescriptionFactory deltaFactory= checker.getDeltaFactory();
-			for (int i= 0; i < allModifiedFiles.length; i++) {
-				deltaFactory.change(allModifiedFiles[i]);
+			for (IFile file : getAllModifiedFiles()) {
+				deltaFactory.change(file);
 			}
 			if (modifications != null) {
 				modifications.buildDelta(deltaFactory);
@@ -3681,9 +3667,9 @@
 			if (!super.canEnable() || fJavaElements.length == 0)
 				return false;
 
-			for (int i= 0; i < fJavaElements.length; i++) {
-				if (fJavaElements[i] instanceof IMember) {
-					IMember member= (IMember) fJavaElements[i];
+			for (IJavaElement javaElement : fJavaElements) {
+				if (javaElement instanceof IMember) {
+					IMember member= (IMember) javaElement;
 					// we can copy some binary members, but not all
 					if (member.isBinary() && member.getSourceRange() == null)
 						return false;
@@ -3701,13 +3687,10 @@
 		private void copyImportsToDestination(IImportContainer container, ASTRewrite rewrite, CompilationUnit sourceCuNode, CompilationUnit destinationCuNode) throws JavaModelException {
 			ListRewrite listRewrite= rewrite.getListRewrite(destinationCuNode, CompilationUnit.IMPORTS_PROPERTY);
 
-			IJavaElement[] importDeclarations= container.getChildren();
-			for (int i= 0; i < importDeclarations.length; i++) {
-				IImportDeclaration declaration= (IImportDeclaration) importDeclarations[i];
-
+			for (IJavaElement importDeclaration : container.getChildren()) {
+				IImportDeclaration declaration= (IImportDeclaration) importDeclaration;
 				ImportDeclaration sourceNode= ASTNodeSearchUtil.getImportDeclarationNode(declaration, sourceCuNode);
 				ImportDeclaration copiedNode= (ImportDeclaration) ASTNode.copySubtree(rewrite.getAST(), sourceNode);
-
 				if (getLocation() == IReorgDestination.LOCATION_BEFORE) {
 					listRewrite.insertFirst(copiedNode, null);
 				} else {
@@ -3955,11 +3938,12 @@
 
 		private IProject getSingleProject() {
 			IProject result= null;
-			for (int index= 0; index < fJavaElements.length; index++) {
-				if (result == null)
-					result= fJavaElements[index].getJavaProject().getProject();
-				else if (!result.equals(fJavaElements[index].getJavaProject().getProject()))
+			for (IJavaElement javaElement : fJavaElements) {
+				if (result == null) {
+					result= javaElement.getJavaProject().getProject();
+				} else if (!result.equals(javaElement.getJavaProject().getProject())) {
 					return null;
+				}
 			}
 			return result;
 		}
@@ -4137,9 +4121,10 @@
 	private static final String UNUSED_STRING= "unused"; //$NON-NLS-1$
 
 	private static boolean containsNull(Object[] objects) {
-		for (int i= 0; i < objects.length; i++) {
-			if (objects[i] == null)
+		for (Object object : objects) {
+			if (object == null) {
 				return true;
+			}
 		}
 		return false;
 	}
@@ -4296,9 +4281,9 @@
 	}
 
 	private static boolean hasAnonymousClassDeclarations(IJavaElement[] javaElements) throws JavaModelException {
-		for (int i= 0; i < javaElements.length; i++) {
-			if (javaElements[i] instanceof IType) {
-				IType type= (IType) javaElements[i];
+		for (IJavaElement javaElement : javaElements) {
+			if (javaElement instanceof IType) {
+				IType type= (IType) javaElement;
 				if (type.isAnonymous())
 					return true;
 			}
@@ -4307,27 +4292,31 @@
 	}
 
 	private static boolean hasElementsSmallerThanCuOrClassFile(IJavaElement[] javaElements) {
-		for (int i= 0; i < javaElements.length; i++) {
-			if (ReorgUtils.isInsideCompilationUnit(javaElements[i]))
+		for (IJavaElement javaElement : javaElements) {
+			if (ReorgUtils.isInsideCompilationUnit(javaElement)) {
 				return true;
-			if (ReorgUtils.isInsideClassFile(javaElements[i]))
+			}
+			if (ReorgUtils.isInsideClassFile(javaElement)) {
 				return true;
+			}
 		}
 		return false;
 	}
 
 	private static boolean hasOnlyImportDeclarations(IJavaElement[] javaElements) {
-		for (int i= 0; i < javaElements.length; i++) {
-			if (javaElements[i].getElementType() != IJavaElement.IMPORT_DECLARATION)
+		for (IJavaElement javaElement : javaElements) {
+			if (javaElement.getElementType() != IJavaElement.IMPORT_DECLARATION) {
 				return false;
+			}
 		}
 		return true;
 	}
 
 	private static boolean hasOnlyMembers(IJavaElement[] javaElements) {
-		for (int i= 0; i < javaElements.length; i++) {
-			if (!(javaElements[i] instanceof IMember))
+		for (IJavaElement javaElement : javaElements) {
+			if (!(javaElement instanceof IMember)) {
 				return false;
+			}
 		}
 		return true;
 	}
@@ -4408,9 +4397,7 @@
 	public static void storeCreateTargetExecutionLog(String project, Map<String, String> arguments, CreateTargetExecutionLog log) {
 		if (log != null) {
 			final StringBuilder buffer= new StringBuilder(64);
-			final Object[] selections= log.getSelectedElements();
-			for (int index= 0; index < selections.length; index++) {
-				final Object selection= selections[index];
+			for (Object selection : log.getSelectedElements()) {
 				if (selection != null) {
 					final Object created= log.getCreatedElement(selection);
 					if (created != null) {
@@ -4447,8 +4434,7 @@
 			set.addAll(Arrays.asList(log.getProcessedElements()));
 			set.addAll(Arrays.asList(log.getRenamedElements()));
 			final StringBuilder buffer= new StringBuilder(64);
-			for (final Iterator<Object> iterator= set.iterator(); iterator.hasNext();) {
-				final Object object= iterator.next();
+			for (Object object : set) {
 				if (storeLogElement(buffer, project, object)) {
 					buffer.append(DELIMITER_ELEMENT);
 					buffer.append(log.isProcessed(object));
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/ReorgUtils.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/ReorgUtils.java
index f5d6e19..74f4243 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/ReorgUtils.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/ReorgUtils.java
@@ -19,7 +19,6 @@
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
@@ -71,8 +70,7 @@
 	}
 
 	public static boolean isArchiveOrExternalMember(IJavaElement[] elements) {
-		for (int i= 0; i < elements.length; i++) {
-			IJavaElement element= elements[i];
+		for (IJavaElement element : elements) {
 			IPackageFragmentRoot root= (IPackageFragmentRoot)element.getAncestor(IJavaElement.PACKAGE_FRAGMENT_ROOT);
 			if (root != null && (root.isArchive() || root.isExternal()))
 				return true;
@@ -83,8 +81,8 @@
 	public static boolean containsOnlyProjects(List<?> elements){
 		if (elements.isEmpty())
 			return false;
-		for(Iterator<?> iter= elements.iterator(); iter.hasNext(); ) {
-			if (! isProject(iter.next()))
+		for (Object name : elements) {
+			if (! isProject(name))
 				return false;
 		}
 		return true;
@@ -96,7 +94,7 @@
 
 	/**
 	 * Checks whether the given list contains only working sets.
-	 * 
+	 *
 	 * @param elements the list with elements to check
 	 * @return <code>true</code> if the list contains only working sets, <code>false</code>
 	 *         otherwise
@@ -105,8 +103,8 @@
 	public static boolean containsOnlyWorkingSets (List<?> elements){
 		if (elements.isEmpty())
 			return false;
-		for (Iterator<?> iter= elements.iterator(); iter.hasNext();) {
-			if (!isWorkingSet(iter.next()))
+		for (Object name : elements) {
+			if (!isWorkingSet(name))
 				return false;
 		}
 		return true;
@@ -114,11 +112,11 @@
 
 	/**
 	 * Checks whether the given object is a working set.
-	 * 
+	 *
 	 * @param element the element to test
 	 * @return <code>true</code> if the element is a working set, <code>false</code> otherwise
 	 * @since 3.5
-	 * 
+	 *
 	 */
 
 	public static boolean isWorkingSet(Object element){
@@ -244,8 +242,7 @@
 
 	public static IResource[] getResources(List<?> elements) {
 		List<IResource> resources= new ArrayList<>(elements.size());
-		for (Iterator<?> iter= elements.iterator(); iter.hasNext();) {
-			Object element= iter.next();
+		for (Object element : elements) {
 			if (element instanceof IResource)
 				resources.add((IResource) element);
 		}
@@ -254,8 +251,7 @@
 
 	public static IJavaElement[] getJavaElements(List<?> elements) {
 		List<IJavaElement> resources= new ArrayList<>(elements.size());
-		for (Iterator<?> iter= elements.iterator(); iter.hasNext();) {
-			Object element= iter.next();
+		for (Object element : elements) {
 			if (element instanceof IJavaElement)
 				resources.add((IJavaElement) element);
 		}
@@ -264,15 +260,14 @@
 
 	/**
 	 * Returns the jar entry resources from the list of elements.
-	 * 
+	 *
 	 * @param elements the list of elements
 	 * @return the array of jar entry resources
 	 * @since 3.6
 	 */
 	public static IJarEntryResource[] getJarEntryResources(List<?> elements) {
 		List<IJarEntryResource> resources= new ArrayList<>(elements.size());
-		for (Iterator<?> iter= elements.iterator(); iter.hasNext();) {
-			Object element= iter.next();
+		for (Object element : elements) {
 			if (element instanceof IJarEntryResource)
 				resources.add((IJarEntryResource) element);
 		}
@@ -281,8 +276,7 @@
 
 	public static IWorkingSet[] getWorkingSets(List<?> elements) {
 		List<IWorkingSet> result= new ArrayList<>(1);
-		for (Iterator<?> iter= elements.iterator(); iter.hasNext();) {
-			Object element= iter.next();
+		for (Object element : elements) {
 			if (element instanceof IWorkingSet) {
 				result.add((IWorkingSet) element);
 			}
@@ -327,8 +321,7 @@
 
 	public static IType[] getMainTypes(IJavaElement[] javaElements) throws JavaModelException {
 		List<IJavaElement> result= new ArrayList<>();
-		for (int i= 0; i < javaElements.length; i++) {
-			IJavaElement element= javaElements[i];
+		for (IJavaElement element : javaElements) {
 			if (element instanceof IType && JavaElementUtil.isMainType((IType)element))
 				result.add(element);
 		}
@@ -348,9 +341,10 @@
 	//the result can be cast down to the requested type array
 	public static Set<IResource> getResourcesOfType(IResource[] resources, int typeMask){
 		Set<IResource> result= new HashSet<>(resources.length);
-		for (int i= 0; i < resources.length; i++) {
-			if (isOfType(resources[i], typeMask))
-				result.add(resources[i]);
+		for (IResource resource : resources) {
+			if (isOfType(resource, typeMask)) {
+				result.add(resource);
+			}
 		}
 		return result;
 	}
@@ -359,16 +353,16 @@
 	//type is _not_ a mask
 	public static List<?> getElementsOfType(IJavaElement[] javaElements, int type){
 		List<IJavaElement> result= new ArrayList<>(javaElements.length);
-		for (int i= 0; i < javaElements.length; i++) {
-			if (isOfType(javaElements[i], type))
-				result.add(javaElements[i]);
+		for (IJavaElement javaElement : javaElements) {
+			if (isOfType(javaElement, type)) {
+				result.add(javaElement);
+			}
 		}
 		return result;
 	}
 
 	public static boolean hasElementsNotOfType(IResource[] resources, int typeMask) {
-		for (int i= 0; i < resources.length; i++) {
-			IResource resource= resources[i];
+		for (IResource resource : resources) {
 			if (resource != null && ! isOfType(resource, typeMask))
 				return true;
 		}
@@ -377,8 +371,7 @@
 
 	//type is _not_ a mask
 	public static boolean hasElementsNotOfType(IJavaElement[] javaElements, int type) {
-		for (int i= 0; i < javaElements.length; i++) {
-			IJavaElement element= javaElements[i];
+		for (IJavaElement element : javaElements) {
 			if (element != null && ! isOfType(element, type))
 				return true;
 		}
@@ -387,8 +380,7 @@
 
 	//type is _not_ a mask
 	public static boolean hasElementsOfType(IJavaElement[] javaElements, int type) {
-		for (int i= 0; i < javaElements.length; i++) {
-			IJavaElement element= javaElements[i];
+		for (IJavaElement element : javaElements) {
 			if (element != null && isOfType(element, type))
 				return true;
 		}
@@ -396,16 +388,15 @@
 	}
 
 	public static boolean hasElementsOfType(IJavaElement[] javaElements, int[] types) {
-		for (int i= 0; i < types.length; i++) {
-			if (hasElementsOfType(javaElements, types[i])) return true;
+		for (int type : types) {
+			if (hasElementsOfType(javaElements, type)) return true;
 		}
 		return false;
 	}
 
 
 	public static boolean hasOnlyElementsOfType(IJavaElement[] javaElements, int[] types) {
-		for (int i= 0; i < javaElements.length; i++) {
-			IJavaElement element= javaElements[i];
+		for (IJavaElement element : javaElements) {
 			boolean found= false;
 			for (int j= 0; j < types.length && !found; j++) {
 				if (isOfType(element, types[j]))
@@ -419,8 +410,7 @@
 	}
 
 	public static boolean hasElementsOfType(IResource[] resources, int typeMask) {
-		for (int i= 0; i < resources.length; i++) {
-			IResource resource= resources[i];
+		for (IResource resource : resources) {
 			if (resource != null && isOfType(resource, typeMask))
 				return true;
 		}
@@ -458,24 +448,26 @@
 	}
 
 	public static IPackageFragmentRoot getCorrespondingPackageFragmentRoot(IJavaProject p) throws JavaModelException {
-		IPackageFragmentRoot[] roots= p.getPackageFragmentRoots();
-		for (int i= 0; i < roots.length; i++) {
-			if (isPackageFragmentRootCorrespondingToProject(roots[i]))
-				return roots[i];
+		for (IPackageFragmentRoot root : p.getPackageFragmentRoots()) {
+			if (isPackageFragmentRootCorrespondingToProject(root)) {
+				return root;
+			}
 		}
 		return null;
 	}
 
 	public static boolean containsLinkedResources(IResource[] resources){
-		for (int i= 0; i < resources.length; i++) {
-			if (resources[i] != null && resources[i].isLinked()) return true;
+		for (IResource resource : resources) {
+			if (resource != null && resource.isLinked()) {
+				return true;
+			}
 		}
 		return false;
 	}
 
 	public static boolean containsLinkedResources(IJavaElement[] javaElements){
-		for (int i= 0; i < javaElements.length; i++) {
-			IResource res= getResource(javaElements[i]);
+		for (IJavaElement javaElement : javaElements) {
+			IResource res= getResource(javaElement);
 			if (res != null && res.isLinked()) return true;
 		}
 		return false;
@@ -552,8 +544,7 @@
 
 	public static IResource[] getNotNulls(IResource[] resources) {
 		Set<IResource> result= new LinkedHashSet<>(resources.length);
-		for (int i= 0; i < resources.length; i++) {
-			IResource resource= resources[i];
+		for (IResource resource : resources) {
 			if (resource != null)
 				result.add(resource);
 		}
@@ -562,8 +553,7 @@
 
 	public static IResource[] getNotLinked(IResource[] resources) {
 		Collection<IResource> result= new LinkedHashSet<>(resources.length);
-		for (int i= 0; i < resources.length; i++) {
-			IResource resource= resources[i];
+		for (IResource resource : resources) {
 			if (resource != null && ! result.contains(resource) && ! resource.isLinked())
 				result.add(resource);
 		}
@@ -575,8 +565,7 @@
 	 */
 	public static Map<ICompilationUnit, List<IJavaElement>> groupByCompilationUnit(List<IJavaElement> javaElements){
 		Map<ICompilationUnit, List<IJavaElement>> result= new HashMap<>();
-		for (Iterator<IJavaElement> iter= javaElements.iterator(); iter.hasNext();) {
-			IJavaElement element= iter.next();
+		for (IJavaElement element : javaElements) {
 			ICompilationUnit cu= ReorgUtils.getCompilationUnit(element);
 			if (cu != null){
 				if (! result.containsKey(cu))
@@ -588,8 +577,7 @@
 	}
 
 	public static void splitIntoJavaElementsAndResources(Object[] elements, List<? super IJavaElement> javaElementResult, List<? super IResource> resourceResult) {
-		for (int i= 0; i < elements.length; i++) {
-			Object element= elements[i];
+		for (Object element : elements) {
 			if (element instanceof IJavaElement) {
 				javaElementResult.add((IJavaElement) element);
 			} else if (element instanceof IResource) {
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/SourceReferenceUtil.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/SourceReferenceUtil.java
index ed9b46c..8e218db 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/SourceReferenceUtil.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/SourceReferenceUtil.java
@@ -15,7 +15,6 @@
 
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Comparator;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
@@ -65,8 +64,7 @@
 	public static ISourceReference[] removeAllWithParentsSelected(ISourceReference[] elems){
 		Set<ISourceReference> set= new HashSet<>(Arrays.asList(elems));
 		List<ISourceReference> result= new ArrayList<>(elems.length);
-		for (int i= 0; i < elems.length; i++) {
-			ISourceReference elem= elems[i];
+		for (ISourceReference elem : elems) {
 			if (! (elem instanceof IJavaElement))
 				result.add(elem);
 			else{
@@ -78,14 +76,11 @@
 	}
 
 	public static ISourceReference[] sortByOffset(ISourceReference[] methods){
-		Arrays.sort(methods, new Comparator<ISourceReference>(){
-			@Override
-			public int compare(ISourceReference o1, ISourceReference o2){
-				try{
-					return o2.getSourceRange().getOffset() - o1.getSourceRange().getOffset();
-				} catch (JavaModelException e){
-					return o2.hashCode() - o1.hashCode();
-				}
+		Arrays.sort(methods, (o1, o2) -> {
+			try{
+				return o2.getSourceRange().getOffset() - o1.getSourceRange().getOffset();
+			} catch (JavaModelException e){
+				return o2.hashCode() - o1.hashCode();
 			}
 		});
 		return methods;
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/InlineMethodRefactoringContribution.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/InlineMethodRefactoringContribution.java
index d810691..a0669a3 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/InlineMethodRefactoringContribution.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/scripting/InlineMethodRefactoringContribution.java
@@ -111,7 +111,7 @@
 			throw new CoreException(new Status(IStatus.ERROR, JavaPlugin.getPluginId(), 0, RefactoringCoreMessages.InitializableRefactoring_inacceptable_arguments, null));
 		return InlineMethodRefactoring.create(unit, node, selectionStart, selectionLength);
 	}
-	
+
 	@Override
 	public RefactoringDescriptor createDescriptor() {
 		return RefactoringSignatureDescriptorFactory.createInlineMethodDescriptor();
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/sef/SelfEncapsulateFieldRefactoring.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/sef/SelfEncapsulateFieldRefactoring.java
index 64206e1..bc2f532 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/sef/SelfEncapsulateFieldRefactoring.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/sef/SelfEncapsulateFieldRefactoring.java
@@ -20,7 +20,6 @@
 
 import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
@@ -319,8 +318,7 @@
 			JavaPlugin.log(e);
 		}
 		status.merge(Checks.checkMethodName(name, field));
-		for (Iterator<IMethodBinding> iter= usedNames.iterator(); iter.hasNext(); ) {
-			IMethodBinding method= iter.next();
+		for (IMethodBinding method : usedNames) {
 			String selector= method.getName();
 			if (selector.equals(name)) {
 				if (!reUseExistingField) {
@@ -346,7 +344,7 @@
 	public RefactoringStatus checkFinalConditions(IProgressMonitor pm) throws CoreException {
 		pm.beginTask(NO_NAME, 12);
 		pm.setTaskName(RefactoringCoreMessages.SelfEncapsulateField_checking_preconditions);
-		
+
 		RefactoringStatus result= new RefactoringStatus();
 		fRewriter= ASTRewrite.create(fRoot.getAST());
 		fChangeManager.clear();
@@ -379,8 +377,7 @@
 		ICompilationUnit owner= fField.getCompilationUnit();
 		fImportRewrite= StubUtility.createImportRewrite(fRoot, true);
 
-		for (int i= 0; i < affectedCUs.length; i++) {
-			ICompilationUnit unit= affectedCUs[i];
+		for (ICompilationUnit unit : affectedCUs) {
 			sub.subTask(BasicElementLabels.getFileName(unit));
 			CompilationUnit root= null;
 			ASTRewrite rewriter= null;
@@ -432,8 +429,8 @@
 		change.setEdit(root);
 		root.addChild(importRewrite.rewriteImports(null));
 		root.addChild(rewriter.rewriteAST());
-		for (Iterator<TextEditGroup> iter= groups.iterator(); iter.hasNext();) {
-			change.addTextEditGroup(iter.next());
+		for (TextEditGroup textEditGroup : groups) {
+			change.addTextEditGroup(textEditGroup);
 		}
 	}
 
@@ -488,8 +485,8 @@
 		TextChange[] changes= fChangeManager.getAllChanges();
 		pm.beginTask(NO_NAME, changes.length);
 		pm.setTaskName(RefactoringCoreMessages.SelfEncapsulateField_create_changes);
-		for (int i= 0; i < changes.length; i++) {
-			result.add(changes[i]);
+		for (TextChange change : changes) {
+			result.add(change);
 			pm.worked(1);
 		}
 		pm.done();
@@ -504,13 +501,11 @@
 	//---- Helper methods -------------------------------------------------------------
 
 	private void checkCompileErrors(RefactoringStatus result, CompilationUnit root, ICompilationUnit element) {
-		IProblem[] messages= root.getProblems();
-		for (int i= 0; i < messages.length; i++) {
-			IProblem problem= messages[i];
+		for (IProblem problem : root.getProblems()) {
 			if (!isIgnorableProblem(problem)) {
 				result.addWarning(Messages.format(
-						RefactoringCoreMessages.SelfEncapsulateField_compiler_errors_update,
-						BasicElementLabels.getFileName(element)), JavaStatusContext.create(element));
+					RefactoringCoreMessages.SelfEncapsulateField_compiler_errors_update,
+					BasicElementLabels.getFileName(element)), JavaStatusContext.create(element));
 				return;
 			}
 		}
@@ -571,10 +566,8 @@
 		fUsedModifyNames= new ArrayList<>(0);
 		IVariableBinding binding= fFieldDeclaration.resolveBinding();
 		ITypeBinding type= binding.getType();
-		IMethodBinding[] methods= binding.getDeclaringClass().getDeclaredMethods();
-		for (int i= 0; i < methods.length; i++) {
-			IMethodBinding method= methods[i];
-			ITypeBinding[] parameters= methods[i].getParameterTypes();
+		for (IMethodBinding method : binding.getDeclaringClass().getDeclaredMethods()) {
+			ITypeBinding[] parameters = method.getParameterTypes();
 			if (parameters == null || parameters.length == 0) {
 				fUsedReadNames.add(method);
 			} else if (parameters.length == 1 && parameters[0] == type) {
@@ -590,8 +583,7 @@
 		int position= 0;
 		int numberOfMethods= 0;
 		List<BodyDeclaration> members= ASTNodes.getBodyDeclarations(decl.getParent());
-		for (Iterator<BodyDeclaration> iter= members.iterator(); iter.hasNext();) {
-			BodyDeclaration element= iter.next();
+		for (BodyDeclaration element : members) {
 			if (element.getNodeType() == ASTNode.METHOD_DECLARATION) {
 				if (fInsertionIndex == -1) {
 					break;
@@ -844,8 +836,7 @@
 	}
 
 	private static boolean checkName(String name, List<IMethodBinding> usedNames) {
-		for (Iterator<IMethodBinding> iter= usedNames.iterator(); iter.hasNext(); ) {
-			IMethodBinding method= iter.next();
+		for (IMethodBinding method : usedNames) {
 			String selector= method.getName();
 			if (selector.equals(name)) {
 				return true;
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ChangeSignatureProcessor.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ChangeSignatureProcessor.java
index a0f234b..501f33e 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ChangeSignatureProcessor.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ChangeSignatureProcessor.java
@@ -412,8 +412,9 @@
 				typeStati= TypeContextChecker.checkAndResolveMethodTypes(fMethod, getStubTypeContext(), getNotDeletedInfos(), fReturnTypeInfo);
 			else
 				typeStati= TypeContextChecker.checkMethodTypesSyntax(fMethod, getNotDeletedInfos(), fReturnTypeInfo);
-			for (int i= 0; i < typeStati.length; i++)
-				result.merge(typeStati[i]);
+			for (RefactoringStatus status : typeStati) {
+				result.merge(status);
+			}
 
 			result.merge(checkVarargs());
 		} catch (CoreException e) {
@@ -474,8 +475,7 @@
 	}
 
 	private boolean areParameterTypesSameAsInitial() {
-		for (Iterator<ParameterInfo> iter= fParameterInfos.iterator(); iter.hasNext();) {
-			ParameterInfo info= iter.next();
+		for (ParameterInfo info : fParameterInfos) {
 			if (! info.isAdded() && ! info.isDeleted() && info.isTypeNameChanged())
 				return false;
 		}
@@ -491,8 +491,7 @@
 	}
 
 	private boolean areExceptionsSameAsInitial() {
-		for (Iterator<ExceptionInfo> iter= fExceptionInfos.iterator(); iter.hasNext();) {
-			ExceptionInfo info= iter.next();
+		for (ExceptionInfo info : fExceptionInfos) {
 			if (! info.isOld())
 				return false;
 		}
@@ -568,16 +567,14 @@
 			return result;
 
 		if (fRippleMethods != null) {
-			for (int iRipple= 0; iRipple < fRippleMethods.length; iRipple++) {
-				IMethod rippleMethod= fRippleMethods[iRipple];
+			for (IMethod rippleMethod : fRippleMethods) {
 				if (! JdtFlags.isVarargs(rippleMethod))
 					continue;
 
 				// Vararg method can override method that takes an array as last argument
 				fOldVarargIndex= rippleMethod.getNumberOfParameters() - 1;
 				List<ParameterInfo> notDeletedInfos= getNotDeletedInfos();
-				for (int i= 0; i < notDeletedInfos.size(); i++) {
-					ParameterInfo info= notDeletedInfos.get(i);
+				for (ParameterInfo info : notDeletedInfos) {
 					if (fOldVarargIndex != -1 && info.getOldIndex() == fOldVarargIndex && ! info.isNewVarargs()) {
 						String rippleMethodType= rippleMethod.getDeclaringType().getFullyQualifiedName('.');
 						String message= Messages.format(RefactoringCoreMessages.ChangeSignatureRefactoring_ripple_cannot_convert_vararg, new Object[] { BasicElementLabels.getJavaElementName(info.getNewName()), BasicElementLabels.getJavaElementName(rippleMethodType)});
@@ -622,8 +619,7 @@
 			}
 		}
 
-		for (Iterator<ParameterInfo> iter= getNotDeletedInfos().iterator(); iter.hasNext();) {
-			ParameterInfo info= iter.next();
+		for (ParameterInfo info : getNotDeletedInfos()) {
 			if (info.isTypeNameChanged() && info.getNewTypeBinding() != null) {
 				HashSet<ITypeBinding> typeVariablesCollector= new HashSet<>();
 				collectTypeVariables(info.getNewTypeBinding(), typeVariablesCollector);
@@ -640,17 +636,17 @@
 	private void collectTypeVariables(ITypeBinding typeBinding, Set<ITypeBinding> typeVariablesCollector) {
 		if (typeBinding.isTypeVariable()) {
 			typeVariablesCollector.add(typeBinding);
-			ITypeBinding[] typeBounds= typeBinding.getTypeBounds();
-			for (int i= 0; i < typeBounds.length; i++)
-				collectTypeVariables(typeBounds[i], typeVariablesCollector);
+			for (ITypeBinding typeBound : typeBinding.getTypeBounds()) {
+				collectTypeVariables(typeBound, typeVariablesCollector);
+			}
 
 		} else if (typeBinding.isArray()) {
 			collectTypeVariables(typeBinding.getElementType(), typeVariablesCollector);
 
 		} else if (typeBinding.isParameterizedType()) {
-			ITypeBinding[] typeArguments= typeBinding.getTypeArguments();
-			for (int i= 0; i < typeArguments.length; i++)
-				collectTypeVariables(typeArguments[i], typeVariablesCollector);
+			for (ITypeBinding typeArgument : typeBinding.getTypeArguments()) {
+				collectTypeVariables(typeArgument, typeVariablesCollector);
+			}
 
 		} else if (typeBinding.isWildcardType()) {
 			ITypeBinding bound= typeBinding.getBound();
@@ -700,9 +696,10 @@
 		ASTNode[] selectedNodes= analyzer.getSelectedNodes();
 		if (selectedNodes.length == 0)
 			return false;
-		for (int i= 0; i < selectedNodes.length; i++) {
-			if (! (selectedNodes[i] instanceof Expression))
+		for (ASTNode selectedNode : selectedNodes) {
+			if (!(selectedNode instanceof Expression)) {
 				return false;
+			}
 		}
 		return true;
 	}
@@ -767,9 +764,8 @@
 				fBaseCuRewrite= new CompilationUnitRewrite(getCu());
 				fBaseCuRewrite.getASTRewrite().setTargetSourceRangeComputer(new TightSourceRangeComputer());
 			}
-			RefactoringStatus[] status= TypeContextChecker.checkMethodTypesSyntax(fMethod, getParameterInfos(), fReturnTypeInfo);
-			for (int i= 0; i < status.length; i++) {
-				result.merge(status[i]);
+			for (RefactoringStatus status : TypeContextChecker.checkMethodTypesSyntax(fMethod, getParameterInfos(), fReturnTypeInfo)) {
+				result.merge(status);
 			}
 			monitor.worked(1);
 			result.merge(createExceptionInfoList());
@@ -790,8 +786,7 @@
 				MethodDeclaration methodDeclaration= (MethodDeclaration) nameNode.getParent();
 				List<Type> exceptions= methodDeclaration.thrownExceptionTypes();
 				List<ExceptionInfo> result= new ArrayList<>(exceptions.size());
-				for (int i= 0; i < exceptions.size(); i++) {
-					Type type= exceptions.get(i);
+				for (Type type : exceptions) {
 					ITypeBinding typeBinding= type.resolveBinding();
 					if (typeBinding == null)
 						return RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.ChangeSignatureRefactoring_no_exception_binding);
@@ -950,8 +945,7 @@
 	private String getMethodThrows() {
 		final String throwsString= " throws "; //$NON-NLS-1$
 		StringBuilder buff= new StringBuilder(throwsString);
-		for (Iterator<ExceptionInfo> iter= fExceptionInfos.iterator(); iter.hasNext(); ) {
-			ExceptionInfo info= iter.next();
+		for (ExceptionInfo info : fExceptionInfos) {
 			if (! info.isDeleted()) {
 				buff.append(info.getElement().getElementName());
 				buff.append(", "); //$NON-NLS-1$
@@ -966,8 +960,7 @@
 	private String getOldMethodThrows() {
 		final String throwsString= " throws "; //$NON-NLS-1$
 		StringBuilder buff= new StringBuilder(throwsString);
-		for (Iterator<ExceptionInfo> iter= fExceptionInfos.iterator(); iter.hasNext(); ) {
-			ExceptionInfo info= iter.next();
+		for (ExceptionInfo info : fExceptionInfos) {
 			if (! info.isAdded()) {
 				buff.append(info.getElement().getElementName());
 				buff.append(", "); //$NON-NLS-1$
@@ -982,8 +975,7 @@
 	private void checkForDuplicateParameterNames(RefactoringStatus result){
 		Set<String> found= new HashSet<>();
 		Set<String> doubled= new HashSet<>();
-		for (Iterator<ParameterInfo> iter = getNotDeletedInfos().iterator(); iter.hasNext();) {
-			ParameterInfo info= iter.next();
+		for (ParameterInfo info : getNotDeletedInfos()) {
 			String newName= info.getNewName();
 			if (found.contains(newName) && !doubled.contains(newName)){
 				result.addFatalError(Messages.format(RefactoringCoreMessages.ChangeSignatureRefactoring_duplicate_name, BasicElementLabels.getJavaElementName(newName)));
@@ -1014,10 +1006,8 @@
 		TextChange change= fChangeManager.get(cu);
 		String newCuSource= change.getPreviewContent(new NullProgressMonitor());
 		CompilationUnit newCUNode= new RefactoringASTParser(IASTSharedValues.SHARED_AST_LEVEL).parse(newCuSource, cu, true, false, null);
-		IProblem[] problems= RefactoringAnalyzeUtil.getIntroducedCompileProblems(newCUNode, fBaseCuRewrite.getRoot());
 		RefactoringStatus result= new RefactoringStatus();
-		for (int i= 0; i < problems.length; i++) {
-			IProblem problem= problems[i];
+		for (IProblem problem : RefactoringAnalyzeUtil.getIntroducedCompileProblems(newCUNode, fBaseCuRewrite.getRoot())) {
 			if (shouldReport(problem, newCUNode))
 				result.addEntry(new RefactoringStatusEntry((problem.isError() ? RefactoringStatus.ERROR : RefactoringStatus.WARNING), problem.getMessage(), new JavaStringStatusContext(newCuSource, SourceRangeFactory.create(problem))));
 		}
@@ -1064,8 +1054,7 @@
 
 	private List<ParameterInfo> getAddedInfos(){
 		List<ParameterInfo> result= new ArrayList<>(1);
-		for (Iterator<ParameterInfo> iter= fParameterInfos.iterator(); iter.hasNext();) {
-			ParameterInfo info= iter.next();
+		for (ParameterInfo info : fParameterInfos) {
 			if (info.isAdded())
 				result.add(info);
 		}
@@ -1074,8 +1063,7 @@
 
 	private List<ParameterInfo> getDeletedInfos(){
 		List<ParameterInfo> result= new ArrayList<>(1);
-		for (Iterator<ParameterInfo> iter= fParameterInfos.iterator(); iter.hasNext();) {
-			ParameterInfo info= iter.next();
+		for (ParameterInfo info : fParameterInfos) {
 			if (info.isDeleted())
 				result.add(info);
 		}
@@ -1095,8 +1083,7 @@
 	}
 
 	private boolean areNamesSameAsInitial() {
-		for (Iterator<ParameterInfo> iter= fParameterInfos.iterator(); iter.hasNext();) {
-			ParameterInfo info= iter.next();
+		for (ParameterInfo info : fParameterInfos) {
 			if (info.isRenamed())
 				return false;
 		}
@@ -1136,13 +1123,12 @@
 	private RefactoringStatus checkParameterNamesInRippleMethods() throws JavaModelException {
 		RefactoringStatus result= new RefactoringStatus();
 		Set<String> newParameterNames= getNewParameterNamesList();
-		for (int i= 0; i < fRippleMethods.length; i++) {
-			String[] paramNames= fRippleMethods[i].getParameterNames();
-			for (int j= 0; j < paramNames.length; j++) {
-				if (newParameterNames.contains(paramNames[j])){
-					String[] args= new String[]{ JavaElementUtil.createMethodSignature(fRippleMethods[i]), BasicElementLabels.getJavaElementName(paramNames[j])};
+		for (IMethod rippleMethod : fRippleMethods) {
+			for (String paramName : rippleMethod.getParameterNames()) {
+				if (newParameterNames.contains(paramName)) {
+					String[] args= new String[]{JavaElementUtil.createMethodSignature(rippleMethod), BasicElementLabels.getJavaElementName(paramName)};
 					String msg= Messages.format(RefactoringCoreMessages.ChangeSignatureRefactoring_already_has, args);
-					RefactoringStatusContext context= JavaStatusContext.create(fRippleMethods[i].getCompilationUnit(), fRippleMethods[i].getNameRange());
+					RefactoringStatusContext context= JavaStatusContext.create(rippleMethod.getCompilationUnit(), rippleMethod.getNameRange());
 					result.addError(msg, context);
 				}
 			}
@@ -1159,8 +1145,7 @@
 
 	private Set<String> getNamesOfNotDeletedParameters() {
 		Set<String> result= new HashSet<>();
-		for (Iterator<ParameterInfo> iter= getNotDeletedInfos().iterator(); iter.hasNext();) {
-			ParameterInfo info= iter.next();
+		for (ParameterInfo info : getNotDeletedInfos()) {
 			result.add(info.getNewName());
 		}
 		return result;
@@ -1168,8 +1153,7 @@
 
 	private Set<String> getOriginalParameterNames() {
 		Set<String> result= new HashSet<>();
-		for (Iterator<ParameterInfo> iter= fParameterInfos.iterator(); iter.hasNext();) {
-			ParameterInfo info= iter.next();
+		for (ParameterInfo info : fParameterInfos) {
 			if (! info.isAdded())
 				result.add(info.getOldName());
 		}
@@ -1178,11 +1162,10 @@
 
 	private RefactoringStatus checkNativeMethods() throws JavaModelException{
 		RefactoringStatus result= new RefactoringStatus();
-		for (int i= 0; i < fRippleMethods.length; i++) {
-			if (JdtFlags.isNative(fRippleMethods[i])){
-				String message= Messages.format(RefactoringCoreMessages.ChangeSignatureRefactoring_native,
-					new String[]{JavaElementUtil.createMethodSignature(fRippleMethods[i]), BasicElementLabels.getJavaElementName(fRippleMethods[i].getDeclaringType().getFullyQualifiedName('.'))});
-				result.addError(message, JavaStatusContext.create(fRippleMethods[i]));
+		for (IMethod rippleMethod : fRippleMethods) {
+			if (JdtFlags.isNative(rippleMethod)) {
+				String message= Messages.format(RefactoringCoreMessages.ChangeSignatureRefactoring_native, new String[]{JavaElementUtil.createMethodSignature(rippleMethod), BasicElementLabels.getJavaElementName(rippleMethod.getDeclaringType().getFullyQualifiedName('.'))});
+				result.addError(message, JavaStatusContext.create(rippleMethod));
 			}
 		}
 		return result;
@@ -1209,11 +1192,9 @@
 
 	private ChangeMethodSignatureArguments getParticipantArguments() {
 		ArrayList<Parameter> parameterList= new ArrayList<>();
-		List<ParameterInfo> pis= getParameterInfos();
 		String[] originalParameterTypeSigs= fMethod.getParameterTypes();
 
-		for (Iterator<ParameterInfo> iter= pis.iterator(); iter.hasNext();) {
-			ParameterInfo pi= iter.next();
+		for (ParameterInfo pi : getParameterInfos()) {
 			if (!pi.isDeleted()) {
 				int oldIndex= pi.isAdded() ? -1 : pi.getOldIndex();
 				String newName= pi.getNewName();
@@ -1284,8 +1265,7 @@
 				JavaPlugin.log(exception);
 			}
 			int count= 1;
-			for (final Iterator<ParameterInfo> iterator= fParameterInfos.iterator(); iterator.hasNext();) {
-				final ParameterInfo info= iterator.next();
+			for (ParameterInfo info : fParameterInfos) {
 				final StringBuilder buffer= new StringBuilder(64);
 				if (info.isAdded())
 					buffer.append("{added}"); //$NON-NLS-1$
@@ -1317,8 +1297,7 @@
 				count++;
 			}
 			count= 1;
-			for (final Iterator<ExceptionInfo> iterator= fExceptionInfos.iterator(); iterator.hasNext();) {
-				final ExceptionInfo info= iterator.next();
+			for (ExceptionInfo info : fExceptionInfos) {
 				arguments.put(JavaRefactoringDescriptorUtil.ATTRIBUTE_ELEMENT + count, JavaRefactoringDescriptorUtil.elementToHandle(project,info.getElement()));
 				arguments.put(ATTRIBUTE_KIND + count, Integer.valueOf(info.getKind()).toString());
 				count++;
@@ -1359,8 +1338,7 @@
 		List<String> deleted= new ArrayList<>();
 		List<String> added= new ArrayList<>();
 		List<String> changed= new ArrayList<>();
-		for (final Iterator<ParameterInfo> iterator= fParameterInfos.iterator(); iterator.hasNext();) {
-			final ParameterInfo info= iterator.next();
+		for (ParameterInfo info : fParameterInfos) {
 			if (info.isDeleted())
 				deleted.add(Messages.format(RefactoringCoreMessages.ChangeSignatureRefactoring_deleted_parameter_pattern, new String[] { BasicElementLabels.getJavaElementName(info.getOldTypeName()), BasicElementLabels.getJavaElementName(info.getOldName())}));
 			else if (info.isAdded())
@@ -1377,8 +1355,7 @@
 		added.clear();
 		deleted.clear();
 		changed.clear();
-		for (final Iterator<ExceptionInfo> iterator= fExceptionInfos.iterator(); iterator.hasNext();) {
-			final ExceptionInfo info= iterator.next();
+		for (ExceptionInfo info : fExceptionInfos) {
 			if (info.isAdded())
 				added.add(info.getElement().getElementName());
 			else if (info.isDeleted())
@@ -1406,10 +1383,10 @@
 		}else{
 			pm.worked(1);
 		}
-		for (int i= 0; i < fOccurrences.length; i++) {
+		for (SearchResultGroup occurrence : fOccurrences) {
 			if (pm.isCanceled())
 				throw new OperationCanceledException();
-			SearchResultGroup group= fOccurrences[i];
+			SearchResultGroup group= occurrence;
 			ICompilationUnit cu= group.getCompilationUnit();
 			if (cu == null)
 				continue;
@@ -1420,27 +1397,23 @@
 				cuRewrite= new CompilationUnitRewrite(cu);
 				cuRewrite.getASTRewrite().setTargetSourceRangeComputer(new TightSourceRangeComputer());
 			}
-			ASTNode[] nodes= ASTNodeSearchUtil.findNodes(group.getSearchResults(), cuRewrite.getRoot());
-
 			//IntroduceParameterObjectRefactoring needs to update declarations first:
 			List<OccurrenceUpdate<? extends ASTNode>> deferredUpdates= new ArrayList<>();
-			for (int j= 0; j < nodes.length; j++) {
-				OccurrenceUpdate<? extends ASTNode> update= createOccurrenceUpdate(nodes[j], cuRewrite, result);
+			for (ASTNode node : ASTNodeSearchUtil.findNodes(group.getSearchResults(), cuRewrite.getRoot())) {
+				OccurrenceUpdate<? extends ASTNode> update= createOccurrenceUpdate(node, cuRewrite, result);
 				if (update instanceof DeclarationUpdate) {
 					update.updateNode();
 				} else {
 					deferredUpdates.add(update);
 				}
 			}
-			for (Iterator<OccurrenceUpdate<? extends ASTNode>> iter= deferredUpdates.iterator(); iter.hasNext();) {
-				iter.next().updateNode();
+			for (OccurrenceUpdate<? extends ASTNode> occurrenceUpdate : deferredUpdates) {
+				occurrenceUpdate.updateNode();
 			}
 
 			if (isNoArgConstructor && namedSubclassMapping.containsKey(cu)){
 				//only non-anonymous subclasses may have noArgConstructors to modify - see bug 43444
-				Set<IType> subtypes= namedSubclassMapping.get(cu);
-				for (Iterator<IType> iter= subtypes.iterator(); iter.hasNext();) {
-					IType subtype= iter.next();
+				for (IType subtype : namedSubclassMapping.get(cu)) {
 					AbstractTypeDeclaration subtypeNode= ASTNodeSearchUtil.getAbstractTypeDeclarationNode(subtype, cuRewrite.getRoot());
 					if (subtypeNode != null)
 						modifyImplicitCallsToNoArgConstructor(subtypeNode, cuRewrite);
@@ -1456,10 +1429,8 @@
 	}
 
 	private Map<ICompilationUnit, Set<IType>> createNamedSubclassMapping(IProgressMonitor pm) throws JavaModelException{
-		IType[] subclasses= getCachedTypeHierarchy(new SubProgressMonitor(pm, 1)).getSubclasses(fMethod.getDeclaringType());
 		Map<ICompilationUnit, Set<IType>> result= new HashMap<>();
-		for (int i= 0; i < subclasses.length; i++) {
-			IType subclass= subclasses[i];
+		for (IType subclass : getCachedTypeHierarchy(new SubProgressMonitor(pm, 1)).getSubclasses(fMethod.getDeclaringType())) {
 			if (subclass.isAnonymous())
 				continue;
 			ICompilationUnit cu= subclass.getCompilationUnit();
@@ -1475,10 +1446,11 @@
 		if (constructors.length == 0){
 			addNewConstructorToSubclass(subclass, cuRewrite);
 		} else {
-			for (int i= 0; i < constructors.length; i++) {
-				if (! containsImplicitCallToSuperConstructor(constructors[i]))
+			for (MethodDeclaration constructor : constructors) {
+				if (!containsImplicitCallToSuperConstructor(constructor)) {
 					continue;
-				addExplicitSuperConstructorCall(constructors[i], cuRewrite);
+				}
+				addExplicitSuperConstructorCall(constructor, cuRewrite);
 			}
 		}
 	}
@@ -1737,13 +1709,12 @@
 			List<N> nodes= listRewrite.getRewrittenList();
 			Iterator<N> rewriteIter= nodes.iterator();
 			List<N> original= listRewrite.getOriginalList();
-			for (Iterator<N> iter= original.iterator(); iter.hasNext();) {
-				newOldMap.put(rewriteIter.next(),iter.next());
+			for (N n : original) {
+				newOldMap.put(rewriteIter.next(),n);
 			}
 			List<N> newNodes= new ArrayList<>();
 			// register removed nodes, and collect nodes in new sequence:
-			for (int i= 0; i < fParameterInfos.size(); i++) {
-				ParameterInfo info= fParameterInfos.get(i);
+			for (ParameterInfo info : fParameterInfos) {
 				int oldIndex= info.getOldIndex();
 
 				if (info.isDeleted()) {
@@ -1809,8 +1780,7 @@
 		protected abstract ListRewrite getParamgumentsRewrite();
 
 		protected final void changeParamguments() {
-			for (Iterator<ParameterInfo> iter= getParameterInfos().iterator(); iter.hasNext();) {
-				ParameterInfo info= iter.next();
+			for (ParameterInfo info : getParameterInfos()) {
 				if (info.isAdded() || info.isDeleted())
 					continue;
 
@@ -1876,7 +1846,7 @@
 			} else {
 				ImportRewriteContext importRewriteContext= new ContextSensitiveImportRewriteContext(fCuRewrite.getRoot(), getStartPosition(), getImportRewrite());
 				newTypeNode= getImportRewrite().addImport(newTypeBinding, fCuRewrite.getAST(), importRewriteContext);
-				getImportRemover().registerAddedImports(newTypeNode);				
+				getImportRemover().registerAddedImports(newTypeNode);
 			}
 			return newTypeNode;
 		}
@@ -2055,10 +2025,9 @@
 			TextEditGroup description= fCuRewrite.createGroupDescription(msg);
 			TempOccurrenceAnalyzer analyzer= new TempOccurrenceAnalyzer(param, false);
 			analyzer.perform();
-			SimpleName[] paramOccurrences= analyzer.getReferenceAndDeclarationNodes(); // @param tags are updated in changeJavaDocTags()
-			for (int j= 0; j < paramOccurrences.length; j++) {
-				SimpleName occurence= paramOccurrences[j];
-				getASTRewrite().set(occurence, SimpleName.IDENTIFIER_PROPERTY, info.getNewName(), description);
+			// @param tags are updated in changeJavaDocTags()
+			for (SimpleName occurrence : analyzer.getReferenceAndDeclarationNodes()) {
+				getASTRewrite().set(occurrence, SimpleName.IDENTIFIER_PROPERTY, info.getNewName(), description);
 			}
 		}
 
@@ -2082,8 +2051,7 @@
 
 		//TODO: already reported as compilation error -> don't report there?
 		protected void checkIfDeletedParametersUsed() {
-			for (Iterator<ParameterInfo> iter= getDeletedInfos().iterator(); iter.hasNext();) {
-				ParameterInfo info= iter.next();
+			for (ParameterInfo info : getDeletedInfos()) {
 				VariableDeclaration paramDecl= getParameter(info.getOldIndex());
 				TempOccurrenceAnalyzer analyzer= new TempOccurrenceAnalyzer(paramDecl, false);
 				analyzer.perform();
@@ -2093,8 +2061,8 @@
 					RefactoringStatusContext context= JavaStatusContext.create(fCuRewrite.getCu(), paramRefs[0]);
 					String typeName= getFullTypeName();
 					Object[] keys= new String[] { BasicElementLabels.getJavaElementName(paramDecl.getName().getIdentifier()),
-							BasicElementLabels.getJavaElementName(getMethod().getElementName()),
-							BasicElementLabels.getJavaElementName(typeName) };
+						BasicElementLabels.getJavaElementName(getMethod().getElementName()),
+						BasicElementLabels.getJavaElementName(typeName) };
 					String msg= Messages.format(RefactoringCoreMessages.ChangeSignatureRefactoring_parameter_used, keys);
 					fResult.addError(msg, context);
 				}
@@ -2294,8 +2262,7 @@
 		}
 
 		private void changeExceptions() {
-			for (Iterator<ExceptionInfo> iter= fExceptionInfos.iterator(); iter.hasNext();) {
-				ExceptionInfo info= iter.next();
+			for (ExceptionInfo info : fExceptionInfos) {
 				if (info.isOld())
 					continue;
 				if (info.isDeleted())
@@ -2307,8 +2274,7 @@
 
 		private void removeExceptionFromNodeList(ExceptionInfo toRemove, List<Type> list) {
 			ITypeBinding typeToRemove= toRemove.getTypeBinding();
-			for (Iterator<Type> iter= list.iterator(); iter.hasNext();) {
-				Type currentExcType= iter.next();
+			for (Type currentExcType : list) {
 				ITypeBinding currentType= currentExcType.resolveBinding();
 				/* Maybe remove all subclasses of typeToRemove too.
 				 * Problem:
@@ -2366,8 +2332,7 @@
 
 			if (! isReturnTypeSameAsInitial()) {
 				if (PrimitiveType.VOID.toString().equals(fReturnTypeInfo.getNewTypeName())) {
-					for (int i = 0; i < tags.size(); i++) {
-						TagElement tag= tags.get(i);
+					for (TagElement tag : tags) {
 						if (TagElement.TAG_RETURN.equals(tag.getTagName())) {
 							getASTRewrite().remove(tag, fDescription);
 							registerImportRemoveNode(tag);
@@ -2384,8 +2349,7 @@
 			if (! (areNamesSameAsInitial() && isOrderSameAsInitial())) {
 				ArrayList<TagElement> paramTags= new ArrayList<>(); // <TagElement>, only not deleted tags with simpleName
 				// delete & rename:
-				for (Iterator<TagElement> iter = tags.iterator(); iter.hasNext(); ) {
-					TagElement tag = iter.next();
+				for (TagElement tag : tags) {
 					String tagName= tag.getTagName();
 					List<? extends ASTNode> fragments= tag.fragments();
 					if (! (TagElement.TAG_PARAM.equals(tagName) && fragments.size() > 0 && fragments.get(0) instanceof SimpleName))
@@ -2393,8 +2357,7 @@
 					SimpleName simpleName= (SimpleName) fragments.get(0);
 					String identifier= simpleName.getIdentifier();
 					boolean removed= false;
-					for (int i= 0; i < fParameterInfos.size(); i++) {
-						ParameterInfo info= fParameterInfos.get(i);
+					for (ParameterInfo info : fParameterInfos) {
 						if (identifier.equals(info.getOldName())) {
 							if (info.isDeleted()) {
 								getASTRewrite().remove(tag, fDescription);
@@ -2418,8 +2381,7 @@
 					TagElement previousTag= findTagElementToInsertAfter(tags, TagElement.TAG_PARAM);
 					boolean first= true; // workaround for bug 92111: preserve first tag if possible
 					// reshuffle:
-					for (Iterator<ParameterInfo> infoIter= fParameterInfos.iterator(); infoIter.hasNext();) {
-						ParameterInfo info= infoIter.next();
+					for (ParameterInfo info : fParameterInfos) {
 						String oldName= info.getOldName();
 						String newName= info.getNewName();
 						if (info.isAdded()) {
@@ -2449,8 +2411,7 @@
 						}
 					}
 					// params with bad names:
-					for (Iterator<TagElement> iter= paramTags.iterator(); iter.hasNext();) {
-						TagElement tag= iter.next();
+					for (TagElement tag : paramTags) {
 						TagElement movedTag= (TagElement) getASTRewrite().createMoveTarget(tag);
 						getASTRewrite().remove(tag, fDescription);
 						insertTag(movedTag, previousTag, tagsRewrite);
@@ -2463,16 +2424,14 @@
 			if (! areExceptionsSameAsInitial()) {
 				// collect exceptionTags and remove deleted:
 				ArrayList<TagElement> exceptionTags= new ArrayList<>(); // <TagElement>, only not deleted tags with name
-				for (int i= 0; i < tags.size(); i++) {
-					TagElement tag= tags.get(i);
+				for (TagElement tag : tags) {
 					if (! TagElement.TAG_THROWS.equals(tag.getTagName()) && ! TagElement.TAG_EXCEPTION.equals(tag.getTagName()))
 						continue;
 					if (! (tag.fragments().size() > 0 && tag.fragments().get(0) instanceof Name))
 						continue;
 					boolean tagDeleted= false;
 					Name name= (Name) tag.fragments().get(0);
-					for (int j= 0; j < fExceptionInfos.size(); j++) {
-						ExceptionInfo info= fExceptionInfos.get(j);
+					for (ExceptionInfo info : fExceptionInfos) {
 						if (info.isDeleted()) {
 							boolean remove= false;
 							final ITypeBinding nameBinding= name.resolveTypeBinding();
@@ -2497,8 +2456,7 @@
 				// reshuffle:
 				tags= tagsRewrite.getRewrittenList();
 				TagElement previousTag= findTagElementToInsertAfter(tags, TagElement.TAG_THROWS);
-				for (Iterator<ExceptionInfo> infoIter= fExceptionInfos.iterator(); infoIter.hasNext();) {
-					ExceptionInfo info= infoIter.next();
+				for (ExceptionInfo info : fExceptionInfos) {
 					if (info.isAdded()) {
 						if (!isTopOfRipple)
 							continue;
@@ -2529,8 +2487,7 @@
 					}
 				}
 				// exceptions with bad names:
-				for (Iterator<TagElement> iter= exceptionTags.iterator(); iter.hasNext();) {
-					TagElement tag= iter.next();
+				for (TagElement tag : exceptionTags) {
 					TagElement movedTag= (TagElement) getASTRewrite().createMoveTarget(tag);
 					getASTRewrite().remove(tag, fDescription);
 					insertTag(movedTag, previousTag, tagsRewrite);
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ChangeTypeRefactoring.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ChangeTypeRefactoring.java
index 205f533..243eda5 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ChangeTypeRefactoring.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ChangeTypeRefactoring.java
@@ -400,8 +400,7 @@
 	private boolean checkOverriddenBinaryMethods() {
 		if (fMethodBinding != null){
 			Set<ITypeBinding> declaringSupertypes= getDeclaringSuperTypes(fMethodBinding);
-			for (Iterator<ITypeBinding> iter= declaringSupertypes.iterator(); iter.hasNext();) {
-				ITypeBinding superType= iter.next();
+			for (ITypeBinding superType : declaringSupertypes) {
 				IMethodBinding overriddenMethod= findMethod(fMethodBinding, superType);
 				Assert.isNotNull(overriddenMethod);//because we asked for declaring types
 				IMethod iMethod= (IMethod) overriddenMethod.getJavaElement();
@@ -422,10 +421,8 @@
 
 	// copied from FullConstraintCreator
 	private static Set<ITypeBinding> getDeclaringSuperTypes(IMethodBinding methodBinding) {
-		ITypeBinding[] allSuperTypes= Bindings.getAllSuperTypes(methodBinding.getDeclaringClass());
 		Set<ITypeBinding> result= new HashSet<>();
-		for (int i= 0; i < allSuperTypes.length; i++) {
-			ITypeBinding type= allSuperTypes[i];
+		for (ITypeBinding type : Bindings.getAllSuperTypes(methodBinding.getDeclaringClass())) {
 			if (findMethod(methodBinding, type) != null)
 				result.add(type);
 		}
@@ -516,8 +513,7 @@
 			arguments.put(JavaRefactoringDescriptorUtil.ATTRIBUTE_SELECTION, Integer.valueOf(fSelectionStart).toString() + " " + Integer.valueOf(fSelectionLength).toString()); //$NON-NLS-1$
 			arguments.put(ATTRIBUTE_TYPE, fSelectedType.getQualifiedName());
 			final DynamicValidationRefactoringChange result= new DynamicValidationRefactoringChange(descriptor, RefactoringCoreMessages.ChangeTypeRefactoring_allChanges);
-			for (Iterator<ICompilationUnit>it= relevantVarsByUnit.keySet().iterator(); it.hasNext();) {
-				ICompilationUnit icu= it.next();
+			for (ICompilationUnit icu : relevantVarsByUnit.keySet()) {
 				Set<ConstraintVariable> cVars= relevantVarsByUnit.get(icu);
 				CompilationUnitChange cuChange= new CompilationUnitChange(getName(), icu);
 				addAllChangesFor(icu, cVars, cuChange);
@@ -563,8 +559,7 @@
         // use custom SourceRangeComputer to avoid losing comments
 		unitRewriter.setTargetSourceRangeComputer(new SourceRangeComputer());
 
-		for (Iterator<ConstraintVariable> it=vars.iterator(); it.hasNext(); ){
-			ConstraintVariable cv = it.next();
+		for (ConstraintVariable cv : vars) {
 			ASTNode decl= findDeclaration(unit, cv);
 			if ((decl instanceof SimpleName || decl instanceof QualifiedName) && cv instanceof ExpressionVariable) {
 				ASTNode gp= decl.getParent().getParent();
@@ -636,8 +631,7 @@
 
 
 	private void groupChangesByCompilationUnit(Map<ICompilationUnit, Set<ConstraintVariable>> relevantVarsByUnit) {
-		for (Iterator<ConstraintVariable> it= fRelevantVars.iterator(); it.hasNext();) {
-			ConstraintVariable cv= it.next();
+		for (ConstraintVariable cv : fRelevantVars) {
 			if (!(cv instanceof ExpressionVariable) && !(cv instanceof ReturnTypeVariable)){
 				continue;
 			}
@@ -665,8 +659,7 @@
 		}
 
 		if (cv instanceof ExpressionVariable){
-			for (Iterator<ITypeConstraint> iter= fAllConstraints.iterator(); iter.hasNext();) {
-				ITypeConstraint constraint= iter.next();
+			for (ITypeConstraint constraint : fAllConstraints) {
 				if (constraint.isSimpleTypeConstraint()){
 					SimpleTypeConstraint stc= (SimpleTypeConstraint)constraint;
 					if (stc.isDefinesConstraint() && stc.getLeft().equals(cv)){
@@ -984,9 +977,8 @@
 
 		IProgressMonitor subMonitor= new SubProgressMonitor(pm, 50);
 		subMonitor.beginTask(RefactoringCoreMessages.ChangeTypeRefactoring_analyzingMessage, allConstraints.size());
-		for (Iterator<ITypeConstraint> it= allConstraints.iterator(); it.hasNext(); ) {
+		for (ITypeConstraint tc : allConstraints) {
 			subMonitor.worked(1);
-			ITypeConstraint tc= it.next();
 			if (! (tc instanceof SimpleTypeConstraint))
 				continue;
 			SimpleTypeConstraint stc= (SimpleTypeConstraint) tc;
@@ -1049,9 +1041,8 @@
 			pm.worked(10);
 
 			ConstraintVariable first= workList.remove(0);
-			for (Iterator<ITypeConstraint> iter= allConstraints.iterator(); iter.hasNext();) {
+			for (ITypeConstraint typeConstraint : allConstraints) {
 				pm.worked(1);
-				ITypeConstraint typeConstraint= iter.next();
 				if (! typeConstraint.isSimpleTypeConstraint())
 					continue;
 				SimpleTypeConstraint stc= (SimpleTypeConstraint)typeConstraint;
@@ -1100,8 +1091,7 @@
 
 		if (DEBUG) printCollection("type constraints: ", fAllConstraints); //$NON-NLS-1$
 		Collection<ITypeConstraint> result= new ArrayList<>();
-		for (Iterator<ITypeConstraint> it= fAllConstraints.iterator(); it.hasNext(); ) {
-			ITypeConstraint tc= it.next();
+		for (ITypeConstraint tc : fAllConstraints) {
 			if (tc.isSimpleTypeConstraint()) {
 				SimpleTypeConstraint stc= (SimpleTypeConstraint) tc;
 				if (stc.isDefinesConstraint() || stc.isEqualsConstraint())
@@ -1114,9 +1104,7 @@
 					result.add(tc);
 			} else {
 				CompositeOrTypeConstraint cotc= (CompositeOrTypeConstraint) tc;
-				ITypeConstraint[] components= cotc.getConstraints();
-				for (int i= 0; i < components.length; i++) {
-					ITypeConstraint component= components[i];
+				for (ITypeConstraint component : cotc.getConstraints()) {
 					SimpleTypeConstraint simpleComponent= (SimpleTypeConstraint) component;
 					if (relevantConstraintVars.contains(simpleComponent.getLeft()))
 						result.add(tc);
@@ -1183,8 +1171,7 @@
 
 		pm.beginTask(RefactoringCoreMessages.ChangeTypeRefactoring_analyzingMessage, allTypes.size());
 
-		for (Iterator<ITypeBinding> it= allTypes.iterator(); it.hasNext(); ) {
-			ITypeBinding type= it.next();
+		for (ITypeBinding type : allTypes) {
 			if (isValid(type, relevantVars, relevantConstraints, new SubProgressMonitor(pm, 1))) {
 				result.add(type);
 			}
@@ -1221,8 +1208,7 @@
 			}
 		}
 
-		for (Iterator<ITypeConstraint> it= constraints.iterator(); it.hasNext(); ) {
-			ITypeConstraint tc= it.next();
+		for (ITypeConstraint tc : constraints) {
 			if (tc instanceof SimpleTypeConstraint) {
 				if (!(isValidSimpleConstraint(type,  relevantVars, (SimpleTypeConstraint) tc)))
 					return false;
@@ -1250,10 +1236,9 @@
 	private boolean isValidOrConstraint(ITypeBinding type,
 										Collection<ConstraintVariable> relevantVars,
 										CompositeOrTypeConstraint cotc){
-		ITypeConstraint[] components= cotc.getConstraints();
-		for (int i= 0; i < components.length; i++) {
-			if (components[i] instanceof SimpleTypeConstraint) {
-				SimpleTypeConstraint sc= (SimpleTypeConstraint) components[i];
+		for (ITypeConstraint component : cotc.getConstraints()) {
+			if (component instanceof SimpleTypeConstraint) {
+				SimpleTypeConstraint sc= (SimpleTypeConstraint) component;
 				if (relevantVars.contains(sc.getLeft())) { // upper bound
 					if (isSubTypeOf(type, findType(sc.getRight())))
 						return true;
@@ -1280,8 +1265,8 @@
 	private Collection<ITypeConstraint> getConstraints(ICompilationUnit[] referringCus, IProgressMonitor pm) {
 		pm.beginTask(RefactoringCoreMessages.ChangeTypeRefactoring_analyzingMessage, referringCus.length);
 		Collection<ITypeConstraint> result= new ArrayList<>();
-		for (int i= 0; i < referringCus.length; i++) {
-			result.addAll(getConstraints(referringCus[i]));
+		for (ICompilationUnit referringCu : referringCus) {
+			result.addAll(getConstraints(referringCu));
 			pm.worked(1);
 			if (pm.isCanceled())
 				throw new OperationCanceledException();
@@ -1299,9 +1284,7 @@
 		// only generate type constraints for relevant MethodDeclaration subtrees
 		if (fMethodBinding != null && fCuToSearchResultGroup.containsKey(unit)){
 			SearchResultGroup group= fCuToSearchResultGroup.get(unit);
-			ASTNode[] nodes= ASTNodeSearchUtil.getAstNodes(group.getSearchResults(), cu);
-			for (int i=0; i < nodes.length; i++){
-				ASTNode node = nodes[i];
+			for (ASTNode node : ASTNodeSearchUtil.getAstNodes(group.getSearchResults(), cu)) {
 				if (fMethodBinding != null){
 					// find MethodDeclaration above it in the tree
 					ASTNode n= node;
@@ -1380,8 +1363,7 @@
 	 */
 	public Collection<String> getValidTypeNames() {
 		Collection<String> typeNames= new ArrayList<>();
-		for (Iterator<ITypeBinding> it= fValidTypes.iterator(); it.hasNext();) {
-			ITypeBinding type= it.next();
+		for (ITypeBinding type : fValidTypes) {
 			typeNames.add(type.getQualifiedName());
 		}
 
@@ -1486,8 +1468,8 @@
 		}
 		if (DEBUG) {
 			System.out.println("Determining affected CUs:"); //$NON-NLS-1$
-			for (int i= 0; i < fAffectedUnits.length; i++) {
-				System.out.println("  affected CU: " + fAffectedUnits[i].getElementName()); //$NON-NLS-1$
+			for (ICompilationUnit affectedUnit : fAffectedUnits) {
+				System.out.println("  affected CU: " + affectedUnit.getElementName()); //$NON-NLS-1$
 			}
 		}
 		pm.done();
@@ -1516,8 +1498,8 @@
 	 */
 	void printCollection(String title, Collection<?> l) {
 		System.out.println(l.size() + " " + title); //$NON-NLS-1$
-		for (Iterator<?> it= l.iterator(); it.hasNext();) {
-			System.out.println("  " + it.next()); //$NON-NLS-1$
+		for (Object name : l) {
+			System.out.println("  " + name); //$NON-NLS-1$
 		}
 	}
 
@@ -1528,8 +1510,7 @@
 	 */
 	private ICompilationUnit[] getCus(SearchResultGroup[] groups) {
 		List<ICompilationUnit> result= new ArrayList<>(groups.length);
-		for (int i= 0; i < groups.length; i++) {
-			SearchResultGroup group= groups[i];
+		for (SearchResultGroup group : groups) {
 			ICompilationUnit cu= group.getCompilationUnit();
 			if (cu != null) {
 				result.add(cu);
@@ -1551,9 +1532,8 @@
 		if (type.getSuperclass() != null){
 			result.addAll(getAllSuperTypes(type.getSuperclass()));
 		}
-		ITypeBinding[] interfaces= type.getInterfaces();
-		for (int i=0; i < interfaces.length; i++){
-			result.addAll(getAllSuperTypes(interfaces[i]));
+		for (ITypeBinding intf : type.getInterfaces()) {
+			result.addAll(getAllSuperTypes(intf));
 		}
 		if ((type != fObject) && !contains(result, fObject)){
 			result.add(fObject);
@@ -1563,8 +1543,7 @@
 
     private ITypeBinding findSuperTypeByName(ITypeBinding type, String superTypeName){
     	Set<ITypeBinding> superTypes= getAllSuperTypes(type);
-    	for (Iterator<ITypeBinding> it= superTypes.iterator(); it.hasNext(); ){
-    		ITypeBinding sup= it.next();
+    	for (ITypeBinding sup : superTypes) {
     		if (sup.getQualifiedName().equals(superTypeName)){
     			return sup;
     		}
@@ -1583,8 +1562,7 @@
 	}
 
 	private static boolean contains(Collection<ITypeBinding> c, ITypeBinding binding){
-		for (Iterator<ITypeBinding> it=c.iterator(); it.hasNext(); ){
-			ITypeBinding b = it.next();
+		for (ITypeBinding b : c) {
 			if (Bindings.equals(b, binding)) return true;
 		}
 		return false;
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ExtractClassRefactoring.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ExtractClassRefactoring.java
index a844e18..a5f794a 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ExtractClassRefactoring.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ExtractClassRefactoring.java
@@ -17,7 +17,6 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
@@ -91,7 +90,6 @@
 import org.eclipse.jdt.internal.corext.codemanipulation.GetterSetterUtil;
 import org.eclipse.jdt.internal.corext.dom.ASTNodes;
 import org.eclipse.jdt.internal.corext.dom.Bindings;
-import org.eclipse.jdt.internal.corext.dom.TypeBindingVisitor;
 import org.eclipse.jdt.internal.corext.refactoring.Checks;
 import org.eclipse.jdt.internal.corext.refactoring.JDTRefactoringDescriptorComment;
 import org.eclipse.jdt.internal.corext.refactoring.ParameterInfo;
@@ -166,9 +164,7 @@
 
 		private void validateFieldNames(RefactoringStatus status, String parameterName, IType type) {
 			if (type.getField(parameterName).exists()) {
-				Field[] fields= fDescriptor.getFields();
-				for (int i= 0; i < fields.length; i++) {
-					Field field= fields[i];
+				for (Field field : fDescriptor.getFields()) {
 					if (parameterName.equals(field.getFieldName())){
 						if (!field.isCreateField())
 							status.addError(Messages.format(RefactoringCoreMessages.ExtractClassRefactoring_error_field_already_exists, BasicElementLabels.getJavaElementName(parameterName)));
@@ -179,10 +175,8 @@
 
 		public RefactoringStatus validateFields() {
 			RefactoringStatus status= new RefactoringStatus();
-			Field[] fields= fDescriptor.getFields();
 			Set<String> names= new HashSet<>();
-			for (int i= 0; i < fields.length; i++) {
-				Field field= fields[i];
+			for (Field field : fDescriptor.getFields()) {
 				if (field.isCreateField()) {
 					if (names.contains(field.getNewFieldName())) {
 						status.addError(Messages.format(RefactoringCoreMessages.ExtractClassRefactoring_error_duplicate_field_name, BasicElementLabels.getJavaElementName(field.getNewFieldName())));
@@ -346,8 +340,7 @@
 		result.merge(fVerification.validateAll());
 		try {
 			pm.beginTask(RefactoringCoreMessages.ExtractClassRefactoring_progress_final_conditions, 95);
-			for (Iterator<FieldInfo> iter= fVariables.values().iterator(); iter.hasNext();) {
-				FieldInfo fi= iter.next();
+			for (FieldInfo fi : fVariables.values()) {
 				boolean createField= isCreateField(fi);
 				if (createField) {
 					IField field= fi.ifield;
@@ -416,10 +409,8 @@
 		if (fDescriptor.isCreateTopLevel())
 			comment.addSetting(Messages.format(RefactoringCoreMessages.ExtractClassRefactoring_comment_package, BasicElementLabels.getJavaElementName(fDescriptor.getPackage())));
 
-		Field[] fields= fDescriptor.getFields();
 		ArrayList<String> strings= new ArrayList<>();
-		for (int i= 0; i < fields.length; i++) {
-			Field field= fields[i];
+		for (Field field : fDescriptor.getFields()) {
 			if (field.isCreateField()) {
 				strings.add(Messages.format(RefactoringCoreMessages.ExtractClassRefactoring_comment_field_renamed, new Object[] { BasicElementLabels.getJavaElementName(field.getFieldName()), BasicElementLabels.getJavaElementName(field.getNewFieldName()) }));
 			}
@@ -442,8 +433,7 @@
 			FieldDeclaration parent= (FieldDeclaration) fieldInfo.declaration.getParent();
 			List<IExtendedModifier> modifiers= parent.modifiers();
 			ListRewrite listRewrite= cuRewrite.getASTRewrite().getListRewrite(field, FieldDeclaration.MODIFIERS2_PROPERTY);
-			for (Iterator<IExtendedModifier> iterator= modifiers.iterator(); iterator.hasNext();) {
-				IExtendedModifier mod= iterator.next();
+			for (IExtendedModifier mod : modifiers) {
 				//Temporarily disabled until initialization of final fields is handled correctly
 //				if (mod.isModifier()) {
 //					Modifier modifier= (Modifier) mod;
@@ -456,8 +446,7 @@
 			}
 			if (fieldInfo.initializer != null && fieldInfo.hasFieldReference()) {
 				List<VariableDeclarationFragment> fragments= field.fragments();
-				for (Iterator<VariableDeclarationFragment> iterator= fragments.iterator(); iterator.hasNext();) {
-					VariableDeclarationFragment vdf= iterator.next();
+				for (VariableDeclarationFragment vdf : fragments) {
 					vdf.setInitializer((Expression) moveNode(cuRewrite, fieldInfo.initializer));
 				}
 			}
@@ -516,8 +505,7 @@
 		pof.setCreateGetter(fDescriptor.isCreateGetterSetter());
 		pof.setCreateSetter(fDescriptor.isCreateGetterSetter());
 		List<ParameterInfo> variables= new ArrayList<>();
-		for (Iterator<FieldInfo> iterator= fVariables.values().iterator(); iterator.hasNext();) {
-			FieldInfo info= iterator.next();
+		for (FieldInfo info : fVariables.values()) {
 			boolean createField= isCreateField(info);
 			info.pi.setCreateField(createField);
 			if (createField) {
@@ -531,9 +519,7 @@
 	}
 
 	private Field getField(String name) {
-		Field[] fields= fDescriptor.getFields();
-		for (int i= 0; i < fields.length; i++) {
-			Field field= fields[i];
+		for (Field field : fDescriptor.getFields()) {
 			if (field.getFieldName().equals(name))
 				return field;
 		}
@@ -549,8 +535,7 @@
 			if (pm.isCanceled())
 				throw new OperationCanceledException();
 			List<IField> validIFields= new ArrayList<>();
-			for (Iterator<FieldInfo> iterator= fVariables.values().iterator(); iterator.hasNext();) {
-				FieldInfo info= iterator.next();
+			for (FieldInfo info : fVariables.values()) {
 				if (isCreateField(info))
 					validIFields.add(info.ifield);
 			}
@@ -563,8 +548,7 @@
 			SubProgressMonitor spm= new SubProgressMonitor(pm, 90);
 			spm.beginTask(RefactoringCoreMessages.ExtractClassRefactoring_progress_updating_references, results.length * 10);
 			try {
-				for (int i= 0; i < results.length; i++) {
-					SearchResultGroup group= results[i];
+				for (SearchResultGroup group : results) {
 					ICompilationUnit unit= group.getCompilationUnit();
 
 					CompilationUnitRewrite cuRewrite;
@@ -599,9 +583,7 @@
 		RefactoringStatus status= new RefactoringStatus();
 		String parameterName= fDescriptor.getFieldName();
 
-		SearchMatch[] searchResults= group.getSearchResults();
-		for (int j= 0; j < searchResults.length; j++) {
-			SearchMatch searchMatch= searchResults[j];
+		for (SearchMatch searchMatch : group.getSearchResults()) {
 			ASTNode node= NodeFinder.perform(cuRewrite.getRoot(), searchMatch.getOffset(), searchMatch.getLength());
 			ASTNode parent= node.getParent();
 			boolean isDeclaration= parent instanceof VariableDeclaration && ((VariableDeclaration)parent).getInitializer() != node;
@@ -738,8 +720,7 @@
 		TextEditGroup removeFieldGroup= fBaseCURewrite.createGroupDescription(RefactoringCoreMessages.ExtractClassRefactoring_group_remove_field);
 		FieldDeclaration lastField= null;
 		initializeDeclaration(typeNode);
-		for (Iterator<FieldInfo> iter= fVariables.values().iterator(); iter.hasNext();) {
-			FieldInfo pi= iter.next();
+		for (FieldInfo pi : fVariables.values()) {
 			if (isCreateField(pi)) {
 				VariableDeclarationFragment vdf= pi.declaration;
 				FieldDeclaration parent= (FieldDeclaration) vdf.getParent();
@@ -793,12 +774,9 @@
 	}
 
 	private void initializeDeclaration(TypeDeclaration node) {
-		FieldDeclaration[] fields= node.getFields();
-		for (int i= 0; i < fields.length; i++) {
-			FieldDeclaration fieldDeclaration= fields[i];
-			List<VariableDeclarationFragment> fragments= fieldDeclaration.fragments();
-			for (Iterator<VariableDeclarationFragment> iterator= fragments.iterator(); iterator.hasNext();) {
-				VariableDeclarationFragment vdf= iterator.next();
+		for (FieldDeclaration fieldDeclaration : node.getFields()) {
+			for (Object element : fieldDeclaration.fragments()) {
+				VariableDeclarationFragment vdf=(VariableDeclarationFragment) element;
 				FieldInfo fieldInfo= getFieldInfo(vdf.getName().getIdentifier());
 				if (fieldInfo != null) {
 					Assert.isNotNull(vdf);
@@ -819,8 +797,7 @@
 		ClassInstanceCreation creation= ast.newClassInstanceCreation();
 		creation.setType(pof.createType(fDescriptor.isCreateTopLevel(), fBaseCURewrite, typeNode.getStartPosition()));
 		ListRewrite listRewrite= fBaseCURewrite.getASTRewrite().getListRewrite(creation, ClassInstanceCreation.ARGUMENTS_PROPERTY);
-		for (Iterator<FieldInfo> iter= fVariables.values().iterator(); iter.hasNext();) {
-			FieldInfo fi= iter.next();
+		for (FieldInfo fi : fVariables.values()) {
 			if (isCreateField(fi)) {
 				Expression expression= fi.initializer;
 				if (expression != null && !fi.hasFieldReference()) {
@@ -863,12 +840,9 @@
 	}
 
 	private void importNodeTypes(ASTNode node, final CompilationUnitRewrite cuRewrite) {
-		ASTResolving.visitAllBindings(node, new TypeBindingVisitor() {
-			@Override
-			public boolean visit(ITypeBinding nodeBinding) {
-				ParameterObjectFactory.importBinding(nodeBinding, cuRewrite, null, TypeLocation.OTHER);
-				return false;
-			}
+		ASTResolving.visitAllBindings(node, nodeBinding -> {
+			ParameterObjectFactory.importBinding(nodeBinding, cuRewrite, null, TypeLocation.OTHER);
+			return false;
 		});
 	}
 
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ExtractInterfaceConstraintsSolver.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ExtractInterfaceConstraintsSolver.java
index 6006bee..dd6e648 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ExtractInterfaceConstraintsSolver.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ExtractInterfaceConstraintsSolver.java
@@ -51,10 +51,10 @@
 		final TType type= variable.getType();
 		if (variable instanceof ImmutableTypeVariable2 || !type.getErasure().equals(fModel.getSubType().getErasure()))
 			return SuperTypeSet.createTypeSet(type);
-		final TType[] types= type.getInterfaces();
-		for (int index= 0; index < types.length; index++) {
-			if (types[index].getName().startsWith(fName) && types[index].getErasure().equals(fModel.getSuperType().getErasure()))
-				return SuperTypeSet.createTypeSet(type, types[index]);
+		for (TType t : type.getInterfaces()) {
+			if (t.getName().startsWith(fName) && t.getErasure().equals(fModel.getSuperType().getErasure())) {
+				return SuperTypeSet.createTypeSet(type, t);
+			}
 		}
 		return SuperTypeSet.createTypeSet(type);
 	}
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ExtractInterfaceProcessor.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ExtractInterfaceProcessor.java
index 23d2cb5..53ea44b 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ExtractInterfaceProcessor.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ExtractInterfaceProcessor.java
@@ -17,7 +17,6 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
-import java.util.Comparator;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -117,7 +116,6 @@
 import org.eclipse.jdt.internal.corext.refactoring.structure.constraints.SuperTypeRefactoringProcessor;
 import org.eclipse.jdt.internal.corext.refactoring.typeconstraints.CompilationUnitRange;
 import org.eclipse.jdt.internal.corext.refactoring.typeconstraints.types.TType;
-import org.eclipse.jdt.internal.corext.refactoring.typeconstraints2.ISourceConstraintVariable;
 import org.eclipse.jdt.internal.corext.refactoring.typeconstraints2.ITypeConstraintVariable;
 import org.eclipse.jdt.internal.corext.refactoring.util.JavaStatusContext;
 import org.eclipse.jdt.internal.corext.refactoring.util.RefactoringASTParser;
@@ -496,15 +494,11 @@
 		Assert.isNotNull(sourceRewrite);
 		Assert.isNotNull(targetRewrite);
 		Assert.isNotNull(targetDeclaration);
-		Arrays.sort(fMembers, new Comparator<IMember>() {
-
-			@Override
-			public final int compare(final IMember first, final IMember second) {
-				try {
-					return first.getSourceRange().getOffset() - second.getSourceRange().getOffset();
-				} catch (JavaModelException exception) {
-					return first.hashCode() - second.hashCode();
-				}
+		Arrays.sort(fMembers, (first, second) -> {
+			try {
+				return first.getSourceRange().getOffset() - second.getSourceRange().getOffset();
+			} catch (JavaModelException exception) {
+				return first.hashCode() - second.hashCode();
 			}
 		});
 		fTypeBindings.clear();
@@ -596,9 +590,7 @@
 			boolean annotations= fAnnotations && !JavaModelUtil.isVersionLessThan(project.getOption(JavaCore.COMPILER_SOURCE, true), JavaCore.VERSION_1_6);
 			boolean inheritNullAnnotations= JavaCore.ENABLED.equals(project.getOption(JavaCore.COMPILER_INHERIT_NULL_ANNOTATIONS, true));
 			boolean javadoc= project.getOption(JavaCore.COMPILER_DOC_COMMENT_SUPPORT, true).equals(JavaCore.ENABLED);
-			IMember member= null;
-			for (int index= 0; index < fMembers.length; index++) {
-				member= fMembers[index];
+			for (IMember member : fMembers) {
 				if (member instanceof IMethod) {
 					MethodDeclaration declaration= ASTNodeSearchUtil.getMethodDeclarationNode((IMethod) member, sourceRewrite.getRoot());
 					if (inheritNullAnnotations) {
@@ -673,7 +665,7 @@
 					list.remove(annotation, null);
 			}
 		}
-		
+
 		for (SingleVariableDeclaration param : (List<SingleVariableDeclaration>) declaration.parameters()) {
 			ListRewrite modifierRewrite= rewrite.getListRewrite(param, SingleVariableDeclaration.MODIFIERS2_PROPERTY);
 			for (IExtendedModifier extended : (List<IExtendedModifier>) param.modifiers()) {
@@ -688,7 +680,7 @@
 				}
 			}
 		}
-		
+
 		ICompilationUnit unit= sourceRewrite.getCu();
 		ITextFileBuffer buffer= RefactoringFileBuffers.acquire(unit);
 		try {
@@ -733,8 +725,9 @@
 			Type type= ast.newSimpleType(ast.newSimpleName(fSuperName));
 			if (parameters.length > 0) {
 				final ParameterizedType parameterized= ast.newParameterizedType(type);
-				for (int index= 0; index < parameters.length; index++)
-					parameterized.typeArguments().add(ast.newSimpleType(ast.newSimpleName(parameters[index].getElementName())));
+				for (ITypeParameter parameter : parameters) {
+					parameterized.typeArguments().add(ast.newSimpleType(ast.newSimpleName(parameter.getElementName())));
+				}
 				type= parameterized;
 			}
 			final ASTRewrite rewriter= rewrite.getASTRewrite();
@@ -765,10 +758,10 @@
 	 */
 	public final IMember[] getExtractableMembers() throws JavaModelException {
 		final List<IJavaElement> list= new ArrayList<>();
-		IJavaElement[] children= fSubType.getChildren();
-		for (int index= 0; index < children.length; index++) {
-			if (children[index] instanceof IMember && isExtractableMember((IMember) children[index]))
-				list.add(children[index]);
+		for (IJavaElement child : fSubType.getChildren()) {
+			if (child instanceof IMember && isExtractableMember((IMember) child)) {
+				list.add(child);
+			}
 		}
 		final IMember[] members= new IMember[list.size()];
 		list.toArray(members);
@@ -785,9 +778,9 @@
 	protected final IField[] getExtractedFields(final ICompilationUnit unit) {
 		Assert.isNotNull(unit);
 		final List<IJavaElement> list= new ArrayList<>();
-		for (int index= 0; index < fMembers.length; index++) {
-			if (fMembers[index] instanceof IField) {
-				final IJavaElement element= JavaModelUtil.findInCompilationUnit(unit, fMembers[index]);
+		for (IMember member : fMembers) {
+			if (member instanceof IField) {
+				final IJavaElement element= JavaModelUtil.findInCompilationUnit(unit, member);
 				if (element instanceof IField)
 					list.add(element);
 			}
@@ -807,9 +800,9 @@
 	protected final IMethod[] getExtractedMethods(final ICompilationUnit unit) throws JavaModelException {
 		Assert.isNotNull(unit);
 		final List<IJavaElement> list= new ArrayList<>();
-		for (int index= 0; index < fMembers.length; index++) {
-			if (fMembers[index] instanceof IMethod) {
-				final IJavaElement element= JavaModelUtil.findInCompilationUnit(unit, fMembers[index]);
+		for (IMember member : fMembers) {
+			if (member instanceof IMethod) {
+				final IJavaElement element= JavaModelUtil.findInCompilationUnit(unit, member);
 				if (element instanceof IMethod && !JdtFlags.isDefaultMethod((IMethod) element))
 					list.add(element);
 			}
@@ -853,7 +846,7 @@
 
 	/**
 	 * Should override annotations be generated?
-	 * 
+	 *
 	 * @return <code>true</code> if annotations should be generated, <code>false</code> otherwise
 	 */
 	public final boolean isAnnotations() {
@@ -982,12 +975,8 @@
 					subMonitor.beginTask("", collection.size() * 10); //$NON-NLS-1$
 					subMonitor.setTaskName(RefactoringCoreMessages.ExtractInterfaceProcessor_creating);
 					TType estimate= null;
-					ISourceConstraintVariable variable= null;
-					ITypeConstraintVariable constraint= null;
-					for (final Iterator<ITypeConstraintVariable> iterator= collection.iterator(); iterator.hasNext();) {
-						variable= iterator.next();
-						if (variable instanceof ITypeConstraintVariable) {
-							constraint= (ITypeConstraintVariable) variable;
+					for (ITypeConstraintVariable constraint : collection) {
+						if (constraint != null) {
 							estimate= (TType) constraint.getData(SuperTypeConstraintsSolver.DATA_TYPE_ESTIMATE);
 							if (estimate != null) {
 								final CompilationUnitRange range= constraint.getRange();
@@ -1081,11 +1070,11 @@
 							if (subBinding != null) {
 								String name= null;
 								ITypeBinding superBinding= null;
-								final ITypeBinding[] superBindings= subBinding.getInterfaces();
-								for (int index= 0; index < superBindings.length; index++) {
-									name= superBindings[index].getName();
-									if (name.startsWith(fSuperName) && superBindings[index].getTypeArguments().length == subBinding.getTypeParameters().length)
-										superBinding= superBindings[index];
+								for (ITypeBinding binding : subBinding.getInterfaces()) {
+									name= binding.getName();
+									if (name.startsWith(fSuperName) && binding.getTypeArguments().length == subBinding.getTypeParameters().length) {
+										superBinding= binding;
+									}
 								}
 								if (superBinding != null) {
 									solveSuperTypeConstraints(unit, node, subType, subBinding, superBinding, new SubProgressMonitor(monitor, 80), status);
@@ -1133,7 +1122,7 @@
 
 	/**
 	 * Determines whether override annotations should be generated.
-	 * 
+	 *
 	 * @param annotations <code>true</code> to generate override annotations, <code>false</code> otherwise
 	 */
 	public final void setAnnotations(final boolean annotations) {
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ExtractSupertypeProcessor.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ExtractSupertypeProcessor.java
index 6c11c43..0e29246 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ExtractSupertypeProcessor.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ExtractSupertypeProcessor.java
@@ -255,12 +255,12 @@
 		if (name != null && !name.isEmpty()) {
 			final IType declaring= getDeclaringType();
 			try {
-				final ICompilationUnit[] units= declaring.getPackageFragment().getCompilationUnits(fOwner);
 				final String newName= JavaModelUtil.getRenamedCUName(declaring.getCompilationUnit(), name);
 				ICompilationUnit result= null;
-				for (int index= 0; index < units.length; index++) {
-					if (units[index].getElementName().equals(newName))
-						result= units[index];
+				for (ICompilationUnit unit : declaring.getPackageFragment().getCompilationUnits(fOwner)) {
+					if (unit.getElementName().equals(newName)) {
+						result= unit;
+					}
 				}
 				if (result != null) {
 					final IType type= result.getType(name);
@@ -440,21 +440,21 @@
 			if (binding != null && binding.isClass()) {
 				final IMethodBinding[] bindings= StubUtility2Core.getVisibleConstructors(binding, true, true);
 				int deprecationCount= 0;
-				for (int i= 0; i < bindings.length; i++) {
-					if (bindings[i].isDeprecated())
+				for (IMethodBinding b : bindings) {
+					if (b.isDeprecated()) {
 						deprecationCount++;
+					}
 				}
 				final ListRewrite rewrite= targetRewrite.getASTRewrite().getListRewrite(targetDeclaration, TypeDeclaration.BODY_DECLARATIONS_PROPERTY);
 				if (rewrite != null) {
 					boolean createDeprecated= deprecationCount == bindings.length;
-					for (int i= 0; i < bindings.length; i++) {
-						IMethodBinding curr= bindings[i];
+					for (IMethodBinding curr : bindings) {
 						if (!curr.isDeprecated() || createDeprecated) {
 							MethodDeclaration stub;
 							try {
 								ImportRewriteContext context= new ContextSensitiveImportRewriteContext(targetDeclaration, targetRewrite.getImportRewrite());
 								stub= StubUtility2.createConstructorStub(targetRewrite.getCu(), targetRewrite.getASTRewrite(), targetRewrite.getImportRewrite(), context, curr, binding.getName(),
-										Modifier.PUBLIC, false, false, fSettings);
+									Modifier.PUBLIC, false, false, fSettings);
 								if (stub != null)
 									rewrite.insertLast(stub, null);
 							} catch (CoreException exception) {
@@ -697,8 +697,9 @@
 				final ITypeParameter[] parameters= extractedType.getTypeParameters();
 				if (parameters.length > 0) {
 					final ParameterizedType parameterized= ast.newParameterizedType(type);
-					for (int index= 0; index < parameters.length; index++)
-						parameterized.typeArguments().add(ast.newSimpleType(ast.newSimpleName(parameters[index].getElementName())));
+					for (ITypeParameter parameter : parameters) {
+						parameterized.typeArguments().add(ast.newSimpleType(ast.newSimpleName(parameter.getElementName())));
+					}
 					type= parameterized;
 				}
 			}
@@ -775,8 +776,7 @@
 				subTypes.add(declaring);
 			final Map<ICompilationUnit, Collection<IType>> unitToTypes= new HashMap<>(subTypes.size());
 			final Set<ICompilationUnit> units= new HashSet<>(subTypes.size());
-			for (int index= 0; index < subTypes.size(); index++) {
-				final IType type= subTypes.get(index);
+			for (final IType type : subTypes) {
 				final ICompilationUnit unit= type.getCompilationUnit();
 				units.add(unit);
 				Collection<IType> collection= unitToTypes.get(unit);
@@ -836,8 +836,7 @@
 								try {
 									final Collection<IType> types= unitToTypes.get(unit);
 									if (types != null) {
-										for (final Iterator<IType> innerIterator= types.iterator(); innerIterator.hasNext();) {
-											final IType currentType= innerIterator.next();
+										for (IType currentType : types) {
 											final AbstractTypeDeclaration currentDeclaration= ASTNodeSearchUtil.getAbstractTypeDeclarationNode(currentType, node);
 											if (currentDeclaration != null)
 												createModifiedSubType(unit, node, extractedType, extractBindings[0], currentDeclaration, status);
@@ -1136,14 +1135,13 @@
 					}
 				}
 			}
-			for (Iterator<Entry<ICompilationUnit, CompilationUnitChange>> iterator= fLayerChanges.entrySet().iterator(); iterator.hasNext();) {
-				final Entry<ICompilationUnit, CompilationUnitChange> entry= iterator.next();
+			for (Entry<ICompilationUnit, CompilationUnitChange> entry : fLayerChanges.entrySet()) {
 				manager.manage(entry.getKey(), entry.getValue());
 			}
-			ICompilationUnit[] units= manager.getAllCompilationUnits();
-			for (int index= 0; index < units.length; index++) {
-				if (units[index].getPath().equals(extractedUnit.getPath()))
-					manager.remove(units[index]);
+			for (ICompilationUnit cu : manager.getAllCompilationUnits()) {
+				if (cu.getPath().equals(extractedUnit.getPath())) {
+					manager.remove(cu);
+				}
 			}
 		} finally {
 			fLayerChanges.clear();
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/HierarchyProcessor.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/HierarchyProcessor.java
index 9b9497e..e7ec447 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/HierarchyProcessor.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/HierarchyProcessor.java
@@ -151,21 +151,21 @@
 			final ITypeBinding binding= node.resolveTypeBinding();
 			if (binding != null && binding.isTypeVariable()) {
 				String name= null;
-				for (int index= 0; index < fMapping.length; index++) {
+				for (TypeVariableMaplet mapping : fMapping) {
 					name= binding.getName();
-					if (fMapping[index].getSourceName().equals(name) && node.getIdentifier().equals(name)) {
+					if (mapping.getSourceName().equals(name) && node.getIdentifier().equals(name)) {
 						final MethodDeclaration declaration= ASTNodes.getParent(node, MethodDeclaration.class);
 						if (declaration != null) {
 							final IMethodBinding method= declaration.resolveBinding();
 							if (method != null) {
-								final ITypeBinding[] bindings= method.getTypeParameters();
-								for (int offset= 0; offset < bindings.length; offset++) {
-									if (bindings[offset].isEqualTo(binding))
+								for (ITypeBinding b : method.getTypeParameters()) {
+									if (b.isEqualTo(binding)) {
 										return true;
+									}
 								}
 							}
 						}
-						fRewrite.set(node, SimpleName.IDENTIFIER_PROPERTY, fMapping[index].getTargetName(), null);
+						fRewrite.set(node, SimpleName.IDENTIFIER_PROPERTY, mapping.getTargetName(), null);
 					}
 				}
 			}
@@ -184,15 +184,15 @@
 	protected static RefactoringStatus checkProjectCompliance(CompilationUnitRewrite sourceRewriter, IType destination, IMember[] members) {
 		RefactoringStatus status= new RefactoringStatus();
 		if (!JavaModelUtil.is50OrHigher(destination.getJavaProject())) {
-			for (int index= 0; index < members.length; index++) {
+			for (IMember member : members) {
 				try {
-					BodyDeclaration decl= ASTNodeSearchUtil.getBodyDeclarationNode(members[index], sourceRewriter.getRoot());
+					BodyDeclaration decl= ASTNodeSearchUtil.getBodyDeclarationNode(member, sourceRewriter.getRoot());
 					if (decl != null) {
 						for (final Iterator<IExtendedModifier> iterator= decl.modifiers().iterator(); iterator.hasNext();) {
 							boolean reported= false;
 							final IExtendedModifier modifier= iterator.next();
 							if (!reported && modifier.isAnnotation()) {
-								status.merge(RefactoringStatus.createErrorStatus(Messages.format(RefactoringCoreMessages.PullUpRefactoring_incompatible_langauge_constructs, new String[] { JavaElementLabels.getTextLabel(members[index], JavaElementLabels.ALL_FULLY_QUALIFIED), JavaElementLabels.getTextLabel(destination, JavaElementLabels.ALL_DEFAULT)}), JavaStatusContext.create(members[index])));
+								status.merge(RefactoringStatus.createErrorStatus(Messages.format(RefactoringCoreMessages.PullUpRefactoring_incompatible_langauge_constructs, new String[]{JavaElementLabels.getTextLabel(member, JavaElementLabels.ALL_FULLY_QUALIFIED), JavaElementLabels.getTextLabel(destination, JavaElementLabels.ALL_DEFAULT)}), JavaStatusContext.create(member)));
 								reported= true;
 							}
 						}
@@ -200,11 +200,12 @@
 				} catch (JavaModelException exception) {
 					JavaPlugin.log(exception);
 				}
-				if (members[index] instanceof IMethod) {
-					final IMethod method= (IMethod) members[index];
+				if (member instanceof IMethod) {
+					final IMethod method= (IMethod) member;
 					try {
-						if (Flags.isVarargs(method.getFlags()))
-							status.merge(RefactoringStatus.createErrorStatus(Messages.format(RefactoringCoreMessages.PullUpRefactoring_incompatible_language_constructs1, new String[] { JavaElementLabels.getTextLabel(members[index], JavaElementLabels.ALL_FULLY_QUALIFIED), JavaElementLabels.getTextLabel(destination, JavaElementLabels.ALL_DEFAULT)}), JavaStatusContext.create(members[index])));
+						if (Flags.isVarargs(method.getFlags())) {
+							status.merge(RefactoringStatus.createErrorStatus(Messages.format(RefactoringCoreMessages.PullUpRefactoring_incompatible_language_constructs1, new String[]{JavaElementLabels.getTextLabel(member, JavaElementLabels.ALL_FULLY_QUALIFIED), JavaElementLabels.getTextLabel(destination, JavaElementLabels.ALL_DEFAULT)}), JavaStatusContext.create(member)));
+						}
 					} catch (JavaModelException exception) {
 						JavaPlugin.log(exception);
 					}
@@ -568,18 +569,13 @@
 		try {
 			monitor.beginTask(RefactoringCoreMessages.PullUpRefactoring_checking, 2);
 			final RefactoringStatus result= new RefactoringStatus();
-			final SearchResultGroup[] groups= ConstructorReferenceFinder.getConstructorReferences(type, fOwner, new SubProgressMonitor(monitor, 1), result);
 			final String message= Messages.format(RefactoringCoreMessages.HierarchyRefactoring_gets_instantiated, new Object[] { JavaElementLabels.getTextLabel(type, JavaElementLabels.ALL_FULLY_QUALIFIED)});
 
-			ICompilationUnit unit= null;
-			for (int index= 0; index < groups.length; index++) {
-				unit= groups[index].getCompilationUnit();
+			for (SearchResultGroup group : ConstructorReferenceFinder.getConstructorReferences(type, fOwner, new SubProgressMonitor(monitor, 1), result)) {
+				ICompilationUnit unit= group.getCompilationUnit();
 				if (unit != null) {
 					final CompilationUnit cuNode= RefactoringASTParser.parseWithASTProvider(unit, false, new SubProgressMonitor(monitor, 1));
-					final ASTNode[] references= ASTNodeSearchUtil.getAstNodes(groups[index].getSearchResults(), cuNode);
-					ASTNode node= null;
-					for (int offset= 0; offset < references.length; offset++) {
-						node= references[offset];
+					for (ASTNode node : ASTNodeSearchUtil.getAstNodes(group.getSearchResults(), cuNode)) {
 						if ((node instanceof ClassInstanceCreation) || ConstructorReferenceFinder.isImplicitConstructorReferenceNodeInClassCreations(node)) {
 							final RefactoringStatusContext context= JavaStatusContext.create(unit, node);
 							result.addError(message, context);
@@ -615,9 +611,7 @@
 
 	protected RefactoringStatus checkIfMembersExist() {
 		final RefactoringStatus result= new RefactoringStatus();
-		IMember member= null;
-		for (int index= 0; index < fMembersToMove.length; index++) {
-			member= fMembersToMove[index];
+		for (IMember member : fMembersToMove) {
 			if (member == null || !member.exists())
 				result.addFatalError(RefactoringCoreMessages.HierarchyRefactoring_does_not_exist);
 		}
@@ -672,9 +666,10 @@
 			final IType[] types= ReferenceFinderUtil.getTypesReferencedIn(fMembersToMove, fOwner, monitor);
 			final List<IType> result= new ArrayList<>(types.length);
 			final List<IMember> members= Arrays.asList(fMembersToMove);
-			for (int index= 0; index < types.length; index++) {
-				if (!members.contains(types[index]) && !types[index].equals(getDeclaringType()))
-					result.add(types[index]);
+			for (IType type : types) {
+				if (!members.contains(type) && !type.equals(getDeclaringType())) {
+					result.add(type);
+				}
 			}
 			fCachedReferencedTypes= new IType[result.size()];
 			result.toArray(fCachedReferencedTypes);
@@ -700,18 +695,17 @@
 		final ICompilationUnit unit= groups[0].getCompilationUnit();
 		if (!getDeclaringType().getCompilationUnit().equals(unit))
 			return true;
-		final SearchMatch[] matches= groups[0].getSearchResults();
-		for (int index= 0; index < matches.length; index++) {
-			if (!isMovedReference(matches[index]))
+		for (SearchMatch match : groups[0].getSearchResults()) {
+			if (!isMovedReference(match)) {
 				return true;
+			}
 		}
 		return false;
 	}
 
 	protected boolean isMovedReference(final SearchMatch match) throws JavaModelException {
-		ISourceRange range= null;
-		for (int index= 0; index < fMembersToMove.length; index++) {
-			range= fMembersToMove[index].getSourceRange();
+		for (IMember m : fMembersToMove) {
+			ISourceRange range= m.getSourceRange();
 			if (range.getOffset() <= match.getOffset() && range.getOffset() + range.getLength() >= match.getOffset())
 				return true;
 		}
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/IntroduceParameterObjectProcessor.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/IntroduceParameterObjectProcessor.java
index 41e4a57..bb980bc 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/IntroduceParameterObjectProcessor.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/IntroduceParameterObjectProcessor.java
@@ -82,7 +82,6 @@
 import org.eclipse.jdt.internal.core.refactoring.descriptors.RefactoringSignatureDescriptorFactory;
 import org.eclipse.jdt.internal.corext.codemanipulation.ContextSensitiveImportRewriteContext;
 import org.eclipse.jdt.internal.corext.dom.ASTNodes;
-import org.eclipse.jdt.internal.corext.dom.TypeBindingVisitor;
 import org.eclipse.jdt.internal.corext.refactoring.Checks;
 import org.eclipse.jdt.internal.corext.refactoring.JDTRefactoringDescriptorComment;
 import org.eclipse.jdt.internal.corext.refactoring.ParameterInfo;
@@ -136,8 +135,7 @@
 		private boolean canReuseParameterObject(List<Expression> invocationArguments, ParameterInfo addedInfo, List<ParameterInfo> parameterInfos, MethodDeclaration enclosingMethod) {
 			Assert.isNotNull(enclosingMethod);
 			List<SingleVariableDeclaration> parameters= enclosingMethod.parameters();
-			for (Iterator<ParameterInfo> iter= parameterInfos.iterator(); iter.hasNext();) {
-				ParameterInfo pi= iter.next();
+			for (ParameterInfo pi : parameterInfos) {
 				if (isValidField(pi)) {
 					if (!pi.isInlined())
 						return false;
@@ -202,12 +200,9 @@
 		}
 
 		private void importNodeTypes(ASTNode node, final CompilationUnitRewrite cuRewrite, final ImportRewriteContext context) {
-			ASTResolving.visitAllBindings(node, new TypeBindingVisitor() {
-				@Override
-				public boolean visit(ITypeBinding nodeBinding) {
-					importBinding(nodeBinding, cuRewrite, context);
-					return false;
-				}
+			ASTResolving.visitAllBindings(node, nodeBinding -> {
+				importBinding(nodeBinding, cuRewrite, context);
+				return false;
 			});
 		}
 	}
@@ -359,14 +354,12 @@
 		if (parameters == null)
 			parameters= IntroduceParameterObjectDescriptor.createParameters(getMethod());
 		Map<Integer, ParameterInfo> paramIndex= new HashMap<>();
-		for (Iterator<ParameterInfo> iter= pis.iterator(); iter.hasNext();) {
-			ParameterInfo pi= iter.next();
+		for (ParameterInfo pi : pis) {
 			paramIndex.put(Integer.valueOf(pi.getOldIndex()), pi);
 		}
 		paramIndex.put(Integer.valueOf(ParameterInfo.INDEX_FOR_ADDED), fParameterObjectReference);
 		pis.clear();
-		for (int i= 0; i < parameters.length; i++) {
-			Parameter param= parameters[i];
+		for (Parameter param : parameters) {
 			ParameterInfo pi= paramIndex.get(Integer.valueOf(param.getIndex()));
 			pis.add(pi);
 			if (param != IntroduceParameterObjectDescriptor.PARAMETER_OBJECT) {
@@ -441,14 +434,13 @@
 			fParameterObjectFactory.setEnclosingType(declaringClass.getQualifiedName());
 
 		List<ParameterInfo> parameterInfos= super.getParameterInfos();
-		for (Iterator<ParameterInfo> iter= parameterInfos.iterator(); iter.hasNext();) {
-			ParameterInfo pi= iter.next();
+		for (ParameterInfo pi : parameterInfos) {
 			if (!pi.isAdded()) {
 				if (pi.getOldName().equals(pi.getNewName())) // may have been
-																// set to
-																// something
-																// else after
-																// creation
+					// set to
+					// something
+					// else after
+					// creation
 					pi.setNewName(getFieldName(pi));
 			}
 		}
@@ -460,8 +452,7 @@
 			SingleVariableDeclaration sdv= iter.next();
 			bindingMap.put(sdv.getName().getIdentifier(), sdv.resolveBinding());
 		}
-		for (Iterator<ParameterInfo> iter= parameterInfos.iterator(); iter.hasNext();) {
-			ParameterInfo pi= iter.next();
+		for (ParameterInfo pi : parameterInfos) {
 			if (pi != fParameterObjectReference)
 				pi.setOldBinding(bindingMap.get(pi.getOldName()));
 		}
@@ -555,8 +546,7 @@
 
 		ArrayList<Parameter> parameters= new ArrayList<>();
 		List<ParameterInfo> pis= getParameterInfos();
-		for (Iterator<ParameterInfo> iter= pis.iterator(); iter.hasNext();) {
-			ParameterInfo pi= iter.next();
+		for (ParameterInfo pi : pis) {
 			if (pi.isAdded()) {
 				parameters.add(IntroduceParameterObjectDescriptor.PARAMETER_OBJECT);
 			} else {
@@ -590,11 +580,9 @@
 		} else {
 			comment.addSetting(Messages.format(RefactoringCoreMessages.IntroduceParameterObjectRefactoring_descriptor_enclosing_type, BasicElementLabels.getJavaElementName(fParameterObjectFactory.getEnclosingType())));
 		}
-		List<ParameterInfo> infos= getParameterInfos();
 		List<String> kept= new ArrayList<>();
 		List<String> fields= new ArrayList<>();
-		for (Iterator<ParameterInfo> iter= infos.iterator(); iter.hasNext();) {
-			ParameterInfo pi= iter.next();
+		for (ParameterInfo pi : getParameterInfos()) {
 			if (pi.isCreateField()) {
 				fields.add(pi.getNewName());
 			} else {
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ParameterObjectFactory.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ParameterObjectFactory.java
index 9ce2b7e..33a36d4 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ParameterObjectFactory.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ParameterObjectFactory.java
@@ -192,8 +192,7 @@
 		TypeDeclaration typeDeclaration= ast.newTypeDeclaration();
 		typeDeclaration.setName(ast.newSimpleName(fClassName));
 		List<BodyDeclaration> body= typeDeclaration.bodyDeclarations();
-		for (Iterator<ParameterInfo> iter= fVariables.iterator(); iter.hasNext();) {
-			ParameterInfo pi= iter.next();
+		for (ParameterInfo pi : fVariables) {
 			if (isValidField(pi)) {
 				FieldDeclaration declaration= createField(pi, cuRewrite, context);
 				listener.fieldCreated(cuRewrite, declaration, pi);
@@ -209,8 +208,7 @@
 		MethodDeclaration constructor= createConstructor(declaringType, cuRewrite, listener, context);
 		listener.constructorCreated(cuRewrite, constructor);
 		body.add(constructor);
-		for (Iterator<ParameterInfo> iter= fVariables.iterator(); iter.hasNext();) {
-			ParameterInfo pi= iter.next();
+		for (ParameterInfo pi : fVariables) {
 			if (fCreateGetter && isValidField(pi) && listener.isCreateGetter(pi)) {
 				MethodDeclaration getter= createGetter(pi, declaringType, cuRewrite, context);
 				listener.getterCreated(cuRewrite, getter, pi);
@@ -248,10 +246,9 @@
 		methodDeclaration.setBody(block);
 		List<Statement> statements= block.statements();
 		List<ParameterInfo> validParameter= new ArrayList<>();
-		for (Iterator<ParameterInfo> iter= fVariables.iterator(); iter.hasNext();) {
-			ParameterInfo pi= iter.next();
+		for (ParameterInfo pi : fVariables) {
 			if (isValidField(pi) && listener.isUseInConstructor(pi)) {
-					validParameter.add(pi);
+				validParameter.add(pi);
 			}
 		}
 
@@ -477,7 +474,7 @@
 	public Type createType(boolean asTopLevelClass, CompilationUnitRewrite cuRewrite, int position) {
 		String qualifier= asTopLevelClass ? fPackage : fEnclosingType;
 		String concatenateName= JavaModelUtil.concatenateName(qualifier, fClassName);
-		
+
 		ImportRewrite importRewrite= cuRewrite.getImportRewrite();
 		ContextSensitiveImportRewriteContext context= createParameterClassAwareContext(asTopLevelClass, cuRewrite, position);
 		String addedImport= importRewrite.addImport(concatenateName, context);
@@ -526,8 +523,7 @@
 	}
 
 	public ParameterInfo getParameterInfo(String identifier) {
-		for (Iterator<ParameterInfo> iter= fVariables.iterator(); iter.hasNext();) {
-			ParameterInfo pi= iter.next();
+		for (ParameterInfo pi : fVariables) {
 			if (pi.getOldName().equals(identifier))
 				return pi;
 		}
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/PullUpRefactoringProcessor.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/PullUpRefactoringProcessor.java
index 1f76cba..d2b8efc 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/PullUpRefactoringProcessor.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/PullUpRefactoringProcessor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2019 IBM Corporation and others.
+ * Copyright (c) 2006, 2020 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -1050,7 +1050,15 @@
 		newMethod.setBody(null);
 		newMethod.setConstructor(false);
 		copyExtraDimensions(oldMethod, newMethod);
-		newMethod.setJavadoc(null);
+
+		final Javadoc oldJavadoc= oldMethod.getJavadoc();
+		if (oldJavadoc != null) {
+			String newJavadocString= ASTNodes.getNodeSource(oldJavadoc, false, true);
+			if (newJavadocString != null) {
+				newMethod.setJavadoc((Javadoc) targetRewrite.getASTRewrite().createStringPlaceholder(newJavadocString, ASTNode.JAVADOC));
+			}
+		}
+
 		int modifiers= getModifiersWithUpdatedVisibility(sourceMethod, Modifier.ABSTRACT | JdtFlags.clearFlag(Modifier.NATIVE | Modifier.FINAL, sourceMethod.getFlags()), adjustments, monitor, false, status);
 		if (oldMethod.isVarargs())
 			modifiers&= ~Flags.AccVarargs;
@@ -1191,7 +1199,7 @@
 										String targetPackage= targetRewriter.getRoot().getPackage() == null ? "" : targetRewriter.getRoot().getPackage().getName().toString(); //$NON-NLS-1$
 										String targetTypeBinding= targetPackage + "." + oldTypeBinding.getName(); //$NON-NLS-1$
 
-										// Find the same type-name field but fully qualified. 
+										// Find the same type-name field but fully qualified.
 										// In that case it won't shadow the pulled up field
 										boolean qualifiedTypeNameInTarget= true;
 										String sourceSignature= ((IField) member).getTypeSignature();
@@ -1268,7 +1276,7 @@
 							adjustor.setStatus(status);
 							adjustor.setAdjustments(adjustments);
 							if (destination.isInterface() && !JdtFlags.isPublic(method)) {
-								adjustments.put(method, new MemberVisibilityAdjustor.OutgoingMemberVisibilityAdjustment(method, Modifier.ModifierKeyword.PUBLIC_KEYWORD, RefactoringStatus.createWarningStatus(Messages.format(RefactoringCoreMessages.MemberVisibilityAdjustor_change_visibility_method_warning, new String[] { MemberVisibilityAdjustor.getLabel(method), RefactoringCoreMessages.MemberVisibilityAdjustor_change_visibility_public}), JavaStatusContext.create(method))));								
+								adjustments.put(method, new MemberVisibilityAdjustor.OutgoingMemberVisibilityAdjustment(method, Modifier.ModifierKeyword.PUBLIC_KEYWORD, RefactoringStatus.createWarningStatus(Messages.format(RefactoringCoreMessages.MemberVisibilityAdjustor_change_visibility_method_warning, new String[] { MemberVisibilityAdjustor.getLabel(method), RefactoringCoreMessages.MemberVisibilityAdjustor_change_visibility_public}), JavaStatusContext.create(method))));
 							} else if (needsVisibilityAdjustment(method, false, new SubProgressMonitor(subsub, 1), status)) {
 								adjustments.put(method, new MemberVisibilityAdjustor.OutgoingMemberVisibilityAdjustment(method, Modifier.ModifierKeyword.PROTECTED_KEYWORD, RefactoringStatus.createWarningStatus(Messages.format(RefactoringCoreMessages.MemberVisibilityAdjustor_change_visibility_method_warning, new String[] { MemberVisibilityAdjustor.getLabel(method), RefactoringCoreMessages.MemberVisibilityAdjustor_change_visibility_protected}), JavaStatusContext.create(method))));
 							}
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/PushDownRefactoringProcessor.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/PushDownRefactoringProcessor.java
index 1b03230..c1ef9fe 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/PushDownRefactoringProcessor.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/PushDownRefactoringProcessor.java
@@ -260,17 +260,15 @@
 
 	private static MemberActionInfo[] createInfosForAllPushableFieldsAndMethods(IType type) throws JavaModelException {
 		List<MemberActionInfo> result= new ArrayList<>();
-		IMember[] pushableMembers= RefactoringAvailabilityTester.getPushDownMembers(type);
-		for (int i= 0; i < pushableMembers.length; i++) {
-			result.add(MemberActionInfo.create(pushableMembers[i], MemberActionInfo.NO_ACTION));
+		for (IMember pushableMember : RefactoringAvailabilityTester.getPushDownMembers(type)) {
+			result.add(MemberActionInfo.create(pushableMember, MemberActionInfo.NO_ACTION));
 		}
 		return result.toArray(new MemberActionInfo[result.size()]);
 	}
 
 	private static IMember[] getAbstractMembers(IMember[] members) throws JavaModelException {
 		List<IMember> result= new ArrayList<>(members.length);
-		for (int i= 0; i < members.length; i++) {
-			IMember member= members[i];
+		for (IMember member : members) {
 			if (JdtFlags.isAbstract(member))
 				result.add(member);
 		}
@@ -295,13 +293,9 @@
 		engine.setScope(SearchEngine.createJavaSearchScope(new IJavaElement[] { member.getDeclaringType() }));
 		engine.setStatus(status);
 		engine.searchPattern(new SubProgressMonitor(pm, 1));
-		SearchResultGroup[] groups= (SearchResultGroup[]) engine.getResults();
 		Set<IJavaElement> result= new HashSet<>(3);
-		for (int i= 0; i < groups.length; i++) {
-			SearchResultGroup group= groups[i];
-			SearchMatch[] results= group.getSearchResults();
-			for (int j= 0; j < results.length; j++) {
-				SearchMatch searchResult= results[j];
+		for (SearchResultGroup group : (SearchResultGroup[]) engine.getResults()) {
+			for (SearchMatch searchResult : group.getSearchResults()) {
 				result.add(SearchUtils.getEnclosingJavaElement(searchResult));
 			}
 		}
@@ -354,15 +348,12 @@
 		IMethod[] requiredMethods= ReferenceFinderUtil.getMethodsReferencedIn(new IJavaElement[] { member }, new SubProgressMonitor(sub, 1));
 		sub= new SubProgressMonitor(sub, 1);
 		sub.beginTask(RefactoringCoreMessages.PushDownRefactoring_calculating_required, requiredMethods.length);
-		for (int index= 0; index < requiredMethods.length; index++) {
-			IMethod method= requiredMethods[index];
+		for (IMethod method : requiredMethods) {
 			if (!MethodChecks.isVirtual(method) && (method.getDeclaringType().equals(getDeclaringType()) && !queue.contains(method) && RefactoringAvailabilityTester.isPushDownAvailable(method)))
 				queue.add(method);
 		}
 		sub.done();
-		IField[] requiredFields= ReferenceFinderUtil.getFieldsReferencedIn(new IJavaElement[] { member }, new SubProgressMonitor(monitor, 1));
-		for (int index= 0; index < requiredFields.length; index++) {
-			IField field= requiredFields[index];
+		for (IField field : ReferenceFinderUtil.getFieldsReferencedIn(new IJavaElement[] { member }, new SubProgressMonitor(monitor, 1))) {
 			if (field.getDeclaringType().equals(getDeclaringType()) && !queue.contains(field) && RefactoringAvailabilityTester.isPushDownAvailable(field))
 				queue.add(field);
 		}
@@ -372,8 +363,8 @@
 	private RefactoringStatus checkAbstractMembersInDestinationClasses(IMember[] membersToPushDown, IType[] destinationClassesForAbstract) throws JavaModelException {
 		RefactoringStatus result= new RefactoringStatus();
 		IMember[] abstractMembersToPushDown= getAbstractMembers(membersToPushDown);
-		for (int index= 0; index < destinationClassesForAbstract.length; index++) {
-			result.merge(MemberCheckUtil.checkMembersInDestinationType(abstractMembersToPushDown, destinationClassesForAbstract[index]));
+		for (IType type : destinationClassesForAbstract) {
+			result.merge(MemberCheckUtil.checkMembersInDestinationType(abstractMembersToPushDown, type));
 		}
 		return result;
 	}
@@ -383,11 +374,9 @@
 		IMember[] membersToPushDown= MemberActionInfo.getMembers(getInfosForMembersToBeCreatedInSubclassesOfDeclaringClass());
 		List<IMember> pushedDownList= Arrays.asList(membersToPushDown);
 		IField[] accessedFields= ReferenceFinderUtil.getFieldsReferencedIn(membersToPushDown, pm);
-		for (int i= 0; i < subclasses.length; i++) {
-			IType targetClass= subclasses[i];
+		for (IType targetClass : subclasses) {
 			ITypeHierarchy targetSupertypes= targetClass.newSupertypeHierarchy(null);
-			for (int j= 0; j < accessedFields.length; j++) {
-				IField field= accessedFields[j];
+			for (IField field : accessedFields) {
 				boolean isAccessible= pushedDownList.contains(field) || canBeAccessedFrom(field, targetClass, targetSupertypes) || Flags.isEnum(field.getFlags());
 				if (!isAccessible) {
 					String message= Messages.format(RefactoringCoreMessages.PushDownRefactoring_field_not_accessible, new String[] { JavaElementLabels.getTextLabel(field, JavaElementLabels.ALL_FULLY_QUALIFIED), JavaElementLabels.getTextLabel(targetClass, JavaElementLabels.ALL_FULLY_QUALIFIED) });
@@ -404,11 +393,9 @@
 		IMember[] membersToPushDown= MemberActionInfo.getMembers(getInfosForMembersToBeCreatedInSubclassesOfDeclaringClass());
 		List<IMember> pushedDownList= Arrays.asList(membersToPushDown);
 		IMethod[] accessedMethods= ReferenceFinderUtil.getMethodsReferencedIn(membersToPushDown, pm);
-		for (int index= 0; index < subclasses.length; index++) {
-			IType targetClass= subclasses[index];
+		for (IType targetClass : subclasses) {
 			ITypeHierarchy targetSupertypes= targetClass.newSupertypeHierarchy(null);
-			for (int offset= 0; offset < accessedMethods.length; offset++) {
-				IMethod method= accessedMethods[offset];
+			for (IMethod method : accessedMethods) {
 				boolean isAccessible= pushedDownList.contains(method) || canBeAccessedFrom(method, targetClass, targetSupertypes);
 				if (!isAccessible) {
 					String message= Messages.format(RefactoringCoreMessages.PushDownRefactoring_method_not_accessible, new String[] { JavaElementLabels.getTextLabel(method, JavaElementLabels.ALL_FULLY_QUALIFIED), JavaElementLabels.getTextLabel(targetClass, JavaElementLabels.ALL_FULLY_QUALIFIED) });
@@ -423,11 +410,9 @@
 	private RefactoringStatus checkAccessedTypes(IType[] subclasses, IProgressMonitor pm) throws JavaModelException {
 		RefactoringStatus result= new RefactoringStatus();
 		IType[] accessedTypes= getTypesReferencedInMovedMembers(pm);
-		for (int index= 0; index < subclasses.length; index++) {
-			IType targetClass= subclasses[index];
+		for (IType targetClass : subclasses) {
 			ITypeHierarchy targetSupertypes= targetClass.newSupertypeHierarchy(null);
-			for (int offset= 0; offset < accessedTypes.length; offset++) {
-				IType type= accessedTypes[offset];
+			for (IType type : accessedTypes) {
 				if (!canBeAccessedFrom(type, targetClass, targetSupertypes)) {
 					String message= Messages.format(RefactoringCoreMessages.PushDownRefactoring_type_not_accessible, new String[] { JavaElementLabels.getTextLabel(type, JavaElementLabels.ALL_FULLY_QUALIFIED), JavaElementLabels.getTextLabel(targetClass, JavaElementLabels.ALL_FULLY_QUALIFIED) });
 					result.addError(message, JavaStatusContext.create(type));
@@ -469,9 +454,10 @@
 			if (result.hasFatalError())
 				return result;
 			List<IMember> members= new ArrayList<>(fMemberInfos.length);
-			for (int index= 0; index < fMemberInfos.length; index++) {
-				if (fMemberInfos[index].getAction() != MemberActionInfo.NO_ACTION)
-					members.add(fMemberInfos[index].getMember());
+			for (MemberActionInfo memberInfo : fMemberInfos) {
+				if (memberInfo.getAction() != MemberActionInfo.NO_ACTION) {
+					members.add(memberInfo.getMember());
+				}
 			}
 			fMembersToMove= members.toArray(new IMember[members.size()]);
 			fChangeManager= createChangeManager(new SubProgressMonitor(monitor, 1), result);
@@ -502,8 +488,7 @@
 				return status;
 			fMemberInfos= createInfosForAllPushableFieldsAndMethods(getDeclaringType());
 			List<IMember> list= Arrays.asList(fMembersToMove);
-			for (int offset= 0; offset < fMemberInfos.length; offset++) {
-				MemberActionInfo info= fMemberInfos[offset];
+			for (MemberActionInfo info : fMemberInfos) {
 				if (list.contains(info.getMember()))
 					info.setAction(MemberActionInfo.PUSH_DOWN_ACTION);
 			}
@@ -534,8 +519,8 @@
 		list.addAll(Arrays.asList(membersToPushDown));
 		list.removeAll(Arrays.asList(getAbstractMembers(membersToPushDown)));
 		IMember[] nonAbstractMembersToPushDown= list.toArray(new IMember[list.size()]);
-		for (int i= 0; i < destinationClassesForNonAbstract.length; i++) {
-			result.merge(MemberCheckUtil.checkMembersInDestinationType(nonAbstractMembersToPushDown, destinationClassesForNonAbstract[i]));
+		for (IType type : destinationClassesForNonAbstract) {
+			result.merge(MemberCheckUtil.checkMembersInDestinationType(nonAbstractMembersToPushDown, type));
 		}
 		return result;
 	}
@@ -551,8 +536,7 @@
 
 	private RefactoringStatus checkReferencesToPushedDownMembers(IProgressMonitor monitor) throws JavaModelException {
 		List<IMember> fields= new ArrayList<>(fMemberInfos.length);
-		for (int index= 0; index < fMemberInfos.length; index++) {
-			MemberActionInfo info= fMemberInfos[index];
+		for (MemberActionInfo info : fMemberInfos) {
 			if (info.isToBePushedDown())
 				fields.add(info.getMember());
 		}
@@ -560,12 +544,9 @@
 		RefactoringStatus result= new RefactoringStatus();
 		List<IMember> movedMembers= Arrays.asList(MemberActionInfo.getMembers(getInfosForMembersToBeCreatedInSubclassesOfDeclaringClass()));
 		monitor.beginTask(RefactoringCoreMessages.PushDownRefactoring_check_references, membersToPush.length);
-		for (int index= 0; index < membersToPush.length; index++) {
-			IMember member= membersToPush[index];
+		for (IMember member : membersToPush) {
 			String label= createLabel(member);
-			IJavaElement[] referencing= getReferencingElementsFromSameClass(member, new SubProgressMonitor(monitor, 1), result);
-			for (int offset= 0; offset < referencing.length; offset++) {
-				IJavaElement element= referencing[offset];
+			for (IJavaElement element : getReferencingElementsFromSameClass(member, new SubProgressMonitor(monitor, 1), result)) {
 				if (movedMembers.contains(element))
 					continue;
 				if (!(element instanceof IMember))
@@ -582,8 +563,7 @@
 
 	public void computeAdditionalRequiredMembersToPushDown(IProgressMonitor monitor) throws JavaModelException {
 		List<IMember> list= Arrays.asList(getAdditionalRequiredMembers(monitor));
-		for (int index= 0; index < fMemberInfos.length; index++) {
-			MemberActionInfo info= fMemberInfos[index];
+		for (MemberActionInfo info : fMemberInfos) {
 			if (list.contains(info.getMember()))
 				info.setAction(MemberActionInfo.PUSH_DOWN_ACTION);
 		}
@@ -618,8 +598,8 @@
 			monitor.beginTask(RefactoringCoreMessages.PushDownRefactoring_checking, 1);
 			IType type= null;
 			TypeVariableMaplet[] mapping= null;
-			for (int index= 0; index < destinations.length; index++) {
-				type= destinations[index];
+			for (IType destination : destinations) {
+				type= destination;
 				mapping= TypeVariableUtil.superTypeToInheritedType(getDeclaringType(), type);
 				if (unitRewriter.getCu().equals(type.getCompilationUnit())) {
 					IMember member= null;
@@ -695,9 +675,9 @@
 				arguments.put(JavaRefactoringDescriptorUtil.ATTRIBUTE_INPUT, JavaRefactoringDescriptorUtil.elementToHandle(project, fCachedDeclaringType));
 			for (int index= 0; index < fMembersToMove.length; index++) {
 				arguments.put(JavaRefactoringDescriptorUtil.ATTRIBUTE_ELEMENT + (index + 1), JavaRefactoringDescriptorUtil.elementToHandle(project, fMembersToMove[index]));
-				for (int offset= 0; offset < fMemberInfos.length; offset++) {
-					if (fMemberInfos[offset].getMember().equals(fMembersToMove[index])) {
-						switch (fMemberInfos[offset].getAction()) {
+				for (MemberActionInfo memberInfo : fMemberInfos) {
+					if (memberInfo.getMember().equals(fMembersToMove[index])) {
+						switch (memberInfo.getAction()) {
 							case MemberActionInfo.PUSH_ABSTRACT_ACTION:
 								arguments.put(ATTRIBUTE_ABSTRACT + (index + 1), Boolean.valueOf(true).toString());
 								break;
@@ -726,8 +706,8 @@
 			rewrites.put(source, sourceRewriter);
 			IType[] types= getHierarchyOfDeclaringClass(new SubProgressMonitor(monitor, 1)).getSubclasses(getDeclaringType());
 			final Set<ICompilationUnit> result= new HashSet<>(types.length + 1);
-			for (int index= 0; index < types.length; index++) {
-				ICompilationUnit cu= types[index].getCompilationUnit();
+			for (IType type : types) {
+				ICompilationUnit cu= type.getCompilationUnit();
 				if (cu != null) { // subclasses can be in binaries
 					result.add(cu);
 				}
@@ -735,23 +715,20 @@
 			result.add(source);
 			final Map<IMember, IncomingMemberVisibilityAdjustment> adjustments= new HashMap<>();
 			final List<MemberVisibilityAdjustor> adjustors= new ArrayList<>();
-			final ICompilationUnit[] units= result.toArray(new ICompilationUnit[result.size()]);
-			ICompilationUnit unit= null;
 			CompilationUnitRewrite rewrite= null;
 			final IProgressMonitor sub= new SubProgressMonitor(monitor, 4);
 			try {
-				sub.beginTask(RefactoringCoreMessages.PushDownRefactoring_checking, units.length * 4);
-				for (int index= 0; index < units.length; index++) {
-					unit= units[index];
+				sub.beginTask(RefactoringCoreMessages.PushDownRefactoring_checking, result.size() * 4);
+				for (ICompilationUnit unit : result) {
 					rewrite= getCompilationUnitRewrite(rewrites, unit);
 					if (unit.equals(sourceRewriter.getCu())) {
 						final AbstractTypeDeclaration declaration= ASTNodeSearchUtil.getAbstractTypeDeclarationNode(getDeclaringType(), rewrite.getRoot());
 						if (!JdtFlags.isAbstract(getDeclaringType()) && getAbstractDeclarationInfos().length != 0)
 							ModifierRewrite.create(rewrite.getASTRewrite(), declaration).setModifiers((Modifier.ABSTRACT | declaration.getModifiers()), rewrite.createCategorizedGroupDescription(RefactoringCoreMessages.PushDownRefactoring_make_abstract, SET_PUSH_DOWN));
 						deleteDeclarationNodes(sourceRewriter, false, rewrite, Arrays.asList(getDeletableMembers()), SET_PUSH_DOWN);
-						MemberActionInfo[] methods= getAbstractDeclarationInfos();
-						for (int offset= 0; offset < methods.length; offset++)
-							declareMethodAbstract(methods[offset], sourceRewriter, rewrite);
+						for (MemberActionInfo method : getAbstractDeclarationInfos()) {
+							declareMethodAbstract(method, sourceRewriter, rewrite);
+						}
 					}
 					final IMember[] members= getAbstractMembers(getAbstractDestinations(new SubProgressMonitor(monitor, 1)));
 					final IType[] classes= new IType[members.length];
@@ -771,7 +748,7 @@
 			}
 			final TextEditBasedChangeManager manager= new TextEditBasedChangeManager();
 			for (final Iterator<ICompilationUnit> iterator= rewrites.keySet().iterator(); iterator.hasNext();) {
-				unit= iterator.next();
+				ICompilationUnit unit= iterator.next();
 				rewrite= rewrites.get(unit);
 				if (rewrite != null)
 					manager.manage(unit, rewrite.createChange(true));
@@ -855,8 +832,7 @@
 
 	private MemberActionInfo[] getAbstractDeclarationInfos() throws JavaModelException {
 		List<MemberActionInfo> result= new ArrayList<>(fMemberInfos.length);
-		for (int index= 0; index < fMemberInfos.length; index++) {
-			MemberActionInfo info= fMemberInfos[index];
+		for (MemberActionInfo info : fMemberInfos) {
 			if (info.isNewMethodToBeDeclaredAbstract())
 				result.add(info);
 		}
@@ -866,8 +842,7 @@
 	private IType[] getAbstractDestinations(IProgressMonitor monitor) throws JavaModelException {
 		IType[] allDirectSubclasses= getHierarchyOfDeclaringClass(monitor).getSubclasses(getDeclaringType());
 		List<IType> result= new ArrayList<>(allDirectSubclasses.length);
-		for (int index= 0; index < allDirectSubclasses.length; index++) {
-			IType subclass= allDirectSubclasses[index];
+		for (IType subclass : allDirectSubclasses) {
 			if (subclass.exists() && !subclass.isBinary() && !subclass.isReadOnly() && subclass.getCompilationUnit() != null && subclass.isStructureKnown())
 				result.add(subclass);
 		}
@@ -876,8 +851,7 @@
 
 	private MemberActionInfo[] getAbstractMemberInfos() throws JavaModelException {
 		List<MemberActionInfo> result= new ArrayList<>(fMemberInfos.length);
-		for (int index= 0; index < fMemberInfos.length; index++) {
-			MemberActionInfo info= fMemberInfos[index];
+		for (MemberActionInfo info : fMemberInfos) {
 			if (info.isToBeCreatedInSubclassesOfDeclaringClass() && JdtFlags.isAbstract(info.getMember()))
 				result.add(info);
 		}
@@ -914,8 +888,7 @@
 
 	private IMember[] getDeletableMembers() {
 		List<IMember> result= new ArrayList<>(fMemberInfos.length);
-		for (int i= 0; i < fMemberInfos.length; i++) {
-			MemberActionInfo info= fMemberInfos[i];
+		for (MemberActionInfo info : fMemberInfos) {
 			if (info.isToBeDeletedFromDeclaringClass())
 				result.add(info.getMember());
 		}
@@ -924,8 +897,7 @@
 
 	private MemberActionInfo[] getAffectedMemberInfos() throws JavaModelException {
 		List<MemberActionInfo> result= new ArrayList<>(fMemberInfos.length);
-		for (int i= 0; i < fMemberInfos.length; i++) {
-			MemberActionInfo info= fMemberInfos[i];
+		for (MemberActionInfo info : fMemberInfos) {
 			if (info.isToBeCreatedInSubclassesOfDeclaringClass() && !JdtFlags.isAbstract(info.getMember()))
 				result.add(info);
 		}
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ReferenceFinderUtil.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ReferenceFinderUtil.java
index 2aa1a21..85dbc81 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ReferenceFinderUtil.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ReferenceFinderUtil.java
@@ -61,8 +61,8 @@
 	private static SearchMatch[] getTypeReferencesIn(IJavaElement[] elements, WorkingCopyOwner owner, IProgressMonitor pm) throws JavaModelException {
 		List<SearchMatch> referencedTypes= new ArrayList<>();
 		pm.beginTask("", elements.length); //$NON-NLS-1$
-		for (int i = 0; i < elements.length; i++) {
-			referencedTypes.addAll(getTypeReferencesIn(elements[i], owner, new SubProgressMonitor(pm, 1)));
+		for (IJavaElement element : elements) {
+			referencedTypes.addAll(getTypeReferencesIn(element, owner, new SubProgressMonitor(pm, 1)));
 		}
 		pm.done();
 		return referencedTypes.toArray(new SearchMatch[referencedTypes.size()]);
@@ -92,8 +92,8 @@
 	private static SearchMatch[] getFieldReferencesIn(IJavaElement[] elements, WorkingCopyOwner owner, IProgressMonitor pm) throws JavaModelException {
 		List<SearchMatch> referencedFields= new ArrayList<>();
 		pm.beginTask("", elements.length); //$NON-NLS-1$
-		for (int i = 0; i < elements.length; i++) {
-			referencedFields.addAll(getFieldReferencesIn(elements[i], owner, new SubProgressMonitor(pm, 1)));
+		for (IJavaElement element : elements) {
+			referencedFields.addAll(getFieldReferencesIn(element, owner, new SubProgressMonitor(pm, 1)));
 		}
 		pm.done();
 		return referencedFields.toArray(new SearchMatch[referencedFields.size()]);
@@ -123,8 +123,8 @@
 	private static SearchMatch[] getMethodReferencesIn(IJavaElement[] elements, WorkingCopyOwner owner, IProgressMonitor pm) throws JavaModelException {
 		List<SearchMatch> referencedMethods= new ArrayList<>();
 		pm.beginTask("", elements.length); //$NON-NLS-1$
-		for (int i = 0; i < elements.length; i++) {
-			referencedMethods.addAll(getMethodReferencesIn(elements[i], owner, new SubProgressMonitor(pm, 1)));
+		for (IJavaElement element : elements) {
+			referencedMethods.addAll(getMethodReferencesIn(element, owner, new SubProgressMonitor(pm, 1)));
 		}
 		pm.done();
 		return referencedMethods.toArray(new SearchMatch[referencedMethods.size()]);
@@ -139,8 +139,8 @@
 
 	public static ITypeBinding[] getTypesReferencedInDeclarations(MethodDeclaration[] methods) {
 		Set<ITypeBinding> typesUsed= new HashSet<>();
-		for (int i= 0; i < methods.length; i++) {
-			typesUsed.addAll(getTypesUsedInDeclaration(methods[i]));
+		for (MethodDeclaration method : methods) {
+			typesUsed.addAll(getTypesUsedInDeclaration(method));
 		}
 		return typesUsed.toArray(new ITypeBinding[typesUsed.size()]);
 	}
@@ -175,8 +175,8 @@
 	/// private helpers
 	private static Set<IJavaElement> extractElements(SearchMatch[] searchResults, int elementType) {
 		Set<IJavaElement> elements= new HashSet<>();
-		for (int i= 0; i < searchResults.length; i++) {
-			IJavaElement el= SearchUtils.getEnclosingJavaElement(searchResults[i]);
+		for (SearchMatch searchResult : searchResults) {
+			IJavaElement el= SearchUtils.getEnclosingJavaElement(searchResult);
 			if (el.exists() && el.getElementType() == elementType)
 				elements.add(el);
 		}
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/TypeVariableUtil.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/TypeVariableUtil.java
index e332f72..3d71731 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/TypeVariableUtil.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/TypeVariableUtil.java
@@ -88,8 +88,9 @@
 		if (arguments.length == 0) {
 			variables.add(Signature.toString(signature));
 		} else {
-			for (int index= 0; index < arguments.length; index++)
-				variables.add(Signature.toString(arguments[index]));
+			for (String argument : arguments) {
+				variables.add(Signature.toString(argument));
+			}
 		}
 	}
 
@@ -116,8 +117,8 @@
 			final String[] signatures= getVariableSignatures(signature);
 			if (signatures.length == 0) {
 				final String variable= Signature.toString(signature);
-				for (int index= 0; index < variables.length; index++) {
-					if (variable.equals(variables[index])) {
+				for (String v : variables) {
+					if (variable.equals(v)) {
 						result= new String[] { variable};
 						break;
 					}
@@ -130,9 +131,9 @@
 		} else if (member instanceof IMethod) {
 			final IMethod method= (IMethod) member;
 			final HashSet<String> set= new HashSet<>();
-			final String[] types= method.getParameterTypes();
-			for (int index= 0; index < types.length; index++)
-				extractTypeVariables(types[index], set);
+			for (String type : method.getParameterTypes()) {
+				extractTypeVariables(type, set);
+			}
 			extractTypeVariables(method.getReturnType(), set);
 			final String[] arguments= parametersToVariables(((IMethod) member).getTypeParameters());
 			Collections.addAll(set, arguments);
@@ -146,12 +147,12 @@
 		}
 
 		final List<String> list= new ArrayList<>(variables.length);
-		String variable= null;
-		for (int index= 0; index < variables.length; index++) {
-			variable= variables[index];
-			for (int offset= 0; offset < result.length; offset++)
-				if (variable.equals(result[offset]))
-					list.add(result[offset]);
+		for (String variable : variables) {
+			for (String r : result) {
+				if (variable.equals(r)) {
+					list.add(r);
+				}
+			}
 		}
 		result= new String[list.size()];
 		list.toArray(result);
@@ -184,17 +185,15 @@
 			list.addAll(Arrays.asList(types));
 		} else {
 			final Set<String> mapped= new HashSet<>(types.length);
-			String type= null;
-			for (int index= 0; index < types.length; index++) {
-				for (int offset= 0; offset < mapping.length; offset++) {
-					type= types[index];
-					if (mapping[offset].getSourceName().equals(type))
+			for (String type : types) {
+				for (TypeVariableMaplet m : mapping) {
+					if (m.getSourceName().equals(type)) {
 						mapped.add(type);
+					}
 				}
 			}
 			list= new ArrayList<>(types.length - mapped.size());
-			for (int index= 0; index < types.length; index++) {
-				type= types[index];
+			for (String type : types) {
 				if (!mapped.contains(type))
 					list.add(type);
 			}
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/UseSuperTypeProcessor.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/UseSuperTypeProcessor.java
index 2d9960b..2f6b5eb 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/UseSuperTypeProcessor.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/UseSuperTypeProcessor.java
@@ -104,9 +104,8 @@
 			if (result != null)
 				return result;
 		}
-		final ITypeBinding[] bindings= type.getInterfaces();
-		for (int index= 0; index < bindings.length; index++) {
-			final ITypeBinding result= findTypeInHierarchy(bindings[index], name);
+		for (ITypeBinding b : type.getInterfaces()) {
+			final ITypeBinding result= findTypeInHierarchy(b, name);
 			if (result != null)
 				return result;
 		}
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/constraints/SuperTypeConstraintsCreator.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/constraints/SuperTypeConstraintsCreator.java
index 8183e9f..99a6b28 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/constraints/SuperTypeConstraintsCreator.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/constraints/SuperTypeConstraintsCreator.java
@@ -100,18 +100,15 @@
 	private static void getOriginalMethods(final IMethodBinding binding, final ITypeBinding type, final Collection<IMethodBinding> originals, final boolean implementations) {
 		final ITypeBinding ancestor= type.getSuperclass();
 		if (!implementations) {
-			final ITypeBinding[] types= type.getInterfaces();
-			for (int index= 0; index < types.length; index++)
-				getOriginalMethods(binding, types[index], originals, implementations);
+			for (ITypeBinding t : type.getInterfaces()) {
+				getOriginalMethods(binding, t, originals, implementations);
+			}
 			if (ancestor != null)
 				getOriginalMethods(binding, ancestor, originals, implementations);
 		}
 		if (implementations && ancestor != null)
 			getOriginalMethods(binding, ancestor, originals, implementations);
-		final IMethodBinding[] methods= type.getDeclaredMethods();
-		IMethodBinding method= null;
-		for (int index= 0; index < methods.length; index++) {
-			method= methods[index];
+		for (IMethodBinding method : type.getDeclaredMethods()) {
 			if (!binding.getKey().equals(method.getKey())) {
 				boolean match= false;
 				IMethodBinding current= null;
@@ -593,7 +590,7 @@
 			}
 		}
 	}
-	
+
 	@Override
 	public void endVisit(MethodReference node) {
 		IMethodBinding methodBinding= node.resolveMethodBinding();
@@ -663,7 +660,7 @@
 		}
 		super.endVisit(node);
 	}
-	
+
 	/*
 	 * @see org.eclipse.jdt.internal.corext.dom.HierarchicalASTVisitor#endVisit(org.eclipse.jdt.core.dom.MethodInvocation)
 	 */
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/constraints/SuperTypeConstraintsModel.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/constraints/SuperTypeConstraintsModel.java
index 642eacf..50a417c 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/constraints/SuperTypeConstraintsModel.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/constraints/SuperTypeConstraintsModel.java
@@ -55,7 +55,7 @@
  */
 public final class SuperTypeConstraintsModel {
 
-	/** Customized implementation of a hash set 
+	/** Customized implementation of a hash set
 	 * @param <E> the element type */
 	private static class HashedSet<E> extends AbstractSet<E> {
 
@@ -341,8 +341,9 @@
 				else {
 					final ConstraintVariable2[] variables= second.getContributingVariables();
 					first.addAll(variables);
-					for (int index= 0; index < variables.length; index++)
-						variables[index].setTypeEquivalenceSet(first);
+					for (ConstraintVariable2 variable : variables) {
+						variable.setTypeEquivalenceSet(first);
+					}
 				}
 			}
 		}
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/constraints/SuperTypeConstraintsSolver.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/constraints/SuperTypeConstraintsSolver.java
index 1d47126..34a477f 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/constraints/SuperTypeConstraintsSolver.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/constraints/SuperTypeConstraintsSolver.java
@@ -158,10 +158,10 @@
 			} else {
 				ITypeSet estimate= variable.getTypeEstimate();
 				if (estimate == null) {
-					final ConstraintVariable2[] contributing= set.getContributingVariables();
 					estimate= SuperTypeSet.getUniverse();
-					for (int index= 0; index < contributing.length; index++)
-						estimate= estimate.restrictedTo(computeTypeEstimate(contributing[index]));
+					for (ConstraintVariable2 v : set.getContributingVariables()) {
+						estimate= estimate.restrictedTo(computeTypeEstimate(v));
+					}
 					set.setTypeEstimate(estimate);
 				}
 			}
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/constraints/SuperTypeRefactoringProcessor.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/constraints/SuperTypeRefactoringProcessor.java
index 651511b..d041fe7 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/constraints/SuperTypeRefactoringProcessor.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/constraints/SuperTypeRefactoringProcessor.java
@@ -139,7 +139,7 @@
 
 	/**
 	 * Returns a new ast node corresponding to the given type.
-	 * 
+	 *
 	 * @param rewrite the compilation unit rewrite to use
 	 * @param type the new type
 	 * @param node the old node
@@ -331,9 +331,9 @@
 			for (final Iterator<ITypeBinding> iterator= fTypeBindings.iterator(); iterator.hasNext();) {
 				type= iterator.next();
 				if (type.isTypeVariable()) {
-					final ITypeBinding[] bounds= type.getTypeBounds();
-					for (int index= 0; index < bounds.length; index++)
-						rewrite.addImport(bounds[index]);
+					for (ITypeBinding bound : type.getTypeBounds()) {
+						rewrite.addImport(bound);
+					}
 				}
 				rewrite.addImport(type);
 			}
@@ -540,16 +540,12 @@
 	 *             if an error occurs
 	 */
 	protected final void getFieldReferencingCompilationUnits(final Map<IJavaProject, Set<ICompilationUnit>> units, final ASTNode[] nodes) throws JavaModelException {
-		ASTNode node= null;
-		IField field= null;
-		IJavaProject project= null;
-		for (int index= 0; index < nodes.length; index++) {
-			node= nodes[index];
-			project= RefactoringASTParser.getCompilationUnit(node).getJavaProject();
+		for (ASTNode node : nodes) {
+			IJavaProject project= RefactoringASTParser.getCompilationUnit(node).getJavaProject();
 			if (project != null) {
 				final List<IField> fields= getReferencingFields(node, project);
 				for (int offset= 0; offset < fields.size(); offset++) {
-					field= fields.get(offset);
+					IField field= fields.get(offset);
 					Set<ICompilationUnit> set= units.get(project);
 					if (set == null) {
 						set= new HashSet<>();
@@ -576,14 +572,10 @@
 	 *             if an error occurs
 	 */
 	protected final void getMethodReferencingCompilationUnits(final Map<IJavaProject, Set<ICompilationUnit>> units, final ASTNode[] nodes) throws JavaModelException {
-		ASTNode node= null;
-		IMethod method= null;
-		IJavaProject project= null;
-		for (int index= 0; index < nodes.length; index++) {
-			node= nodes[index];
-			project= RefactoringASTParser.getCompilationUnit(node).getJavaProject();
+		for (ASTNode node : nodes) {
+			IJavaProject project= RefactoringASTParser.getCompilationUnit(node).getJavaProject();
 			if (project != null) {
-				method= getReferencingMethod(node);
+				IMethod method= getReferencingMethod(node);
 				if (method != null) {
 					Set<ICompilationUnit> set= units.get(project);
 					if (set == null) {
@@ -785,9 +777,7 @@
 	 * Resets the working copies.
 	 */
 	protected void resetWorkingCopies() {
-		final ICompilationUnit[] units= JavaCore.getWorkingCopies(fOwner);
-		for (int index= 0; index < units.length; index++) {
-			final ICompilationUnit unit= units[index];
+		for (ICompilationUnit unit : JavaCore.getWorkingCopies(fOwner)) {
 			try {
 				unit.discardWorkingCopy();
 			} catch (Exception exception) {
@@ -803,18 +793,17 @@
 	 *            the compilation unit to discard
 	 */
 	protected void resetWorkingCopies(final ICompilationUnit unit) {
-		final ICompilationUnit[] units= JavaCore.getWorkingCopies(fOwner);
-		for (int index= 0; index < units.length; index++) {
-			if (!units[index].equals(unit)) {
+		for (ICompilationUnit cu : JavaCore.getWorkingCopies(fOwner)) {
+			if (!cu.equals(unit)) {
 				try {
-					units[index].discardWorkingCopy();
+					cu.discardWorkingCopy();
 				} catch (Exception exception) {
 					// Do nothing
 				}
 			} else {
 				try {
-					units[index].getBuffer().setContents(unit.getPrimary().getBuffer().getContents());
-					JavaModelUtil.reconcile(units[index]);
+					cu.getBuffer().setContents(unit.getPrimary().getBuffer().getContents());
+					JavaModelUtil.reconcile(cu);
 				} catch (JavaModelException exception) {
 					JavaPlugin.log(exception);
 				}
@@ -1138,26 +1127,19 @@
 			monitor.setTaskName(RefactoringCoreMessages.SuperTypeRefactoringProcessor_creating);
 			final Map<IJavaProject, Set<SearchResultGroup>> firstPass= getReferencingCompilationUnits(subType, new SubProgressMonitor(monitor, 100), status);
 			final Map<IJavaProject, Set<ICompilationUnit>> secondPass= new HashMap<>();
-			IJavaProject project= null;
 			Collection<SearchResultGroup> collection= null;
 			try {
 				final ASTParser parser= ASTParser.newParser(IASTSharedValues.SHARED_AST_LEVEL);
-				Object element= null;
 				ICompilationUnit current= null;
-				SearchResultGroup group= null;
-				SearchMatch[] matches= null;
 				final Map<ICompilationUnit, SearchResultGroup> groups= new HashMap<>();
-				for (final Iterator<IJavaProject> outer= firstPass.keySet().iterator(); outer.hasNext();) {
-					project= outer.next();
+				for (IJavaProject project : firstPass.keySet()) {
 					if (level == 3 && !JavaModelUtil.is50OrHigher(project))
 						level= 2;
 					collection= firstPass.get(project);
 					if (collection != null) {
-						for (final Iterator<SearchResultGroup> inner= collection.iterator(); inner.hasNext();) {
-							group= inner.next();
-							matches= group.getSearchResults();
-							for (int index= 0; index < matches.length; index++) {
-								element= matches[index].getElement();
+						for (SearchResultGroup group : collection) {
+							for (SearchMatch match : group.getSearchResults()) {
+								Object element= match.getElement();
 								if (element instanceof IMember) {
 									current= ((IMember) element).getCompilationUnit();
 									if (current != null)
@@ -1167,7 +1149,6 @@
 						}
 					}
 				}
-				Set<ICompilationUnit> units= null;
 				final Set<ICompilationUnit> processed= new HashSet<>();
 				if (subUnit != null)
 					processed.add(subUnit);
@@ -1177,16 +1158,13 @@
 					final Set<IJavaProject> keySet= firstPass.keySet();
 					subMonitor.beginTask("", keySet.size() * 100); //$NON-NLS-1$
 					subMonitor.setTaskName(RefactoringCoreMessages.SuperTypeRefactoringProcessor_creating);
-					for (final Iterator<IJavaProject> outer= keySet.iterator(); outer.hasNext();) {
-						project= outer.next();
+					for (IJavaProject project : keySet) {
 						collection= firstPass.get(project);
 						if (collection != null) {
-							units= new HashSet<>(collection.size());
-							for (final Iterator<SearchResultGroup> inner= collection.iterator(); inner.hasNext();) {
-								group= inner.next();
-								matches= group.getSearchResults();
-								for (int index= 0; index < matches.length; index++) {
-									element= matches[index].getElement();
+							Set<ICompilationUnit> units= new HashSet<>(collection.size());
+							for (SearchResultGroup group : collection) {
+								for (SearchMatch match : group.getSearchResults()) {
+									Object element= match.getElement();
 									if (element instanceof IMember) {
 										current= ((IMember) element).getCompilationUnit();
 										if (current != null)
@@ -1249,8 +1227,7 @@
 					final Set<IJavaProject> keySet= secondPass.keySet();
 					subMonitor.beginTask("", keySet.size() * 100); //$NON-NLS-1$
 					subMonitor.setTaskName(RefactoringCoreMessages.SuperTypeRefactoringProcessor_creating);
-					for (final Iterator<IJavaProject> iterator= keySet.iterator(); iterator.hasNext();) {
-						project= iterator.next();
+					for (IJavaProject project : keySet) {
 						if (level == 3 && !JavaModelUtil.is50OrHigher(project))
 							level= 2;
 						Collection<ICompilationUnit> cuCollection= null;
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/surround/ExceptionAnalyzer.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/surround/ExceptionAnalyzer.java
index 51d440f..5536211 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/surround/ExceptionAnalyzer.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/surround/ExceptionAnalyzer.java
@@ -217,9 +217,8 @@
 	private boolean handleExceptions(IMethodBinding binding, ASTNode node) {
 		if (binding == null)
 			return true;
-		ITypeBinding[] exceptions= binding.getExceptionTypes();
-		for (int i= 0; i < exceptions.length; i++) {
-			addException(exceptions[i], node.getAST());
+		for (ITypeBinding exception : binding.getExceptionTypes()) {
+			addException(exception, node.getAST());
 		}
 		return true;
 	}
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/surround/SurroundWithTryCatchRefactoring.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/surround/SurroundWithTryCatchRefactoring.java
index 016e3c2..72ac749 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/surround/SurroundWithTryCatchRefactoring.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/surround/SurroundWithTryCatchRefactoring.java
@@ -299,8 +299,7 @@
 		ListRewrite statements= fRewriter.getListRewrite(tryStatement.getBody(), Block.STATEMENTS_PROPERTY);
 		boolean selectedNodeRemoved= false;
 		ASTNode expressionStatement= null;
-		for (int i= 0; i < fSelectedNodes.length; i++) {
-			ASTNode node= fSelectedNodes[i];
+		for (ASTNode node : fSelectedNodes) {
 			if (node instanceof VariableDeclarationStatement && variableDeclarations.contains(node)) {
 				AST ast= getAST();
 				VariableDeclarationStatement statement= (VariableDeclarationStatement)node;
@@ -441,9 +440,8 @@
 
 	private List<ASTNode> getSpecialVariableDeclarationStatements() {
 		List<ASTNode> result= new ArrayList<>(3);
-		VariableDeclaration[] locals= fAnalyzer.getAffectedLocals();
-		for (int i= 0; i < locals.length; i++) {
-			ASTNode parent= locals[i].getParent();
+		for (VariableDeclaration local : fAnalyzer.getAffectedLocals()) {
+			ASTNode parent= local.getParent();
 			if (parent instanceof VariableDeclarationStatement && !result.contains(parent))
 				result.add(parent);
 		}
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/CompositeOrTypeConstraint.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/CompositeOrTypeConstraint.java
index 3ce06f2..d7f9b60 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/CompositeOrTypeConstraint.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/CompositeOrTypeConstraint.java
@@ -14,7 +14,6 @@
 package org.eclipse.jdt.internal.corext.refactoring.typeconstraints;
 
 import java.util.Arrays;
-import java.util.Comparator;
 import java.util.List;
 
 import org.eclipse.core.runtime.Assert;
@@ -36,12 +35,7 @@
 
 	private static ITypeConstraint[] sort(ITypeConstraint[] constraints) {
 		//TODO bogus to sort by toString - will have to come up with something better
-		Arrays.sort(constraints, new Comparator<ITypeConstraint>(){
-			@Override
-			public int compare(ITypeConstraint o1, ITypeConstraint o2) {
-				return o2.toString().compareTo(o1.toString());
-			}
-		});
+		Arrays.sort(constraints, (o1, o2) -> o2.toString().compareTo(o1.toString()));
 		return constraints;
 	}
 
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/FullConstraintCreator.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/FullConstraintCreator.java
index 1fd3deb..e447791 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/FullConstraintCreator.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/FullConstraintCreator.java
@@ -303,8 +303,8 @@
 					result.addAll(Arrays.asList(fTypeConstraintFactory.createSubtypeConstraint(expressionVar, fConstraintVariableFactory.makeDeclaringTypeVariable(rootDefs[0]))));
 				}else{
 					Collection<ITypeConstraint> constraints= new ArrayList<>();
-					for (int i= 0; i < rootDefs.length; i++) {
-						ConstraintVariable rootDefTypeVar= fConstraintVariableFactory.makeDeclaringTypeVariable(rootDefs[i]);
+					for (IMethodBinding rootDef : rootDefs) {
+						ConstraintVariable rootDefTypeVar= fConstraintVariableFactory.makeDeclaringTypeVariable(rootDef);
 						ITypeConstraint[] tc= fTypeConstraintFactory.createSubtypeConstraint(expressionVar, rootDefTypeVar);
 						constraints.addAll(Arrays.asList(tc));
 					}
@@ -425,7 +425,7 @@
 	public ITypeConstraint[] create(VariableDeclarationStatement vds){
 		return getConstraintsFromFragmentList(vds.fragments(), vds.getType());
 	}
-	
+
 	@Override
 	public ITypeConstraint[] create(ThrowStatement node) {
 		ConstraintVariable nameVariable= fConstraintVariableFactory.makeExpressionOrTypeVariable(node.getExpression(), getContext());
@@ -533,7 +533,7 @@
 
 	private ITypeConstraint[] getArgumentConstraints(List<Expression> arguments, IMethodBinding methodBinding) {
 		List<ITypeConstraint> result= new ArrayList<>(arguments.size());
-		
+
 		if (methodBinding == null)
 			return new ITypeConstraint[0];
 
@@ -662,10 +662,8 @@
 	 * return Set of ITypeBindings
 	 */
 	private static Set<ITypeBinding> getDeclaringSuperTypes(IVariableBinding fieldBinding) {
-		ITypeBinding[] allSuperTypes= Bindings.getAllSuperTypes(fieldBinding.getDeclaringClass());
 		Set<ITypeBinding> result= new HashSet<>();
-		for (int i= 0; i < allSuperTypes.length; i++) {
-			ITypeBinding type= allSuperTypes[i];
+		for (ITypeBinding type : Bindings.getAllSuperTypes(fieldBinding.getDeclaringClass())) {
 			if (findField(fieldBinding, type) != null)
 				result.add(type);
 		}
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/TypeConstraintFactory.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/TypeConstraintFactory.java
index 8e89416..bf9b045 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/TypeConstraintFactory.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/TypeConstraintFactory.java
@@ -113,8 +113,8 @@
 	public CompositeOrTypeConstraint createCompositeOrTypeConstraint(ITypeConstraint[] constraints){
 		ConstraintVariable left= ((SimpleTypeConstraint)constraints[0]).getLeft();
 		String bounds= ""; //$NON-NLS-1$
-		for (int i= 0; i < constraints.length; i++){
-			ConstraintVariable right= ((SimpleTypeConstraint)constraints[i]).getRight();
+		for (ITypeConstraint constraint : constraints) {
+			ConstraintVariable right= ((SimpleTypeConstraint) constraint).getRight();
 			ITypeBinding binding= right.getBinding();
 			String typeName= binding.getQualifiedName();
 			bounds= bounds + typeName +","; //$NON-NLS-1$
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/EmptyTypeSet.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/EmptyTypeSet.java
index dfbddbf..0253f78 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/EmptyTypeSet.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/EmptyTypeSet.java
@@ -120,12 +120,12 @@
 	public EnumeratedTypeSet enumerate() {
 		return new EnumeratedTypeSet(getTypeSetEnvironment());
 	}
-	
+
 	@Override
 	public boolean equals(Object obj) {
 		return obj instanceof EmptyTypeSet;
 	}
-	
+
 	@Override
 	public int hashCode() {
 		return 42;
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/EnumeratedTypeSet.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/EnumeratedTypeSet.java
index c28dc57..23edf11 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/EnumeratedTypeSet.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/EnumeratedTypeSet.java
@@ -46,7 +46,7 @@
 	/**
 	 * Constructs a new EnumeratedTypeSet with the members of Set s in it.
 	 * All elements of s must be TTypes.
-	 * 
+	 *
 	 * @param types the types
 	 * @param typeSetEnvironment the environment
 	 */
@@ -60,7 +60,7 @@
 
 	/**
 	 * Constructs an empty EnumeratedTypeSet.
-	 * 
+	 *
 	 * @param typeSetEnvironment the environment
 	 */
 	public EnumeratedTypeSet(TypeSetEnvironment typeSetEnvironment) {
@@ -70,7 +70,7 @@
 
 	/**
 	 * Constructs a new EnumeratedTypeSet with the given single TType in it.
-	 * 
+	 *
 	 * @param t the type
 	 * @param typeSetEnvironment the environment
 	 */
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/SingletonTypeSet.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/SingletonTypeSet.java
index 061ccc5..b1cb1e3 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/SingletonTypeSet.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/SingletonTypeSet.java
@@ -147,7 +147,7 @@
 		} else
 			return false;
 	}
-	
+
 	@Override
 	public int hashCode() {
 		return fType.hashCode();
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/SubTypesOfSingleton.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/SubTypesOfSingleton.java
index a45342f..8396fbf 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/SubTypesOfSingleton.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/SubTypesOfSingleton.java
@@ -187,7 +187,7 @@
 	/**
 	 * Returns the element type of the given TType, if an array type, or the
 	 * given TType itself, otherwise.
-	 * 
+	 *
 	 * @param t a type
 	 * @return the element type
 	 */
@@ -232,7 +232,7 @@
 
 		return other.fUpperBound.equals(fUpperBound);
 	}
-	
+
 	@Override
 	public int hashCode() {
 		return fUpperBound.hashCode();
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/SubTypesSet.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/SubTypesSet.java
index 3711b7b..cb1b8a6 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/SubTypesSet.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/SubTypesSet.java
@@ -58,7 +58,7 @@
 	public int hashCode() {
 		return fUpperBounds.hashCode();
 	}
-	
+
 	@Override
 	protected TypeSet specialCasesIntersectedWith(TypeSet s2) {
 		if (fUpperBounds.equals(s2))
@@ -179,7 +179,7 @@
 	/**
 	 * Returns the element type of the given TType, if an array type, or the
 	 * given TType itself, otherwise.
-	 * 
+	 *
 	 * @param t a type
 	 * @return the element type
 	 */
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/SuperTypesOfSingleton.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/SuperTypesOfSingleton.java
index f31d9cd..b55d1b2 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/SuperTypesOfSingleton.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/SuperTypesOfSingleton.java
@@ -221,7 +221,7 @@
 	public int hashCode() {
 		return fLowerBound.hashCode();
 	}
-	
+
 	@Override
 	public String toString() {
 		return "<" + fID + ": superTypes(" + fLowerBound.getPrettySignature() + ")>"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/SuperTypesSet.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/SuperTypesSet.java
index c236c56..6b84f8b 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/SuperTypesSet.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/SuperTypesSet.java
@@ -204,7 +204,7 @@
 	public int hashCode() {
 		return fLowerBounds.hashCode();
 	}
-	
+
 	@Override
 	public Iterator<TType> iterator() {
 		return enumerate().iterator();
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/TypeSet.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/TypeSet.java
index 8c94462..6ed2197 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/TypeSet.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/TypeSet.java
@@ -63,16 +63,16 @@
 	abstract public TypeSet makeClone();
 
 	/**
-	 * @param s2 another type set 
+	 * @param s2 another type set
 	 * @return intersection of this type set with the given type set
 	 */
 	protected TypeSet specialCasesIntersectedWith(TypeSet s2) {
 		return null;
 	}
-	
+
 	@Override
 	public abstract boolean equals(Object obj);
-	
+
 	@Override
 	public abstract int hashCode();
 
@@ -118,7 +118,7 @@
 	/**
 	 * Returns the TypeSet resulting from union'ing the receiver with the argument.
 	 * Does not modify the receiver or the argument sets.
-	 * 
+	 *
 	 * @param that another type set
 	 * @return the union type set
 	 */
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/TypeSetIntersection.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/TypeSetIntersection.java
index ea2218e..70c236d 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/TypeSetIntersection.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/TypeSetIntersection.java
@@ -254,7 +254,7 @@
 	public int hashCode() {
 		return fLHS.hashCode() * 37 + fRHS.hashCode();
 	}
-	
+
 	@Override
 	public String toString() {
 		return "<" + fID + ": intersect(" + fLHS + "," + fRHS + ")>"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/TypeSetUnion.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/TypeSetUnion.java
index ae00360..f9e2b78 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/TypeSetUnion.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/TypeSetUnion.java
@@ -74,7 +74,7 @@
 	public int hashCode() {
 		return fLHS.hashCode() * 37 + fRHS.hashCode();
 	}
-	
+
 	@Override
 	public TypeSet upperBound() {
 		throw new IllegalStateException("unimplemented"); //$NON-NLS-1$
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/TTypes.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/TTypes.java
index d5530fb..6b25f0d 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/TTypes.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/TTypes.java
@@ -48,9 +48,9 @@
 				return;
 
 			if (type.isTypeVariable() || type.isCaptureType()) {
-				TType[] bounds= ((AbstractTypeVariable) type).getBounds();
-				for (int i= 0; i < bounds.length; i++)
-					fWorklist.push(bounds[i].getTypeDeclaration());
+				for (TType bound : ((AbstractTypeVariable) type).getBounds()) {
+					fWorklist.push(bound.getTypeDeclaration());
+				}
 
 			} else {
 				TType superclass= type.getSuperclass();
@@ -60,9 +60,9 @@
 				} else {
 					fWorklist.push(superclass.getTypeDeclaration());
 				}
-				TType[] interfaces= type.getInterfaces();
-				for (int i= 0; i < interfaces.length; i++)
-					fWorklist.push(interfaces[i].getTypeDeclaration());
+				for (TType intf : type.getInterfaces()) {
+					fWorklist.push(intf.getTypeDeclaration());
+				}
 			}
 		}
 
@@ -88,9 +88,9 @@
 		@Override
 		public TType next() {
 			TType result= fWorklist.pop();
-			TType[] subTypes= result.getSubTypes();
-			for (int i= 0; i < subTypes.length; i++)
-				fWorklist.push(subTypes[i].getTypeDeclaration());
+			for (TType subType : result.getSubTypes()) {
+				fWorklist.push(subType.getTypeDeclaration());
+			}
 
 			return result;
 		}
@@ -138,10 +138,10 @@
 		} else if (rhs.isTypeVariable()) {
 			if (rhs.canAssignTo(lhs))
 				return true;
-			TType[] bounds= ((TypeVariable) rhs).getBounds();
-			for (int i= 0; i < bounds.length; i++) {
-				if (canAssignTo(bounds[i], lhs))
+			for (TType bound : ((TypeVariable) rhs).getBounds()) {
+				if (canAssignTo(bound, lhs)) {
 					return true;
+				}
 			}
 			return lhs.isJavaLangObject();
 
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/TypeEquivalenceSet.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/TypeEquivalenceSet.java
index 8b8471c..80a5335 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/TypeEquivalenceSet.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints2/TypeEquivalenceSet.java
@@ -33,9 +33,11 @@
 	}
 
 	public void add(ConstraintVariable2 variable) {
-		for (int i= 0; i < fVariables.length; i++)
-			if (fVariables[i] == variable)
+		for (ConstraintVariable2 constraintVariable : fVariables) {
+			if (constraintVariable == variable) {
 				return;
+			}
+		}
 
 		int length= fVariables.length;
 		ConstraintVariable2[] newElements= new ConstraintVariable2[length + 1];
@@ -59,8 +61,7 @@
 			List<ConstraintVariable2> elements= Arrays.asList(fVariables);
 			ArrayList<ConstraintVariable2> result= new ArrayList<>(fVariables.length + variables.length);
 			result.addAll(elements);
-			for (int i= 0; i < variables.length; i++) {
-				ConstraintVariable2 right= variables[i];
+			for (ConstraintVariable2 right : variables) {
 				if (! result.contains(right))
 					result.add(right);
 			}
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/AbstractExceptionAnalyzer.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/AbstractExceptionAnalyzer.java
index 1a7e97f..1901117 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/AbstractExceptionAnalyzer.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/AbstractExceptionAnalyzer.java
@@ -148,8 +148,8 @@
 	protected void addExceptions(ITypeBinding[] exceptions, AST ast) {
 		if(exceptions == null)
 			return;
-		for (int i= 0; i < exceptions.length;i++) {
-			addException(exceptions[i], ast);
+		for (ITypeBinding exception : exceptions) {
+			addException(exception, ast);
 		}
 	}
 
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/Changes.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/Changes.java
index c2b5842..dcd8938 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/Changes.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/Changes.java
@@ -33,8 +33,7 @@
 	}
 
 	private static void getModifiedFiles(List<IFile> result, Change[] changes) {
-		for (int i= 0; i < changes.length; i++) {
-			Change change= changes[i];
+		for (Change change : changes) {
 			Object modifiedElement= change.getModifiedElement();
 			if (modifiedElement instanceof IAdaptable) {
 				IFile file= ((IAdaptable)modifiedElement).getAdapter(IFile.class);
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/QualifiedNameFinder.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/QualifiedNameFinder.java
index 3359185..e439a7b 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/QualifiedNameFinder.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/QualifiedNameFinder.java
@@ -168,9 +168,7 @@
 	}
 
 	private static void addReferencingProjects(IProject root, Set<IProject> res) {
-		IProject[] projects= root.getReferencingProjects();
-		for (int i= 0; i < projects.length; i++) {
-			IProject project= projects[i];
+		for (IProject project : root.getReferencingProjects()) {
 			if (res.add(project)) {
 				addReferencingProjects(project, res);
 			}
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/SelectionAwareSourceRangeComputer.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/SelectionAwareSourceRangeComputer.java
index 2e95a63..f2ec772 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/SelectionAwareSourceRangeComputer.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/SelectionAwareSourceRangeComputer.java
@@ -113,7 +113,7 @@
 		int newEnd= Math.max(fSelectionStart + pos, currentNode.getStartPosition() + currentNode.getLength());
 		range= fRanges.get(currentNode);
 		fRanges.put(currentNode, new SourceRange(range.getStartPosition(), newEnd - range.getStartPosition()));
-		
+
 		// The extended source range of the last child node can end after the selection.
 		// We have to ensure that the source range of such child nodes is also capped by the selection range.
 		// Example: (/*]*/TRANSFORMER::transform/*[*/)
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/TextEditBasedChangeManager.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/TextEditBasedChangeManager.java
index 0e8c2eb..d2b2373 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/TextEditBasedChangeManager.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/TextEditBasedChangeManager.java
@@ -14,7 +14,6 @@
 package org.eclipse.jdt.internal.corext.refactoring.util;
 
 import java.util.Arrays;
-import java.util.Comparator;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
@@ -91,13 +90,10 @@
 		Set<ICompilationUnit> cuSet= fMap.keySet();
 		ICompilationUnit[] cus= cuSet.toArray(new ICompilationUnit[cuSet.size()]);
 		// sort by cu name:
-		Arrays.sort(cus, new Comparator<ICompilationUnit>() {
-			@Override
-			public int compare(ICompilationUnit o1, ICompilationUnit o2) {
-				String name1= o1.getElementName();
-				String name2= o2.getElementName();
-				return name1.compareTo(name2);
-			}
+		Arrays.sort(cus, (o1, o2) -> {
+			String name1= o1.getElementName();
+			String name2= o2.getElementName();
+			return name1.compareTo(name2);
 		});
 
 		TextEditBasedChange[] textChanges= new TextEditBasedChange[cus.length];
diff --git a/org.eclipse.jdt.ui/internal compatibility/org/eclipse/jdt/internal/ui/dialogs/TypeInfoViewer.java b/org.eclipse.jdt.ui/internal compatibility/org/eclipse/jdt/internal/ui/dialogs/TypeInfoViewer.java
index b51571c..ad0ce86 100644
--- a/org.eclipse.jdt.ui/internal compatibility/org/eclipse/jdt/internal/ui/dialogs/TypeInfoViewer.java
+++ b/org.eclipse.jdt.ui/internal compatibility/org/eclipse/jdt/internal/ui/dialogs/TypeInfoViewer.java
@@ -234,9 +234,8 @@
 			fProviderExtension= extension;
 			List locations= new ArrayList();
 			List labels= new ArrayList();
-			IVMInstallType[] installs= JavaRuntime.getVMInstallTypes();
-			for (int i= 0; i < installs.length; i++) {
-				processVMInstallType(installs[i], locations, labels);
+			for (IVMInstallType install : JavaRuntime.getVMInstallTypes()) {
+				processVMInstallType(install, locations, labels);
 			}
 			fInstallLocations= (String[])locations.toArray(new String[locations.size()]);
 			fVMNames= (String[])labels.toArray(new String[labels.size()]);
@@ -247,16 +246,15 @@
 		}
 		private void processVMInstallType(IVMInstallType installType, List locations, List labels) {
 			if (installType != null) {
-				IVMInstall[] installs= installType.getVMInstalls();
 				boolean isMac= Platform.OS_MACOSX.equals(Platform.getOS());
 				final String HOME_SUFFIX= "/Home"; //$NON-NLS-1$
-				for (int i= 0; i < installs.length; i++) {
-					String label= getFormattedLabel(installs[i].getName());
-					LibraryLocation[] libLocations= installs[i].getLibraryLocations();
+				for (IVMInstall install : installType.getVMInstalls()) {
+					String label= getFormattedLabel(install.getName());
+					LibraryLocation[] libLocations= install.getLibraryLocations();
 					if (libLocations != null) {
 						processLibraryLocation(libLocations, label);
 					} else {
-						String filePath= installs[i].getInstallLocation().getAbsolutePath();
+						String filePath= install.getInstallLocation().getAbsolutePath();
 						// on MacOS X install locations end in an additional "/Home" segment; remove it
 						if (isMac && filePath.endsWith(HOME_SUFFIX))
 							filePath= filePath.substring(0, filePath.length()- HOME_SUFFIX.length() + 1);
@@ -267,8 +265,7 @@
 			}
 		}
 		private void processLibraryLocation(LibraryLocation[] libLocations, String label) {
-			for (int l= 0; l < libLocations.length; l++) {
-				LibraryLocation location= libLocations[l];
+			for (LibraryLocation location : libLocations) {
 				fLib2Name.put(location.getSystemLibraryPath().toString(), label);
 			}
 		}
@@ -704,8 +701,7 @@
 		@Override
 		protected TypeNameMatch[] getSearchResult(Set filteredHistory, ProgressMonitor monitor) throws CoreException {
 			List result= new ArrayList(2048);
-			for (int i= 0; i < fLastResult.length; i++) {
-				TypeNameMatch type= fLastResult[i];
+			for (TypeNameMatch type : fLastResult) {
 				if (filteredHistory.contains(type))
 					continue;
 				if (fFilter.matchesCachedResult(type))
@@ -1023,8 +1019,7 @@
 			return;
 		fFullyQualifySelection= value;
 		if (fLastSelection != null) {
-			for (int i= 0; i < fLastSelection.length; i++) {
-				TableItem item= fLastSelection[i];
+			for (TableItem item : fLastSelection) {
 				Object data= item.getData();
 				if (data instanceof TypeNameMatch) {
 					item.setText(getQualifiedText((TypeNameMatch)data));
@@ -1036,8 +1031,8 @@
 	public TypeNameMatch[] getSelection() {
 		TableItem[] items= fTable.getSelection();
 		List result= new ArrayList(items.length);
-		for (int i= 0; i < items.length; i++) {
-			Object data= items[i].getData();
+		for (TableItem item : items) {
+			Object data= item.getData();
 			if (data instanceof TypeNameMatch) {
 				result.add(data);
 			}
@@ -1178,8 +1173,7 @@
 	private boolean canEnable(TableItem[] selection) {
 		if (selection.length == 0)
 			return false;
-		for (int i= 0; i < selection.length; i++) {
-			TableItem item= selection[i];
+		for (TableItem item : selection) {
 			Object data= item.getData();
 			if (!(data instanceof TypeNameMatch))
 				return false;
diff --git a/org.eclipse.jdt.ui/internal compatibility/org/eclipse/jdt/internal/ui/dialogs/TypeSelectionDialog2.java b/org.eclipse.jdt.ui/internal compatibility/org/eclipse/jdt/internal/ui/dialogs/TypeSelectionDialog2.java
index 4f0598c..50f6a1d 100644
--- a/org.eclipse.jdt.ui/internal compatibility/org/eclipse/jdt/internal/ui/dialogs/TypeSelectionDialog2.java
+++ b/org.eclipse.jdt.ui/internal compatibility/org/eclipse/jdt/internal/ui/dialogs/TypeSelectionDialog2.java
@@ -195,15 +195,13 @@
 	    } else {
 		    if (fValidator != null) {
 				List jElements= new ArrayList();
-				for (int i= 0; i < selection.length; i++) {
-					IType type= selection[i].getType();
+				for (TypeNameMatch typeInfo : selection) {
+					IType type= typeInfo.getType();
 					if (type != null) {
 						jElements.add(type);
 					} else {
-			    		status= new Status(IStatus.ERROR, JavaPlugin.getPluginId(), IStatus.ERROR,
-			    			Messages.format(JavaUIMessages.TypeSelectionDialog_error_type_doesnot_exist, selection[i].getFullyQualifiedName()),
-			    			null);
-			    		break;
+						status= new Status(IStatus.ERROR, JavaPlugin.getPluginId(), IStatus.ERROR, Messages.format(JavaUIMessages.TypeSelectionDialog_error_type_doesnot_exist, typeInfo.getFullyQualifiedName()), null);
+						break;
 					}
 				}
 				if (status == null) {
@@ -280,8 +278,7 @@
 		
 		OpenTypeHistory history= OpenTypeHistory.getInstance();
 		List result= new ArrayList(selected.length);
-		for (int i= 0; i < selected.length; i++) {
-			TypeNameMatch typeInfo= selected[i];
+		for (TypeNameMatch typeInfo : selected) {
 			IType type= typeInfo.getType();
 			if (!type.exists()) {
 				String title= JavaUIMessages.TypeSelectionDialog_errorTitle; 
diff --git a/org.eclipse.jdt.ui/plugin.xml b/org.eclipse.jdt.ui/plugin.xml
index 9897d150..94718e1 100644
--- a/org.eclipse.jdt.ui/plugin.xml
+++ b/org.eclipse.jdt.ui/plugin.xml
@@ -7040,9 +7040,14 @@
             runAfter="org.eclipse.jdt.ui.cleanup.lambda">
       </cleanUp>
       <cleanUp
+            class="org.eclipse.jdt.internal.ui.fix.NumberSuffixCleanUp"
+            id="org.eclipse.jdt.ui.cleanup.number_suffix"
+            runAfter="org.eclipse.jdt.ui.cleanup.expressions">
+      </cleanUp>
+      <cleanUp
             class="org.eclipse.jdt.internal.ui.fix.UnusedCodeCleanUp"
             id="org.eclipse.jdt.ui.cleanup.unused_code"
-            runAfter="org.eclipse.jdt.ui.cleanup.expressions">
+            runAfter="org.eclipse.jdt.ui.cleanup.number_suffix">
       </cleanUp>
       <cleanUp
             class="org.eclipse.jdt.internal.ui.fix.Java50CleanUp"
diff --git a/org.eclipse.jdt.ui/pom.xml b/org.eclipse.jdt.ui/pom.xml
index 7d0bf4d..609886a 100644
--- a/org.eclipse.jdt.ui/pom.xml
+++ b/org.eclipse.jdt.ui/pom.xml
@@ -18,7 +18,7 @@
   </parent>
   <groupId>org.eclipse.jdt</groupId>
   <artifactId>org.eclipse.jdt.ui</artifactId>
-  <version>3.20.100-SNAPSHOT</version>
+  <version>3.21.0-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
   <properties>
     <code.ignoredWarnings>-warn:-deprecation,unavoidableGenericProblems</code.ignoredWarnings>
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ChangeExceptionsControl.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ChangeExceptionsControl.java
index 2bc3e75..316f877 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ChangeExceptionsControl.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ChangeExceptionsControl.java
@@ -14,7 +14,6 @@
 package org.eclipse.jdt.internal.ui.refactoring;
 
 import java.util.ArrayList;
-import java.util.Iterator;
 import java.util.List;
 
 import org.eclipse.swt.SWT;
@@ -55,6 +54,7 @@
 import org.eclipse.jdt.core.search.IJavaSearchScope;
 import org.eclipse.jdt.core.search.SearchEngine;
 
+import org.eclipse.jdt.internal.core.manipulation.util.BasicElementLabels;
 import org.eclipse.jdt.internal.corext.refactoring.ExceptionInfo;
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
@@ -63,7 +63,6 @@
 import org.eclipse.jdt.internal.ui.dialogs.FilteredTypesSelectionDialog;
 import org.eclipse.jdt.internal.ui.dialogs.StatusInfo;
 import org.eclipse.jdt.internal.ui.util.SWTUtil;
-import org.eclipse.jdt.internal.core.manipulation.util.BasicElementLabels;
 
 /**
  * A special control to add and remove thrown exceptions.
@@ -79,8 +78,7 @@
 		}
 		private ExceptionInfo[] removeMarkedAsDeleted(List<ExceptionInfo> exceptionInfos){
 			List<ExceptionInfo> result= new ArrayList<>(exceptionInfos.size());
-			for (Iterator<ExceptionInfo> iter= exceptionInfos.iterator(); iter.hasNext();) {
-				ExceptionInfo info= iter.next();
+			for (ExceptionInfo info : exceptionInfos) {
 				if (! info.isDeleted())
 					result.add(info);
 			}
@@ -292,8 +290,7 @@
 	}
 
 	private ExceptionInfo findExceptionInfo(IType exception) {
-		for (Iterator<ExceptionInfo> iter= fExceptionInfos.iterator(); iter.hasNext(); ) {
-			ExceptionInfo info= iter.next();
+		for (ExceptionInfo info : fExceptionInfos) {
 			if (info.getElement().equals(exception))
 				return info;
 		}
@@ -309,12 +306,12 @@
 			@Override
 			public void widgetSelected(SelectionEvent e) {
 				int index= getTable().getSelectionIndices()[0];
-				ExceptionInfo[] selected= getSelectedItems();
-				for (int i= 0; i < selected.length; i++) {
-					if (selected[i].isAdded())
-						fExceptionInfos.remove(selected[i]);
-					else
-						selected[i].markAsDeleted();
+				for (ExceptionInfo s : getSelectedItems()) {
+					if (s.isAdded()) {
+						fExceptionInfos.remove(s);
+					} else {
+						s.markAsDeleted();
+					}
 				}
 				restoreSelection(index);
 			}
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ChangeParametersControl.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ChangeParametersControl.java
index 21d558f..1306282 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ChangeParametersControl.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ChangeParametersControl.java
@@ -108,8 +108,7 @@
 		}
 		private ParameterInfo[] removeMarkedAsDeleted(List<ParameterInfo> paramInfos){
 			List<ParameterInfo> result= new ArrayList<>(paramInfos.size());
-			for (Iterator<ParameterInfo> iter= paramInfos.iterator(); iter.hasNext();) {
-				ParameterInfo info= iter.next();
+			for (ParameterInfo info : paramInfos) {
 				if (! info.isDeleted())
 					result.add(info);
 			}
@@ -536,12 +535,12 @@
 			@Override
 			public void widgetSelected(SelectionEvent e) {
 				int index= getTable().getSelectionIndices()[0];
-				ParameterInfo[] selected= getSelectedElements();
-				for (int i= 0; i < selected.length; i++) {
-					if (selected[i].isAdded())
-						fParameterInfos.remove(selected[i]);
-					else
-						selected[i].markAsDeleted();
+				for (ParameterInfo s : getSelectedElements()) {
+					if (s.isAdded()) {
+						fParameterInfos.remove(s);
+					} else {
+						s.markAsDeleted();
+					}
 				}
 				restoreSelection(index);
 			}
@@ -684,8 +683,7 @@
 		List<ParameterInfo> res= new ArrayList<>(elements.size());
 		List<ParameterInfo> deleted= new ArrayList<>();
 		ParameterInfo floating= null;
-		for (Iterator<ParameterInfo> iter= elements.iterator(); iter.hasNext();) {
-			ParameterInfo curr= iter.next();
+		for (ParameterInfo curr : elements) {
 			if (move.contains(curr)) {
 				res.add(curr);
 			} else if (curr.isDeleted()) {
@@ -725,8 +723,7 @@
 		if (fParameterInfos == null) // during initialization
 			return 0;
 		int result= 0;
-		for (Iterator<ParameterInfo> iter= fParameterInfos.iterator(); iter.hasNext();) {
-			ParameterInfo info= iter.next();
+		for (ParameterInfo info : fParameterInfos) {
 			if (! info.isDeleted())
 				result++;
 		}
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ChangeTypeWizard.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ChangeTypeWizard.java
index 6c955d0..8a65a8f 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ChangeTypeWizard.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ChangeTypeWizard.java
@@ -251,11 +251,13 @@
 		}
 
 		private TreeItem findItem(TreeItem[] items, ITypeBinding type){
-			for (int i=0; i < items.length; i++){
-				if (items[i].getData().equals(type)) return items[i];
+			for (TreeItem item : items) {
+				if (item.getData().equals(type)) {
+					return item;
+				}
 			}
-			for (int i=0; i < items.length; i++){
-				TreeItem item= findItem(items[i].getItems(), type);
+			for (TreeItem ti : items) {
+				TreeItem item= findItem(ti.getItems(), type);
 				if (item != null) return item;
 			}
 			return null;
@@ -286,7 +288,7 @@
 		 */
 		private void addTreeComponent(Composite parent) {
 			fTreeViewer= new TreeViewer(parent, SWT.SINGLE | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
-			
+
 			GridData gd= new GridData(GridData.FILL_BOTH);
 			gd.grabExcessHorizontalSpace= true;
 			gd.grabExcessVerticalSpace= true;
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ComboSelectionDialog.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ComboSelectionDialog.java
index 745a7ea..8b6c8e7 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ComboSelectionDialog.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ComboSelectionDialog.java
@@ -74,8 +74,8 @@
 
 		final Combo combo= new Combo(innerComposite, SWT.READ_ONLY);
 		SWTUtil.setDefaultVisibleItemCount(combo);
-		for (int i = 0; i < fAllowedStrings.length; i++) {
-			combo.add(fAllowedStrings[i]);
+		for (String allowedString : fAllowedStrings) {
+			combo.add(allowedString);
 		}
 		combo.select(fInitialSelectionIndex);
 		fSelection= combo.getItem(combo.getSelectionIndex());
@@ -94,8 +94,8 @@
 
 	private int getMaxStringLength() {
 		int max= 0;
-		for (int i= 0; i < fAllowedStrings.length; i++) {
-			max= Math.max(max, fAllowedStrings[i].length());
+		for (String allowedString : fAllowedStrings) {
+			max= Math.max(max, allowedString.length());
 		}
 		return max;
 	}
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/CompilationUnitChangeNode.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/CompilationUnitChangeNode.java
index d38a598..8656428 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/CompilationUnitChangeNode.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/CompilationUnitChangeNode.java
@@ -101,9 +101,7 @@
 		if (cunit != null) {
 			List<ChildNode> children= new ArrayList<>(5);
 			Map<IJavaElement, JavaLanguageNode> map= new HashMap<>(20);
-			TextEditBasedChangeGroup[] changes= getSortedChangeGroups(change);
-			for (int i= 0; i < changes.length; i++) {
-				TextEditBasedChangeGroup tec= changes[i];
+			for (TextEditBasedChangeGroup tec : getSortedChangeGroups(change)) {
 				try {
 					IJavaElement element= getModifiedJavaElement(tec, cunit);
 					if (element.equals(cunit)) {
@@ -142,9 +140,10 @@
 	private TextEditBasedChangeGroup[] getSortedChangeGroups(TextEditBasedChange change) {
 		TextEditBasedChangeGroup[] edits= change.getChangeGroups();
 		List<TextEditBasedChangeGroup> result= new ArrayList<>(edits.length);
-		for (int i= 0; i < edits.length; i++) {
-			if (!edits[i].getTextEditGroup().isEmpty())
-				result.add(edits[i]);
+		for (TextEditBasedChangeGroup edit : edits) {
+			if (!edit.getTextEditGroup().isEmpty()) {
+				result.add(edit);
+			}
 		}
 		Comparator<TextEditBasedChangeGroup> comparator= new OffsetComparator();
 		Collections.sort(result, comparator);
@@ -199,15 +198,13 @@
 			return false;
 		int sOffset= sourceRegion.getOffset();
 		int sEnd= sOffset + sLength - 1;
-		TextEdit[] edits= group.getTextEdits();
-		for (int i= 0; i < edits.length; i++) {
-			TextEdit edit= edits[i];
+		for (TextEdit edit : group.getTextEdits()) {
 			if (edit.isDeleted())
 				return false;
 			int rOffset= edit.getOffset();
 			int rLength= edit.getLength();
 			int rEnd= rOffset + rLength - 1;
-		    if (rLength == 0) {
+			if (rLength == 0) {
 				if (!(sOffset < rOffset && rOffset <= sEnd))
 					return false;
 			} else {
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ConvertAnonymousToNestedWizard.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ConvertAnonymousToNestedWizard.java
index 1a8e8e5..31959f4 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ConvertAnonymousToNestedWizard.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ConvertAnonymousToNestedWizard.java
@@ -43,7 +43,7 @@
 
 	/**
 	 * The dialog setting section for <code>ConvertAnonymousToNestedWizard</code>.
-	 * 
+	 *
 	 * @since 3.7
 	 */
 	static final String DIALOG_SETTING_SECTION= "ConvertAnonymousToNestedWizard"; //$NON-NLS-1$
@@ -69,28 +69,28 @@
 
 		/**
 		 * Stores the value of the declare as static option.
-		 * 
+		 *
 		 * @since 3.7
 		 */
 		private static final String DECLARE_AS_STATIC= "DeclareAsStatic"; //$NON-NLS-1$
 
 		/**
 		 * Stores the value of the declare as final option.
-		 * 
+		 *
 		 * @since 3.7
 		 */
 		private static final String DECLARE_AS_FINAL= "DeclareAsFinal"; //$NON-NLS-1$
 
 		/**
 		 * Stores the value of visibility control option.
-		 * 
+		 *
 		 * @since 3.7
 		 */
 		private static final String VISIBILITY_CONTROL= "VisibilityControl"; //$NON-NLS-1$
 
 		/**
 		 * Stores the dialog settings.
-		 * 
+		 *
 		 * @since 3.7
 		 */
 		private IDialogSettings fSettings;
@@ -102,7 +102,7 @@
 
 		/**
 		 * Initializes the default settings for the dialog options.
-		 * 
+		 *
 		 * @since 3.7
 		 */
 		private void initializeDefaultSettings() {
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ExtractClassWizard.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ExtractClassWizard.java
index daef2f6..d01bec0 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ExtractClassWizard.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ExtractClassWizard.java
@@ -273,8 +273,7 @@
 			table.setLayoutData(gridData);
 			Field[] fields= fDescriptor.getFields();
 			tv.setInput(fields);
-			for (int i= 0; i < fields.length; i++) {
-				Field field= fields[i];
+			for (Field field : fields) {
 				tv.setChecked(field, field.isCreateField());
 			}
 
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ExtractInterfaceWizard.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ExtractInterfaceWizard.java
index b7c158e..bfaee05 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ExtractInterfaceWizard.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ExtractInterfaceWizard.java
@@ -243,9 +243,10 @@
 		}
 
 		private static boolean containsMethods(IMember[] members) {
-			for (int i= 0; i < members.length; i++) {
-				if (members[i].getElementType() == IJavaElement.METHOD)
+			for (IMember member : members) {
+				if (member.getElementType() == IJavaElement.METHOD) {
 					return true;
+				}
 			}
 			return false;
 		}
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ExtractSupertypeMemberPage.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ExtractSupertypeMemberPage.java
index 8a93077..284987d 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ExtractSupertypeMemberPage.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ExtractSupertypeMemberPage.java
@@ -316,8 +316,8 @@
 				if (result == Window.OK) {
 					final Object[] objects= dialog.getResult();
 					if (objects != null && objects.length > 0) {
-						for (int index= 0; index < objects.length; index++) {
-							fTypesToExtract.add((IType) objects[index]);
+						for (Object object : objects) {
+							fTypesToExtract.add((IType) object);
 						}
 						fTableViewer.setInput(fTypesToExtract.toArray());
 						handleTypesChanged();
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ExtractTempWizard.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ExtractTempWizard.java
index 3dd8b81..740af5f 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ExtractTempWizard.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ExtractTempWizard.java
@@ -150,7 +150,7 @@
 				}
 			});
 		}
-		
+
 		private void addDeclareTypeVarCheckbox(Composite result, RowLayouter layouter) {
 			if (getExtractTempRefactoring().isVarTypeAllowed()) {
 				String title= RefactoringMessages.ExtractTempInputPage_declare_type_var;
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/InputPageUtil.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/InputPageUtil.java
index a536f6a..9965f0a 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/InputPageUtil.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/InputPageUtil.java
@@ -99,8 +99,8 @@
 
 	/**
 	 * Creates a signature preview viewer in a parent composite with a 1-column GridLayout.
-	 * 
-	 * @param parent the parent 
+	 *
+	 * @param parent the parent
 	 * @return the preview viewer
 	 * @since 3.9
 	 */
@@ -114,12 +114,12 @@
 		signaturePreview.adaptBackgroundColor(parent);
 		signaturePreview.setDocument(new Document());
 		signaturePreview.setEditable(false);
-	
+
 		GridData gdata= new GridData(GridData.FILL_BOTH);
 		gdata.widthHint= new PixelConverter(textWidget).convertWidthInCharsToPixels(50);
 		gdata.heightHint= textWidget.getLineHeight() * 2;
 		textWidget.setLayoutData(gdata);
-		
+
 		return signaturePreview;
 	}
 }
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/IntroduceParameterObjectWizard.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/IntroduceParameterObjectWizard.java
index 49d149d..9a8615a 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/IntroduceParameterObjectWizard.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/IntroduceParameterObjectWizard.java
@@ -16,7 +16,6 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
@@ -72,6 +71,7 @@
 import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jdt.core.JavaModelException;
 
+import org.eclipse.jdt.internal.core.manipulation.util.BasicElementLabels;
 import org.eclipse.jdt.internal.corext.refactoring.ParameterInfo;
 import org.eclipse.jdt.internal.corext.refactoring.structure.ChangeSignatureProcessor;
 import org.eclipse.jdt.internal.corext.refactoring.structure.IntroduceParameterObjectProcessor;
@@ -83,7 +83,6 @@
 import org.eclipse.jdt.internal.ui.javaeditor.JavaSourceViewer;
 import org.eclipse.jdt.internal.ui.util.ExceptionHandler;
 import org.eclipse.jdt.internal.ui.util.SWTUtil;
-import org.eclipse.jdt.internal.core.manipulation.util.BasicElementLabels;
 
 public class IntroduceParameterObjectWizard extends RefactoringWizard {
 
@@ -121,8 +120,7 @@
 					IntroduceParameterObjectProcessor refactoring= (IntroduceParameterObjectProcessor) inputElement;
 					List<ParameterInfo> parameterInfos= refactoring.getParameterInfos();
 					List<ParameterInfo> result= new ArrayList<>(parameterInfos.size());
-					for (Iterator<ParameterInfo> iter= parameterInfos.iterator(); iter.hasNext();) {
-						ParameterInfo pi= iter.next();
+					for (ParameterInfo pi : parameterInfos) {
 						if (!pi.isAdded())
 							result.add(pi);
 					}
@@ -252,9 +250,7 @@
 			IJavaProject project= fProcessor.getMethod().getJavaProject();
 			String sourceLevel= project.getOption(JavaCore.COMPILER_SOURCE, true);
 			String compliance= project.getOption(JavaCore.COMPILER_COMPLIANCE, true);
-			List<ParameterInfo> parameterInfos= fProcessor.getParameterInfos();
-			for (Iterator<ParameterInfo> iter= parameterInfos.iterator(); iter.hasNext();) {
-				ParameterInfo pi= iter.next();
+			for (ParameterInfo pi : fProcessor.getParameterInfos()) {
 				if (names.contains(pi.getNewName())) {
 					setErrorMessage(Messages.format(RefactoringMessages.IntroduceParameterObjectWizard_parametername_check_notunique, BasicElementLabels.getJavaElementName(pi.getNewName())));
 					setPageComplete(false);
@@ -440,8 +436,7 @@
 			table.setLayoutData(gridData);
 			tv.setInput(fProcessor);
 			List<ParameterInfo> parameterInfos= fProcessor.getParameterInfos();
-			for (Iterator<ParameterInfo> iter= parameterInfos.iterator(); iter.hasNext();) {
-				ParameterInfo pi= iter.next();
+			for (ParameterInfo pi : parameterInfos) {
 				tv.setChecked(pi, pi.isCreateField());
 			}
 			tv.refresh(true);
@@ -605,10 +600,10 @@
 					pi.setNewName(string);
 				}
 			});
-			
+
 			TableColumn columnName= viewerColumn.getColumn();
 			columnName.setText(RefactoringMessages.IntroduceParameterObjectWizard_name_column);
-			
+
 			TableColumnLayout layout= new TableColumnLayout();
 			layout.setColumnData(columnType, new ColumnWeightData(50, convertWidthInCharsToPixels(20), true));
 			layout.setColumnData(columnName, new ColumnWeightData(50, convertWidthInCharsToPixels(20), true));
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/MoveInstanceMethodWizard.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/MoveInstanceMethodWizard.java
index c1ee538..fbe4618 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/MoveInstanceMethodWizard.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/MoveInstanceMethodWizard.java
@@ -145,7 +145,7 @@
 			composite.setLayout(tableColumnLayout);
 			tableColumnLayout.setColumnData(columnType, new ColumnWeightData(60, true));
 			tableColumnLayout.setColumnData(columnName, new ColumnWeightData(40, true));
-			
+
 			final TableViewer viewer= new TableViewer(table);
 			viewer.setContentProvider(ArrayContentProvider.getInstance());
 			viewer.setLabelProvider(new TargetLabelProvider());
@@ -162,10 +162,9 @@
 					final Object element= ((IStructuredSelection) event.getSelection()).getFirstElement();
 					if (element instanceof IVariableBinding) {
 						final IVariableBinding target= (IVariableBinding) element;
-						final IVariableBinding[] targets= fProcessor.getPossibleTargets();
 						boolean success= false;
-						for (int index= 0; index < targets.length; index++) {
-							if (Bindings.equals(target, targets[index])) {
+						for (IVariableBinding v : fProcessor.getPossibleTargets()) {
+							if (Bindings.equals(target, v)) {
 								handleTargetChanged(target);
 								success= true;
 								break;
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ParameterEditDialog.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ParameterEditDialog.java
index dec3226..560d778 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ParameterEditDialog.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/ParameterEditDialog.java
@@ -183,8 +183,7 @@
 			result[1]= validateName();
 			result[2]= validateType();
 		}
-		for (int i= 0; i < result.length; i++) {
-			IStatus status= result[i];
+		for (IStatus status : result) {
 			if (status != null && !status.isOK()) {
 				updateStatus(status);
 				return;
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/PromoteTempWizard.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/PromoteTempWizard.java
index 0da3576..4644478 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/PromoteTempWizard.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/PromoteTempWizard.java
@@ -164,8 +164,8 @@
 		private void updateButtonsEnablement() {
 			fDeclareFinalCheckbox.setEnabled(getPromoteTempRefactoring().canEnableSettingFinal());
 			fDeclareStaticCheckbox.setEnabled(getPromoteTempRefactoring().canEnableSettingStatic());
-			for (int i= 0; i < fInitializeInRadioButtons.length; i++) {
-				fInitializeInRadioButtons[i].setEnabled(canEnable(getDataAsInt(fInitializeInRadioButtons[i])));
+			for (Button initializeInRadioButton : fInitializeInRadioButtons) {
+				initializeInRadioButton.setEnabled(canEnable(getDataAsInt(initializeInRadioButton)));
 			}
 		}
 
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/PullPushCheckboxTableViewer.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/PullPushCheckboxTableViewer.java
index 13a8254..588d430 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/PullPushCheckboxTableViewer.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/PullPushCheckboxTableViewer.java
@@ -55,8 +55,7 @@
 	private void setCheckState(IMemberActionInfo[] infos) {
 		if (infos == null)
 			return;
-		for (int i= 0; i < infos.length; i++) {
-			IMemberActionInfo info= infos[i];
+		for (IMemberActionInfo info : infos) {
 			setChecked(info, PullPushCheckboxTableViewer.getCheckState(info));
 		}
 	}
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/PullUpMemberPage.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/PullUpMemberPage.java
index a50682c..eed83cf 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/PullUpMemberPage.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/PullUpMemberPage.java
@@ -290,8 +290,7 @@
 
 	private static int getEditableCount(final MemberActionInfo[] infos) {
 		int result= 0;
-		for (int i= 0; i < infos.length; i++) {
-			final MemberActionInfo info= infos[i];
+		for (PullUpMemberPage.MemberActionInfo info : infos) {
 			if (info.isEditable())
 				result++;
 		}
@@ -303,8 +302,8 @@
 	}
 
 	private static void setActionForInfos(final MemberActionInfo[] infos, final int action) {
-		for (int i= 0; i < infos.length; i++) {
-			infos[i].setAction(action);
+		for (PullUpMemberPage.MemberActionInfo info : infos) {
+			info.setAction(action);
 		}
 	}
 
@@ -680,8 +679,8 @@
 		fSuperTypesCombo= new Combo(parent, SWT.READ_ONLY);
 		SWTUtil.setDefaultVisibleItemCount(fSuperTypesCombo);
 		if (fCandidateTypes.length > 0) {
-			for (int i= 0; i < fCandidateTypes.length; i++) {
-				final String comboLabel= fCandidateTypes[i].getFullyQualifiedName('.');
+			for (IType candidateType : fCandidateTypes) {
+				final String comboLabel= candidateType.getFullyQualifiedName('.');
 				fSuperTypesCombo.add(comboLabel);
 			}
 			fSuperTypesCombo.select(fCandidateTypes.length - 1);
@@ -755,8 +754,7 @@
 	private MemberActionInfo[] getActiveInfos() {
 		final MemberActionInfo[] infos= getTableInput();
 		final List<MemberActionInfo> result= new ArrayList<>(infos.length);
-		for (int i= 0; i < infos.length; i++) {
-			final MemberActionInfo info= infos[i];
+		for (PullUpMemberPage.MemberActionInfo info : infos) {
 			if (info.isActive())
 				result.add(info);
 		}
@@ -769,9 +767,10 @@
 			return -1;
 
 		final int code= infos[0].getAction();
-		for (int i= 0; i < infos.length; i++) {
-			if (code != infos[i].getAction())
+		for (PullUpMemberPage.MemberActionInfo info : infos) {
+			if (code != info.getAction()) {
 				return -1;
+			}
 		}
 		return code;
 	}
@@ -816,8 +815,8 @@
 	private IMember[] getMembers() {
 		final MemberActionInfo[] infos= getTableInput();
 		final List<IMember> result= new ArrayList<>(infos.length);
-		for (int index= 0; index < infos.length; index++) {
-			result.add(infos[index].getMember());
+		for (PullUpMemberPage.MemberActionInfo info : infos) {
+			result.add(info.getMember());
 		}
 		return result.toArray(new IMember[result.size()]);
 	}
@@ -836,9 +835,7 @@
 
 	private void getMembersForAction(int action, boolean onlyMethods, List<IMember> result) {
 		boolean isDestinationInterface= isDestinationInterface();
-		final MemberActionInfo[] infos= getTableInput();
-		for (int index= 0; index < infos.length; index++) {
-			MemberActionInfo info= infos[index];
+		for (PullUpMemberPage.MemberActionInfo info : getTableInput()) {
 			int infoAction= info.getAction();
 			boolean isMethodInfo= info.isMethodInfo();
 			if (!isMethodInfo && onlyMethods)
@@ -947,10 +944,11 @@
 
 	private void setActionForMembers(final IMember[] members, final int action) {
 		final MemberActionInfo[] infos= getTableInput();
-		for (int i= 0; i < members.length; i++) {
-			for (int j= 0; j < infos.length; j++) {
-				if (infos[j].getMember().equals(members[i]))
-					infos[j].setAction(action);
+		for (IMember member : members) {
+			for (PullUpMemberPage.MemberActionInfo info : infos) {
+				if (info.getMember().equals(member)) {
+					info.setAction(action);
+				}
 			}
 		}
 	}
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/PullUpMethodPage.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/PullUpMethodPage.java
index 16caf6c..4dbedac 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/PullUpMethodPage.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/PullUpMethodPage.java
@@ -99,10 +99,10 @@
 	private static class PullUpFilter extends ViewerFilter {
 
 		private static boolean anySubtypeCanBeShown(final IType type, final Map<IType, IMember[]> typeToMemberArray, final ITypeHierarchy hierarchy) {
-			final IType[] subTypes= hierarchy.getSubtypes(type);
-			for (int i= 0; i < subTypes.length; i++) {
-				if (canBeShown(subTypes[i], typeToMemberArray, hierarchy))
+			for (IType subType : hierarchy.getSubtypes(type)) {
+				if (canBeShown(subType, typeToMemberArray, hierarchy)) {
 					return true;
+				}
 			}
 			return false;
 		}
@@ -115,9 +115,7 @@
 
 		private static Set<IType> computeShowableSubtypesOfMainType(final ITypeHierarchy hierarchy, final Map<IType, IMember[]> typeToMemberArray) {
 			final Set<IType> result= new HashSet<>();
-			final IType[] subtypes= hierarchy.getAllSubtypes(hierarchy.getType());
-			for (int i= 0; i < subtypes.length; i++) {
-				final IType subtype= subtypes[i];
+			for (IType subtype : hierarchy.getAllSubtypes(hierarchy.getType())) {
 				if (canBeShown(subtype, typeToMemberArray, hierarchy))
 					result.add(subtype);
 			}
@@ -246,8 +244,7 @@
 	// IType -> Set of IMember
 	private static Map<IType, HashSet<IMember>> createTypeToMemberSetMapping(final IMember[] members) {
 		final Map<IType, HashSet<IMember>> typeToMemberSet= new HashMap<>();
-		for (int i= 0; i < members.length; i++) {
-			final IMember member= members[i];
+		for (IMember member : members) {
 			final IType type= member.getDeclaringType();
 			if (!typeToMemberSet.containsKey(type))
 				typeToMemberSet.put(type, new HashSet<IMember>());
@@ -436,9 +433,10 @@
 	private IMethod[] getCheckedMethods() {
 		final Object[] checked= fTreeViewer.getCheckedElements();
 		final List<IMethod> members= new ArrayList<>(checked.length);
-		for (int i= 0; i < checked.length; i++) {
-			if (checked[i] instanceof IMethod)
-				members.add((IMethod) checked[i]);
+		for (Object c : checked) {
+			if (c instanceof IMethod) {
+				members.add((IMethod) c);
+			}
 		}
 		return members.toArray(new IMethod[members.size()]);
 	}
@@ -521,16 +519,14 @@
 	}
 
 	private void precheckElements(final ContainerCheckedTreeViewer treeViewer) {
-		final IMember[] members= fProcessor.getMembersToMove();
-		for (int i= 0; i < members.length; i++) {
-			treeViewer.setChecked(members[i], true);
+		for (IMember member : fProcessor.getMembersToMove()) {
+			treeViewer.setChecked(member, true);
 		}
 	}
 
 	private void removeAllTreeViewFilters() {
-		final ViewerFilter[] filters= fTreeViewer.getFilters();
-		for (int i= 0; i < filters.length; i++) {
-			fTreeViewer.removeFilter(filters[i]);
+		for (ViewerFilter filter : fTreeViewer.getFilters()) {
+			fTreeViewer.removeFilter(filter);
 		}
 	}
 
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/PushDownWizard.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/PushDownWizard.java
index f67b154..05babf4 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/PushDownWizard.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/PushDownWizard.java
@@ -200,16 +200,17 @@
 
 		private static int countEditableInfos(final MemberActionInfo[] infos) {
 			int result= 0;
-			for (int index= 0; index < infos.length; index++) {
-				if (infos[index].isEditable())
+			for (MemberActionInfo info : infos) {
+				if (info.isEditable()) {
 					result++;
+				}
 			}
 			return result;
 		}
 
 		private static void setInfoAction(final MemberActionInfo[] infos, final int action) {
-			for (int index= 0; index < infos.length; index++) {
-				infos[index].setAction(action);
+			for (MemberActionInfo info : infos) {
+				info.setAction(action);
 			}
 		}
 
@@ -250,10 +251,8 @@
 		}
 
 		private int countInfosForAction(final int action) {
-			final MemberActionInfo[] infos= (MemberActionInfo[]) fTableViewer.getInput();
 			int count= 0;
-			for (int index= 0; index < infos.length; index++) {
-				final MemberActionInfo info= infos[index];
+			for (MemberActionInfo info : (MemberActionInfo[]) fTableViewer.getInput()) {
 				if (info.getAction() == action)
 					count++;
 			}
@@ -471,8 +470,7 @@
 		private MemberActionInfo[] getActiveInfos() {
 			final MemberActionInfo[] infos= fProcessor.getMemberActionInfos();
 			final List<MemberActionInfo> result= new ArrayList<>(infos.length);
-			for (int index= 0; index < infos.length; index++) {
-				final MemberActionInfo info= infos[index];
+			for (MemberActionInfo info : infos) {
 				if (info.isActive())
 					result.add(info);
 			}
@@ -485,9 +483,10 @@
 				return -1;
 
 			final int code= infos[0].getAction();
-			for (int index= 0; index < infos.length; index++) {
-				if (code != infos[index].getAction())
+			for (MemberActionInfo info : infos) {
+				if (code != info.getAction()) {
 					return -1;
+				}
 			}
 			return code;
 		}
@@ -513,8 +512,8 @@
 		private IMember[] getMembers() {
 			final MemberActionInfo[] infos= (MemberActionInfo[]) fTableViewer.getInput();
 			final List<IMember> result= new ArrayList<>(infos.length);
-			for (int index= 0; index < infos.length; index++) {
-				result.add(infos[index].getMember());
+			for (MemberActionInfo info : infos) {
+				result.add(info.getMember());
 			}
 			return result.toArray(new IMember[result.size()]);
 		}
@@ -550,10 +549,11 @@
 
 		private void setActionForMembers(final IMember[] members, final int action) {
 			final MemberActionInfo[] infos= (MemberActionInfo[]) fTableViewer.getInput();
-			for (int offset= 0; offset < members.length; offset++) {
-				for (int index= 0; index < infos.length; index++) {
-					if (infos[index].getMember().equals(members[offset]))
-						infos[index].setAction(action);
+			for (IMember member : members) {
+				for (MemberActionInfo info : infos) {
+					if (info.getMember().equals(member)) {
+						info.setAction(action);
+					}
 				}
 			}
 		}
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/QualifiedNameComponent.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/QualifiedNameComponent.java
index f128d4d..06cf274 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/QualifiedNameComponent.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/QualifiedNameComponent.java
@@ -67,9 +67,8 @@
 	@Override
 	public void setEnabled(boolean enabled) {
 		super.setEnabled(enabled);
-		Control[] children= getChildren();
-		for (int i= 0; i < children.length; i++) {
-			children[i].setEnabled(enabled);
+		for (Control child : getChildren()) {
+			child.setEnabled(enabled);
 		}
 	}
 
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/RefactoringMessages.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/RefactoringMessages.java
index 8d85de6..f280048 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/RefactoringMessages.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/RefactoringMessages.java
@@ -332,7 +332,7 @@
 	public static String ExtractTempAction_label;
 
 	public static String ExtractTempInputPage_declare_final;
-	
+
 	public static String ExtractTempInputPage_declare_type_var;
 
 	public static String ExtractTempInputPage_enter_name;
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/actions/MoveStaticMembersAction.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/actions/MoveStaticMembersAction.java
index 94c6683..dde669d 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/actions/MoveStaticMembersAction.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/actions/MoveStaticMembersAction.java
@@ -95,9 +95,10 @@
 	public void run(IStructuredSelection selection) {
 		try {
 			IMember[] members= getSelectedMembers(selection);
-			for (int index= 0; index < members.length; index++) {
-				if (!ActionUtil.isEditable(getShell(), members[index]))
+			for (IMember member : members) {
+				if (!ActionUtil.isEditable(getShell(), member)) {
 					return;
+				}
 			}
 			if (RefactoringAvailabilityTester.isMoveStaticMembersAvailable(members))
 				RefactoringExecutionStarter.startMoveStaticMembersRefactoring(members, getShell());
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/actions/RenameJavaElementAction.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/actions/RenameJavaElementAction.java
index 1344b7c..1320152 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/actions/RenameJavaElementAction.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/actions/RenameJavaElementAction.java
@@ -129,7 +129,7 @@
 				}
 				else {
 					if (elements.length == 1) {
-						setEnabled(RefactoringAvailabilityTester.isRenameElementAvailable(elements[0]));						
+						setEnabled(RefactoringAvailabilityTester.isRenameElementAvailable(elements[0]));
 					} else {
 						ASTNode node= javaTextSelection.resolveCoveringNode();
 						setEnabled(node instanceof SimpleName);
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/binary/BinaryRefactoringHistoryWizard.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/binary/BinaryRefactoringHistoryWizard.java
index 485b2a3..6960fa3 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/binary/BinaryRefactoringHistoryWizard.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/binary/BinaryRefactoringHistoryWizard.java
@@ -143,13 +143,12 @@
 							final IProgressMonitor subMonitor= new SubProgressMonitor(monitor, 100, SubProgressMonitor.SUPPRESS_SUBTASK_LABEL);
 							try {
 								subMonitor.beginTask(JarImportMessages.JarImportWizard_prepare_import, projects.length * 100);
-								for (int index= 0; index < projects.length; index++) {
-									final IPackageFragmentRoot[] roots= projects[index].getPackageFragmentRoots();
+								for (IJavaProject project : projects) {
+									final IPackageFragmentRoot[] roots= project.getPackageFragmentRoots();
 									final IProgressMonitor subsubMonitor= new SubProgressMonitor(subMonitor, 100, SubProgressMonitor.SUPPRESS_SUBTASK_LABEL);
 									try {
 										subsubMonitor.beginTask(JarImportMessages.JarImportWizard_prepare_import, roots.length);
-										for (int offset= 0; offset < roots.length; offset++) {
-											final IPackageFragmentRoot current= roots[offset];
+										for (IPackageFragmentRoot current : roots) {
 											if (!current.equals(root) && current.getKind() == IPackageFragmentRoot.K_BINARY) {
 												final IClasspathEntry entry= current.getRawClasspathEntry();
 												if (entry.getEntryKind() == IClasspathEntry.CPE_LIBRARY) {
@@ -381,8 +380,8 @@
 			if (!canUseSourceAttachment()) {
 				final RefactoringDescriptorProxy[] proxies= getRefactoringHistory().getDescriptors();
 				monitor.beginTask(JarImportMessages.JarImportWizard_prepare_import, proxies.length * 100);
-				for (int index= 0; index < proxies.length; index++) {
-					final RefactoringDescriptor descriptor= proxies[index].requestDescriptor(new SubProgressMonitor(monitor, 100, SubProgressMonitor.SUPPRESS_SUBTASK_LABEL));
+				for (RefactoringDescriptorProxy proxy : proxies) {
+					final RefactoringDescriptor descriptor= proxy.requestDescriptor(new SubProgressMonitor(monitor, 100, SubProgressMonitor.SUPPRESS_SUBTASK_LABEL));
 					if (descriptor != null) {
 						final int flags= descriptor.getFlags();
 						if ((flags & JavaRefactoringDescriptor.JAR_SOURCE_ATTACHMENT) != 0)
@@ -417,8 +416,7 @@
 					final List<IPackageFragment> list= new ArrayList<>(elements.length);
 					try {
 						subMonitor.beginTask(JarImportMessages.JarImportWizard_prepare_import, elements.length);
-						for (int index= 0; index < elements.length; index++) {
-							final IJavaElement element= elements[index];
+						for (IJavaElement element : elements) {
 							if (!fProcessedFragments.contains(element) && !element.getElementName().equals(META_INF_FRAGMENT))
 								list.add((IPackageFragment) element);
 							subMonitor.worked(1);
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/code/ExtractMethodInputPage.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/code/ExtractMethodInputPage.java
index e137366..64e57a6 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/code/ExtractMethodInputPage.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/code/ExtractMethodInputPage.java
@@ -15,9 +15,6 @@
  *******************************************************************************/
 package org.eclipse.jdt.internal.ui.refactoring.code;
 
-import java.util.Iterator;
-import java.util.List;
-
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.ModifyEvent;
 import org.eclipse.swt.events.ModifyListener;
@@ -47,6 +44,7 @@
 import org.eclipse.jdt.core.dom.EnumConstantDeclaration;
 import org.eclipse.jdt.core.dom.Modifier;
 
+import org.eclipse.jdt.internal.core.manipulation.util.BasicElementLabels;
 import org.eclipse.jdt.internal.corext.dom.ASTNodes;
 import org.eclipse.jdt.internal.corext.refactoring.ParameterInfo;
 import org.eclipse.jdt.internal.corext.refactoring.code.ExtractMethodRefactoring;
@@ -63,7 +61,6 @@
 import org.eclipse.jdt.internal.ui.refactoring.RefactoringMessages;
 import org.eclipse.jdt.internal.ui.util.RowLayouter;
 import org.eclipse.jdt.internal.ui.util.SWTUtil;
-import org.eclipse.jdt.internal.core.manipulation.util.BasicElementLabels;
 
 
 public class ExtractMethodInputPage extends UserInputWizardPage {
@@ -123,8 +120,7 @@
 			label.setText(RefactoringMessages.ExtractMethodInputPage_destination_type);
 			final Combo combo= new Combo(result, SWT.READ_ONLY | SWT.DROP_DOWN);
 			SWTUtil.setDefaultVisibleItemCount(combo);
-			for (int i= 0; i < destinations.length; i++) {
-				ASTNode declaration= destinations[i];
+			for (ASTNode declaration : destinations) {
 				combo.add(getLabel(declaration));
 			}
 			combo.select(0);
@@ -256,35 +252,35 @@
 		Dialog.applyDialogFont(result);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IJavaHelpContextIds.EXTRACT_METHOD_WIZARD_PAGE);
 	}
-	
+
 	private void updateAccessModifiers() {
 		final Control[] radioButtons= accessModifiersGroup.getChildren();
 		if (fRefactoring.isDestinationInterface()) {
 			Integer visibility= Integer.valueOf(Modifier.PUBLIC);
 			fRefactoring.setVisibility(visibility.intValue());
-			for (int i= 0; i < radioButtons.length; i++) {
-				radioButtons[i].setEnabled(false);
-				if (radioButtons[i].getData().equals(visibility)) {
-					((Button) radioButtons[i]).setSelection(true);
+			for (Control radioButton : radioButtons) {
+				radioButton.setEnabled(false);
+				if (radioButton.getData().equals(visibility)) {
+					((Button) radioButton).setSelection(true);
 				} else {
-					((Button) radioButtons[i]).setSelection(false);
+					((Button) radioButton).setSelection(false);
 				}
 			}
 		} else {
 			final String accessModifier= fSettings.get(ACCESS_MODIFIER);
 			Integer visibility= accessModifier != null ? Integer.valueOf(accessModifier) : Integer.valueOf(fRefactoring.getVisibility());
 			fRefactoring.setVisibility(visibility.intValue());
-			for (int i= 0; i < radioButtons.length; i++) {
-				radioButtons[i].setEnabled(true);
-				if (radioButtons[i].getData().equals(visibility)) {
-					((Button) radioButtons[i]).setSelection(true);
+			for (Control radioButton : radioButtons) {
+				radioButton.setEnabled(true);
+				if (radioButton.getData().equals(visibility)) {
+					((Button) radioButton).setSelection(true);
 				} else {
-					((Button) radioButtons[i]).setSelection(false);
+					((Button) radioButton).setSelection(false);
 				}
 			}
 		}
 	}
-	
+
 	private String getLabel(ASTNode node) {
 		if (node instanceof AbstractTypeDeclaration) {
 			return ((AbstractTypeDeclaration)node).getName().getIdentifier();
@@ -351,7 +347,7 @@
 		Label previewLabel= new Label(composite, SWT.NONE);
 		previewLabel.setText(RefactoringMessages.ExtractMethodInputPage_signature_preview);
 		layouter.perform(previewLabel);
-		
+
 		fSignaturePreview= InputPageUtil.createSignaturePreview(composite);
 		layouter.perform(fSignaturePreview.getControl());
 	}
@@ -447,9 +443,7 @@
 
 	private RefactoringStatus validateParameters() {
 		RefactoringStatus result= new RefactoringStatus();
-		List<ParameterInfo> parameters= fRefactoring.getParameterInfos();
-		for (Iterator<ParameterInfo> iter= parameters.iterator(); iter.hasNext();) {
-			ParameterInfo info= iter.next();
+		for (ParameterInfo info : fRefactoring.getParameterInfos()) {
 			if ("".equals(info.getNewName())) { //$NON-NLS-1$
 				result.addFatalError(RefactoringMessages.ExtractMethodInputPage_validation_emptyParameterName);
 				return result;
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/contentassist/FieldNameProcessor.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/contentassist/FieldNameProcessor.java
index c4034b4..b1edef0 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/contentassist/FieldNameProcessor.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/contentassist/FieldNameProcessor.java
@@ -123,8 +123,7 @@
 		String prefix= input.substring(0, documentOffset);
 		ImageDescriptor imageDescriptor= JavaElementImageProvider.getFieldImageDescriptor(false, fRefactoring.getVisibility());
 		Image image= fImageRegistry.get(imageDescriptor);
-		for (int i= 0; i < fFieldNameProposals.length; i++) {
-			String tempName= fFieldNameProposals[i];
+		for (String tempName : fFieldNameProposals) {
 			if (tempName.length() == 0 || ! tempName.startsWith(prefix))
 				continue;
 			JavaCompletionProposal proposal= new JavaCompletionProposal(tempName, 0, input.length(), image, tempName, 0);
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/contentassist/JavaPackageCompletionProcessor.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/contentassist/JavaPackageCompletionProcessor.java
index b1644db..ad946f5 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/contentassist/JavaPackageCompletionProcessor.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/contentassist/JavaPackageCompletionProcessor.java
@@ -51,7 +51,7 @@
 	private IPackageFragmentRoot[] fPackageFragmentRoots;
 	private CompletionProposalComparator fComparator;
 	private ILabelProvider fLabelProvider;
-	
+
 	private Predicate<IPackageFragment> fFilter;
 
 	private char[] fProposalAutoActivationSet;
@@ -156,12 +156,11 @@
 	private ICompletionProposal[] createPackagesProposals(int documentOffset, String input) {
 		ArrayList<JavaCompletionProposal> proposals= new ArrayList<>();
 		String prefix= input.substring(0, documentOffset);
-		Set<String> names= fPackageFragmentRoots.length > 1 ? new HashSet<>() : null; 
-		for (IPackageFragmentRoot packageFragmentRoot : fPackageFragmentRoots) {				
+		Set<String> names= fPackageFragmentRoots.length > 1 ? new HashSet<>() : null;
+		for (IPackageFragmentRoot packageFragmentRoot : fPackageFragmentRoots) {
 			try {
-				IJavaElement[] packageFragments= packageFragmentRoot.getChildren();
-				for (int i= 0; i < packageFragments.length; i++) {
-					IPackageFragment pack= (IPackageFragment) packageFragments[i];
+				for (IJavaElement packageFragment : packageFragmentRoot.getChildren()) {
+					IPackageFragment pack= (IPackageFragment) packageFragment;
 					String packName= pack.getElementName();
 					if (packName.length() == 0 || ! packName.startsWith(prefix))
 						continue;
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/contentassist/JavaPackageFragmentRootCompletionProcessor.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/contentassist/JavaPackageFragmentRootCompletionProcessor.java
index 06d3982..bd95900 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/contentassist/JavaPackageFragmentRootCompletionProcessor.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/contentassist/JavaPackageFragmentRootCompletionProcessor.java
@@ -139,9 +139,8 @@
 		ArrayList<JavaCompletionProposal> proposals= new ArrayList<>();
 		String prefix= input.substring(0, documentOffset);
 		try {
-			IJavaElement[] packageFragments= fPackageFragmentRoot.getChildren();
-			for (int i= 0; i < packageFragments.length; i++) {
-				IPackageFragment pack= (IPackageFragment) packageFragments[i];
+			for (IJavaElement packageFragment : fPackageFragmentRoot.getChildren()) {
+				IPackageFragment pack= (IPackageFragment) packageFragment;
 				String packName= pack.getElementName();
 				if (packName.length() == 0 || ! packName.startsWith(prefix))
 					continue;
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/contentassist/JavaPrecomputedNamesAssistProcessor.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/contentassist/JavaPrecomputedNamesAssistProcessor.java
index c44eef4..97f25fe 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/contentassist/JavaPrecomputedNamesAssistProcessor.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/contentassist/JavaPrecomputedNamesAssistProcessor.java
@@ -36,7 +36,7 @@
 /**
  * Content assist processor for a precomputed, fixed set of names.
  * For each name matching the current prefix a {@link JavaCompletionProposal} will be provided,
- * using the {@link Image} passed into the constructor. 
+ * using the {@link Image} passed into the constructor.
  */
 public class JavaPrecomputedNamesAssistProcessor implements ISubjectControlContentAssistProcessor {
 	private Iterable<String> fNames;
@@ -83,7 +83,7 @@
 	public IContextInformationValidator getContextInformationValidator() {
 		return null; //no context
 	}
-	
+
 	@Override
 	public IContextInformation[] computeContextInformation(IContentAssistSubjectControl contentAssistSubjectControl, int documentOffset) {
 		return null;
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/contentassist/JavaSourcePackageFragmentRootCompletionProcessor.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/contentassist/JavaSourcePackageFragmentRootCompletionProcessor.java
index 0dcc708..9c58069 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/contentassist/JavaSourcePackageFragmentRootCompletionProcessor.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/contentassist/JavaSourcePackageFragmentRootCompletionProcessor.java
@@ -120,12 +120,8 @@
 	private ICompletionProposal[] createSourcePackageFragmentRootProposals(String prefix, int replacementLength) {
 		List<JavaCompletionProposal> proposals= new ArrayList<>();
 		try {
-			IJavaProject[] projects= fRoot.getJavaProjects();
-			for (int i= 0; i < projects.length; i++) {
-				IJavaProject project= projects[i];
-				IPackageFragmentRoot[] roots= project.getPackageFragmentRoots();
-				for (int j= 0; j < roots.length; j++) {
-					IPackageFragmentRoot root= roots[j];
+			for (IJavaProject project : fRoot.getJavaProjects()) {
+				for (IPackageFragmentRoot root : project.getPackageFragmentRoots()) {
 					if (root.exists() && (root.getKind() == IPackageFragmentRoot.K_SOURCE)) {
 						String name= root.getPath().toString();
 						if (name.length() > 1) {
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/contentassist/VariableNamesProcessor.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/contentassist/VariableNamesProcessor.java
index 235bc0c..46d2e26 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/contentassist/VariableNamesProcessor.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/contentassist/VariableNamesProcessor.java
@@ -128,8 +128,7 @@
 		ArrayList<JavaCompletionProposal> proposals= new ArrayList<>();
 		String prefix= input.substring(0, documentOffset);
 		Image image= fImageRegistry.get(fProposalImageDescriptor);
-		for (int i= 0; i < fTempNameProposals.length; i++) {
-			String tempName= fTempNameProposals[i];
+		for (String tempName : fTempNameProposals) {
 			if (tempName.length() == 0 || ! tempName.startsWith(prefix))
 				continue;
 			JavaCompletionProposal proposal= new JavaCompletionProposal(tempName, 0, input.length(), image, tempName, 0);
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/ExternalizeWizardPage.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/ExternalizeWizardPage.java
index 933d1eb..58afff8 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/ExternalizeWizardPage.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/ExternalizeWizardPage.java
@@ -633,8 +633,7 @@
 			choices= loadAccessorDescriptions();
 		}
 
-		for (int i= 0; i < choices.length; i++) {
-			AccessorDescription curr= choices[i];
+		for (AccessorDescription curr : choices) {
 			if (!curr.equals(configured)) {
 				currChoices.add(curr);
 				currLabels.add(curr.getLabel());
@@ -703,9 +702,9 @@
 		Properties props= new Properties();
 		try {
 			if (propertyFile.exists()) {
-				InputStream is= propertyFile.getContents();
-				props.load(is);
-				is.close();
+				try (InputStream is= propertyFile.getContents()) {
+					props.load(is);
+				}
 			}
 		} catch (Exception e) {
 			// sorry no property
@@ -788,8 +787,7 @@
 	}
 
 	private void createDefaultExternalization(NLSSubstitution[] substitutions) {
-		for (int i= 0; i < substitutions.length; i++) {
-			NLSSubstitution substitution= substitutions[i];
+		for (NLSSubstitution substitution : substitutions) {
 			if (substitution.getState() == NLSSubstitution.INTERNALIZED) {
 				substitution.setState(NLSSubstitution.EXTERNALIZED);
 				substitution.generateKey(substitutions, getProperties(fNLSRefactoring.getPropertyFileHandle()));
@@ -900,9 +898,10 @@
 	}
 
 	private void checkInvalidKeys(RefactoringStatus status) {
-		for (int i= 0; i < fSubstitutions.length; i++) {
-			if (!isKeyValid(fSubstitutions[i], status))
+		for (NLSSubstitution substitution : fSubstitutions) {
+			if (!isKeyValid(substitution, status)) {
 				return;
+			}
 		}
 	}
 
@@ -948,8 +947,7 @@
 	}
 
 	private void checkDuplicateKeys(RefactoringStatus status) {
-		for (int i= 0; i < fSubstitutions.length; i++) {
-			NLSSubstitution substitution= fSubstitutions[i];
+		for (NLSSubstitution substitution : fSubstitutions) {
 			if (conflictingKeys(substitution)) {
 				status.addFatalError(NLSUIMessages.ExternalizeWizardPage_warning_conflicting);
 				return;
@@ -958,8 +956,7 @@
 	}
 
 	private void checkMissingKeys(RefactoringStatus status) {
-		for (int i= 0; i < fSubstitutions.length; i++) {
-			NLSSubstitution substitution= fSubstitutions[i];
+		for (NLSSubstitution substitution : fSubstitutions) {
 			if ((substitution.getValue() == null) && (substitution.getKey() != null)) {
 				status.addWarning(NLSUIMessages.ExternalizeWizardPage_warning_keymissing);
 				return;
@@ -1018,12 +1015,11 @@
 	}
 
 	private boolean hasNewOrMissingSubstitutions() {
-		for (int i= 0; i < fSubstitutions.length; i++) {
-			NLSSubstitution curr= fSubstitutions[i];
-			if (curr.getInitialState() == NLSSubstitution.INTERNALIZED) {
+		for (NLSSubstitution substitution : fSubstitutions) {
+			if (substitution.getInitialState() == NLSSubstitution.INTERNALIZED) {
 				return true;
 			}
-			if (curr.getInitialState() == NLSSubstitution.EXTERNALIZED && curr.getInitialValue() == null) {
+			if (substitution.getInitialState() == NLSSubstitution.EXTERNALIZED && substitution.getInitialValue() == null) {
 				return true;
 			}
 		}
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/NLSAccessorConfigurationDialog.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/NLSAccessorConfigurationDialog.java
index 075d03c..352b56f 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/NLSAccessorConfigurationDialog.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/NLSAccessorConfigurationDialog.java
@@ -276,10 +276,10 @@
 			if (fPkgFragment == null)
 				return new Object[0];
 			List<Object> result= new ArrayList<>(1);
-			Object[] nonjava= fPkgFragment.getNonJavaResources();
-			for (int i= 0; i < nonjava.length; i++) {
-				if (isPropertyFile(nonjava[i]))
-					result.add(nonjava[i]);
+			for (Object nonJava : fPkgFragment.getNonJavaResources()) {
+				if (isPropertyFile(nonJava)) {
+					result.add(nonJava);
+				}
 			}
 			return result.toArray();
 
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/PackageBrowseAdapter.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/PackageBrowseAdapter.java
index 735157b..2db93ee 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/PackageBrowseAdapter.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/PackageBrowseAdapter.java
@@ -68,12 +68,11 @@
 	public static Object[] createPackageListInput(ICompilationUnit cu, String elementNameMatch){
 		try{
 			IJavaProject project= cu.getJavaProject();
-			IPackageFragmentRoot[] roots= project.getPackageFragmentRoots();
 			List<IPackageFragment> result= new ArrayList<>();
 			HashMap<String, Object> entered =new HashMap<>();
-			for (int i= 0; i < roots.length; i++){
-				if (canAddPackageRoot(roots[i])){
-					getValidPackages(roots[i], result, entered, elementNameMatch);
+			for (IPackageFragmentRoot root : project.getPackageFragmentRoots()) {
+				if (canAddPackageRoot(root)) {
+					getValidPackages(root, result, entered, elementNameMatch);
 				}
 			}
 			return result.toArray();
@@ -104,24 +103,22 @@
 		} catch (JavaModelException e){
 			return;
 		}
-		for (int i= 0; i < children.length; i++){
-            if (children[i] instanceof IPackageFragment) {
-                IPackageFragment packageFragment = (IPackageFragment)children[i];
-                String packageName = packageFragment.getElementName();
-
-                if ((entered != null) && (entered.containsKey(packageName)) == true) {
-                    continue;
-                }
-
-			    if (canAddPackage(packageFragment)) {
-			        if ((elementNameMatch == null) || (elementNameMatch.equals(packageName))) {
-			            result.add(packageFragment);
-			            if (entered != null) {
-			                entered.put(packageName, null);
-			            }
-			        }
-			    }
-            }
+		for (IJavaElement child : children) {
+			if (child instanceof IPackageFragment) {
+				IPackageFragment packageFragment = (IPackageFragment) child;
+				String packageName = packageFragment.getElementName();
+				if ((entered != null) && (entered.containsKey(packageName)) == true) {
+					continue;
+				}
+				if (canAddPackage(packageFragment)) {
+					if ((elementNameMatch == null) || (elementNameMatch.equals(packageName))) {
+						result.add(packageFragment);
+						if (entered != null) {
+							entered.put(packageName, null);
+						}
+					}
+				}
+			}
 		}
 	}
 
@@ -137,11 +134,10 @@
 
     public static List<IPackageFragment> searchAllPackages(IJavaProject project, String matcher) {
 		try{
-			IPackageFragmentRoot[] roots= project.getPackageFragmentRoots();
 			List<IPackageFragment> result= new ArrayList<>();
-			for (int i= 0; i < roots.length; i++){
-				if (canAddPackageRoot(roots[i])){
-					getValidPackages(roots[i], result, null, matcher);
+			for (IPackageFragmentRoot root : project.getPackageFragmentRoots()) {
+				if (canAddPackageRoot(root)) {
+					getValidPackages(root, result, null, matcher);
 				}
 			}
 			return result;
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/search/NLSSearchQuery.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/search/NLSSearchQuery.java
index 0f56481..285b6c0 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/search/NLSSearchQuery.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/search/NLSSearchQuery.java
@@ -98,9 +98,7 @@
 					CompilationUnitEntry groupElement= new CompilationUnitEntry(NLSSearchMessages.NLSSearchResultCollector_unusedKeys, compilationUnit);
 
 					boolean hasUnusedPropertie= false;
-					IField[] fields= ((IType)wrapperClass).getFields();
-					for (int j= 0; j < fields.length; j++) {
-						IField field= fields[j];
+					for (IField field : ((IType)wrapperClass).getFields()) {
 						if (isNLSField(field)) {
 							ISourceRange sourceRange= field.getSourceRange();
 							if (sourceRange != null) {
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/search/NLSSearchResult.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/search/NLSSearchResult.java
index 8db8793..70c8a33 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/search/NLSSearchResult.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/search/NLSSearchResult.java
@@ -17,7 +17,6 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
 
@@ -96,8 +95,7 @@
 	@Override
 	public Match[] computeContainedMatches(AbstractTextSearchResult result, IFile file) {
 		Set<Match> matches= new HashSet<>();
-		for (Iterator<FileEntry> iter= fFileEntryGroups.iterator(); iter.hasNext();) {
-			FileEntry element= iter.next();
+		for (FileEntry element : fFileEntryGroups) {
 			if (element.getPropertiesFile().equals(file)) {
 				matches.addAll(Arrays.asList(getMatches(element)));
 			}
@@ -106,8 +104,7 @@
 			return matches.toArray(new Match[matches.size()]);
 
 		try {
-			for (Iterator<CompilationUnitEntry> iter= fCompilationUnitGroups.iterator(); iter.hasNext();) {
-				CompilationUnitEntry element= iter.next();
+			for (CompilationUnitEntry element : fCompilationUnitGroups) {
 				ICompilationUnit cu= element.getCompilationUnit();
 				if (cu.exists() && file.equals(cu.getCorrespondingResource())) {
 					matches.addAll(Arrays.asList(getMatches(element)));
@@ -133,9 +130,8 @@
 		if (element instanceof IParent) {
 			IParent parent= (IParent) element;
 			try {
-				IJavaElement[] children= parent.getChildren();
-				for (int i= 0; i < children.length; i++) {
-					collectMatches(matches, children[i]);
+				for (IJavaElement child : parent.getChildren()) {
+					collectMatches(matches, child);
 				}
 			} catch (JavaModelException e) {
 				// we will not be tracking these results
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/search/NLSSearchResultRequestor.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/search/NLSSearchResultRequestor.java
index af1abc8..b9da9e6 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/search/NLSSearchResultRequestor.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/nls/search/NLSSearchResultRequestor.java
@@ -230,7 +230,7 @@
 	 * Finds the key defined by the given match. The assumption is that the key is the only argument
 	 * and it is a string literal i.e. quoted ("...") or a string constant i.e. 'static final
 	 * String' defined in the same class.
-	 * 
+	 *
 	 * @param keyPositionResult reference parameter: will be filled with the position of the found
 	 *            key
 	 * @param enclosingElement enclosing java element
@@ -289,7 +289,7 @@
 				}
 				if (token != ITerminalSymbols.TokenNameRPAREN)
 					return null;
-				
+
 				if (nextToken == ITerminalSymbols.TokenNameStringLiteral) {
 					keyPositionResult.setOffset(tokenStart + 1);
 					keyPositionResult.setLength(tokenEnd - tokenStart - 1);
@@ -298,13 +298,13 @@
 					keyPositionResult.setOffset(tokenStart);
 					keyPositionResult.setLength(tokenEnd - tokenStart + 1);
 					IType parentClass= (IType)enclosingElement.getAncestor(IJavaElement.TYPE);
-					IField[] fields= parentClass.getFields();
 					String identifier= source.substring(tokenStart, tokenEnd + 1);
-					for (int i= 0; i < fields.length; i++) {
-						if (fields[i].getElementName().equals(identifier)) {
-							if (!Signature.getSignatureSimpleName(fields[i].getTypeSignature()).equals("String")) //$NON-NLS-1$
+					for (IField field : parentClass.getFields()) {
+						if (field.getElementName().equals(identifier)) {
+							if (!Signature.getSignatureSimpleName(field.getTypeSignature()).equals("String")) { //$NON-NLS-1$
 								return null;
-							Object obj= fields[i].getConstant();
+							}
+							Object obj= field.getConstant();
 							return obj instanceof String ? ((String)obj).substring(1, ((String)obj).length() - 1) : NO_KEY;
 						}
 					}
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/CopyToClipboardAction.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/CopyToClipboardAction.java
index fb46f62..393b128 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/CopyToClipboardAction.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/CopyToClipboardAction.java
@@ -230,7 +230,7 @@
 
 		/**
 		 * Gets the names of the jar entry resources and adds them to the string buffer.
-		 * 
+		 *
 		 * @param namesBuf the names buffer
 		 * @since 3.6
 		 */
@@ -243,8 +243,8 @@
 		}
 
 		private static void addFileNames(Set<String> fileName, IResource[] resources) {
-			for (int i= 0; i < resources.length; i++) {
-				addFileName(fileName, resources[i]);
+			for (IResource resource : resources) {
+				addFileName(fileName, resource);
 			}
 		}
 
@@ -358,14 +358,20 @@
 		}
 
 		private boolean canCopyAllToClipboard() {
-			for (int i= 0; i < fResources.length; i++) {
-				if (! canCopyToClipboard(fResources[i])) return false;
+			for (IResource resource : fResources) {
+				if (!canCopyToClipboard(resource)) {
+					return false;
+				}
 			}
-			for (int i= 0; i < fJavaElements.length; i++) {
-				if (! canCopyToClipboard(fJavaElements[i])) return false;
+			for (IJavaElement javaElement : fJavaElements) {
+				if (!canCopyToClipboard(javaElement)) {
+					return false;
+				}
 			}
-			for (int i= 0; i < fJarEntryResources.length; i++) {
-				if (fJarEntryResources[i] == null) return false;
+			for (IJarEntryResource jarEntryResource : fJarEntryResources) {
+				if (jarEntryResource == null) {
+					return false;
+				}
 			}
 			return true;
 		}
@@ -388,21 +394,29 @@
 		}
 
 		private boolean hasProjects() {
-			for (int i= 0; i < fResources.length; i++) {
-				if (ReorgUtils.isProject(fResources[i])) return true;
+			for (IResource resource : fResources) {
+				if (ReorgUtils.isProject(resource)) {
+					return true;
+				}
 			}
-			for (int i= 0; i < fJavaElements.length; i++) {
-				if (ReorgUtils.isProject(fJavaElements[i])) return true;
+			for (IJavaElement javaElement : fJavaElements) {
+				if (ReorgUtils.isProject(javaElement)) {
+					return true;
+				}
 			}
 			return false;
 		}
 
 		private boolean hasNonProjects() {
-			for (int i= 0; i < fResources.length; i++) {
-				if (! ReorgUtils.isProject(fResources[i])) return true;
+			for (IResource resource : fResources) {
+				if (!ReorgUtils.isProject(resource)) {
+					return true;
+				}
 			}
-			for (int i= 0; i < fJavaElements.length; i++) {
-				if (! ReorgUtils.isProject(fJavaElements[i])) return true;
+			for (IJavaElement javaElement : fJavaElements) {
+				if (!ReorgUtils.isProject(javaElement)) {
+					return true;
+				}
 			}
 			return false;
 		}
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/DeleteAction.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/DeleteAction.java
index 77748e5..616358e 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/DeleteAction.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/DeleteAction.java
@@ -60,14 +60,14 @@
 
 	/**
 	 * 'Hide' button index.
-	 * 
+	 *
 	 * @since 3.5
 	 */
 	private static final int HIDE_BUTTON= 0;
 
 	/**
 	 * 'Remove' button index.
-	 * 
+	 *
 	 * @since 3.5
 	 */
 	private static final int REMOVE_BUTTON= 1;
@@ -105,7 +105,7 @@
 
 	/**
 	 * Removes or hides the selected working sets.
-	 * 
+	 *
 	 * @param selection the selected working sets
 	 * @since 3.5
 	 */
@@ -119,7 +119,7 @@
 				dialogMessage= MessageFormat.format(ReorgMessages.DeleteWorkingSet_hideworkingset_single, new Object[] { workingSet.getLabel() });
 			else
 				dialogMessage= MessageFormat.format(ReorgMessages.DeleteWorkingSet_removeorhideworkingset_single, new Object[] { workingSet.getLabel() });
-			
+
 			dialog= new MessageDialog(getShell(), ReorgMessages.DeleteWorkingSet_single, null, dialogMessage, MessageDialog.QUESTION, new String[] { ReorgMessages.DeleteWorkingSet_Hide,
 					ReorgMessages.DeleteWorkingSet_Remove,
 					IDialogConstants.CANCEL_LABEL }, 0) {
@@ -162,8 +162,8 @@
 
 	/**
 	 * Hides all the working sets in the list from the Package Explorer.
-	 * 
-	 * @param selection the selection of working sets 
+	 *
+	 * @param selection the selection of working sets
 	 * @since 3.8
 	 */
 	private void hideWorkingSets(List<IWorkingSet> selection) {
@@ -182,9 +182,9 @@
 
 	/**
 	 * Checks if the working set is the default working set.
-	 * 
+	 *
 	 * @param workingSetID the working set id, can be <code>null</code>
-	 * @return <code>true</code> if default working set, <code>false</code> otherwise 
+	 * @return <code>true</code> if default working set, <code>false</code> otherwise
 	 * @since 3.8
 	 */
 	private boolean isDefaultWorkingSet(String workingSetID) {
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/DeleteWizard.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/DeleteWizard.java
index e2a15b8..017bd67 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/DeleteWizard.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/DeleteWizard.java
@@ -233,8 +233,7 @@
 		}
 
 		private static boolean containsLinkedPackagesOrPackageFragmentRoots(IJavaElement[] javaElements) {
-			for (int i= 0; i < javaElements.length; i++) {
-				IJavaElement element= javaElements[i];
+			for (IJavaElement element : javaElements) {
 				if (isLinkedPackageOrPackageFragmentRoot(element))
 					return true;
 			}
@@ -242,15 +241,13 @@
 		}
 
 		private static boolean containsLinkedResources(IResource[] resources, IJavaElement[] javaElements) throws JavaModelException {
-			for (int i= 0; i < javaElements.length; i++) {
-				IJavaElement element= javaElements[i];
+			for (IJavaElement element : javaElements) {
 				if (isLinkedResource(element))
 					return true;
 				if (isDefaultPackageWithLinkedFiles(element))
 					return true;
 			}
-			for (int i= 0; i < resources.length; i++) {
-				IResource resource= resources[i];
+			for (IResource resource : resources) {
 				if (isLinked(resource))
 					return true;
 			}
@@ -261,10 +258,10 @@
 			if (!JavaElementUtil.isDefaultPackage(firstElement))
 				return false;
 			IPackageFragment defaultPackage= (IPackageFragment)firstElement;
-			ICompilationUnit[] cus= defaultPackage.getCompilationUnits();
-			for (int i= 0; i < cus.length; i++) {
-				if (isLinkedResource(cus[i]))
+			for (ICompilationUnit cu : defaultPackage.getCompilationUnits()) {
+				if (isLinkedResource(cu)) {
 					return true;
+				}
 			}
 			return false;
 		}
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/DestinationContentProvider.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/DestinationContentProvider.java
index bfb6416..5eeaee6 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/DestinationContentProvider.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/DestinationContentProvider.java
@@ -73,10 +73,11 @@
 			} else {
 				Object[] children= doGetChildren(element);
 				ArrayList<Object> result= new ArrayList<>(children.length);
-				for (int i= 0; i < children.length; i++) {
-					IReorgDestination destination= ReorgDestinationFactory.createDestination(children[i]);
-					if (fValidator.canElementBeDestination(destination) || fValidator.canChildrenBeDestinations(destination))
-						result.add(children[i]);
+				for (Object child : children) {
+					IReorgDestination destination= ReorgDestinationFactory.createDestination(child);
+					if (fValidator.canElementBeDestination(destination) || fValidator.canChildrenBeDestinations(destination)) {
+						result.add(child);
+					}
 				}
 				return result.toArray();
 			}
@@ -104,8 +105,7 @@
 			boolean isFolderOnClasspath = javaProject.isOnClasspath(container);
 			List<IResource> nonJavaResources= new ArrayList<>();
 			// Can be on classpath but as a member of non-java resource folder
-			for (int i= 0; i < members.length; i++) {
-				IResource member= members[i];
+			for (IResource member : members) {
 				// A resource can also be a java element
 				// in the case of exclusion and inclusion filters.
 				// We therefore exclude Java elements from the list
@@ -127,8 +127,8 @@
 	private static Object[] getOpenNonJavaProjects(IJavaModel model) throws JavaModelException {
 		Object[] nonJavaProjects= model.getNonJavaResources();
 		ArrayList<IProject> result= new ArrayList<>(nonJavaProjects.length);
-		for (int i= 0; i < nonJavaProjects.length; i++) {
-			IProject project = (IProject) nonJavaProjects[i];
+		for (Object nonJavaProject : nonJavaProjects) {
+			IProject project = (IProject) nonJavaProject;
 			if (project.isOpen())
 				result.add(project);
 		}
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/PasteAction.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/PasteAction.java
index 2ca73dc..0b073af 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/PasteAction.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/PasteAction.java
@@ -248,8 +248,10 @@
 	}
 
 	private static boolean isAvailable(Transfer transfer, TransferData[] availableDataTypes) {
-		for (int i= 0; i < availableDataTypes.length; i++) {
-			if (transfer.isSupportedType(availableDataTypes[i])) return true;
+		for (TransferData availableDataType : availableDataTypes) {
+			if (transfer.isSupportedType(availableDataType)) {
+				return true;
+			}
 		}
 		return false;
 	}
@@ -267,11 +269,10 @@
 			IResource[] resources= ReorgUtils.getResources(elements);
 			IJavaElement[] javaElements= ReorgUtils.getJavaElements(elements);
 			IWorkingSet[] workingSets= ReorgUtils.getWorkingSets(elements);
-			Paster[] pasters= createEnabledPasters(availableTypes, clipboard);
-			for (int i= 0; i < pasters.length; i++) {
+			for (Paster paster : createEnabledPasters(availableTypes, clipboard)) {
 				try {
-					if (pasters[i].canPasteOn(javaElements, resources, workingSets, elements)) {
-						pasters[i].paste(javaElements, resources, workingSets, availableTypes);
+					if (paster.canPasteOn(javaElements, resources, workingSets, elements)) {
+						paster.paste(javaElements, resources, workingSets, availableTypes);
 						return;// one is enough
 					}
 				} catch (JavaModelException e) {
@@ -500,7 +501,7 @@
 				return fKind;
 			}
 		}
-		
+
 		private IStorage fPatchStorage;
 
 		private IPackageFragmentRoot fDestination;
@@ -529,7 +530,7 @@
 		@Override
 		public boolean canPasteOn(IJavaElement[] javaElements, IResource[] resources, IWorkingSet[] selectedWorkingSets, List<?> selectedElements) throws JavaModelException {
 			final String text= getClipboardText(fAvailableTypes);
-			
+
 			IStorage storage= new IEncodedStorage() {
 				@Override
 				public <T> T getAdapter(Class<T> adapter) {
@@ -569,8 +570,8 @@
 			} catch (CoreException e) {
 				// continue
 			}
-			
-			
+
+
 			if (selectedWorkingSets.length > 1)
 				return false;
 			if (resources.length != 0)
@@ -588,7 +589,7 @@
 			} else if (selectedElements.size() != 0) {
 				return false; // e.g. ClassPathContainer
 			}
-			
+
 			computeLatestVM();
 			parseCUs(javaProject, text);
 
@@ -608,9 +609,8 @@
 			IJavaElement cu;
 			switch (destination.getElementType()) {
 				case IJavaElement.JAVA_PROJECT :
-					IPackageFragmentRoot[] packageFragmentRoots= ((IJavaProject) destination).getPackageFragmentRoots();
-					for (int i= 0; i < packageFragmentRoots.length; i++) {
-						packageFragmentRoot= packageFragmentRoots[i];
+					for (IPackageFragmentRoot fragmentroot : ((IJavaProject) destination).getPackageFragmentRoots()) {
+						packageFragmentRoot= fragmentroot;
 						if (isWritable(packageFragmentRoot)) {
 							fDestination= packageFragmentRoot;
 							return true;
@@ -699,7 +699,7 @@
 				new org.eclipse.team.internal.ui.synchronize.patch.ApplyPatchOperation(null, fPatchStorage, resource, new CompareConfiguration()).openWizard();
 				return;
 			}
-			
+
 			final IEditorPart[] editorPart= new IEditorPart[1];
 
 			IRunnableWithProgress op= new IRunnableWithProgress() {
@@ -719,10 +719,10 @@
 									pm.worked(1);
 								}
 								IConfirmQuery confirmQuery= new ReorgQueries(getShell()).createYesYesToAllNoNoToAllQuery(ReorgMessages.PasteAction_TextPaster_confirmOverwriting, true, IReorgQueries.CONFIRM_OVERWRITING);
-								for (int i= 0; i < fParsedCus.length; i++) {
+								for (ParsedCu parsedCu : fParsedCus) {
 									if (pm.isCanceled())
 										break;
-									ICompilationUnit cu= pasteCU(fParsedCus[i], new SubProgressMonitor(pm, 1), confirmQuery);
+									ICompilationUnit cu= pasteCU(parsedCu, new SubProgressMonitor(pm, 1), confirmQuery);
 									if (cu != null)
 										cus.add(cu);
 								}
@@ -1100,9 +1100,7 @@
 			IExecutionEnvironmentsManager eeManager= JavaRuntime.getExecutionEnvironmentsManager();
 			IExecutionEnvironment bestEE= null;
 
-			IExecutionEnvironment[] ees= eeManager.getExecutionEnvironments();
-			outer: for (int j= 0; j < ees.length; j++) {
-				IExecutionEnvironment ee= ees[j];
+			outer: for (IExecutionEnvironment ee : eeManager.getExecutionEnvironments()) {
 				IVMInstall vm= ee.getDefaultVM();
 				String ver= getVMVersion(vm);
 				if (ver != null) {
@@ -1112,9 +1110,8 @@
 					}
 				} else {
 					String eeVer= JavaModelUtil.getExecutionEnvironmentCompliance(ee);
-					IVMInstall[] compatibleVMs= ee.getCompatibleVMs();
-					for (int i= 0; i < compatibleVMs.length; i++) {
-						vm= compatibleVMs[i];
+					for (IVMInstall compatibleVM : ee.getCompatibleVMs()) {
+						vm= compatibleVM;
 						ver= getVMVersion(vm);
 						if (!eeVer.equals(ver))
 							continue; // don't want to set an EE where there's no strictly compatible VM
@@ -1127,11 +1124,8 @@
 				}
 			}
 
-			IVMInstallType[] vmTypes= JavaRuntime.getVMInstallTypes();
-			for (int i= 0; i < vmTypes.length; i++) {
-				IVMInstall[] vms= vmTypes[i].getVMInstalls();
-				for (int j= 0; j < vms.length; j++) {
-					IVMInstall vm= vms[j];
+			for (IVMInstallType vmType : JavaRuntime.getVMInstallTypes()) {
+				for (IVMInstall vm : vmType.getVMInstalls()) {
 					String ver= getVMVersion(vm);
 					if (ver != null && (bestVersion == null || JavaModelUtil.isVersionLessThan(bestVersion, ver))) {
 						bestVersion= ver;
@@ -1172,9 +1166,10 @@
 			Set<IAdaptable> elements= new HashSet<>(Arrays.asList(workingSet.getElements()));
 			IJavaElement[] javaElements= getClipboardJavaElements(availableTypes);
 			if (javaElements != null) {
-				for (int i= 0; i < javaElements.length; i++) {
-					if (!ReorgUtils.containsElementOrParent(elements, javaElements[i]))
-						elements.add(javaElements[i]);
+				for (IJavaElement javaElement : javaElements) {
+					if (!ReorgUtils.containsElementOrParent(elements, javaElement)) {
+						elements.add(javaElement);
+					}
 				}
 			}
 			IResource[] resources= getClipboardResources(availableTypes);
@@ -1237,8 +1232,8 @@
 
 		private void pasteProjects(IProject[] projects){
 			Shell shell= getShell();
-			for (int i = 0; i < projects.length; i++) {
-				new CopyProjectOperation(shell).copyProject(projects[i]);
+			for (IProject project : projects) {
+				new CopyProjectOperation(shell).copyProject(project);
 			}
 		}
 		private IProject[] getProjectsToPaste(TransferData[] availableTypes) {
@@ -1268,9 +1263,10 @@
 		private boolean canPasteSimpleProjects(TransferData[] availableDataTypes) {
 			IResource[] resources= getClipboardResources(availableDataTypes);
 			if (resources == null || resources.length == 0) return false;
-			for (int i= 0; i < resources.length; i++) {
-				if (resources[i].getType() != IResource.PROJECT || ! ((IProject)resources[i]).isOpen())
+			for (IResource resource : resources) {
+				if (resource.getType() != IResource.PROJECT || !((IProject) resource).isOpen()) {
 					return false;
+				}
 			}
 			return true;
 		}
@@ -1512,9 +1508,10 @@
 				return new RefactoringStatus();
 			}
 			private boolean canPasteAll(IJavaElement destination) {
-				for (int i= 0; i < fSources.length; i++) {
-					if (! canPaste(fSources[i].getType(), destination))
+				for (TypedSource source : fSources) {
+					if (!canPaste(source.getType(), destination)) {
 						return false;
+					}
 				}
 				return true;
 			}
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameInformationPopup.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameInformationPopup.java
index f56e143..c0d6241 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameInformationPopup.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameInformationPopup.java
@@ -624,7 +624,7 @@
 			return;
 		}
 		fSnapPositionChanged= false;
-		
+
 		boolean isUnderLeft= fSnapPosition == SNAP_POSITION_UNDER_LEFT_FIELD;
 		boolean isOverLeft= fSnapPosition == SNAP_POSITION_OVER_LEFT_FIELD;
 		fPopupLayout.marginTop= isUnderLeft ? HAH : 0;
@@ -788,7 +788,7 @@
 			@Override
 			public void menuAboutToShow(IMenuManager manager) {
 				boolean canRefactor= ! fRenameLinkedMode.isOriginalName();
-				
+
 				IAction refactorAction= new Action(ReorgMessages.RenameInformationPopup_RenameInWorkspace) {
 					@Override
 					public void run() {
@@ -879,9 +879,8 @@
 	private static void recursiveSetBackgroundColor(Control control, Color color) {
 		control.setBackground(color);
 		if (control instanceof Composite) {
-			Control[] children= ((Composite) control).getChildren();
-			for (int i= 0; i < children.length; i++) {
-				recursiveSetBackgroundColor(children[i], color);
+			for (Control child : ((Composite) control).getChildren()) {
+				recursiveSetBackgroundColor(child, color);
 			}
 		}
 	}
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameInputWizardPage.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameInputWizardPage.java
index b53ff72..01e997a 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameInputWizardPage.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameInputWizardPage.java
@@ -142,7 +142,7 @@
 	/**
 	 * Returns the new name for the Java element or <code>null</code>
 	 * if no new name is provided
-	 * 
+	 *
 	 * @param nameUpdating the name updating
 	 *
 	 * @return the new name or <code>null</code>
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameLinkedMode.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameLinkedMode.java
index cead0a0..b7b798c 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameLinkedMode.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameLinkedMode.java
@@ -168,7 +168,7 @@
 	/**
 	 * The operation on top of the undo stack when the rename is {@link #start()}ed, or
 	 * <code>null</code> if rename has not been started or the undo stack was empty.
-	 * 
+	 *
 	 * @since 3.5
 	 */
 	private IUndoableOperation fStartingUndoOperation;
@@ -228,7 +228,7 @@
 					fStartingUndoOperation= operationHistory.getUndoOperation(undoContext);
 				}
 			}
-			
+
 			fOriginalName= nameNode.getIdentifier();
 			final int pos= nameNode.getStartPosition();
 			ASTNode[] sameNodes= LinkedNodeFinder.findByNode(root, nameNode);
@@ -401,9 +401,7 @@
 	private void restoreFullSelection() {
 		if (fOriginalSelection.y != 0) {
 			int originalOffset= fOriginalSelection.x;
-			LinkedPosition[] positions= fLinkedPositionGroup.getPositions();
-			for (int i= 0; i < positions.length; i++) {
-				LinkedPosition position= positions[i];
+			for (LinkedPosition position : fLinkedPositionGroup.getPositions()) {
 				if (! position.isDeleted() && position.includes(originalOffset)) {
 					fEditor.getViewer().setSelectedRange(position.offset, position.length);
 					return;
@@ -451,7 +449,7 @@
 
 		if (newName.length() == 0)
 			return null;
-		
+
 		RenameJavaElementDescriptor descriptor= createRenameDescriptor(fJavaElement, newName);
 		RenameSupport renameSupport= RenameSupport.create(descriptor);
 		return renameSupport;
@@ -478,8 +476,8 @@
 
 	/**
 	 * Creates a rename descriptor.
-	 * 
-	 * @param javaElement element to rename 
+	 *
+	 * @param javaElement element to rename
 	 * @param newName new name
 	 * @return a rename descriptor with current settings as used in the refactoring dialogs
 	 * @throws JavaModelException if an error occurs while accessing the element
@@ -615,9 +613,7 @@
 		Point selection= fEditor.getViewer().getSelectedRange();
 		int start= selection.x;
 		int end= start + selection.y;
-		LinkedPosition[] positions= fLinkedPositionGroup.getPositions();
-		for (int i= 0; i < positions.length; i++) {
-			LinkedPosition position= positions[i];
+		for (LinkedPosition position : fLinkedPositionGroup.getPositions()) {
 			if (position.includes(start) && position.includes(end))
 				return position;
 		}
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameSelectionState.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameSelectionState.java
index b9773b6..997c45b 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameSelectionState.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameSelectionState.java
@@ -55,13 +55,11 @@
 		IWorkbenchPage page = dw.getActivePage();
 		if (page == null)
 			return;
-		IViewReference vrefs[]= page.getViewReferences();
-		for(int i= 0; i < vrefs.length; i++) {
-			consider(vrefs[i].getPart(false));
+		for (IViewReference vref : page.getViewReferences()) {
+			consider(vref.getPart(false));
 		}
-		IEditorReference refs[]= page.getEditorReferences();
-		for(int i= 0; i < refs.length; i++) {
-			consider(refs[i].getPart(false));
+		for (IEditorReference ref : page.getEditorReferences()) {
+			consider(ref.getPart(false));
 		}
 	}
 
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameTypeWizardSimilarElementsPage.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameTypeWizardSimilarElementsPage.java
index b2db988..17c1104 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameTypeWizardSimilarElementsPage.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameTypeWizardSimilarElementsPage.java
@@ -268,20 +268,19 @@
 				return;
 			@SuppressWarnings("unchecked")
 			final Map<IJavaElement, String> similarElementsMap= (Map<IJavaElement, String>) newInput;
-			final IJavaElement[] similarElements= similarElementsMap.keySet().toArray(new IJavaElement[0]);
 			fTreeElementMap= new HashMap<>();
 			fTopLevelElements= new HashSet<>();
-			for (int i= 0; i < similarElements.length; i++) {
-				final IType declaring= (IType) similarElements[i].getAncestor(IJavaElement.TYPE);
-				if (similarElements[i] instanceof IMember) {
+			for (IJavaElement similarElement : similarElementsMap.keySet().toArray(new IJavaElement[0])) {
+				final IType declaring= (IType) similarElement.getAncestor(IJavaElement.TYPE);
+				if (similarElement instanceof IMember) {
 					// methods, fields, initializers, inner types
-					addToMap(declaring, similarElements[i]);
+					addToMap(declaring, similarElement);
 				} else {
 					// local variables
-					final IJavaElement parent= similarElements[i].getParent();
+					final IJavaElement parent= similarElement.getParent();
 					if (parent instanceof IMember) {
 						// parent is a method or an initializer
-						addToMap(parent, similarElements[i]);
+						addToMap(parent, similarElement);
 						addToMap(declaring, parent);
 					}
 				}
@@ -602,9 +601,8 @@
 		if (isSimilarElement(data)) {
 			return data;
 		} else {
-			TreeItem[] children= item.getItems();
-			for (int i= 0; i < children.length; i++) {
-				Object childData= getFirstSimilarElement(children[i]);
+			for (TreeItem child : item.getItems()) {
+				Object childData= getFirstSimilarElement(child);
 				if (childData != null)
 					return childData;
 			}
@@ -638,8 +636,9 @@
 			IJavaElement element= iter.next();
 			selection.put(element, Boolean.FALSE);
 		}
-		for (int i= 0; i < selected.length; i++)
-			selection.put(selected[i], Boolean.TRUE);
+		for (IJavaElement s : selected) {
+			selection.put(s, Boolean.TRUE);
+		}
 
 	}
 
@@ -784,9 +783,10 @@
 	private IJavaElement[] getCheckedSimilarElements() {
 		Object[] checked= fTreeViewer.getCheckedElements();
 		List<IJavaElement> elements= new ArrayList<>(checked.length);
-		for (int i= 0; i < checked.length; i++) {
-			if (isSimilarElement(checked[i]))
-				elements.add((IJavaElement) checked[i]);
+		for (Object c : checked) {
+			if (isSimilarElement(c)) {
+				elements.add((IJavaElement) c);
+			}
 		}
 		return elements.toArray(new IJavaElement[elements.size()]);
 	}
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/ReorgMoveAction.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/ReorgMoveAction.java
index c4a1115..ea52c99 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/ReorgMoveAction.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/ReorgMoveAction.java
@@ -82,7 +82,7 @@
 
 	/**
 	 * Note: This method is for internal use only. Clients should not call this method.
-	 * 
+	 *
 	 * @param selection the selection
 	 *
 	 * @noreference This method is not intended to be referenced by clients.
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/ReorgUserInputPage.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/ReorgUserInputPage.java
index e167ec9..218b86b 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/ReorgUserInputPage.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/ReorgUserInputPage.java
@@ -123,7 +123,7 @@
 
 	/**
 	 * Set and verify the destination.
-	 * 
+	 *
 	 * @param selected the selected destination
 	 * @return the resulting status
 	 * @throws JavaModelException the JavaModelException in case it fails
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/TypedSourceTransfer.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/TypedSourceTransfer.java
index bbac9ef..8cf2e41 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/TypedSourceTransfer.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/TypedSourceTransfer.java
@@ -81,8 +81,8 @@
 
 			dataOut.writeInt(sources.length);
 
-			for (int i = 0; i < sources.length; i++) {
-				writeJavaElement(dataOut, sources[i]);
+			for (TypedSource source : sources) {
+				writeJavaElement(dataOut, source);
 			}
 
 			dataOut.close();
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/sef/SelfEncapsulateFieldInputPage.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/sef/SelfEncapsulateFieldInputPage.java
index 1780e51..3df278a 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/sef/SelfEncapsulateFieldInputPage.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/sef/SelfEncapsulateFieldInputPage.java
@@ -394,8 +394,8 @@
 		combo.add(RefactoringMessages.SelfEncapsulateFieldInputPage_first_method);
 		try {
 			IMethod[] methods= field.getDeclaringType().getMethods();
-			for (int i= 0; i < methods.length; i++) {
-				combo.add(JavaElementLabels.getElementLabel(methods[i], JavaElementLabels.M_PARAMETER_TYPES));
+			for (IMethod method : methods) {
+				combo.add(JavaElementLabels.getElementLabel(method, JavaElementLabels.M_PARAMETER_TYPES));
 			}
 			if (methods.length > 0)
 				select= methods.length;
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/AbstractJavaElementLabelDecorator.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/AbstractJavaElementLabelDecorator.java
index becdb09..f73d50a 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/AbstractJavaElementLabelDecorator.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/AbstractJavaElementLabelDecorator.java
@@ -109,9 +109,8 @@
 	protected abstract void processDelta(IJavaElementDelta delta, List<IJavaElement> result);
 
 	protected boolean processChildrenDelta(IJavaElementDelta delta, List<IJavaElement> result) {
-		IJavaElementDelta[] children= delta.getAffectedChildren();
-		for (int i= 0; i < children.length; i++) {
-			processDelta(children[i], result);
+		for (IJavaElementDelta child : delta.getAffectedChildren()) {
+			processDelta(child, result);
 		}
 		return false;
 	}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/JarEntryEditorInputFactory.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/JarEntryEditorInputFactory.java
index 6a121e4..41865e3 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/JarEntryEditorInputFactory.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/JarEntryEditorInputFactory.java
@@ -106,10 +106,9 @@
 		if (versionSepIndex > 0) {
 			// try stripping plug-in version number
 			String prefix= rootName.substring(0, versionSepIndex);
-			IPackageFragmentRoot[] roots= project.getPackageFragmentRoots();
-			for (int i= 0; i < roots.length; i++) {
-				if (roots[i].getElementName().startsWith(prefix)) {
-					return roots[i];
+			for (IPackageFragmentRoot root : project.getPackageFragmentRoots()) {
+				if (root.getElementName().startsWith(prefix)) {
+					return root;
 				}
 			}
 		}
@@ -120,8 +119,7 @@
 		int depth= pathSegments.length;
 		segments: for (int i= 0; i < depth; i++) {
 			String name= pathSegments[i];
-			for (int j= 0; j < children.length; j++) {
-				Object child= children[j];
+			for (Object child : children) {
 				if (child instanceof IJarEntryResource) {
 					IJarEntryResource jarEntryResource= (IJarEntryResource) child;
 					if (name.equals(jarEntryResource.getName())) {
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/AutoboxingCleanUp.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/AutoboxingCleanUp.java
index 7ad9732..c75ac70 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/AutoboxingCleanUp.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/AutoboxingCleanUp.java
@@ -83,15 +83,13 @@
 	public String getPreview() {
 		StringBuilder bld= new StringBuilder();
 		bld.append("\n");
-		bld.append("public class Foo {\n");
-		bld.append("    public static void bar() {\n");
 		if (isEnabled(CleanUpConstants.USE_AUTOBOXING)) {
-			bld.append("        Character c = '*';\n");
+			bld.append("Integer i = 0;\n");
+			bld.append("Character c = '*';\n");
 		} else {
-			bld.append("        Character c = Character.valueOf('*');\n");
+			bld.append("Integer i = Integer.valueOf(0);\n");
+			bld.append("Character c = Character.valueOf('*');\n");
 		}
-		bld.append("    }\n");
-		bld.append("}\n");
 
 		return bld.toString();
 	}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/NumberSuffixCleanUp.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/NumberSuffixCleanUp.java
new file mode 100644
index 0000000..db945b6
--- /dev/null
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/NumberSuffixCleanUp.java
@@ -0,0 +1,147 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Fabrice TIERCELIN 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:
+ *     Fabrice TIERCELIN - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.internal.ui.fix;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.runtime.CoreException;
+
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.dom.AST;
+import org.eclipse.jdt.core.dom.ASTNode;
+import org.eclipse.jdt.core.dom.ASTVisitor;
+import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jdt.core.dom.NumberLiteral;
+import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
+
+import org.eclipse.jdt.internal.corext.fix.CleanUpConstants;
+import org.eclipse.jdt.internal.corext.fix.CompilationUnitRewriteOperationsFix;
+import org.eclipse.jdt.internal.corext.fix.CompilationUnitRewriteOperationsFix.CompilationUnitRewriteOperation;
+import org.eclipse.jdt.internal.corext.fix.LinkedProposalModel;
+import org.eclipse.jdt.internal.corext.refactoring.structure.CompilationUnitRewrite;
+
+import org.eclipse.jdt.ui.cleanup.CleanUpRequirements;
+import org.eclipse.jdt.ui.cleanup.ICleanUpFix;
+import org.eclipse.jdt.ui.text.java.IProblemLocation;
+
+/**
+ * A fix that puts the long literal suffixes into uppercase:
+ * <ul>
+ * <li>Lowercase suffix is ambiguous. 'l' can be seen as '1'.</li>
+ * </ul>
+ */
+public class NumberSuffixCleanUp extends AbstractMultiFix {
+	public NumberSuffixCleanUp() {
+		this(Collections.emptyMap());
+	}
+
+	public NumberSuffixCleanUp(Map<String, String> options) {
+		super(options);
+	}
+
+	@Override
+	public CleanUpRequirements getRequirements() {
+		boolean requireAST= isEnabled(CleanUpConstants.NUMBER_SUFFIX);
+		Map<String, String> requiredOptions= null;
+		return new CleanUpRequirements(requireAST, false, false, requiredOptions);
+	}
+
+	@Override
+	public String[] getStepDescriptions() {
+		if (isEnabled(CleanUpConstants.NUMBER_SUFFIX)) {
+			return new String[] { MultiFixMessages.CodeStyleCleanUp_numberSuffix_description };
+		}
+		return new String[0];
+	}
+
+	@SuppressWarnings("nls")
+	@Override
+	public String getPreview() {
+		StringBuilder bld= new StringBuilder();
+		bld.append("\n");
+
+		if (isEnabled(CleanUpConstants.NUMBER_SUFFIX)) {
+			bld.append("long number1 = 10L;\n");
+		} else {
+			bld.append("long number1 = 10l;\n");
+		}
+
+		return bld.toString();
+	}
+
+	@Override
+	protected ICleanUpFix createFix(CompilationUnit unit) throws CoreException {
+		if (!isEnabled(CleanUpConstants.NUMBER_SUFFIX)) {
+			return null;
+		}
+
+		final List<CompilationUnitRewriteOperation> rewriteOperations= new ArrayList<>();
+
+		unit.accept(new ASTVisitor() {
+			@Override
+			public boolean visit(NumberLiteral node) {
+				final String token= node.getToken();
+
+				if (token.endsWith("l")) { //$NON-NLS-1$
+					rewriteOperations.add(new NumberSuffixOperation(node, token));
+					return false;
+				}
+
+				return true;
+			}
+		});
+
+		if (rewriteOperations.isEmpty()) {
+			return null;
+		}
+
+		return new CompilationUnitRewriteOperationsFix(MultiFixMessages.CodeStyleCleanUp_numberSuffix_description, unit,
+				rewriteOperations.toArray(new CompilationUnitRewriteOperation[rewriteOperations.size()]));
+	}
+
+	@Override
+	public boolean canFix(ICompilationUnit compilationUnit, IProblemLocation problem) {
+		return false;
+	}
+
+	@Override
+	protected ICleanUpFix createFix(CompilationUnit unit, IProblemLocation[] problems) throws CoreException {
+		return null;
+	}
+
+	private static class NumberSuffixOperation extends CompilationUnitRewriteOperation {
+		private final ASTNode node;
+
+		private final String token;
+
+		public NumberSuffixOperation(NumberLiteral node, String token) {
+			this.node= node;
+			this.token= token;
+		}
+
+		@Override
+		public void rewriteAST(CompilationUnitRewrite cuRewrite, LinkedProposalModel linkedModel) throws CoreException {
+			ASTRewrite rewrite= cuRewrite.getASTRewrite();
+			AST ast= cuRewrite.getRoot().getAST();
+
+			final String newToken= token.substring(0, token.length() - 1) + token.substring(token.length() - 1).toUpperCase();
+			final NumberLiteral replacement= ast.newNumberLiteral(newToken);
+
+			rewrite.replace(node, replacement, null);
+		}
+	}
+}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/RedundantModifiersCleanUp.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/RedundantModifiersCleanUp.java
index a0f1ac7..212343f 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/RedundantModifiersCleanUp.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/RedundantModifiersCleanUp.java
@@ -127,7 +127,7 @@
 		unit.accept(new ASTVisitor() {
 			@Override
 			public boolean visit(FieldDeclaration node) {
-				TypeDeclaration typeDecl= ASTNodes.getParent(node, TypeDeclaration.class);
+				TypeDeclaration typeDecl= node.getParent() instanceof TypeDeclaration ? (TypeDeclaration) node.getParent() : null;
 				if (typeDecl != null && typeDecl.isInterface()) {
 					final int excluded= Modifier.PUBLIC | Modifier.STATIC | Modifier.FINAL;
 					if ((node.getModifiers() & excluded) > 0) {
@@ -139,15 +139,22 @@
 
 			@Override
 			public boolean visit(MethodDeclaration node) {
-				TypeDeclaration typeDecl= ASTNodes.getParent(node, TypeDeclaration.class);
-				if (typeDecl != null && typeDecl.isInterface()) {
-					rewriteOperations.add(new RemoveModifiersOperation(node, Modifier.ABSTRACT));
-					if (!AnonymousClassDeclaration.class.isInstance(node.getParent()) && !EnumDeclaration.class.isInstance(node.getParent())) {
-						rewriteOperations.add(new RemoveModifiersOperation(node, Modifier.PUBLIC));
+				TypeDeclaration typeDecl= node.getParent() instanceof TypeDeclaration ? (TypeDeclaration) node.getParent() : null;
+
+				if (typeDecl != null) {
+					if (typeDecl.isInterface()) {
+						if (Modifier.isAbstract(node.getModifiers())) {
+							rewriteOperations.add(new RemoveModifiersOperation(node, Modifier.ABSTRACT));
+						}
+
+						if (Modifier.isPublic(node.getModifiers()) && !AnonymousClassDeclaration.class.isInstance(node.getParent()) && !EnumDeclaration.class.isInstance(node.getParent())) {
+							rewriteOperations.add(new RemoveModifiersOperation(node, Modifier.PUBLIC));
+						}
+					} else if (Modifier.isFinal(typeDecl.getModifiers()) && Modifier.isFinal(node.getModifiers()) && !node.isVarargs()) {
+						rewriteOperations.add(new RemoveModifiersOperation(node, Modifier.FINAL));
 					}
-				} else if (typeDecl != null && Modifier.isFinal(typeDecl.getModifiers()) && Modifier.isFinal(node.getModifiers()) && !node.isVarargs()) {
-					rewriteOperations.add(new RemoveModifiersOperation(node, Modifier.FINAL));
 				}
+
 				return true;
 			}
 
@@ -164,10 +171,10 @@
 				}
 				return true;
 			}
-			
+
 			@Override
 			public boolean visit(EnumDeclaration node) {
-				TypeDeclaration typeDecl= ASTNodes.getParent(node, TypeDeclaration.class);
+				TypeDeclaration typeDecl= node.getParent() instanceof TypeDeclaration ? (TypeDeclaration) node.getParent() : null;
 				if (typeDecl != null && Modifier.isStatic(node.getModifiers())) {
 					rewriteOperations.add(new RemoveModifiersOperation(node, Modifier.STATIC));
 				}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/UnboxingCleanUp.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/UnboxingCleanUp.java
index 9936fec..c8ff46b 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/UnboxingCleanUp.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/UnboxingCleanUp.java
@@ -85,15 +85,16 @@
 	public String getPreview() {
 		StringBuilder bld= new StringBuilder();
 		bld.append("\n");
-		bld.append("public class Foo {\n");
-		bld.append("    public static void bar(Character cObject) {\n");
+		bld.append("Integer integerObject = Integer.MAX_VALUE;\n");
+		bld.append("Character cObject = Character.MAX_VALUE;\n");
+		bld.append("\n");
 		if (isEnabled(CleanUpConstants.USE_UNBOXING)) {
-			bld.append("        char c = cObject;\n");
+			bld.append("int i = integerObject;\n");
+			bld.append("char c = cObject;\n");
 		} else {
-			bld.append("        char c = cObject.charValue();\n");
+			bld.append("int i = integerObject.intValue();\n");
+			bld.append("char c = cObject.charValue();\n");
 		}
-		bld.append("    }\n");
-		bld.append("}\n");
 
 		return bld.toString();
 	}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/FatJarRsrcUrlAntExporter.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/FatJarRsrcUrlAntExporter.java
index b85fee3..bd000f2 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/FatJarRsrcUrlAntExporter.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/FatJarRsrcUrlAntExporter.java
@@ -65,17 +65,16 @@
 	}
 
 	private void copyJarInJarLoader(File targetFile) throws IOException {
-		InputStream is= JavaPlugin.getDefault().getBundle().getEntry(FatJarRsrcUrlBuilder.JAR_RSRC_LOADER_ZIP).openStream();
-		OutputStream os= new FileOutputStream(targetFile);
-		byte[] buf= new byte[1024];
-		while (true) {
-			int cnt= is.read(buf);
-			if (cnt <= 0)
-				break;
-			os.write(buf, 0, cnt);
+		try (InputStream is= JavaPlugin.getDefault().getBundle().getEntry(FatJarRsrcUrlBuilder.JAR_RSRC_LOADER_ZIP).openStream();
+			OutputStream os= new FileOutputStream(targetFile);) {
+			byte[] buf= new byte[1024];
+			while (true) {
+				int cnt= is.read(buf);
+				if (cnt <= 0)
+					break;
+				os.write(buf, 0, cnt);
+			}
 		}
-		os.close();
-		is.close();
 	}
 
 	protected void buildANTScript(OutputStream outputStream, String projectName, IPath absJarfile, String mainClass, SourceInfo[] sourceInfos) throws IOException {
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/UnpackFatJarAntExporter.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/UnpackFatJarAntExporter.java
index db00596..af9d84b 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/UnpackFatJarAntExporter.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/UnpackFatJarAntExporter.java
@@ -50,9 +50,7 @@
 
 	@Override
 	protected void buildANTScript(IPath antScriptLocation, String projectName, IPath absJarfile, String mainClass, SourceInfo[] sourceInfos) throws IOException {
-		OutputStream outputStream= null;
-		try {
-			outputStream= new FileOutputStream(antScriptLocation.toFile());
+		try (OutputStream outputStream = new FileOutputStream(antScriptLocation.toFile())) {
 			String absJarname= absJarfile.toString();
 
 			DocumentBuilder docBuilder= null;
@@ -127,10 +125,6 @@
 			} catch (TransformerException e) {
 				throw new IOException(FatJarPackagerMessages.FatJarPackageAntScript_error_couldNotTransformToXML);
 			}
-		} finally {
-			if (outputStream != null) {
-				outputStream.close();
-			}
 		}
 	}
 
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/UnpackJarAntExporter.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/UnpackJarAntExporter.java
index b766ef4..4dfe520 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/UnpackJarAntExporter.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/UnpackJarAntExporter.java
@@ -54,9 +54,7 @@
 
 	@Override
 	protected void buildANTScript(IPath antScriptLocation, String projectName, IPath absJarfile, String mainClass, SourceInfo[] sourceInfos) throws IOException {
-		OutputStream outputStream= null;
-		try {
-			outputStream= new FileOutputStream(antScriptLocation.toFile());
+		try (OutputStream outputStream = new FileOutputStream(antScriptLocation.toFile())) {
 			String absJarname= absJarfile.toString();
 			String subfolder= absJarfile.removeFileExtension().lastSegment() + "_lib"; //$NON-NLS-1$
 			String absSubfolder= absJarfile.removeLastSegments(1).append(subfolder).toString();
@@ -160,10 +158,6 @@
 			} catch (TransformerException e) {
 				throw new IOException(FatJarPackagerMessages.FatJarPackageAntScript_error_couldNotTransformToXML);
 			}
-		} finally {
-			if (outputStream != null) {
-				outputStream.close();
-			}
 		}
 	}
 
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocWizard.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocWizard.java
index 9f0cf54..ce05648 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocWizard.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocWizard.java
@@ -300,8 +300,7 @@
 			File file= File.createTempFile("javadoc-arguments", ".tmp");  //$NON-NLS-1$//$NON-NLS-2$
 			vmArgs.add('@' + file.getAbsolutePath());
 
-			BufferedWriter writer= new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), getEncoding(vmArgs)));
-			try {
+			try (BufferedWriter writer= new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), getEncoding(vmArgs)))) {
 				for (int i= 0; i < progArgs.size(); i++) {
 					String curr= progArgs.get(i);
 					curr= checkForSpaces(curr);
@@ -309,8 +308,6 @@
 					writer.write(curr);
 					writer.write(' ');
 				}
-			} finally {
-				writer.close();
 			}
 			String[] args= vmArgs.toArray(new String[vmArgs.size()]);
 			process= Runtime.getRuntime().exec(args);
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ClipboardOperationAction.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ClipboardOperationAction.java
index da0dff1..7242247 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ClipboardOperationAction.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ClipboardOperationAction.java
@@ -113,13 +113,10 @@
 		}
 
 		public ClipboardData(byte[] bytes) throws IOException {
-			DataInputStream dataIn = new DataInputStream(new ByteArrayInputStream(bytes));
-			try {
+			try (DataInputStream dataIn = new DataInputStream(new ByteArrayInputStream(bytes))) {
 				fOriginHandle= dataIn.readUTF();
 				fTypeImports= readArray(dataIn);
 				fStaticImports= readArray(dataIn);
-			} finally {
-				dataIn.close();
 			}
 		}
 
@@ -154,13 +151,11 @@
 
 		public byte[] serialize() throws IOException {
 			ByteArrayOutputStream out = new ByteArrayOutputStream();
-			DataOutputStream dataOut = new DataOutputStream(out);
-			try {
+			try (DataOutputStream dataOut = new DataOutputStream(out)) {
 				dataOut.writeUTF(fOriginHandle);
 				writeArray(dataOut, fTypeImports);
 				writeArray(dataOut, fStaticImports);
 			} finally {
-				dataOut.close();
 				out.close();
 			}
 
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/navigator/JavaNavigatorViewActionProvider.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/navigator/JavaNavigatorViewActionProvider.java
index 8d891f9..5f7630e 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/navigator/JavaNavigatorViewActionProvider.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/navigator/JavaNavigatorViewActionProvider.java
@@ -170,7 +170,7 @@
 		// If no memento try to restore from preference store
 		if (showLibrariesNodeState == null) {
 			IPreferenceStore store= JavaPlugin.getDefault().getPreferenceStore();
-			showLibrariesNodeState= new Boolean(store.getString(TAG_LIBRARIES_NODE).equals(IPreferenceStore.STRING_DEFAULT_DEFAULT) || store.getBoolean((TAG_LIBRARIES_NODE)));
+			showLibrariesNodeState= Boolean.valueOf(store.getString(TAG_LIBRARIES_NODE).equals(IPreferenceStore.STRING_DEFAULT_DEFAULT) || store.getBoolean((TAG_LIBRARIES_NODE)));
 		}
 
 		boolean showLibrariesNode = showLibrariesNodeState.booleanValue();
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CodeAssistAdvancedConfigurationBlock.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CodeAssistAdvancedConfigurationBlock.java
index 8f753a9..8909196 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CodeAssistAdvancedConfigurationBlock.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/CodeAssistAdvancedConfigurationBlock.java
@@ -20,6 +20,7 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionAdapter;
@@ -53,9 +54,7 @@
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.resource.JFaceResources;
 import org.eclipse.jface.viewers.ArrayContentProvider;
-import org.eclipse.jface.viewers.CheckStateChangedEvent;
 import org.eclipse.jface.viewers.CheckboxTableViewer;
-import org.eclipse.jface.viewers.ICheckStateListener;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.ITableLabelProvider;
 import org.eclipse.jface.viewers.LabelProvider;
@@ -92,12 +91,14 @@
 	private static final Key PREF_EXCLUDED_CATEGORIES= getJDTUIKey(PreferenceConstants.CODEASSIST_EXCLUDED_CATEGORIES);
 	private static final Key PREF_CATEGORY_ORDER= getJDTUIKey(PreferenceConstants.CODEASSIST_CATEGORY_ORDER);
 	private static final Key PREF_CODEASSIST_TIMEOUT_FOR_PARAMETER_NAME_FROM_ATTACHED_JAVADOC= getJDTCoreKey(JavaCore.TIMEOUT_FOR_PARAMETER_NAME_FROM_ATTACHED_JAVADOC);
+	private static final Key PREF_CODEASSIST_NONUITHREAD_COMPUTATION = getJDTUIKey(PreferenceConstants.CODEASSIST_NONUITHREAD_COMPUTATION);
 
 	private static Key[] getAllKeys() {
 		return new Key[] {
 				PREF_EXCLUDED_CATEGORIES,
 				PREF_CATEGORY_ORDER,
-				PREF_CODEASSIST_TIMEOUT_FOR_PARAMETER_NAME_FROM_ATTACHED_JAVADOC
+				PREF_CODEASSIST_TIMEOUT_FOR_PARAMETER_NAME_FROM_ATTACHED_JAVADOC,
+				PREF_CODEASSIST_NONUITHREAD_COMPUTATION
 		};
 	}
 
@@ -108,8 +109,9 @@
 		 */
 		@Override
 		public Image getColumnImage(Object element, int columnIndex) {
-			if (columnIndex == 0)
+			if (columnIndex == 0) {
 				return ((ModelElement) element).getImage();
+			}
 			return null;
 		}
 
@@ -145,8 +147,9 @@
 		 */
 		@Override
 		public Image getColumnImage(Object element, int columnIndex) {
-			if (columnIndex == 0)
+			if (columnIndex == 0) {
 				return ((ModelElement) element).getImage();
+			}
 			return null;
 		}
 
@@ -220,8 +223,9 @@
     		StringBuilder buf= new StringBuilder();
 			for (ModelElement item : fElements) {
 				boolean included= changed == item ? isInDefaultCategory : item.isInDefaultCategory();
-				if (!included)
+				if (!included) {
 					buf.append(item.getId() + SEPARATOR);
+				}
 			}
 
     		String newValue= buf.toString();
@@ -257,8 +261,9 @@
     	private int readOrderPreference(CompletionProposalCategory cat) {
     		for (String sortOrderId : getTokens(getValue(PREF_CATEGORY_ORDER), SEPARATOR)) {
 				String[] idAndRank= getTokens(sortOrderId, COLON);
-				if (idAndRank[0].equals(cat.getId()))
+				if (idAndRank[0].equals(cat.getId())) {
 					return Integer.parseInt(idAndRank[1]);
+				}
 			}
 			return LIMIT - 1;
     	}
@@ -304,16 +309,18 @@
 			return fPreferenceModel.readInclusionPreference(fCategory);
 		}
 		void setInDefaultCategory(boolean included) {
-			if (included != isInDefaultCategory())
+			if (included != isInDefaultCategory()) {
 				fPreferenceModel.writeInclusionPreference(this, included);
+			}
 		}
 		String getId() {
 			return fCategory.getId();
 		}
 		int getRank() {
 			int rank= getInternalRank();
-			if (rank > PreferenceModel.LIMIT)
+			if (rank > PreferenceModel.LIMIT) {
 				return rank - PreferenceModel.LIMIT;
+			}
 			return rank;
 		}
 		void moveUp() {
@@ -330,8 +337,9 @@
 		}
 
 		void setSeparateCommand(boolean separate) {
-			if (separate != isSeparateCommand())
+			if (separate != isSeparateCommand()) {
 				fPreferenceModel.writeOrderPreference(this, separate);
+			}
 		}
 
 		void update() {
@@ -387,6 +395,8 @@
         createFiller(composite, columns);
 
 		createParameterTimeoutControl(composite, columns);
+		createFiller(composite, columns);
+		createNonUIThreadControl(composite, columns);
 
 		updateControls();
 		if (fModel.elements.size() > 0) {
@@ -400,13 +410,30 @@
 		return scrolled;
 	}
 
+	private void createNonUIThreadControl(Composite composite, int columns) {
+		PixelConverter pixelConverter= new PixelConverter(composite);
+		String str= PreferencesMessages.CodeAssistAdvancedConfigurationBlock_nonUIThread;
+		Button checkbox = addCheckBox(composite, str, PREF_CODEASSIST_NONUITHREAD_COMPUTATION, new String[] { Boolean.TRUE.toString(), Boolean.FALSE.toString() }, pixelConverter.convertWidthInCharsToPixels(7));
+		checkbox.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, false, columns, 1));
+		CompletionProposalComputerRegistry registry= CompletionProposalComputerRegistry.getDefault();
+		if (registry.computingCompletionRequiresUIThread()) {
+			Label label = new Label(composite, SWT.NONE);
+			label.setText(Messages.format(PreferencesMessages.CodeAssistAdvancedConfigurationBlock_nonUIThread_computersRequiringUIThread, registry.getComputersRequiringUIThreadNames().map(name -> "* " + name).collect(Collectors.joining("\n")))); //$NON-NLS-1$ //$NON-NLS-2$
+			GridData layoutData= new GridData(GridData.FILL, GridData.FILL, true, false, columns, 1);
+			layoutData.horizontalIndent = 30;
+			label.setLayoutData(layoutData);
+			label.setEnabled(false);
+		}
+	}
+
 	private void createDefaultLabel(Composite composite, int h_span) {
 	    final ICommandService commandSvc= PlatformUI.getWorkbench().getAdapter(ICommandService.class);
 		final Command command= commandSvc.getCommand(ITextEditorActionDefinitionIds.CONTENT_ASSIST_PROPOSALS);
 		ParameterizedCommand pCmd= new ParameterizedCommand(command, null);
 		String key= getKeyboardShortcut(pCmd);
-		if (key == null)
+		if (key == null) {
 			key= PreferencesMessages.CodeAssistAdvancedConfigurationBlock_no_shortcut;
+		}
 
 		PixelConverter pixelConverter= new PixelConverter(composite);
 		int width= pixelConverter.convertWidthInCharsToPixels(40);
@@ -440,13 +467,10 @@
 		keyColumn.setText(PreferencesMessages.CodeAssistAdvancedConfigurationBlock_default_table_keybinding_column_title);
 		keyColumn.setResizable(false);
 
-		fDefaultViewer.addCheckStateListener(new ICheckStateListener() {
-			@Override
-			public void checkStateChanged(CheckStateChangedEvent event) {
-				boolean checked= event.getChecked();
-				ModelElement element= (ModelElement) event.getElement();
-				element.setInDefaultCategory(checked);
-			}
+		fDefaultViewer.addCheckStateListener(event -> {
+			boolean checked= event.getChecked();
+			ModelElement element= (ModelElement) event.getElement();
+			element.setInDefaultCategory(checked);
 		});
 
 		fDefaultViewer.setContentProvider(ArrayContentProvider.getInstance());
@@ -460,9 +484,9 @@
 		final int HEADER_MARGIN= 20;
 		int minNameWidth= computeWidth(table, nameColumn.getText()) + HEADER_MARGIN;
 		int minKeyWidth= computeWidth(table, keyColumn.getText()) + HEADER_MARGIN;
-		for (int i= 0; i < fModel.elements.size(); i++) {
-			minNameWidth= Math.max(minNameWidth, computeWidth(table, labelProvider.getColumnText(fModel.elements.get(i), 0)) + ICON_AND_CHECKBOX_WITH);
-			minKeyWidth= Math.max(minKeyWidth, computeWidth(table, labelProvider.getColumnText(fModel.elements.get(i), 1)));
+		for (ModelElement element : fModel.elements) {
+			minNameWidth= Math.max(minNameWidth, computeWidth(table, labelProvider.getColumnText(element, 0)) + ICON_AND_CHECKBOX_WITH);
+			minKeyWidth= Math.max(minKeyWidth, computeWidth(table, labelProvider.getColumnText(element, 1)));
 		}
 
 		nameColumn.setWidth(minNameWidth);
@@ -530,19 +554,16 @@
 		final int ICON_AND_CHECKBOX_WITH= 50;
 		final int HEADER_MARGIN= 20;
 		int minNameWidth= computeWidth(table, nameColumn.getText()) + HEADER_MARGIN;
-		for (int i= 0; i < fModel.elements.size(); i++) {
-			minNameWidth= Math.max(minNameWidth, computeWidth(table, labelProvider.getColumnText(fModel.elements.get(i), 0)) + ICON_AND_CHECKBOX_WITH);
+		for (ModelElement element : fModel.elements) {
+			minNameWidth= Math.max(minNameWidth, computeWidth(table, labelProvider.getColumnText(element, 0)) + ICON_AND_CHECKBOX_WITH);
 		}
 
 		nameColumn.setWidth(minNameWidth);
 
-		fSeparateViewer.addCheckStateListener(new ICheckStateListener() {
-			@Override
-			public void checkStateChanged(CheckStateChangedEvent event) {
-				boolean checked= event.getChecked();
-				ModelElement element= (ModelElement) event.getElement();
-				element.setSeparateCommand(checked);
-			}
+		fSeparateViewer.addCheckStateListener(event -> {
+			boolean checked= event.getChecked();
+			ModelElement element= (ModelElement) event.getElement();
+			element.setSeparateCommand(checked);
 		});
 
 		table.addSelectionListener(new SelectionAdapter() {
@@ -651,10 +672,12 @@
 		List<ModelElement> separateChecked= new ArrayList<>(size);
 
 		for (ModelElement element : fModel.elements) {
-			if (element.isInDefaultCategory())
+			if (element.isInDefaultCategory()) {
 				defaultChecked.add(element);
-			if (element.isSeparateCommand())
+			}
+			if (element.isSeparateCommand()) {
 				separateChecked.add(element);
+			}
 		}
 
 		fDefaultViewer.setCheckedElements(defaultChecked.toArray(new Object[defaultChecked.size()]));
@@ -680,9 +703,9 @@
 	protected void validateSettings(Key changedKey, String oldValue, String newValue) {
 		if (changedKey == PREF_CODEASSIST_TIMEOUT_FOR_PARAMETER_NAME_FROM_ATTACHED_JAVADOC) {
 			final StatusInfo status= new StatusInfo();
-			if (newValue.length() == 0)
+			if (newValue.length() == 0) {
 				status.setError(PreferencesMessages.CodeAssistAdvancedConfigurationBlock_parameterNameFromAttachedJavadoc_timeout_emptyInput);
-			else {
+			} else {
 				try {
 					int number= Integer.parseInt(newValue);
 					int min= 0;
@@ -716,8 +739,7 @@
 	 */
 	@Override
 	public void dispose() {
-		for (Iterator<Image> it= fImages.values().iterator(); it.hasNext();) {
-			Image image= it.next();
+		for (Image image : fImages.values()) {
 			image.dispose();
 		}
 
@@ -725,8 +747,9 @@
 	}
 
 	private int computeWidth(Control control, String name) {
-		if (name == null)
+		if (name == null) {
 			return 0;
+		}
 		GC gc= new GC(control);
 		try {
 			gc.setFont(JFaceResources.getDialogFont());
@@ -760,21 +783,24 @@
 		fgLocalBindingManager.setBindings(bindingService.getBindings());
 		try {
 			Scheme activeScheme= bindingService.getActiveScheme();
-			if (activeScheme != null)
+			if (activeScheme != null) {
 				fgLocalBindingManager.setActiveScheme(activeScheme);
+			}
 		} catch (NotDefinedException e) {
 			JavaPlugin.log(e);
 		}
 
 		TriggerSequence[] bindings= fgLocalBindingManager.getActiveBindingsDisregardingContextFor(command);
-		if (bindings.length > 0)
+		if (bindings.length > 0) {
 			return bindings[0].format();
+		}
 		return null;
 	}
 
 	private Image getImage(ImageDescriptor imgDesc) {
-		if (imgDesc == null)
+		if (imgDesc == null) {
 			return null;
+		}
 
 		Image img= fImages.get(imgDesc);
 		if (img == null) {
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavadocConfigurationBlock.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavadocConfigurationBlock.java
index 64c8eb2..30456fa 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavadocConfigurationBlock.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavadocConfigurationBlock.java
@@ -436,16 +436,11 @@
 				connection.connect();
 				res= ((HttpURLConnection) connection).getResponseCode();
 			}
-			InputStream is= null;
-			try {
-				is= connection.getInputStream();
+			try (InputStream is = connection.getInputStream()) {
 				byte[] buffer= new byte[256];
 				while (is.read(buffer) != -1) {
 					// just read
 				}
-			} finally {
-				if (is != null)
-					is.close();
 			}
 		} catch (IllegalArgumentException e) {
 			return false; // workaround for bug 91072
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PreferencesMessages.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PreferencesMessages.java
index dd3f352..aee29c7 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PreferencesMessages.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PreferencesMessages.java
@@ -69,6 +69,8 @@
 	public static String CodeAssistAdvancedConfigurationBlock_parameterNameFromAttachedJavadoc_timeout_emptyInput;
 	public static String CodeAssistAdvancedConfigurationBlock_parameterNameFromAttachedJavadoc_timeout_invalidInput;
 	public static String CodeAssistAdvancedConfigurationBlock_parameterNameFromAttachedJavadoc_timeout_invalidRange;
+	public static String CodeAssistAdvancedConfigurationBlock_nonUIThread;
+	public static String CodeAssistAdvancedConfigurationBlock_nonUIThread_computersRequiringUIThread;
 	public static String ImportOrganizePreferencePage_title;
 	public static String ImportOrganizeConfigurationBlock_order_label;
 	public static String ImportOrganizeConfigurationBlock_other_static;
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PreferencesMessages.properties b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PreferencesMessages.properties
index 13898d2..85f4f57 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PreferencesMessages.properties
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PreferencesMessages.properties
@@ -955,6 +955,9 @@
 CodeAssistAdvancedConfigurationBlock_Up=&Up
 CodeAssistAdvancedConfigurationBlock_Down=D&own
 CodeAssistAdvancedConfigurationBlock_parameterNameFromAttachedJavadoc_timeout=&Timeout for fetching a parameter name from attached Javadoc (ms):
+CodeAssistAdvancedConfigurationBlock_nonUIThread=Do not block &UI Thread while computing completion proposals (does not affect open editors)
+CodeAssistAdvancedConfigurationBlock_nonUIThread_computersRequiringUIThread=\u26A0\uFE0F This setting will be ignored because the following contributions require UI Thread:\n\
+{0}
 
 CodeAssistAdvancedConfigurationBlock_parameterNameFromAttachedJavadoc_timeout_emptyInput=Empty input.
 CodeAssistAdvancedConfigurationBlock_parameterNameFromAttachedJavadoc_timeout_invalidInput=''{0}'' is not a valid input.
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpMessages.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpMessages.java
index f637ba2..d38b1af 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpMessages.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpMessages.java
@@ -61,6 +61,10 @@
 	public static String CodeStyleTabPage_GroupName_ControlStatments;
 	public static String CodeStyleTabPage_GroupName_Expressions;
 
+	public static String CodeStyleTabPage_GroupName_NumberLiteral;
+
+	public static String CodeStyleTabPage_CheckboxName_NumberSuffix;
+
 	public static String CodeStyleTabPage_GroupName_VariableDeclarations;
 	public static String CodeStyleTabPage_RadioName_AlwaysUseBlocks;
 	public static String CodeStyleTabPage_RadioName_AlwaysUseParantheses;
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpMessages.properties b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpMessages.properties
index 5dcc54c..814b2a9 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpMessages.properties
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpMessages.properties
@@ -39,6 +39,8 @@
 CodeStyleTabPage_RadioName_AlwaysUseBlocks=Al&ways
 CodeStyleTabPage_RadioName_NeverUseBlocks=Only if &necessary
 CodeStyleTabPage_GroupName_Expressions=Expressions
+CodeStyleTabPage_GroupName_NumberLiteral=Number literals
+CodeStyleTabPage_CheckboxName_NumberSuffix=Use &uppercase for long literal suffix
 CodeStyleTabPage_CheckboxName_UseFinal=U&se modifier 'final' where possible
 CodeStyleTabPage_CheckboxName_UseFinalForParameters=P&arameter
 CodeStyleTabPage_RadioName_AlwaysUseParantheses=Alwa&ys
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CodeStyleTabPage.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CodeStyleTabPage.java
index ccfa567..f6ecb53 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CodeStyleTabPage.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CodeStyleTabPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2013 IBM Corporation and others.
+ * Copyright (c) 2000, 2019 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -25,22 +25,19 @@
 import org.eclipse.jdt.internal.ui.fix.ConvertLoopCleanUp;
 import org.eclipse.jdt.internal.ui.fix.ExpressionsCleanUp;
 import org.eclipse.jdt.internal.ui.fix.LambdaExpressionsCleanUp;
+import org.eclipse.jdt.internal.ui.fix.NumberSuffixCleanUp;
 import org.eclipse.jdt.internal.ui.fix.VariableDeclarationCleanUp;
 
 public final class CodeStyleTabPage extends AbstractCleanUpTabPage {
-
 	public static final String ID= "org.eclipse.jdt.ui.cleanup.tabpage.code_style"; //$NON-NLS-1$
 
-    public CodeStyleTabPage() {
-    	super();
-    }
-
 	@Override
 	protected AbstractCleanUp[] createPreviewCleanUps(Map<String, String> values) {
 		return new AbstractCleanUp[] {
         		new ControlStatementsCleanUp(values),
         		new ConvertLoopCleanUp(values),
         		new ExpressionsCleanUp(values),
+				new NumberSuffixCleanUp(values),
 				new VariableDeclarationCleanUp(values),
 				new LambdaExpressionsCleanUp(values)
         };
@@ -48,7 +45,6 @@
 
     @Override
 	protected void doCreatePreferences(Composite composite, int numColumns) {
-
     	Group controlGroup= createGroup(numColumns, composite, CleanUpMessages.CodeStyleTabPage_GroupName_ControlStatments);
 
     	final CheckboxPreference useBlockPref= createCheckboxPref(controlGroup, numColumns, CleanUpMessages.CodeStyleTabPage_CheckboxName_UseBlocks, CleanUpConstants.CONTROL_STATEMENTS_USE_BLOCKS, CleanUpModifyDialog.FALSE_TRUE);
@@ -71,6 +67,12 @@
 		final RadioPreference useParenthesesNeverPref= createRadioPref(expressionsGroup, 1, CleanUpMessages.CodeStyleTabPage_RadioName_NeverUseParantheses, CleanUpConstants.EXPRESSIONS_USE_PARENTHESES_NEVER, CleanUpModifyDialog.FALSE_TRUE);
 		registerSlavePreference(useParenthesesPref, new RadioPreference[] {useParenthesesAlwaysPref, useParenthesesNeverPref});
 
+		Group numberSuffixGroup= createGroup(numColumns, composite, CleanUpMessages.CodeStyleTabPage_GroupName_NumberLiteral);
+
+		final CheckboxPreference numberSuffixPref= createCheckboxPref(numberSuffixGroup, numColumns, CleanUpMessages.CodeStyleTabPage_CheckboxName_NumberSuffix, CleanUpConstants.NUMBER_SUFFIX,
+				CleanUpModifyDialog.FALSE_TRUE);
+		registerPreference(numberSuffixPref);
+
 		Group variableGroup= createGroup(numColumns, composite, CleanUpMessages.CodeStyleTabPage_GroupName_VariableDeclarations);
 
     	final CheckboxPreference useFinalPref= createCheckboxPref(variableGroup, numColumns, CleanUpMessages.CodeStyleTabPage_CheckboxName_UseFinal, CleanUpConstants.VARIABLE_DECLARATIONS_USE_FINAL, CleanUpModifyDialog.FALSE_TRUE);
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/FormatterProfileStore.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/FormatterProfileStore.java
index ff0c56a..6878622 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/FormatterProfileStore.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/FormatterProfileStore.java
@@ -76,9 +76,8 @@
 			return null;
 
 		try {
-			// note that it's wrong to use a file reader when XML declares UTF-8: Kept for compatibility
-			final FileReader reader= new FileReader(file);
-			try {
+			try ( // note that it's wrong to use a file reader when XML declares UTF-8: Kept for compatibility
+				FileReader reader= new FileReader(file)) {
 				List<Profile> res= readProfilesFromStream(new InputSource(reader));
 				if (res != null) {
 					for (int i= 0; i < res.size(); i++) {
@@ -88,8 +87,6 @@
 				}
 				file.delete(); // remove after successful write
 				return res;
-			} finally {
-				reader.close();
 			}
 		} catch (CoreException e) {
 			JavaPlugin.log(e); // log but ignore
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/IProposalRelevance.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/IProposalRelevance.java
index 0ef0c17..a4bbf13 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/IProposalRelevance.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/IProposalRelevance.java
@@ -54,6 +54,8 @@
 	public static final int MISSING_SERIAL_VERSION_DEFAULT= 9;
 	public static final int CREATE_CONSTANT_PREFIX_OR_SUFFIX_MATCH= 9;
 	public static final int CREATE_FIELD_PREFIX_OR_SUFFIX_MATCH= 9;
+	public static final int CREATE_OPTIONAL= 9;
+	public static final int CREATE_OPTIONAL_OF_NULLABLE= 9;
 
 	public static final int ADD_ABSTRACT_MODIFIER= 8;
 	public static final int ADD_STATIC_MODIFIER= 8;
@@ -76,7 +78,8 @@
 	public static final int CHANGE_VARIABLE= 8;
 	public static final int CHANGE_RETURN_TYPE= 8;
 	public static final int CREATE_PARAMETER_PREFIX_OR_SUFFIX_MATCH= 8;
-	
+	public static final int CREATE_EMPTY_OPTIONAL= 8;
+
 	public static final int CHANGE_OVERRIDDEN_MODIFIER_2= 7;
 	public static final int ADD_EXCEPTIONS= 7;
 	public static final int CHANGE_METHOD_SIGNATURE= 7;
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ModifierCorrectionSubProcessor.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ModifierCorrectionSubProcessor.java
index 5d6fb90..7dd7cac 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ModifierCorrectionSubProcessor.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ModifierCorrectionSubProcessor.java
@@ -17,10 +17,13 @@
  *******************************************************************************/
 package org.eclipse.jdt.internal.ui.text.correction;
 
+import java.util.ArrayList;
 import java.util.Collection;
+import java.util.HashSet;
 import java.util.Hashtable;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import org.eclipse.swt.graphics.Image;
 
@@ -265,10 +268,34 @@
 		}
 
 		IMethodBinding overriddenInClass= null;
+		List<ITypeBinding> motherClasses= new ArrayList<>();
 		while (overriddenInClass == null && curr.getSuperclass() != null) {
 			curr= curr.getSuperclass();
+			motherClasses.add(curr);
 			overriddenInClass= Bindings.findOverriddenMethodInType(curr, method);
 		}
+
+		if (overriddenInClass == null) {
+			motherClasses.add(0, method.getDeclaringClass());
+
+			Set<IMethodBinding> methodBindings= new HashSet<>();
+
+			for (ITypeBinding motherClass : motherClasses) {
+				findOverriddenMethodInType(motherClass, method, methodBindings);
+			}
+
+			if (!methodBindings.isEmpty()) {
+				overriddenInClass= methodBindings.iterator().next();
+
+				for (IMethodBinding methodBinding : methodBindings) {
+					if (!Bindings.equalDeclarations(overriddenInClass, methodBinding)) {
+						overriddenInClass= null;
+						break;
+					}
+				}
+			}
+		}
+
 		if (overriddenInClass != null) {
 			final IMethodBinding overriddenDecl= overriddenInClass.getMethodDeclaration();
 			final ICompilationUnit overriddenMethodCU= ASTResolving.findCompilationUnitForBinding(cu, context.getASTRoot(), overriddenDecl.getDeclaringClass());
@@ -335,6 +362,21 @@
 		}
 	}
 
+	private static void findOverriddenMethodInType(ITypeBinding currentType, IMethodBinding method, Set<IMethodBinding> methodBindings) {
+		ITypeBinding[] interfaces= currentType.getInterfaces();
+		IMethodBinding overriddenInInterface;
+
+		for (ITypeBinding interface0 : interfaces) {
+			overriddenInInterface= Bindings.findOverriddenMethodInType(interface0, method);
+
+			if (overriddenInInterface != null) {
+				methodBindings.add(overriddenInInterface);
+			}
+
+			findOverriddenMethodInType(interface0, method, methodBindings);
+		}
+	}
+
 	public static void addNonFinalLocalProposal(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) {
 		ICompilationUnit cu= context.getCompilationUnit();
 
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/QuickAssistProcessor.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/QuickAssistProcessor.java
index 502b399..d9de1a9 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/QuickAssistProcessor.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/QuickAssistProcessor.java
@@ -58,6 +58,7 @@
 import org.eclipse.jdt.core.NamingConventions;
 import org.eclipse.jdt.core.compiler.IProblem;
 import org.eclipse.jdt.core.dom.AST;
+import org.eclipse.jdt.core.dom.ASTMatcher;
 import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.ASTVisitor;
 import org.eclipse.jdt.core.dom.AbstractTypeDeclaration;
@@ -171,6 +172,7 @@
 import org.eclipse.jdt.internal.corext.refactoring.code.ExtractMethodRefactoring;
 import org.eclipse.jdt.internal.corext.refactoring.code.ExtractTempRefactoring;
 import org.eclipse.jdt.internal.corext.refactoring.code.InlineTempRefactoring;
+import org.eclipse.jdt.internal.corext.refactoring.code.Invocations;
 import org.eclipse.jdt.internal.corext.refactoring.code.PromoteTempToFieldRefactoring;
 import org.eclipse.jdt.internal.corext.refactoring.structure.ImportRemover;
 import org.eclipse.jdt.internal.corext.refactoring.util.TightSourceRangeComputer;
@@ -1838,6 +1840,66 @@
 			return false;
 		}
 		ExpressionStatement assignParent= (ExpressionStatement) assignment.getParent();
+		IfStatement ifStatement= null;
+		Expression thenExpression= null;
+		Expression elseExpression= null;
+		ITypeBinding exprBinding= null;
+
+		ASTNode assignParentParent= assignParent.getParent();
+		if (assignParentParent instanceof IfStatement
+				|| (assignParentParent.getLocationInParent() == IfStatement.THEN_STATEMENT_PROPERTY
+				&& !(assignParentParent.subtreeMatch(new ASTMatcher(), statement.getParent())))) {
+			if (assignParentParent.getLocationInParent() == IfStatement.THEN_STATEMENT_PROPERTY) {
+				assignParentParent= assignParentParent.getParent();
+			}
+			ifStatement= (IfStatement) assignParentParent;
+			Statement thenStatement= getSingleStatement(ifStatement.getThenStatement());
+			Statement elseStatement= getSingleStatement(ifStatement.getElseStatement());
+			if (thenStatement == null || elseStatement == null) {
+				return false;
+			}
+
+			if (thenStatement instanceof ExpressionStatement && elseStatement instanceof ExpressionStatement) {
+				Expression inner1= ((ExpressionStatement) thenStatement).getExpression();
+				Expression inner2= ((ExpressionStatement) elseStatement).getExpression();
+				if (inner1 instanceof Assignment && inner2 instanceof Assignment) {
+					Assignment assign1= (Assignment) inner1;
+					Assignment assign2= (Assignment) inner2;
+					Expression left1= assign1.getLeftHandSide();
+					Expression left2= assign2.getLeftHandSide();
+					if (left1 instanceof Name && left2 instanceof Name && assign1.getOperator() == assign2.getOperator()) {
+						IBinding bind1= ((Name) left1).resolveBinding();
+						IBinding bind2= ((Name) left2).resolveBinding();
+						if (bind1 == bind2 && bind1 instanceof IVariableBinding) {
+							exprBinding= ((IVariableBinding) bind1).getType();
+							thenExpression= assign1.getRightHandSide();
+							elseExpression= assign2.getRightHandSide();
+						}
+					}
+				}
+			}
+			if (thenExpression == null || elseExpression == null) {
+				return false;
+			}
+		} else {
+			// Be conservative and don't allow anything but Blocks between the
+			// VariableDeclarationStatement and the ExpressionStatement to join
+			ASTNode n= assignParent.getParent();
+			ASTNode statementParent= statement.getParent();
+			ASTMatcher matcher= new ASTMatcher();
+			boolean complete= false;
+			while (!complete) {
+				if (n != null && n.getNodeType() == statementParent.getNodeType()) {
+					if (n.subtreeMatch(matcher, statementParent)) {
+						break;
+					}
+				}
+				if (n instanceof Block) {
+					n= n.getParent();
+				}
+				return false;
+			}
+		}
 
 		if (resultingCollections == null) {
 			return true;
@@ -1846,7 +1908,7 @@
 		AST ast= statement.getAST();
 		ASTRewrite rewrite= ASTRewrite.create(ast);
 		TightSourceRangeComputer sourceRangeComputer= new TightSourceRangeComputer();
-		sourceRangeComputer.addTightSourceNode(assignParent);
+		sourceRangeComputer.addTightSourceNode(ifStatement != null ? ifStatement : assignParent);
 		rewrite.setTargetSourceRangeComputer(sourceRangeComputer);
 
 		String label= CorrectionMessages.QuickAssistProcessor_joindeclaration_description;
@@ -1854,20 +1916,49 @@
 		LinkedCorrectionProposal proposal= new LinkedCorrectionProposal(label, context.getCompilationUnit(), rewrite, IProposalRelevance.JOIN_VARIABLE_DECLARATION, image);
 		proposal.setCommandId(SPLIT_JOIN_VARIABLE_DECLARATION_ID);
 
-		Expression placeholder= (Expression) rewrite.createMoveTarget(assignment.getRightHandSide());
-		rewrite.set(fragment, VariableDeclarationFragment.INITIALIZER_PROPERTY, placeholder, null);
+		if (ifStatement != null) {
+			// prepare conditional expression
+			ConditionalExpression conditionalExpression= ast.newConditionalExpression();
+			Expression conditionCopy= (Expression) rewrite.createCopyTarget(ifStatement.getExpression());
+			conditionalExpression.setExpression(conditionCopy);
+			Expression thenCopy= (Expression) rewrite.createCopyTarget(thenExpression);
+			Expression elseCopy= (Expression) rewrite.createCopyTarget(elseExpression);
 
-
-		if (onFirstAccess) {
-			// replace assignment with variable declaration
-			rewrite.replace(assignParent, rewrite.createMoveTarget(statement), null);
+			IJavaProject project= context.getCompilationUnit().getJavaProject();
+			if (!JavaModelUtil.is50OrHigher(project)) {
+				ITypeBinding thenBinding= thenExpression.resolveTypeBinding();
+				ITypeBinding elseBinding= elseExpression.resolveTypeBinding();
+				if (thenBinding != null && elseBinding != null && exprBinding != null && !elseBinding.isAssignmentCompatible(thenBinding)) {
+					CastExpression castException= ast.newCastExpression();
+					ImportRewrite importRewrite= proposal.createImportRewrite(context.getASTRoot());
+					ImportRewriteContext importRewriteContext= new ContextSensitiveImportRewriteContext(node, importRewrite);
+					castException.setType(importRewrite.addImport(exprBinding, ast, importRewriteContext, TypeLocation.CAST));
+					castException.setExpression(elseCopy);
+					elseCopy= castException;
+				}
+			} else if (JavaModelUtil.is17OrHigher(project)) {
+				addExplicitTypeArgumentsIfNecessary(rewrite, proposal, thenExpression);
+				addExplicitTypeArgumentsIfNecessary(rewrite, proposal, elseExpression);
+			}
+			conditionalExpression.setThenExpression(thenCopy);
+			conditionalExpression.setElseExpression(elseCopy);
+			rewrite.set(fragment,  VariableDeclarationFragment.INITIALIZER_PROPERTY, conditionalExpression, null);
+			rewrite.remove(ifStatement, null);
 		} else {
-			// different scopes -> remove assignments, set variable initializer
-			if (ASTNodes.isControlStatementBody(assignParent.getLocationInParent())) {
-				Block block= ast.newBlock();
-				rewrite.replace(assignParent, block, null);
+			Expression placeholder= (Expression) rewrite.createMoveTarget(assignment.getRightHandSide());
+			rewrite.set(fragment, VariableDeclarationFragment.INITIALIZER_PROPERTY, placeholder, null);
+
+			if (onFirstAccess) {
+				// replace assignment with variable declaration
+				rewrite.replace(assignParent, rewrite.createMoveTarget(statement), null);
 			} else {
-				rewrite.remove(assignParent, null);
+				// different scopes -> remove assignments, set variable initializer
+				if (ASTNodes.isControlStatementBody(assignParent.getLocationInParent())) {
+					Block block= ast.newBlock();
+					rewrite.replace(assignParent, block, null);
+				} else {
+					rewrite.remove(assignParent, null);
+				}
 			}
 		}
 
@@ -1877,6 +1968,53 @@
 
 	}
 
+	private static void addExplicitTypeArgumentsIfNecessary(ASTRewrite rewrite, ASTRewriteCorrectionProposal proposal, Expression invocation) {
+		if (Invocations.isResolvedTypeInferredFromExpectedType(invocation)) {
+			ITypeBinding[] typeArguments= Invocations.getInferredTypeArguments(invocation);
+			if (typeArguments == null)
+				return;
+
+			ImportRewrite importRewrite= proposal.getImportRewrite();
+			if (importRewrite == null) {
+				importRewrite= proposal.createImportRewrite((CompilationUnit) invocation.getRoot());
+			}
+			ImportRewriteContext importRewriteContext= new ContextSensitiveImportRewriteContext(invocation, importRewrite);
+
+			AST ast= invocation.getAST();
+			ListRewrite typeArgsRewrite= Invocations.getInferredTypeArgumentsRewrite(rewrite, invocation);
+
+			for (ITypeBinding typeArgument : typeArguments) {
+				Type typeArgumentNode= importRewrite.addImport(typeArgument, ast, importRewriteContext, TypeLocation.TYPE_ARGUMENT);
+				typeArgsRewrite.insertLast(typeArgumentNode, null);
+			}
+
+			if (invocation instanceof MethodInvocation) {
+				MethodInvocation methodInvocation= (MethodInvocation) invocation;
+				Expression expression= methodInvocation.getExpression();
+				if (expression == null) {
+					IMethodBinding methodBinding= methodInvocation.resolveMethodBinding();
+					if (methodBinding != null && Modifier.isStatic(methodBinding.getModifiers())) {
+						expression= ast.newName(importRewrite.addImport(methodBinding.getDeclaringClass().getTypeDeclaration(), importRewriteContext));
+					} else {
+						expression= ast.newThisExpression();
+					}
+					rewrite.set(invocation, MethodInvocation.EXPRESSION_PROPERTY, expression, null);
+				}
+			}
+		}
+	}
+
+	private static Statement getSingleStatement(Statement statement) {
+		if (statement instanceof Block) {
+			List<Statement> blockStatements= ((Block) statement).statements();
+			if (blockStatements.size() != 1) {
+				return null;
+			}
+			return blockStatements.get(0);
+		}
+		return statement;
+	}
+
 	private static boolean getSplitVariableProposals(IInvocationContext context, ASTNode node, Collection<ICommandAccess> resultingCollections) {
 		VariableDeclarationFragment fragment;
 		if (node instanceof VariableDeclarationFragment) {
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/TypeMismatchSubProcessor.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/TypeMismatchSubProcessor.java
index 03514bb..230d092 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/TypeMismatchSubProcessor.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/TypeMismatchSubProcessor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2018 IBM Corporation and others.
+ * Copyright (c) 2000, 2019 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -77,6 +77,7 @@
 import org.eclipse.jdt.internal.ui.text.correction.proposals.LinkedCorrectionProposal;
 import org.eclipse.jdt.internal.ui.text.correction.proposals.NewVariableCorrectionProposal;
 import org.eclipse.jdt.internal.ui.text.correction.proposals.TypeChangeCorrectionProposal;
+import org.eclipse.jdt.internal.ui.text.correction.proposals.OptionalCorrectionProposal;
 
 import org.eclipse.jdt.internal.core.manipulation.StubUtility;
 import org.eclipse.jdt.internal.core.manipulation.dom.ASTResolving;
@@ -149,8 +150,31 @@
 				currBinding= methodBinding.getReturnType();
 			}
 		}
-		
+
 		if (!(nodeToCast instanceof ArrayInitializer)) {
+			String castTypeName= castTypeBinding.getErasure().getQualifiedName();
+			if (castTypeName.equals("java.util.Optional") && ast.apiLevel() >= AST.JLS8) { //$NON-NLS-1$
+				ITypeBinding nodeToCastTypeBinding= nodeToCast.resolveTypeBinding();
+				String label0= Messages.format(CorrectionMessages.TypeMismatchSubProcessor_changetooptionalempty_description, nodeToCast.toString());
+				proposals.add(new OptionalCorrectionProposal(label0, cu, nodeToCast, IProposalRelevance.CREATE_EMPTY_OPTIONAL, OptionalCorrectionProposal.OPTIONAL_EMPTY));
+				ITypeBinding[] typeArguments= castTypeBinding.getTypeArguments();
+				boolean wrapAll= false;
+				for (ITypeBinding typeArgument : typeArguments) {
+					if (typeArgument.isCastCompatible(nodeToCastTypeBinding)) {
+						wrapAll= true;
+						break;
+					}
+				}
+				if (wrapAll) {
+					String label1= Messages.format(CorrectionMessages.TypeMismatchSubProcessor_changetooptionalof_description, nodeToCast.toString());
+					proposals.add(new OptionalCorrectionProposal(label1, cu, nodeToCast, IProposalRelevance.CREATE_OPTIONAL, OptionalCorrectionProposal.OPTIONAL_OF));
+					if (!nodeToCastTypeBinding.isPrimitive()) {
+						String label2= Messages.format(CorrectionMessages.TypeMismatchSubProcessor_changetooptionalofnullable_description, nodeToCast.toString());
+						proposals.add(new OptionalCorrectionProposal(label2, cu, nodeToCast, IProposalRelevance.CREATE_OPTIONAL_OF_NULLABLE, OptionalCorrectionProposal.OPTIONAL_OF_NULLABLE));
+					}
+				}
+			}
+
 			ITypeBinding castFixType= null;
 			if (currBinding == null || castTypeBinding.isCastCompatible(currBinding) || nodeToCast instanceof CastExpression) {
 				castFixType= castTypeBinding;
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/AbstractMethodCorrectionProposal.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/AbstractMethodCorrectionProposal.java
index 26c4370..9c753d6 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/AbstractMethodCorrectionProposal.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/AbstractMethodCorrectionProposal.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
@@ -162,6 +162,7 @@
 
 		addNewParameters(rewrite, takenNames, decl.parameters(), context);
 		addNewExceptions(rewrite, decl.thrownExceptionTypes(), context);
+		addNewJavaDoc(rewrite, decl);
 
 		Block body= null;
 		if (!isAbstractMethod && !Flags.isAbstract(decl.getModifiers())) {
@@ -217,6 +218,15 @@
 	protected abstract void addNewTypeParameters(ASTRewrite rewrite, List<String> takenNames, List<TypeParameter> params, ImportRewriteContext context) throws CoreException;
 	protected abstract void addNewParameters(ASTRewrite rewrite, List<String> takenNames, List<SingleVariableDeclaration> params, ImportRewriteContext context) throws CoreException;
 	protected abstract void addNewExceptions(ASTRewrite rewrite, List<Type> exceptions, ImportRewriteContext context) throws CoreException;
+	/**
+	 * Add implementation in sub classes.
+	 * @param rewrite  The rewrite node
+	 * @param decl The method declaration to add JavaDoc to
+	 * @throws CoreException Might throw Exception
+	 */
+	protected void addNewJavaDoc(ASTRewrite rewrite, MethodDeclaration decl) throws CoreException {
+		// no default action
+	}
 
 	protected abstract SimpleName getNewName(ASTRewrite rewrite);
 	protected abstract Type getNewMethodType(ASTRewrite rewrite, ImportRewriteContext context) throws CoreException;
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/InitializeFinalFieldProposal.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/InitializeFinalFieldProposal.java
index 0d7a4d6..5932a8c 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/InitializeFinalFieldProposal.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/InitializeFinalFieldProposal.java
@@ -34,12 +34,16 @@
 import org.eclipse.jdt.core.dom.ITypeBinding;
 import org.eclipse.jdt.core.dom.IVariableBinding;
 import org.eclipse.jdt.core.dom.MethodDeclaration;
+import org.eclipse.jdt.core.dom.ParameterizedType;
 import org.eclipse.jdt.core.dom.PrimitiveType;
+import org.eclipse.jdt.core.dom.SimpleType;
 import org.eclipse.jdt.core.dom.Type;
 import org.eclipse.jdt.core.dom.TypeDeclaration;
 import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
+import org.eclipse.jdt.core.dom.WildcardType;
 import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
 
+import org.eclipse.jdt.internal.corext.dom.ASTNodeFactory;
 import org.eclipse.jdt.internal.corext.util.Messages;
 
 import org.eclipse.jdt.ui.text.java.IProblemLocation;
@@ -91,7 +95,9 @@
 			return null;
 		}
 		AST ast= fAstNode.getAST();
-		String variableTypeName= fVariableBinding.getType().getName();
+
+		ITypeBinding type= fVariableBinding.getType();
+		String variableTypeName= type.getName();
 
 		VariableDeclarationFragment newFragment= ast.newVariableDeclarationFragment();
 		newFragment.setName(ast.newSimpleName(fVariableBinding.getName()));
@@ -100,14 +106,20 @@
 		declaration.modifiers().addAll(ast.newModifiers(fVariableBinding.getModifiers()));
 
 		Expression expression= null;
-		if (fVariableBinding.getType().isPrimitive()) {
+		if (type.isPrimitive()) {
 			declaration.setType(ast.newPrimitiveType(PrimitiveType.toCode(variableTypeName)));
 			expression= ast.newNumberLiteral();
 		} else if ("String".equals(variableTypeName)) { //$NON-NLS-1$
 			declaration.setType(ast.newSimpleType(ast.newName(variableTypeName)));
 			expression= ast.newStringLiteral();
 		} else {
-			declaration.setType(ast.newSimpleType(ast.newName(variableTypeName)));
+			if (type.isParameterizedType()) {
+				Type newType= createParameterizedType(ast, type);
+				declaration.setType(newType);
+			} else {
+				SimpleType newSimpleType= ast.newSimpleType(ast.newName(variableTypeName));
+				declaration.setType(newSimpleType);
+			}
 
 			if (hasDefaultConstructor()) {
 				ClassInstanceCreation cic= ast.newClassInstanceCreation();
@@ -125,6 +137,30 @@
 		return rewrite;
 	}
 
+	private Type createParameterizedType(AST ast, ITypeBinding typeBinding) {
+		if (typeBinding.isParameterizedType() && !typeBinding.isRawType()) {
+			Type baseType= ast.newSimpleType(ASTNodeFactory.newName(ast, typeBinding.getErasure().getName()));
+			ParameterizedType newType= ast.newParameterizedType(baseType);
+			for (int i= 0; i < typeBinding.getTypeArguments().length; i++) {
+				ITypeBinding typeArg= typeBinding.getTypeArguments()[i];
+				Type argType= createParameterizedType(ast, typeArg); // recursive call
+				newType.typeArguments().add(argType);
+			}
+			return newType;
+		} else {
+			if (!typeBinding.isTypeVariable()) {
+				if (typeBinding.isWildcardType()) {
+					String newName= typeBinding.getBound().getName();
+					WildcardType newWildcardType= ast.newWildcardType();
+					newWildcardType.setBound(ast.newSimpleType(ast.newSimpleName(newName)), typeBinding.isUpperbound());
+					return newWildcardType;
+				}
+				return ast.newSimpleType(ASTNodeFactory.newName(ast, typeBinding.getErasure().getName()));
+			}
+			return ast.newSimpleType(ast.newSimpleName(typeBinding.getName()));
+		}
+	}
+
 	private ASTRewrite doInitFieldInConstructor() {
 		String variableName= fProblem.getProblemArguments()[0];
 		FieldDeclaration field= getFieldDeclaration(variableName);
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/NewDefiningMethodProposal.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/NewDefiningMethodProposal.java
index c1b45ee..de3a87a 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/NewDefiningMethodProposal.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/NewDefiningMethodProposal.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
@@ -26,6 +26,8 @@
 import org.eclipse.jdt.core.dom.IExtendedModifier;
 import org.eclipse.jdt.core.dom.IMethodBinding;
 import org.eclipse.jdt.core.dom.ITypeBinding;
+import org.eclipse.jdt.core.dom.Javadoc;
+import org.eclipse.jdt.core.dom.MethodDeclaration;
 import org.eclipse.jdt.core.dom.Modifier;
 import org.eclipse.jdt.core.dom.SimpleName;
 import org.eclipse.jdt.core.dom.SingleVariableDeclaration;
@@ -37,6 +39,7 @@
 import org.eclipse.jdt.core.dom.rewrite.ImportRewrite.TypeLocation;
 
 import org.eclipse.jdt.internal.core.manipulation.StubUtility;
+import org.eclipse.jdt.internal.corext.dom.ASTNodes;
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
 import org.eclipse.jdt.internal.ui.viewsupport.JavaElementImageProvider;
@@ -47,7 +50,7 @@
 	private final String[] fParamNames;
 
 	public NewDefiningMethodProposal(String label, ICompilationUnit targetCU, ASTNode invocationNode, ITypeBinding binding, IMethodBinding method, String[] paramNames, int relevance) {
-		super(label,targetCU,invocationNode,binding,relevance,null);
+		super(label, targetCU, invocationNode, binding, relevance, null);
 		fMethod= method;
 		fParamNames= paramNames;
 
@@ -91,6 +94,17 @@
 	}
 
 	@Override
+	protected void addNewJavaDoc(ASTRewrite rewrite, MethodDeclaration decl) throws CoreException {
+		final Javadoc oldJavadoc= ((MethodDeclaration) ASTNodes.findDeclaration(fMethod, getInvocationNode())).getJavadoc();
+		if (oldJavadoc != null) {
+			String newJavadocString= ASTNodes.getNodeSource(oldJavadoc, false, true);
+			if (newJavadocString != null) {
+				decl.setJavadoc((Javadoc) rewrite.createStringPlaceholder(newJavadocString, ASTNode.JAVADOC));
+			}
+		}
+	}
+
+	@Override
 	protected SimpleName getNewName(ASTRewrite rewrite) {
 		AST ast= rewrite.getAST();
 		SimpleName nameNode= ast.newSimpleName(fMethod.getName());
@@ -103,7 +117,7 @@
 		} else {
 			int modifiers= fMethod.getModifiers();
 			if (Modifier.isPrivate(modifiers)) {
-				modifiers |= Modifier.PROTECTED;
+				modifiers|= Modifier.PROTECTED;
 			}
 			return modifiers & (Modifier.PUBLIC | Modifier.PROTECTED | Modifier.ABSTRACT | Modifier.STRICTFP);
 		}
@@ -133,8 +147,21 @@
 	}
 
 	@Override
-	protected void addNewTypeParameters(ASTRewrite rewrite, List<String> takenNames, List<TypeParameter> params, ImportRewriteContext context) throws CoreException {
-
+	protected void addNewTypeParameters(ASTRewrite rewrite, List<String> takenNames, List<TypeParameter> typeParameters, ImportRewriteContext context) throws CoreException {
+		AST ast= rewrite.getAST();
+		ITypeBinding[] typeParams= fMethod.getTypeParameters();
+		for (int i= 0; i < typeParams.length; i++) {
+			ITypeBinding current= typeParams[i];
+			TypeParameter newTypeParameter= ast.newTypeParameter();
+			newTypeParameter.setName(ast.newSimpleName(current.getName()));
+			ITypeBinding[] typeBounds= current.getTypeBounds();
+			if (typeBounds.length != 1 || !"java.lang.Object".equals(typeBounds[0].getQualifiedName())) {//$NON-NLS-1$
+				List<Type> newTypeBounds= newTypeParameter.typeBounds();
+				for (int k= 0; k < typeBounds.length; k++) {
+					newTypeBounds.add(getImportRewrite().addImport(typeBounds[k], ast, context, TypeLocation.TYPE_BOUND));
+				}
+			}
+			typeParameters.add(newTypeParameter);
+		}
 	}
-
 }
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/OptionalCorrectionProposal.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/OptionalCorrectionProposal.java
new file mode 100644
index 0000000..bfe34c6
--- /dev/null
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/OptionalCorrectionProposal.java
@@ -0,0 +1,86 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2019 IBM Corporation 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.jdt.internal.ui.text.correction.proposals;
+
+import org.eclipse.core.runtime.CoreException;
+
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.dom.AST;
+import org.eclipse.jdt.core.dom.Expression;
+import org.eclipse.jdt.core.dom.MethodInvocation;
+import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
+
+import org.eclipse.jdt.internal.corext.dom.ASTNodeFactory;
+
+import org.eclipse.jdt.ui.text.java.correction.ASTRewriteCorrectionProposal;
+
+import org.eclipse.jdt.internal.ui.JavaPluginImages;
+
+public class OptionalCorrectionProposal extends ASTRewriteCorrectionProposal {
+
+	public static final String ADD_OPTIONAL_ID= "org.eclipse.jdt.ui.correction.addOptional"; //$NON-NLS-1$
+
+	public static final int OPTIONAL_EMPTY= 0;
+
+	public static final int OPTIONAL_OF= 1;
+
+	public static final int OPTIONAL_OF_NULLABLE= 2;
+
+	private final Expression fNodeToWrap;
+
+	private int fCorrectionType;
+
+	/**
+	 * Creates a 'wrap in optional' correction proposal.
+	 *
+	 * @param label the display name of the proposal
+	 * @param targetCU the compilation unit that is modified
+	 * @param nodeToWrap the node to wrap in Optional
+	 * @param relevance the relevance of this proposal
+	 * @param correctionType 0= Optional.empty(), 1= Optional.of(), 2= Optional.ofNullable()
+	 */
+	public OptionalCorrectionProposal(String label, ICompilationUnit targetCU, Expression nodeToWrap, int relevance, int correctionType) {
+		super(label, targetCU, null, relevance, JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_CAST));
+		fNodeToWrap= nodeToWrap;
+		fCorrectionType= correctionType;
+		setCommandId(ADD_OPTIONAL_ID);
+	}
+
+	@Override
+	protected ASTRewrite getRewrite() throws CoreException {
+		AST ast= fNodeToWrap.getAST();
+		ASTRewrite rewrite= ASTRewrite.create(ast);
+
+		MethodInvocation newMethodInvocation= ast.newMethodInvocation();
+		newMethodInvocation.setExpression(ASTNodeFactory.newName(ast, "Optional")); //$NON-NLS-1$
+		switch (fCorrectionType) {
+			case OPTIONAL_EMPTY:
+				newMethodInvocation.setName(ast.newSimpleName("empty")); //$NON-NLS-1$
+				break;
+			case OPTIONAL_OF:
+				newMethodInvocation.setName(ast.newSimpleName("of")); //$NON-NLS-1$
+				newMethodInvocation.arguments().add(rewrite.createCopyTarget(fNodeToWrap));
+				break;
+			case OPTIONAL_OF_NULLABLE:
+				newMethodInvocation.setName(ast.newSimpleName("ofNullable")); //$NON-NLS-1$
+				newMethodInvocation.arguments().add(rewrite.createCopyTarget(fNodeToWrap));
+				break;
+			default:
+				break;
+		}
+		rewrite.replace(fNodeToWrap, newMethodInvocation, null);
+		return rewrite;
+	}
+}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/CompletionProposalComputerRegistry.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/CompletionProposalComputerRegistry.java
index 33dd482..a892d35 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/CompletionProposalComputerRegistry.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/CompletionProposalComputerRegistry.java
@@ -24,6 +24,7 @@
 import java.util.Map;
 import java.util.Set;
 import java.util.StringTokenizer;
+import java.util.stream.Stream;
 
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionAdapter;
@@ -526,4 +527,8 @@
 	public boolean computingCompletionRequiresUIThread() {
 		return fDescriptors.stream().anyMatch(CompletionProposalComputerDescriptor::requiresUIThread);
 	}
+
+	public Stream<String> getComputersRequiringUIThreadNames() {
+		return fDescriptors.stream().filter(CompletionProposalComputerDescriptor::requiresUIThread).map(CompletionProposalComputerDescriptor::getName);
+	}
 }
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ContentAssistProcessor.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ContentAssistProcessor.java
index c07448d..7199d2f 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ContentAssistProcessor.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ContentAssistProcessor.java
@@ -32,6 +32,7 @@
 import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Link;
 import org.eclipse.swt.widgets.Shell;
 
@@ -110,8 +111,9 @@
 		 */
 		@Override
 		public void assistSessionStarted(ContentAssistEvent event) {
-			if (event.processor != ContentAssistProcessor.this)
+			if (event.processor != ContentAssistProcessor.this) {
 				return;
+			}
 
 			fIterationGesture= getIterationGesture();
 			KeySequence binding= getIterationBinding();
@@ -145,7 +147,7 @@
 
 		/**
 		 * Returns the categories that need to be notified when a session starts and ends.
-		 * 
+		 *
 		 * @return the current categories
 		 * @since 3.8.1
 		 */
@@ -155,14 +157,16 @@
 			// Currently enabled categories for this session
 			if (fCategoryIteration != null) {
 				Iterator<List<CompletionProposalCategory>> it= fCategoryIteration.iterator();
-				while (it.hasNext())
+				while (it.hasNext()) {
 					currentCategories.addAll(it.next());
+				}
 			}
 
 			// Backwards compatibility: notify all categories which have no enablement expression
 			for (CompletionProposalCategory cat : fCategories) {
-				if (cat.getEnablementExpression() == null)
+				if (cat.getEnablementExpression() == null) {
 					currentCategories.add(cat);
+				}
 			}
 
 			return currentCategories;
@@ -173,8 +177,9 @@
 		 */
 		@Override
 		public void assistSessionEnded(ContentAssistEvent event) {
-			if (event.processor != ContentAssistProcessor.this)
+			if (event.processor != ContentAssistProcessor.this) {
 				return;
+			}
 
 			for (CompletionProposalCategory cat : getCategoriesToNotify()) {
 				cat.sessionEnded();
@@ -222,14 +227,7 @@
 	 */
 	private static final String PREF_WARN_ABOUT_EMPTY_ASSIST_CATEGORY= "EmptyDefaultAssistCategory"; //$NON-NLS-1$
 
-	private static final Comparator<CompletionProposalCategory> ORDER_COMPARATOR= new Comparator<CompletionProposalCategory>() {
-
-		@Override
-		public int compare(CompletionProposalCategory d1, CompletionProposalCategory d2) {
-			return d1.getSortOrder() - d2.getSortOrder();
-		}
-
-	};
+	private static final Comparator<CompletionProposalCategory> ORDER_COMPARATOR= (d1, d2) -> d1.getSortOrder() - d2.getSortOrder();
 
 	private final List<CompletionProposalCategory> fCategories;
 	private final String fPartition;
@@ -256,7 +254,7 @@
 	 * Flag indicating whether any completion engine associated with this processor requests
 	 * resorting of its proposals after filtering is triggered. Filtering is, e.g., triggered when a
 	 * user continues typing with an open completion window.
-	 * 
+	 *
 	 * @since 3.8
 	 */
 	private boolean fNeedsSortingAfterFiltering;
@@ -292,10 +290,11 @@
 		long collect= JavaPlugin.DEBUG_RESULT_COLLECTOR ? System.currentTimeMillis() : 0;
 
 		monitor.subTask(JavaTextMessages.ContentAssistProcessor_sorting_proposals);
-		if (fNeedsSortingAfterFiltering)
+		if (fNeedsSortingAfterFiltering) {
 			setContentAssistSorter();
-		else
+		} else {
 			proposals= sortProposals(proposals, monitor, context);
+		}
 		fNumberOfComputedResults= proposals.size();
 		long filter= JavaPlugin.DEBUG_RESULT_COLLECTOR ? System.currentTimeMillis() : 0;
 
@@ -334,11 +333,13 @@
 			List<ICompletionProposal> computed= cat.computeCompletionProposals(context, fPartition, new SubProgressMonitor(monitor, 1));
 			proposals.addAll(computed);
 			needsSortingAfterFiltering= needsSortingAfterFiltering || (cat.isSortingAfterFilteringNeeded() && !computed.isEmpty());
-			if (fErrorMessage == null)
+			if (fErrorMessage == null) {
 				fErrorMessage= cat.getErrorMessage();
+			}
 		}
-		if (fNeedsSortingAfterFiltering && !needsSortingAfterFiltering)
+		if (fNeedsSortingAfterFiltering && !needsSortingAfterFiltering) {
 			fAssistant.setSorter(null);
+		}
 		fNeedsSortingAfterFiltering= needsSortingAfterFiltering;
 		return proposals;
 	}
@@ -388,8 +389,9 @@
 		for (CompletionProposalCategory cat : providers) {
 			List<IContextInformation> computed= cat.computeContextInformation(context, fPartition, new SubProgressMonitor(monitor, 1));
 			proposals.addAll(computed);
-			if (fErrorMessage == null)
+			if (fErrorMessage == null) {
 				fErrorMessage= cat.getErrorMessage();
+			}
 		}
 
 		return proposals;
@@ -442,10 +444,12 @@
 	 */
 	@Override
 	public String getErrorMessage() {
-		if (fErrorMessage != null)
+		if (fErrorMessage != null) {
 			return fErrorMessage;
-		if (fNumberOfComputedResults > 0)
+		}
+		if (fNumberOfComputedResults > 0) {
 			return null;
+		}
 		return JavaUIMessages.JavaEditor_codeassist_noCompletions;
 	}
 
@@ -483,11 +487,17 @@
 	}
 
 	private List<CompletionProposalCategory> getCategories() {
-		if (fCategoryIteration == null)
+		if (fCategoryIteration == null) {
 			return fCategories;
+		}
 
 		int iteration= fRepetition % fCategoryIteration.size();
-		fAssistant.setStatusMessage(createIterationMessage());
+		String iterationMessage = createIterationMessage();
+		if (Display.getCurrent() != null) {
+			fAssistant.setStatusMessage(iterationMessage);
+		} else {
+			Display.getDefault().asyncExec(() -> fAssistant.setStatusMessage(iterationMessage));
+		}
 		fAssistant.setEmptyMessage(createEmptyMessage());
 		fRepetition++;
 
@@ -515,9 +525,10 @@
 		List<CompletionProposalCategory> included= getDefaultCategoriesUnchecked();
 
 		if (fComputerRegistry.hasUninstalledComputers(fPartition, included)) {
-			if (informUserAboutEmptyDefaultCategory())
+			if (informUserAboutEmptyDefaultCategory()) {
 				// preferences were restored - recompute the default categories
 				included= getDefaultCategoriesUnchecked();
+			}
 			fComputerRegistry.resetUnistalledComputers();
 		}
 
@@ -527,15 +538,16 @@
 	private List<CompletionProposalCategory> getDefaultCategoriesUnchecked() {
 		List<CompletionProposalCategory> included= new ArrayList<>();
 		for (CompletionProposalCategory category : fCategories) {
-			if (checkDefaultEnablement(category)) 
+			if (checkDefaultEnablement(category)) {
 				included.add(category);
+			}
 		}
 		return included;
 	}
 
 	/**
 	 * Determine whether the category is enabled by default.
-	 * 
+	 *
 	 * @param category the category to check
 	 * @return <code>true</code> if this category is enabled by default, <code>false</code>
 	 *         otherwise
@@ -620,8 +632,9 @@
 	        		store.setToDefault(PreferenceConstants.CODEASSIST_CATEGORY_ORDER);
 	        		store.setToDefault(PreferenceConstants.CODEASSIST_EXCLUDED_CATEGORIES);
 	        	}
-	        	if (settingsId == returnValue)
+				if (settingsId == returnValue) {
 					PreferencesUtil.createPreferenceDialogOn(shell, "org.eclipse.jdt.ui.preferences.CodeAssistPreferenceAdvanced", null, null).open(); //$NON-NLS-1$
+				}
 	        	fComputerRegistry.reload();
 	        	return true;
 	        }
@@ -632,16 +645,17 @@
 	private List<CompletionProposalCategory> getSeparateCategories() {
 		ArrayList<CompletionProposalCategory> sorted= new ArrayList<>();
 		for (CompletionProposalCategory category : fCategories) {
-			if (checkSeparateEnablement(category))
+			if (checkSeparateEnablement(category)) {
 				sorted.add(category);
+			}
 		}
 		Collections.sort(sorted, ORDER_COMPARATOR);
 		return sorted;
 	}
-	
+
 	/**
 	 * Determine whether the category is enabled for separate use.
-	 * 
+	 *
 	 * @param category the category to check
 	 * @return <code>true</code> if this category is enabled for separate use, <code>false</code>
 	 *         otherwise
@@ -661,8 +675,9 @@
 
 	private String getCategoryLabel(int repetition) {
 		int iteration= repetition % fCategoryIteration.size();
-		if (iteration == 0)
+		if (iteration == 0) {
 			return JavaTextMessages.ContentAssistProcessor_defaultProposalCategory;
+		}
 		return toString(fCategoryIteration.get(iteration).get(0));
 	}
 
@@ -680,14 +695,15 @@
 	private KeySequence getIterationBinding() {
 	    final IBindingService bindingSvc= PlatformUI.getWorkbench().getAdapter(IBindingService.class);
 		TriggerSequence binding= bindingSvc.getBestActiveBindingFor(ITextEditorActionDefinitionIds.CONTENT_ASSIST_PROPOSALS);
-		if (binding instanceof KeySequence)
+		if (binding instanceof KeySequence) {
 			return (KeySequence) binding;
+		}
 		return null;
     }
 
 	/**
 	 * Sets the current proposal sorter into the content assistant.
-	 * 
+	 *
 	 * @since 3.8
 	 * @see ProposalSorterRegistry#getCurrentSorter() the sorter used if <code>true</code>
 	 */
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/PostfixCompletionProposalComputer.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/PostfixCompletionProposalComputer.java
index ed9fc64..bc7e3bc 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/PostfixCompletionProposalComputer.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/PostfixCompletionProposalComputer.java
@@ -28,6 +28,8 @@
 import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.jdt.core.IJavaElement;
 import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.IMember;
+import org.eclipse.jdt.core.ISourceRange;
 import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.ASTParser;
@@ -36,13 +38,14 @@
 import org.eclipse.jdt.core.dom.ClassInstanceCreation;
 import org.eclipse.jdt.core.dom.CompilationUnit;
 import org.eclipse.jdt.core.dom.ExpressionStatement;
-import org.eclipse.jdt.core.dom.IBinding;
 import org.eclipse.jdt.core.dom.InfixExpression;
+import org.eclipse.jdt.core.dom.NodeFinder;
 import org.eclipse.jdt.core.dom.ParenthesizedExpression;
 import org.eclipse.jdt.core.dom.QualifiedName;
 import org.eclipse.jdt.core.dom.SimpleName;
 import org.eclipse.jdt.core.dom.SimpleType;
 import org.eclipse.jdt.core.dom.StringLiteral;
+import org.eclipse.jdt.core.manipulation.SharedASTProviderCore;
 
 import org.eclipse.jdt.internal.corext.dom.IASTSharedValues;
 import org.eclipse.jdt.internal.corext.template.java.JavaPostfixContextType;
@@ -138,22 +141,23 @@
 		}
 
 		ICompilationUnit cu= (ICompilationUnit) enclosingElement.getAncestor(IJavaElement.COMPILATION_UNIT);
-		ASTParser parser= createParser(cu);
-		IBinding[] res;
-		try {
-			res= parser.createBindings(new IJavaElement[] { enclosingElement }, null);
-		} catch (Exception e) {
-			return;
+		CompilationUnit cuRoot= SharedASTProviderCore.getAST(cu, SharedASTProviderCore.WAIT_NO, null);
+		if (cuRoot == null) {
+			cuRoot= (CompilationUnit) createParser(cu).createAST(null);
 		}
 
-		if (res.length > 0 && res[0] != null) {
-			parser= createParser(cu);
-			CompilationUnit cuRoot= (CompilationUnit) parser.createAST(null);
-			ASTNode completionNode= cuRoot.findDeclaringNode(res[0].getKey());
-			if (completionNode == null) {
+		if (enclosingElement instanceof IMember) {
+			ISourceRange sr;
+			try {
+				sr= ((IMember) enclosingElement).getSourceRange();
+				if (sr == null) {
+					return;
+				}
+			} catch (JavaModelException e) {
 				return;
 			}
 
+			ASTNode completionNode= NodeFinder.perform(cuRoot, sr);
 			ASTNode[] bestNode= new ASTNode[] { completionNode };
 			int tokenLength= context.getToken() != null ? context.getToken().length : 0;
 			int invOffset= context.getOffset() - tokenLength - 1;
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/javadoc/JavaDocAutoIndentStrategy.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/javadoc/JavaDocAutoIndentStrategy.java
index f4913ab..0435677 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/javadoc/JavaDocAutoIndentStrategy.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/javadoc/JavaDocAutoIndentStrategy.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
@@ -380,6 +380,12 @@
 			String comment= document.get(partition.getOffset(), partition.getLength());
 			if (comment.indexOf("/*", 2) != -1) //$NON-NLS-1$
 				return true; // enclosed another comment -> probably a new comment
+			if (!hasBlockComment(comment)) {
+				return true; // missing block comment end -> probably a new comment
+			}
+			if (isBlockCommentsInsideString(comment)) {
+				return true; // block comments inside strings -> probably a new comment
+			}
 
 			return false;
 
@@ -388,6 +394,72 @@
 		}
 	}
 
+	/**
+	 * Return true if comment has a proper block comment ending. Handle case when '&#42;/' block
+	 * comment is after a line comment '//'
+	 *
+	 * <pre>
+	 * Partial comment with block comment after line comment:
+	 * 
+	 * /&#42;&#42;
+	 *  &#42;
+	 * void Foo() {
+	 *    int a; // &#42;/
+	 * }
+	 * </pre>
+	 *
+	 * @param comment The comment block, can be partial when creating new javadoc comment
+	 * @return Return true if comment has a proper block comment ending
+	 */
+	private boolean hasBlockComment(String comment) {
+		// return early if block does not contain block comment ending '*/'
+		if (comment.indexOf("*/", 2) == -1) { //$NON-NLS-1$
+			return false;
+		}
+
+		boolean lineCommentHidesBlockComment= false;
+		for (String line : Strings.convertIntoLines(comment)) {
+			int blockCommentIndex= line.indexOf("*/"); //$NON-NLS-1$
+			int lineCommentIndex= line.indexOf("//"); //$NON-NLS-1$
+			if (lineCommentIndex != -1 && blockCommentIndex != -1) {
+				if (lineCommentIndex < blockCommentIndex) {
+					lineCommentHidesBlockComment= true;
+				}
+			}
+		}
+		return lineCommentHidesBlockComment == false;
+	}
+
+	private boolean isBlockCommentsInsideString(String comment) {
+		// return early if block does not contain block comment ending '*/' or '"' (String) token
+		if (comment.indexOf("*/") == -1 || comment.indexOf("\"") == -1) { //$NON-NLS-1$ //$NON-NLS-2$
+			return false;
+		}
+
+		boolean allBlockCommentsInsideString= true;
+		boolean stringStart= false;
+		for (int i= 0; i < comment.length(); i++) {
+			char c= comment.charAt(i);
+			if (c == '"' && !stringStart) {
+				stringStart= true;
+				continue;
+			}
+			if (c == '"' && stringStart) {
+				stringStart= false;
+				continue;
+			}
+			if (c == '*' && !stringStart) {
+				if (i < comment.length() - 1) {
+					if (comment.charAt(i + 1) == '/') {
+						// found a block end inside string
+						allBlockCommentsInsideString= false;
+					}
+				}
+			}
+		}
+		return allBlockCommentsInsideString;
+	}
+
 	private boolean isSmartMode() {
 		IWorkbenchPage page= JavaPlugin.getActivePage();
 		if (page != null)  {
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/HierarchyInformationControl.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/HierarchyInformationControl.java
index ae4e4b0..fe3e21b 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/HierarchyInformationControl.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/HierarchyInformationControl.java
@@ -95,8 +95,8 @@
 					if (sequences == null)
 						return;
 
-					for (int i= 0; i < sequences.length; i++) {
-						if (sequences[i].equals(keySequence)) {
+					for (TriggerSequence sequence : sequences) {
+						if (sequence.equals(keySequence)) {
 							e.doit= false;
 							toggleHierarchy();
 							return;
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/HierarchyLabelProvider.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/HierarchyLabelProvider.java
index e823051..9aa9f19 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/HierarchyLabelProvider.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/HierarchyLabelProvider.java
@@ -81,16 +81,16 @@
 		IJavaElement[] input= fHierarchy.getInputElements();
 		if (input == null)
 			return false;
-		for (int i= 0; i < input.length; i++) {
-			if (input[i] == null || input[i].getElementType() == IJavaElement.TYPE) {
+		for (IJavaElement element : input) {
+			if (element == null || element.getElementType() == IJavaElement.TYPE) {
 				return false;
 			}
-			IJavaElement parent= type.getAncestor(input[i].getElementType());
-			if (input[i].getElementType() == IJavaElement.PACKAGE_FRAGMENT) {
-				if (parent == null || parent.getElementName().equals(input[i].getElementName())) {
+			IJavaElement parent= type.getAncestor(element.getElementType());
+			if (element.getElementType() == IJavaElement.PACKAGE_FRAGMENT) {
+				if (parent == null || parent.getElementName().equals(element.getElementName())) {
 					return false;
 				}
-			} else if (input[i].equals(parent)) {
+			} else if (element.equals(parent)) {
 				return false;
 			}
 		}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/MethodsViewer.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/MethodsViewer.java
index 66fd7c5..628c53f 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/MethodsViewer.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/MethodsViewer.java
@@ -298,10 +298,9 @@
 		String[] paramTypes= meth.getParameterTypes();
 		boolean isConstructor= meth.isConstructor();
 
-		for (int i= 0; i < elements.length; i++) {
-			Object curr= elements[i];
-			if (curr instanceof IMethod && JavaModelUtil.isSameMethodSignature(name, paramTypes, isConstructor, (IMethod) curr)) {
-				return (IMethod) curr;
+		for (Object element : elements) {
+			if (element instanceof IMethod && JavaModelUtil.isSameMethodSignature(name, paramTypes, isConstructor, (IMethod) element)) {
+				return (IMethod) element;
 			}
 		}
 		return null;
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/SubTypeHierarchyViewer.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/SubTypeHierarchyViewer.java
index 61089d0..0ffa280 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/SubTypeHierarchyViewer.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/SubTypeHierarchyViewer.java
@@ -64,10 +64,9 @@
 			if (hierarchy != null) {
 				IType[] types= hierarchy.getSubtypes(type);
 				if (isObject(type)) {
-					for (int i= 0; i < types.length; i++) {
-						IType curr= types[i];
-						if (!isAnonymousFromInterface(curr)) {
-							res.add(curr);
+					for (IType t : types) {
+						if (!isAnonymousFromInterface(t)) {
+							res.add(t);
 						}
 					}
 				} else {
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TraditionalHierarchyViewer.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TraditionalHierarchyViewer.java
index f82cec3..72494f6 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TraditionalHierarchyViewer.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TraditionalHierarchyViewer.java
@@ -104,9 +104,9 @@
 						res.add(hierarchy.getSuperInterfaces(input)[0]);
 					} else {
 						IType[] roots= hierarchy.getRootClasses();
-						for (int i= 0; i < roots.length; i++) {
-							if (isObject(roots[i])) {
-								res.add(roots[i]);
+						for (IType t : roots) {
+							if (isObject(t)) {
+								res.add(t);
 								return;
 							}
 						}
@@ -125,10 +125,9 @@
 			if (hierarchy != null) {
 				IType[] types= hierarchy.getSubtypes(type);
 				if (isObject(type)) {
-					for (int i= 0; i < types.length; i++) {
-						IType curr= types[i];
-						if (!isAnonymousFromInterface(curr)) { // no anonymous classes on 'Object' -> will be children of interface
-							res.add(curr);
+					for (IType t : types) {
+						if (!isAnonymousFromInterface(t)) { // no anonymous classes on 'Object' -> will be children of interface
+							res.add(t);
 						}
 					}
 				} else {
@@ -137,11 +136,10 @@
 					if (isClass || isHierarchyOnType) {
 						res.addAll(Arrays.asList(types));
 					} else {
-						for (int i= 0; i < types.length; i++) {
-							IType curr= types[i];
+						for (IType t : types) {
 							// no classes implementing interfaces, only if anonymous
-							if (Flags.isInterface(hierarchy.getCachedFlags(curr)) || isAnonymous(curr)) {
-								res.add(curr);
+							if (Flags.isInterface(hierarchy.getCachedFlags(t)) || isAnonymous(t)) {
+								res.add(t);
 							}
 						}
 					}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyContentProvider.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyContentProvider.java
index 039f32d..560a079 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyContentProvider.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyContentProvider.java
@@ -102,14 +102,12 @@
 			return;
 		synchronized (fTypeHierarchyLifeCycleListener) {
 			boolean filterMethodOverrides= initializeMethodOverrideTester(filterMethod, typeToFindIn);
-			IMethod[] methods= typeToFindIn.getMethods();
-			for (int i= 0; i < methods.length; i++) {
-				IMethod curr= methods[i];
-				flags= curr.getFlags();
-				if (Flags.isPrivate(flags) || Flags.isStatic(flags) || curr.isConstructor())
+			for (IMethod m : typeToFindIn.getMethods()) {
+				flags= m.getFlags();
+				if (Flags.isPrivate(flags) || Flags.isStatic(flags) || m.isConstructor())
 					continue;
-				if (isCompatibleMethod(filterMethod, curr, filterMethodOverrides) && !children.contains(curr)) {
-					children.add(curr);
+				if (isCompatibleMethod(filterMethod, m, filterMethodOverrides) && !children.contains(m)) {
+					children.add(m);
 				}
 			}
 		}
@@ -121,13 +119,11 @@
 			return false;
 		synchronized (fTypeHierarchyLifeCycleListener) {
 			boolean filterMethodOverrides= initializeMethodOverrideTester(filterMethod, typeToFindIn);
-			IMethod[] methods= typeToFindIn.getMethods();
-			for (int i= 0; i < methods.length; i++) {
-				IMethod curr= methods[i];
-				flags= curr.getFlags();
-				if (Flags.isPrivate(flags) || Flags.isStatic(flags) || curr.isConstructor())
+			for (IMethod m : typeToFindIn.getMethods()) {
+				flags= m.getFlags();
+				if (Flags.isPrivate(flags) || Flags.isStatic(flags) || m.isConstructor())
 					continue;
-				if (isCompatibleMethod(filterMethod, curr, filterMethodOverrides)) {
+				if (isCompatibleMethod(filterMethod, m, filterMethodOverrides)) {
 					return true;
 				}
 			}
@@ -226,18 +222,17 @@
 		IJavaElement[] input= fTypeHierarchy.getInputElements();
 		if (input == null)
 			return false;
-		for (int i= 0; i < input.length; i++) {
-			int inputType= input[i].getElementType();
+		for (IJavaElement e : input) {
+			int inputType= e.getElementType();
 			if (inputType == IJavaElement.TYPE) {
 				return true;
 			}
-
 			IJavaElement parent= type.getAncestor(inputType);
 			if (inputType == IJavaElement.PACKAGE_FRAGMENT) {
-				if (parent == null || parent.getElementName().equals(input[i].getElementName())) {
+				if (parent == null || parent.getElementName().equals(e.getElementName())) {
 					return true;
 				}
-			} else if (input[i].equals(parent)) {
+			} else if (e.equals(parent)) {
 				return true;
 			}
 		}
@@ -286,8 +281,7 @@
 	}
 
 	private void addFilteredMemberChildren(IType parent, List<IMember> children) throws JavaModelException {
-		for (int i= 0; i < fMemberFilter.length; i++) {
-			IMember member= fMemberFilter[i];
+		for (IMember member : fMemberFilter) {
 			if (parent.equals(member.getDeclaringType())) {
 				if (!children.contains(member)) {
 					children.add(member);
@@ -322,8 +316,7 @@
 	}
 
 	private boolean hasMemberFilterChildren(IType type) throws JavaModelException {
-		for (int i= 0; i < fMemberFilter.length; i++) {
-			IMember member= fMemberFilter[i];
+		for (IMember member : fMemberFilter) {
 			if (type.equals(member.getDeclaringType())) {
 				return true;
 			} else if (member instanceof IMethod) {
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyLifeCycle.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyLifeCycle.java
index 55eacfe..d2f0317 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyLifeCycle.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyLifeCycle.java
@@ -189,8 +189,8 @@
 			freeHierarchy();
 			return;
 		}
-		for (int i= 0; i < elements.length; i++) {
-			if (elements[i] == null || !elements[i].exists()) {
+		for (IJavaElement element : elements) {
+			if (element == null || !element.exists()) {
 				freeHierarchy();
 				return;
 			}
@@ -305,17 +305,16 @@
 			}
 		} else {
 			IRegion region= JavaCore.newRegion();
-			for (int i= 0; i < elements.length; i++) {
-				if (elements[i].getElementType() == IJavaElement.JAVA_PROJECT) {
+			for (IJavaElement element : elements) {
+				if (element.getElementType() == IJavaElement.JAVA_PROJECT) {
 					// for projects only add the contained source folders
-					IPackageFragmentRoot[] roots= ((IJavaProject)elements[i]).getPackageFragmentRoots();
-					for (int j= 0; j < roots.length; j++) {
-						if (!roots[j].isExternal()) {
-							region.add(roots[j]);
+					for (IPackageFragmentRoot root : ((IJavaProject) element).getPackageFragmentRoots()) {
+						if (!root.isExternal()) {
+							region.add(root);
 						}
 					}
 				} else {
-					region.add(elements[i]);
+					region.add(element);
 				}
 			}
 			return JavaCore.newTypeHierarchy(region, null, pm);
@@ -401,9 +400,8 @@
 				if (delta.getKind() == IJavaElementDelta.CHANGED && isPossibleStructuralChange(delta.getFlags())) {
 					try {
 						if (cu.exists()) {
-							IType[] types= cu.getAllTypes();
-							for (int i= 0; i < types.length; i++) {
-								processTypeDelta(types[i], changedTypes);
+							for (IType type : cu.getAllTypes()) {
+								processTypeDelta(type, changedTypes);
 							}
 						}
 					} catch (JavaModelException e) {
@@ -436,9 +434,8 @@
 	}
 
 	private void processChildrenDelta(IJavaElementDelta delta, ArrayList<IType> changedTypes) {
-		IJavaElementDelta[] children= delta.getAffectedChildren();
-		for (int i= 0; i < children.length; i++) {
-			processDelta(children[i], changedTypes); // recursive
+		for (IJavaElementDelta child : delta.getAffectedChildren()) {
+			processDelta(child, changedTypes); // recursive
 		}
 	}
 
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyViewPart.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyViewPart.java
index f65c9b0..bd73fe4 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyViewPart.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyViewPart.java
@@ -16,7 +16,6 @@
 import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Iterator;
 import java.util.List;
 
 import org.eclipse.help.IContextProvider;
@@ -388,8 +387,7 @@
 	 * @param entry The new entry
 	 */
 	private void addHistoryEntry(IJavaElement[] entry) {
-		for (Iterator<IJavaElement[]> iter= fInputHistory.iterator(); iter.hasNext();) {
-			IJavaElement[] elem= iter.next();
+		for (IJavaElement[] elem : fInputHistory) {
 			if (Arrays.equals(elem, entry)) {
 				fInputHistory.remove(elem);
 				break;
@@ -401,9 +399,7 @@
 
 	private void updateHistoryEntries() {
 		for (int i= fInputHistory.size() - 1; i >= 0; i--) {
-			IJavaElement[] entries= fInputHistory.get(i);
-			for (int j= 0; j < entries.length; j++) {
-				IJavaElement elem= entries[j];
+			for (IJavaElement elem : fInputHistory.get(i)) {
 				if (elem != null && !elem.exists()) {
 					fInputHistory.remove(i);
 					break;
@@ -454,8 +450,7 @@
 	 */
 	public void setHistoryEntries(List<IJavaElement[]> elems) {
 		fInputHistory.clear();
-		for (Iterator<IJavaElement[]> iterator= elems.iterator(); iterator.hasNext();) {
-			IJavaElement[] elements= iterator.next();
+		for (IJavaElement[] elements : elems) {
 			if (elements != null && elements.length != 0)
 				fInputHistory.add(elements);
 		}
@@ -619,8 +614,8 @@
 			clearInput();
 		} else {
 			if (!inputElements.equals(prevInput)) {
-				for (int i= 0; i < fAllViewers.length; i++) {
-					fAllViewers[i].setInput(null);
+				for (TypeHierarchyViewer viewer : fAllViewers) {
+					viewer.setInput(null);
 				}
 			}
 			fInputElements= inputElements;
@@ -782,8 +777,8 @@
 
 		fEmptyTypesViewer= new Label(fViewerbook, SWT.TOP | SWT.LEFT | SWT.WRAP);
 
-		for (int i= 0; i < fAllViewers.length; i++) {
-			fAllViewers[i].setInput(fAllViewers[i]);
+		for (TypeHierarchyViewer viewer : fAllViewers) {
+			viewer.setInput(viewer);
 		}
 
 		// force the update
@@ -879,9 +874,9 @@
 	}
 
 	private void initDragAndDrop() {
-		for (int i= 0; i < fAllViewers.length; i++) {
-			addDragAdapters(fAllViewers[i]);
-			addDropAdapters(fAllViewers[i]);
+		for (TypeHierarchyViewer viewer : fAllViewers) {
+			addDragAdapters(viewer);
+			addDropAdapters(viewer);
 		}
 		addDragAdapters(fMethodsViewer);
 		fMethodsViewer.addDropSupport(DND.DROP_NONE, new Transfer[0], new DropTargetAdapter());
@@ -983,8 +978,7 @@
 		// set the filter menu items
 		IActionBars actionBars= getViewSite().getActionBars();
 		IMenuManager viewMenu= actionBars.getMenuManager();
-		for (int i= 0; i < fViewActions.length; i++) {
-			ToggleViewAction action= fViewActions[i];
+		for (ToggleViewAction action : fViewActions) {
 			viewMenu.add(action);
 			action.setEnabled(false);
 		}
@@ -996,8 +990,8 @@
 
 		IMenuManager layoutSubMenu= new MenuManager(TypeHierarchyMessages.TypeHierarchyViewPart_layout_submenu);
 		viewMenu.add(layoutSubMenu);
-		for (int i= 0; i < fToggleOrientationActions.length; i++) {
-			layoutSubMenu.add(fToggleOrientationActions[i]);
+		for (ToggleOrientationAction action : fToggleOrientationActions) {
+			layoutSubMenu.add(action);
 		}
 		viewMenu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
 		viewMenu.add(fShowQualifiedTypeNamesAction);
@@ -1134,8 +1128,8 @@
 	}
 
 	private void updateCheckedState() {
-		for (int i= 0; i < fToggleOrientationActions.length; i++) {
-			fToggleOrientationActions[i].setChecked(getViewLayout() == fToggleOrientationActions[i].getOrientation());
+		for (ToggleOrientationAction action : fToggleOrientationActions) {
+			action.setChecked(getViewLayout() == action.getOrientation());
 		}
 	}
 
@@ -1156,8 +1150,8 @@
 
 	private void fillMainToolBar(IToolBarManager tbmanager) {
 		tbmanager.removeAll();
-		for (int i= 0; i < fViewActions.length; i++) {
-			tbmanager.add(fViewActions[i]);
+		for (ToggleViewAction action : fViewActions) {
+			tbmanager.add(action);
 		}
 		tbmanager.add(fHistoryDropDownAction);
 		tbmanager.update(false);
@@ -1216,8 +1210,8 @@
 	 */
 	private void setMemberFilter(IMember[] memberFilter) {
 		Assert.isNotNull(fAllViewers);
-		for (int i= 0; i < fAllViewers.length; i++) {
-			fAllViewers[i].setMemberFilter(memberFilter);
+		for (TypeHierarchyViewer viewer : fAllViewers) {
+			viewer.setMemberFilter(memberFilter);
 		}
 	}
 
@@ -1383,10 +1377,10 @@
 	}
 
 	private boolean isChildVisible(Composite pb, Control child) {
-		Control[] children= pb.getChildren();
-		for (int i= 0; i < children.length; i++) {
-			if (children[i] == child && children[i].isVisible())
+		for (Control c : pb.getChildren()) {
+			if (c == child && c.isVisible()) {
 				return true;
+			}
 		}
 		return false;
 	}
@@ -1442,8 +1436,7 @@
 	private void updateToolbarButtons() {
 		boolean isNull= fInputElements == null;
 		boolean isType= !isNull && fInputElements.length == 1 && fInputElements[0] instanceof IType;
-		for (int i= 0; i < fViewActions.length; i++) {
-			ToggleViewAction action= fViewActions[i];
+		for (ToggleViewAction action : fViewActions) {
 			if (action.getViewerIndex() == HIERARCHY_MODE_CLASSIC) {
 				action.setEnabled(!isNull);
 			} else {
@@ -1503,8 +1496,7 @@
 			};
 
 		}
-		for (int i= 0; i < fViewActions.length; i++) {
-			ToggleViewAction action= fViewActions[i];
+		for (ToggleViewAction action : fViewActions) {
 			action.setChecked(fCurrentViewerIndex == action.getViewerIndex());
 		}
 	}
@@ -1554,8 +1546,8 @@
 		if (on != fShowQualifiedTypeNames) {
 			fShowQualifiedTypeNames= on;
 			if (fAllViewers != null) {
-				for (int i= 0; i < fAllViewers.length; i++) {
-					fAllViewers[i].setQualifiedTypeName(on);
+				for (TypeHierarchyViewer viewer : fAllViewers) {
+					viewer.setQualifiedTypeName(on);
 				}
 			}
 		}
@@ -1944,8 +1936,8 @@
 	 * @since 3.6
 	 */
 	public void setViewersInput() {
-		for (int i= 0; i < fAllViewers.length; i++) {
-			fAllViewers[i].setInput(fAllViewers[i]);
+		for (TypeHierarchyViewer viewer : fAllViewers) {
+			viewer.setInput(viewer);
 		}
 		setKeepShowingEmptyViewers(false);
 	}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/ClasspathVMUtil.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/ClasspathVMUtil.java
index bc0e57d..e9bf9e4 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/ClasspathVMUtil.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/ClasspathVMUtil.java
@@ -40,34 +40,30 @@
 		}
 		String bestMatchingCompliance= null;
 		IVMInstall bestMatchingVMInstall= null;
-		IVMInstallType[] installTypes= JavaRuntime.getVMInstallTypes();
-		for (int i= 0; i < installTypes.length; i++) {
-			IVMInstall[] installs= installTypes[i].getVMInstalls();
-			for (int k= 0; k < installs.length; k++) {
-				String vmInstallCompliance= getVMInstallCompliance(installs[k], allowNullCompliance);
-
+		for (IVMInstallType installType : JavaRuntime.getVMInstallTypes()) {
+			for (IVMInstall install : installType.getVMInstalls()) {
+				String vmInstallCompliance= getVMInstallCompliance(install, allowNullCompliance);
 				if (requiredVersion.equals(vmInstallCompliance)) {
 					if (!getHighestVersion) {
-						return installs[k]; // perfect match
+						return install; // perfect match
 					}
 				} else if (JavaModelUtil.isVersionLessThan(vmInstallCompliance, requiredVersion)) {
 					continue; // no match
 
 				} else if (bestMatchingVMInstall != null) {
 					if ((!getHighestVersion && JavaModelUtil.isVersionLessThan(bestMatchingCompliance, vmInstallCompliance))
-							|| (getHighestVersion && JavaModelUtil.isVersionLessThan(vmInstallCompliance, bestMatchingCompliance))) {
+						|| (getHighestVersion && JavaModelUtil.isVersionLessThan(vmInstallCompliance, bestMatchingCompliance))) {
 						continue; // the other one is the least matching
 					}
 				}
 				if (getHighestVersion) {
 					if (JavaModelUtil.isVersionLessThan(bestMatchingCompliance, vmInstallCompliance)) {
 						bestMatchingCompliance= vmInstallCompliance;
-						bestMatchingVMInstall= installs[k];
+						bestMatchingVMInstall= install;
 					}
-				}
-				else {
+				} else {
 					bestMatchingCompliance= vmInstallCompliance;
-					bestMatchingVMInstall= installs[k];
+					bestMatchingVMInstall= install;
 				}
 			}
 		}
@@ -93,12 +89,10 @@
 
 	public static IExecutionEnvironment findBestMatchingEE(String requiredVersion) {
 		IExecutionEnvironmentsManager eeManager= JavaRuntime.getExecutionEnvironmentsManager();
-		IExecutionEnvironment[] ees= eeManager.getExecutionEnvironments();
 		IExecutionEnvironment bestEE= null;
 		String bestEECompliance= null;
 
-		for (int i= 0; i < ees.length; i++) {
-			IExecutionEnvironment ee= ees[i];
+		for (IExecutionEnvironment ee : eeManager.getExecutionEnvironments()) {
 			String eeCompliance= JavaModelUtil.getExecutionEnvironmentCompliance(ee);
 			String eeId= ee.getId();
 
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/CoreUtility.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/CoreUtility.java
index a158bb4..8f28601 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/CoreUtility.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/CoreUtility.java
@@ -145,16 +145,14 @@
 				if (monitor.isCanceled()) {
 					return Status.CANCEL_STATUS;
 				}
-		        Job[] buildJobs = Job.getJobManager().find(ResourcesPlugin.FAMILY_MANUAL_BUILD);
-		        for (int i= 0; i < buildJobs.length; i++) {
-		        	Job curr= buildJobs[i];
+		        for (Job curr : Job.getJobManager().find(ResourcesPlugin.FAMILY_MANUAL_BUILD)) {
 		        	if (curr != this && curr instanceof BuildJob) {
 		        		BuildJob job= (BuildJob) curr;
 		        		if (job.isCoveredBy(this)) {
 		        			curr.cancel(); // cancel all other build jobs of our kind
 		        		}
 		        	}
-				}
+		        }
 			}
 			try {
 				if (fProject != null) {
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/ElementValidator.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/ElementValidator.java
index 7838696..ddc468b 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/ElementValidator.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/ElementValidator.java
@@ -193,8 +193,7 @@
 
 	private static IResource[] getResources(IAdaptable[] elements) {
 		Set<IResource> result= new HashSet<>();
-		for (int i= 0; i < elements.length; i++) {
-			IAdaptable element= elements[i];
+		for (IAdaptable element : elements) {
 			IResource resource= null;
 			if (element instanceof IJavaElement) {
 				IJavaElement je= (IJavaElement)element;
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/JavadocHelpContext.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/JavadocHelpContext.java
index 4825720..83ade6b 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/JavadocHelpContext.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/JavadocHelpContext.java
@@ -104,13 +104,12 @@
 		List<IHelpResource> helpResources= new ArrayList<>();
 
 		String javadocSummary= null;
-		for (int i= 0; i < elements.length; i++) {
-			if (elements[i] instanceof IJavaElement) {
-				IJavaElement element= (IJavaElement) elements[i];
+		for (Object e : elements) {
+			if (e instanceof IJavaElement) {
+				IJavaElement element= (IJavaElement) e;
 				// if element isn't on the build path skip it
 				if (!ActionUtil.isOnBuildPath(element))
 					continue;
-
 				// Create Javadoc summary
 				if (BUG_85721_FIXED) {
 					if (javadocSummary == null) {
@@ -125,7 +124,6 @@
 						javadocSummary= ""; // no Javadoc summary for multiple selection //$NON-NLS-1$
 					}
 				}
-
 				URL url= JavaUI.getJavadocLocation(element, true);
 				if (url == null || doesNotExist(url)) {
 					IPackageFragmentRoot root= JavaModelUtil.getPackageFragmentRoot(element);
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/RowLayouter.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/RowLayouter.java
index a77d73c..113ede8 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/RowLayouter.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/RowLayouter.java
@@ -161,8 +161,7 @@
 		if (!fOrder)
 			return;
 
-		for (int i= 0; i < controls.length; i++) {
-			Control control= controls[i];
+		for (Control control : controls) {
 			control.moveBelow(fLastControl);
 			fLastControl= control;
 		}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/SelectionUtil.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/SelectionUtil.java
index 1d128ce..2a872a0 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/SelectionUtil.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/util/SelectionUtil.java
@@ -85,17 +85,15 @@
 
 		// get all the view and editor parts
 		List<IWorkbenchPart> parts= new ArrayList<>();
-		IWorkbenchPartReference refs[]= page.getViewReferences();
-		for (int i= 0; i < refs.length; i++) {
-			IWorkbenchPart part= refs[i].getPart(false);
+		for (IWorkbenchPartReference ref : page.getViewReferences()) {
+			IWorkbenchPart part= ref.getPart(false);
 			if (part != null) {
 				parts.add(part);
 			}
 		}
-		refs= page.getEditorReferences();
-		for (int i= 0; i < refs.length; i++) {
-			if (refs[i].getPart(false) != null) {
-				parts.add(refs[i].getPart(false));
+		for (IWorkbenchPartReference ref : page.getEditorReferences()) {
+			if (ref.getPart(false) != null) {
+				parts.add(ref.getPart(false));
 			}
 		}
 
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/BindingLinkedLabelComposer.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/BindingLinkedLabelComposer.java
index c92988c..7c995d8 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/BindingLinkedLabelComposer.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/BindingLinkedLabelComposer.java
@@ -609,9 +609,11 @@
 	// consider only relevant bounds / ignore j.l.Object
 	private boolean hasRelevantBound(ITypeBinding[] bounds) {
 		if (bounds != null) {
-			for (int i= 0; i < bounds.length; i++)
-				if (bounds[i].isInterface() || bounds[i].getSuperclass() != null)
+			for (ITypeBinding bound : bounds) {
+				if (bound.isInterface() || bound.getSuperclass() != null) {
 					return true;
+				}
+			}
 		}
 		return false;
 	}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ColoredViewersManager.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ColoredViewersManager.java
index a3eb9c3..1072673 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ColoredViewersManager.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ColoredViewersManager.java
@@ -14,7 +14,6 @@
 package org.eclipse.jdt.internal.ui.viewsupport;
 
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.Set;
 
 import org.eclipse.swt.widgets.Display;
@@ -87,8 +86,7 @@
 	}
 
 	protected final void updateAllViewers() {
-		for (Iterator<ColoringLabelProvider> iterator= fManagedLabelProviders.iterator(); iterator.hasNext();) {
-			ColoringLabelProvider lp= iterator.next();
+		for (ColoringLabelProvider lp : fManagedLabelProviders) {
 			lp.update();
 		}
 	}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/FilterUpdater.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/FilterUpdater.java
index 34346f2..7101779 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/FilterUpdater.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/FilterUpdater.java
@@ -43,11 +43,9 @@
 		IResourceDelta delta= event.getDelta();
 		if (delta == null)
 			return;
-		IResourceDelta[] projDeltas = delta.getAffectedChildren(IResourceDelta.CHANGED);
-		for (int i= 0; i < projDeltas.length; i++) {
-			IResourceDelta pDelta= projDeltas[i];
-			if ((pDelta.getFlags() & IResourceDelta.DESCRIPTION) != 0) {
-				IProject project= (IProject) pDelta.getResource();
+		for (IResourceDelta deltachild : delta.getAffectedChildren(IResourceDelta.CHANGED)) {
+			if ((deltachild.getFlags() & IResourceDelta.DESCRIPTION) != 0) {
+				IProject project= (IProject) deltachild.getResource();
 				if (needsRefiltering(project)) {
 					final Control ctrl= fViewer.getControl();
 					if (ctrl != null && !ctrl.isDisposed()) {
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/FilteredElementTreeSelectionDialog.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/FilteredElementTreeSelectionDialog.java
index da1975b..06dba20 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/FilteredElementTreeSelectionDialog.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/FilteredElementTreeSelectionDialog.java
@@ -85,8 +85,8 @@
 				if (fMatchers == null || fMatchers.length == 0) {
 					return true;
 				}
-				for (int i= 0; i < fMatchers.length; i++) {
-					if (fMatchers[i].match(text)) {
+				for (StringMatcher matcher : fMatchers) {
+					if (matcher.match(text)) {
 						return true;
 					}
 				}
@@ -106,12 +106,13 @@
 					return false;
 
 				// Also apply deep filtering to the other registered filters
-				ViewerFilter[] filters= ((TreeViewer)viewer).getFilters();
-				for (int i= 0; i < filters.length; i++) {
-					if (filters[i] == this)
+				for (ViewerFilter filter : ((TreeViewer)viewer).getFilters()) {
+					if (filter == this) {
 						continue;
-					if (!filters[i].select(viewer, element, element))
+					}
+					if (!filter.select(viewer, element, element)) {
 						return false;
+					}
 				}
 				return true;
 			}
@@ -172,9 +173,7 @@
 						redrawFalseControl.setRedraw(false);
 						if (!narrowingDown) {
 							// collapse all
-							TreeItem[] is= treeViewer.getTree().getItems();
-							for (int i= 0; i < is.length; i++) {
-								TreeItem item= is[i];
+							for (TreeItem item : treeViewer.getTree().getItems()) {
 								if (item.getExpanded()) {
 									treeViewer.setExpandedState(item.getData(), false);
 								}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ImageDisposer.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ImageDisposer.java
index 4757082..821e7e2 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ImageDisposer.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ImageDisposer.java
@@ -43,8 +43,8 @@
 	@Override
 	public void widgetDisposed(DisposeEvent e) {
 		if (fImages != null) {
-			for (int i= 0; i < fImages.length; i++) {
-				fImages[i].dispose();
+			for (Image image : fImages) {
+				image.dispose();
 			}
 		}
 	}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ImagesOnFileSystemRegistry.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ImagesOnFileSystemRegistry.java
index 5d0cef4..969b31b 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ImagesOnFileSystemRegistry.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ImagesOnFileSystemRegistry.java
@@ -73,9 +73,8 @@
 
 	private void delete(File file) {
 		if (file.isDirectory()) {
-			File[] listFiles= file.listFiles();
-			for (int i= 0; i < listFiles.length; i++) {
-				delete(listFiles[i]);
+			for (File f : file.listFiles()) {
+				delete(f);
 			}
 		}
 		file.delete();
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/JavaElementLabelComposer.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/JavaElementLabelComposer.java
index d62a359..b87a9bc 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/JavaElementLabelComposer.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/JavaElementLabelComposer.java
@@ -369,9 +369,7 @@
 
 		if (fgPkgNameAbbreviation != null && fgPkgNameAbbreviation.length != 0) {
 
-			for (int i= 0; i < fgPkgNameAbbreviation.length; i++) {
-				PackageNameAbbreviation abbr= fgPkgNameAbbreviation[i];
-
+			for (PackageNameAbbreviation abbr : fgPkgNameAbbreviation) {
 				String abbrPrefix= abbr.getPackagePrefix();
 				if (pkgName.startsWith(abbrPrefix)) {
 					int abbrPrefixLength= abbrPrefix.length();
@@ -547,29 +545,20 @@
 	}
 
 	public static PackageNameAbbreviation[] parseAbbreviationPattern(String pattern) {
-		String[] parts= pattern.split("\\s*(?:\r\n?|\n)\\s*"); //$NON-NLS-1$
-
 		ArrayList<PackageNameAbbreviation> result= new ArrayList<>();
 
-		for (int i= 0; i < parts.length; i++) {
-			String part= parts[i].trim();
-
+		for (String p : pattern.split("\\s*(?:\r\n?|\n)\\s*")) { //$NON-NLS-1$
+			String part= p.trim();
 			if (part.length() == 0)
 				continue;
-
 			String[] parts2= part.split("\\s*=\\s*", 2); //$NON-NLS-1$
-
 			if (parts2.length != 2)
 				return null;
-
 			String prefix= parts2[0].trim();
 			String abbr= parts2[1].trim();
-
 			if (prefix.startsWith("#")) //$NON-NLS-1$
 				continue;
-
 			PackageNameAbbreviation pkgAbbr= new PackageNameAbbreviation(prefix, abbr);
-
 			result.add(pkgAbbr);
 		}
 
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/JavaElementLinks.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/JavaElementLinks.java
index f060cdd..95ba196 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/JavaElementLinks.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/JavaElementLinks.java
@@ -149,12 +149,10 @@
 		private String getPackageFragmentElementName(IJavaElement javaElement) {
 			IPackageFragmentRoot root= (IPackageFragmentRoot) javaElement.getAncestor(IJavaElement.PACKAGE_FRAGMENT_ROOT);
 			String javaElementName= javaElement.getElementName();
-			String[] individualSegmentNames= javaElementName.split("\\."); //$NON-NLS-1$
 			String packageName= null;
 			StringBuilder strBuffer= new StringBuilder();
 
-			for (int i= 0; i < individualSegmentNames.length; i++) {
-				String lastSegmentName= individualSegmentNames[i];
+			for (String lastSegmentName : javaElementName.split("\\.")) { //$NON-NLS-1$
 				if (packageName != null) {
 					strBuffer.append('.');
 					packageName= packageName + '.' + lastSegmentName;
@@ -463,9 +461,8 @@
 									// easily, since the Javadoc references are erasures
 
 									//Shortcut: only check name and parameter count:
-									methods= type.getMethods();
-									for (int i= 0; i < methods.length; i++) {
-										method= methods[i];
+									for (IMethod method1 : type.getMethods()) {
+										method= method1;
 										if (method.getElementName().equals(refMemberName) && method.getNumberOfParameters() == paramSignatures.length)
 											return method;
 									}
@@ -481,9 +478,7 @@
 								if (field.exists()) {
 									return field;
 								} else {
-									IMethod[] methods= type.getMethods();
-									for (int i= 0; i < methods.length; i++) {
-										IMethod method= methods[i];
+									for (IMethod method : type.getMethods()) {
 										if (method.getElementName().equals(refMemberName))
 											return method;
 									}
@@ -587,27 +582,23 @@
 		while (baseElement != null) {
 			switch (baseElement.getElementType()) {
 				case IJavaElement.METHOD:
-					IMethod method= (IMethod)baseElement;
-					ITypeParameter[] typeParameters= method.getTypeParameters();
-					for (int i= 0; i < typeParameters.length; i++) {
-						ITypeParameter typeParameter= typeParameters[i];
+					for (ITypeParameter typeParameter : ((IMethod)baseElement).getTypeParameters()) {
 						if (typeParameter.getElementName().equals(typeVariableName)) {
 							return typeParameter;
 						}
 					}
 					break;
 
+
 				case IJavaElement.TYPE:
-					IType type= (IType)baseElement;
-					typeParameters= type.getTypeParameters();
-					for (int i= 0; i < typeParameters.length; i++) {
-						ITypeParameter typeParameter= typeParameters[i];
+					for (ITypeParameter typeParameter : ((IType)baseElement).getTypeParameters()) {
 						if (typeParameter.getElementName().equals(typeVariableName)) {
 							return typeParameter;
 						}
 					}
 					break;
 
+
 				case IJavaElement.JAVA_MODEL:
 				case IJavaElement.JAVA_PROJECT:
 				case IJavaElement.PACKAGE_FRAGMENT:
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/LinkedProposalModelPresenter.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/LinkedProposalModelPresenter.java
index d2c949d..9f577a5 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/LinkedProposalModelPresenter.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/LinkedProposalModelPresenter.java
@@ -47,6 +47,7 @@
 
 import org.eclipse.jdt.internal.corext.fix.LinkedProposalModel;
 import org.eclipse.jdt.internal.corext.fix.LinkedProposalPositionGroup;
+import org.eclipse.jdt.internal.corext.fix.LinkedProposalPositionGroupCore.PositionInformation;
 
 import org.eclipse.jdt.ui.JavaUI;
 import org.eclipse.jdt.ui.text.java.IJavaCompletionProposal;
@@ -79,8 +80,7 @@
 			if (positions.length > 0) {
 				LinkedProposalPositionGroup.Proposal[] linkedModeProposals= curr.getProposals();
 				if (linkedModeProposals.length <= 1) {
-					for (int i= 0; i < positions.length; i++) {
-						LinkedProposalPositionGroup.PositionInformation pos= positions[i];
+					for (PositionInformation pos : positions) {
 						if (pos.getOffset() != -1) {
 							group.addPosition(new LinkedPosition(document, pos.getOffset(), pos.getLength(), pos.getSequenceRank()));
 						}
@@ -91,8 +91,7 @@
 						proposalImpls[i]= new LinkedPositionProposalImpl(linkedModeProposals[i], model);
 					}
 
-					for (int i= 0; i < positions.length; i++) {
-						LinkedProposalPositionGroup.PositionInformation pos= positions[i];
+					for (PositionInformation pos : positions) {
 						if (pos.getOffset() != -1) {
 							group.addPosition(new ProposalPosition(document, pos.getOffset(), pos.getLength(), pos.getSequenceRank(), proposalImpls));
 						}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ProblemMarkerManager.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ProblemMarkerManager.java
index f87a85d..3c43b6b 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ProblemMarkerManager.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ProblemMarkerManager.java
@@ -90,14 +90,13 @@
 
 		private boolean isErrorDelta(IResourceDelta delta) {
 			if ((delta.getFlags() & IResourceDelta.MARKERS) != 0) {
-				IMarkerDelta[] markerDeltas= delta.getMarkerDeltas();
-				for (int i= 0; i < markerDeltas.length; i++) {
-					if (markerDeltas[i].isSubtypeOf(IMarker.PROBLEM)) {
-						int kind= markerDeltas[i].getKind();
+				for (IMarkerDelta markerDelta : delta.getMarkerDeltas()) {
+					if (markerDelta.isSubtypeOf(IMarker.PROBLEM)) {
+						int kind= markerDelta.getKind();
 						if (kind == IResourceDelta.ADDED || kind == IResourceDelta.REMOVED)
 							return true;
-						int severity= markerDeltas[i].getAttribute(IMarker.SEVERITY, -1);
-						int newSeverity= markerDeltas[i].getMarker().getAttribute(IMarker.SEVERITY, -1);
+						int severity= markerDelta.getAttribute(IMarker.SEVERITY, -1);
+						int newSeverity= markerDelta.getMarker().getAttribute(IMarker.SEVERITY, -1);
 						if (newSeverity != severity)
 							return true;
 					}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ProblemTableViewer.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ProblemTableViewer.java
index b533f19..21ec5ea 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ProblemTableViewer.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ProblemTableViewer.java
@@ -125,8 +125,7 @@
 		Object[] changed= event.getElements();
 		if (changed != null && !fResourceToItemsMapper.isEmpty()) {
 			ArrayList<Object> others= new ArrayList<>(changed.length);
-			for (int i= 0; i < changed.length; i++) {
-				Object curr= changed[i];
+			for (Object curr : changed) {
 				if (curr instanceof IResource) {
 					fResourceToItemsMapper.resourceChanged((IResource) curr);
 				} else {
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ProblemTreeViewer.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ProblemTreeViewer.java
index 2c64c91..d479a29 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ProblemTreeViewer.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/ProblemTreeViewer.java
@@ -132,8 +132,7 @@
 	@Override
 	public void setFilters(ViewerFilter... filters) {
 		ViewerFilter[] oldFilters= getFilters();
-		for (int i= 0; i < filters.length; i++) {
-			ViewerFilter curr= filters[i];
+		for (ViewerFilter curr : filters) {
 			if (curr instanceof JavaViewerFilter && !findAndRemove(oldFilters, curr)) {
 				((JavaViewerFilter) curr).filteringStart();
 			}
@@ -159,8 +158,7 @@
 	}
 
 	private void endFilterSessions(ViewerFilter[] filters) {
-		for (int i= 0; i < filters.length; i++) {
-			ViewerFilter curr= filters[i];
+		for (ViewerFilter curr : filters) {
 			if (curr instanceof JavaViewerFilter) {
 				((JavaViewerFilter) curr).filteringEnd();
 			}
@@ -189,8 +187,7 @@
 
 		if (changed != null && !fResourceToItemsMapper.isEmpty()) {
 			ArrayList<Object> others= new ArrayList<>();
-			for (int i= 0; i < changed.length; i++) {
-				Object curr= changed[i];
+			for (Object curr : changed) {
 				if (curr instanceof IResource) {
 					fResourceToItemsMapper.resourceChanged((IResource) curr);
 				} else {
@@ -260,8 +257,7 @@
 		}
 		List<Object> list= new ArrayList<>(elements.length);
 		ViewerFilter[] filters = getFilters();
-		for (int i = 0; i < elements.length; i++) {
-			Object object = elements[i];
+		for (Object object : elements) {
 			if (!isFiltered(object, parent, filters)) {
 				list.add(object);
 			}
@@ -277,8 +273,7 @@
 			return true;
 		}
 		ViewerFilter[] filters = getFilters();
-		for (int i = 0; i < elements.length; i++) {
-			Object object = elements[i];
+		for (Object object : elements) {
 			if (!isFiltered(object, parent, filters)) {
 				return true;
 			}
@@ -296,8 +291,7 @@
 	 * @return true if the element is filtered
 	 */
 	protected boolean isFiltered(Object object, Object parent, ViewerFilter[] filters) {
-		for (int i = 0; i < filters.length; i++) {
-			ViewerFilter filter = filters[i];
+		for (ViewerFilter filter : filters) {
 			if (!filter.select(this, parent, object))
 				return true;
 		}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/SelectionProviderMediator.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/SelectionProviderMediator.java
index 5c63dd2..579791f 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/SelectionProviderMediator.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/SelectionProviderMediator.java
@@ -88,8 +88,7 @@
 		fPostSelectionChangedListeners= new ListenerList<>();
 		fViewerInFocus= viewerInFocus;
 
-		for (int i= 0; i < fViewers.length; i++) {
-			StructuredViewer viewer= fViewers[i];
+		for (StructuredViewer viewer : fViewers) {
 			viewer.addSelectionChangedListener(listener);
 			viewer.addPostSelectionChangedListener(new InternalPostSelectionListener());
 			Control control= viewer.getControl();
@@ -98,9 +97,9 @@
 	}
 
 	private void doFocusChanged(Widget control) {
-		for (int i= 0; i < fViewers.length; i++) {
-			if (fViewers[i].getControl() == control) {
-				propagateFocusChanged(fViewers[i]);
+		for (StructuredViewer viewer : fViewers) {
+			if (viewer.getControl() == control) {
+				propagateFocusChanged(viewer);
 				return;
 			}
 		}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/TreeHierarchyLayoutProblemsDecorator.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/TreeHierarchyLayoutProblemsDecorator.java
index 2f6a936..5eef0b5 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/TreeHierarchyLayoutProblemsDecorator.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/TreeHierarchyLayoutProblemsDecorator.java
@@ -55,10 +55,9 @@
 		if (element instanceof IPackageFragment) {
 			return computePackageAdornmentFlags((IPackageFragment) element);
 		} else if (element instanceof LogicalPackage) {
-			IPackageFragment[] fragments= ((LogicalPackage) element).getFragments();
 			int res= 0;
-			for (int i= 0; i < fragments.length; i++) {
-				int flags= computePackageAdornmentFlags(fragments[i]);
+			for (IPackageFragment fragment : ((LogicalPackage) element).getFragments()) {
+				int flags= computePackageAdornmentFlags(fragment);
 				if (flags == JavaElementImageDescriptor.ERROR) {
 					return flags;
 				} else if (flags != 0 && res != JavaElementImageDescriptor.WARNING) {
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewTypeDropDownAction.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewTypeDropDownAction.java
index 10d65c1..4519a1b 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewTypeDropDownAction.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewTypeDropDownAction.java
@@ -151,9 +151,7 @@
 	public Menu getMenu(Control parent) {
 		if (fMenu == null) {
 			fMenu= new Menu(parent);
-			OpenTypeWizardAction[] actions= getActionFromDescriptors();
-			for (int i= 0; i < actions.length; i++) {
-				OpenTypeWizardAction curr= actions[i];
+			for (OpenTypeWizardAction curr : getActionFromDescriptors()) {
 				curr.setShell(fWizardShell);
 				ActionContributionItem item= new ActionContributionItem(curr);
 				item.fill(fMenu, -1);
@@ -173,9 +171,7 @@
 
 		IExtensionPoint extensionPoint = Platform.getExtensionRegistry().getExtensionPoint(PlatformUI.PLUGIN_ID, PL_NEW);
 		if (extensionPoint != null) {
-			IConfigurationElement[] elements = extensionPoint.getConfigurationElements();
-			for (int i = 0; i < elements.length; i++) {
-				IConfigurationElement element= elements[i];
+			for (IConfigurationElement element : extensionPoint.getConfigurationElements()) {
 				if (element.getName().equals(TAG_WIZARD) && isJavaTypeWizard(element)) {
 					containers.add(new OpenTypeWizardAction(element));
 				}
@@ -185,15 +181,10 @@
 	}
 
 	private static boolean isJavaTypeWizard(IConfigurationElement element) {
-		IConfigurationElement[] classElements= element.getChildren(TAG_CLASS);
-		if (classElements.length > 0) {
-			for (int i= 0; i < classElements.length; i++) {
-				IConfigurationElement[] paramElements= classElements[i].getChildren(TAG_PARAMETER);
-				for (int k = 0; k < paramElements.length; k++) {
-					IConfigurationElement curr= paramElements[k];
-					if (ATT_JAVATYPE.equals(curr.getAttribute(TAG_NAME))) {
-						return Boolean.valueOf(curr.getAttribute(TAG_VALUE)).booleanValue();
-					}
+		for (IConfigurationElement classElement : element.getChildren(TAG_CLASS)) {
+			for (IConfigurationElement curr : classElement.getChildren(TAG_PARAMETER)) {
+				if (ATT_JAVATYPE.equals(curr.getAttribute(TAG_NAME))) {
+					return Boolean.valueOf(curr.getAttribute(TAG_VALUE)).booleanValue();
 				}
 			}
 		}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/TypedElementSelectionValidator.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/TypedElementSelectionValidator.java
index a4b4bc9..e719d5b 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/TypedElementSelectionValidator.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/TypedElementSelectionValidator.java
@@ -70,8 +70,8 @@
 	}
 
 	private boolean isOfAcceptedType(Object o) {
-		for (int i= 0; i < fAcceptedTypes.length; i++) {
-			if (fAcceptedTypes[i].isInstance(o)) {
+		for (Class<?> type : fAcceptedTypes) {
+			if (type.isInstance(o)) {
 				return true;
 			}
 		}
@@ -99,8 +99,7 @@
 			return false;
 		}
 
-		for (int i= 0; i < selection.length; i++) {
-			Object o= selection[i];
+		for (Object o : selection) {
 			if (!isOfAcceptedType(o) || isRejectedElement(o) || !isSelectedValid(o)) {
 				return false;
 			}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/TypedViewerFilter.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/TypedViewerFilter.java
index c64c312..02d0e07 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/TypedViewerFilter.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/TypedViewerFilter.java
@@ -53,14 +53,14 @@
 	@Override
 	public boolean select(Viewer viewer, Object parentElement, Object element) {
 		if (fRejectedElements != null) {
-			for (int i= 0; i < fRejectedElements.length; i++) {
-				if (element.equals(fRejectedElements[i])) {
+			for (Object rejectedelement : fRejectedElements) {
+				if (element.equals(rejectedelement)) {
 					return false;
 				}
 			}
 		}
-		for (int i= 0; i < fAcceptedTypes.length; i++) {
-			if (fAcceptedTypes[i].isInstance(element)) {
+		for (Class<?> type : fAcceptedTypes) {
+			if (type.isInstance(element)) {
 				return true;
 			}
 		}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/AddSourceFolderWizardPage.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/AddSourceFolderWizardPage.java
index 48575ba..a581e90 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/AddSourceFolderWizardPage.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/AddSourceFolderWizardPage.java
@@ -18,7 +18,6 @@
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.Hashtable;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
 
@@ -238,8 +237,7 @@
 		fOrginalInclusionFilters= new Hashtable<>();
 		fOrginalExlusionFiltersCopy= new Hashtable<>();
 		fOrginalInclusionFiltersCopy= new Hashtable<>();
-		for (Iterator<CPListElement> iter= existingEntries.iterator(); iter.hasNext();) {
-			CPListElement element= iter.next();
+		for (CPListElement element : existingEntries) {
 			IPath[] exlusions= (IPath[])element.getAttribute(CPListElement.EXCLUSION);
 			if (exlusions != null) {
 				IPath[] save= new IPath[exlusions.length];
@@ -542,8 +540,7 @@
 	}
 
 	public void restore() {
-		for (Iterator<CPListElement> iter= fExistingEntries.iterator(); iter.hasNext();) {
-			CPListElement element= iter.next();
+		for (CPListElement element : fExistingEntries) {
 			if (fOrginalExlusionFilters.containsKey(element)) {
 				element.setAttribute(CPListElement.EXCLUSION, fOrginalExlusionFiltersCopy.get(element));
 			}
@@ -556,8 +553,7 @@
 
 	private void restoreCPElements() {
 		if (fNewElement.getPath() != null) {
-			for (Iterator<CPListElement> iter= fExistingEntries.iterator(); iter.hasNext();) {
-				CPListElement element= iter.next();
+			for (CPListElement element : fExistingEntries) {
 				if (fOrginalExlusionFilters.containsKey(element)) {
 					element.setAttribute(CPListElement.EXCLUSION, fOrginalExlusionFilters.get(element));
 				}
@@ -587,8 +583,7 @@
 			newPath= newPath.removeFirstSegments(projPath.segmentCount()).addTrailingSeparator();
 		}
 
-		for (Iterator<CPListElement> iter= fExistingEntries.iterator(); iter.hasNext();) {
-			CPListElement element= iter.next();
+		for (CPListElement element : fExistingEntries) {
 			IPath elementPath= element.getPath();
 			if (projPath.isPrefixOf(elementPath)) {
 				elementPath= elementPath.removeFirstSegments(projPath.segmentCount());
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ArchiveFileFilter.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ArchiveFileFilter.java
index 57b4675..20d8906 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ArchiveFileFilter.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ArchiveFileFilter.java
@@ -72,10 +72,9 @@
 			if (element instanceof IProject && !((IProject)element).isOpen())
 				return false;
 			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;
 					}
 				}
@@ -98,8 +97,8 @@
 	}
 
 	public static boolean isArchiveFileExtension(String ext) {
-		for (int i= 0; i < fgArchiveExtensions.length; i++) {
-			if (ext.equalsIgnoreCase(fgArchiveExtensions[i])) {
+		for (String extension : fgArchiveExtensions) {
+			if (ext.equalsIgnoreCase(extension)) {
 				return true;
 			}
 		}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildPathBasePage.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildPathBasePage.java
index d000091..4699d01 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildPathBasePage.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildPathBasePage.java
@@ -160,8 +160,7 @@
 			if (value instanceof ModuleEncapsulationDetail[]) {
 				ModuleEncapsulationDetail[] existingDetails= (ModuleEncapsulationDetail[]) value;
 				int count= 0;
-				for (int j= 0; j < existingDetails.length; j++) {
-					ModuleEncapsulationDetail aDetail= existingDetails[j];
+				for (ModuleEncapsulationDetail aDetail : existingDetails) {
 					if (aDetail != detail)
 						existingDetails[count++]= aDetail;
 				}
@@ -222,15 +221,14 @@
 	}
 
 	public static void fixNestingConflicts(CPListElement[] newEntries, CPListElement[] existing, Set<CPListElement> modifiedSourceEntries) {
-		for (int i= 0; i < newEntries.length; i++) {
-			addExclusionPatterns(newEntries[i], existing, modifiedSourceEntries);
+		for (CPListElement newEntry : newEntries) {
+			addExclusionPatterns(newEntry, existing, modifiedSourceEntries);
 		}
 	}
 
 	private static void addExclusionPatterns(CPListElement newEntry, CPListElement[] existing, Set<CPListElement> modifiedEntries) {
 		IPath entryPath= newEntry.getPath();
-		for (int i= 0; i < existing.length; i++) {
-			CPListElement curr= existing[i];
+		for (CPListElement curr : existing) {
 			if (curr.getEntryKind() == IClasspathEntry.CPE_SOURCE) {
 				IPath currPath= curr.getPath();
 				if (!currPath.equals(entryPath)) {
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildPathSupport.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildPathSupport.java
index 2b2dc33..b40fd03 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildPathSupport.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildPathSupport.java
@@ -15,7 +15,6 @@
 
 import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
@@ -101,13 +100,9 @@
 		IJavaProject currProject= elem.getJavaProject(); // can be null
 		try {
 			IJavaModel jmodel= JavaCore.create(ResourcesPlugin.getWorkspace().getRoot());
-			IJavaProject[] jprojects= jmodel.getJavaProjects();
-			for (int i= 0; i < jprojects.length; i++) {
-				IJavaProject curr= jprojects[i];
+			for (IJavaProject curr : jmodel.getJavaProjects()) {
 				if (!curr.equals(currProject)) {
-					IClasspathEntry[] entries= curr.getRawClasspath();
-					for (int k= 0; k < entries.length; k++) {
-						IClasspathEntry entry= entries[k];
+					for (IClasspathEntry entry : curr.getRawClasspath()) {
 						if (entry.getEntryKind() == elem.getEntryKind()
 							&& entry.getPath().equals(elem.getPath())) {
 							IPath attachPath= entry.getSourceAttachmentPath();
@@ -137,17 +132,11 @@
 		try {
 			// try if the jar itself contains the source
 			IJavaModel jmodel= JavaCore.create(ResourcesPlugin.getWorkspace().getRoot());
-			IJavaProject[] jprojects= jmodel.getJavaProjects();
-			for (int i= 0; i < jprojects.length; i++) {
-				IJavaProject curr= jprojects[i];
+			for (IJavaProject curr : jmodel.getJavaProjects()) {
 				if (!curr.equals(currProject)) {
-					IClasspathEntry[] entries= curr.getRawClasspath();
-					for (int k= 0; k < entries.length; k++) {
-						IClasspathEntry entry= entries[k];
+					for (IClasspathEntry entry : curr.getRawClasspath()) {
 						if (entry.getEntryKind() == elem.getEntryKind() && entry.getPath().equals(elem.getPath())) {
-							IClasspathAttribute[] attributes= entry.getExtraAttributes();
-							for (int n= 0; n < attributes.length; n++) {
-								IClasspathAttribute attrib= attributes[n];
+							for (IClasspathAttribute attrib : entry.getExtraAttributes()) {
 								if (IClasspathAttribute.JAVADOC_LOCATION_ATTRIBUTE_NAME.equals(attrib.getName())) {
 									return attrib.getValue();
 								}
@@ -239,8 +228,7 @@
 		}
 		CPListElement currElem= CPListElement.createFromExisting(currEntry, jproject);
 		CPListElement newElem= CPListElement.createFromExisting(updatedEntry, jproject);
-		for (int i= 0; i < updatedAttributes.length; i++) {
-			String attrib= updatedAttributes[i];
+		for (String attrib : updatedAttributes) {
 			currElem.setAttribute(attrib, newElem.getAttribute(attrib));
 		}
 		return currElem.getClasspathEntry();
@@ -353,8 +341,7 @@
 	 * @since 3.5
 	 */
 	public static void setEEComplianceOptions(IJavaProject javaProject, List<CPListElement> modifiedClassPathEntries) {
-		for (Iterator<CPListElement> iter= modifiedClassPathEntries.iterator(); iter.hasNext();) {
-			CPListElement entry= iter.next();
+		for (CPListElement entry : modifiedClassPathEntries) {
 			if (entry.getEntryKind() == IClasspathEntry.CPE_CONTAINER) {
 				IPath path= entry.getPath();
 				if (! path.equals(entry.getOrginalPath())) {
@@ -386,8 +373,7 @@
 			Map<String, String> options= javaProject.getOptions(false);
 			Map<String, String> eeOptions= getEEOptions(ee);
 			if (eeOptions != null) {
-				for (int i= 0; i < PREFS_COMPLIANCE.length; i++) {
-					String option= PREFS_COMPLIANCE[i];
+				for (String option : PREFS_COMPLIANCE) {
 					String val= eeOptions.get(option);
 					if (val != null) {
 						options.put(option, val);
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildPathsBlock.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildPathsBlock.java
index 5969c61..1ce8d0b 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildPathsBlock.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildPathsBlock.java
@@ -17,7 +17,6 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
@@ -77,6 +76,7 @@
 import org.eclipse.jdt.core.JavaConventions;
 import org.eclipse.jdt.core.JavaCore;
 
+import org.eclipse.jdt.internal.core.manipulation.util.BasicElementLabels;
 import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
 import org.eclipse.jdt.internal.corext.util.Messages;
 
@@ -89,7 +89,6 @@
 import org.eclipse.jdt.internal.ui.dialogs.StatusInfo;
 import org.eclipse.jdt.internal.ui.dialogs.StatusUtil;
 import org.eclipse.jdt.internal.ui.util.CoreUtility;
-import org.eclipse.jdt.internal.core.manipulation.util.BasicElementLabels;
 import org.eclipse.jdt.internal.ui.viewsupport.ImageDisposer;
 import org.eclipse.jdt.internal.ui.wizards.IStatusChangeListener;
 import org.eclipse.jdt.internal.ui.wizards.NewWizardMessages;
@@ -446,8 +445,7 @@
 	private ArrayList<CPListElement> getCPListElements(IClasspathEntry[] classpathEntries, IClasspathEntry[] existingEntries) {
 		List<IClasspathEntry> existing= existingEntries == null ? Collections.<IClasspathEntry>emptyList() : Arrays.asList(existingEntries);
 		ArrayList<CPListElement> newClassPath= new ArrayList<>();
-		for (int i= 0; i < classpathEntries.length; i++) {
-			IClasspathEntry curr= classpathEntries[i];
+		for (IClasspathEntry curr : classpathEntries) {
 			newClassPath.add(CPListElement.create(curr, ! existing.contains(curr), fCurrJProject));
 		}
 		return newClassPath;
@@ -843,8 +841,7 @@
 			IClasspathEntry[] classpath= new IClasspathEntry[nEntries];
 			int i= 0;
 
-			for (Iterator<CPListElement> iter= classPathEntries.iterator(); iter.hasNext();) {
-				CPListElement entry= iter.next();
+			for (CPListElement entry : classPathEntries) {
 				if(entry.isRootNodeForPath()){
 					continue;
 				}
@@ -955,9 +952,8 @@
 			return true;
 		}
 		if (resource instanceof IContainer) {
-			IResource[] members= ((IContainer) resource).members();
-			for (int i= 0; i < members.length; i++) {
-				if (hasClassfiles(members[i])) {
+			for (IResource member : ((IContainer) resource).members()) {
+				if (hasClassfiles(member)) {
 					return true;
 				}
 			}
@@ -970,9 +966,8 @@
 		if (resource.isDerived()) {
 			resource.delete(false, null);
 		} else if (resource instanceof IContainer) {
-			IResource[] members= ((IContainer) resource).members();
-			for (int i= 0; i < members.length; i++) {
-				removeOldClassfiles(members[i]);
+			for (IResource member : ((IContainer) resource).members()) {
+				removeOldClassfiles(member);
 			}
 		}
 	}
@@ -1017,9 +1012,9 @@
 		IProject[] allProjects= fWorkspaceRoot.getProjects();
 		ArrayList<IProject> rejectedElements= new ArrayList<>(allProjects.length);
 		IProject currProject= fCurrJProject.getProject();
-		for (int i= 0; i < allProjects.length; i++) {
-			if (!allProjects[i].equals(currProject)) {
-				rejectedElements.add(allProjects[i]);
+		for (IProject project : allProjects) {
+			if (!project.equals(currProject)) {
+				rejectedElements.add(project);
 			}
 		}
 		ViewerFilter filter= new TypedViewerFilter(acceptedClasses, rejectedElements.toArray());
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/CPListElement.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/CPListElement.java
index c5143e6..8d78987 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/CPListElement.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/CPListElement.java
@@ -18,7 +18,6 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
-import java.util.Iterator;
 import java.util.List;
 import java.util.stream.Stream;
 
@@ -43,20 +42,19 @@
 import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jdt.core.JavaModelException;
 
-
 import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
-import org.eclipse.jdt.internal.ui.wizards.buildpaths.ModuleEncapsulationDetail.LimitModules;
-import org.eclipse.jdt.internal.ui.wizards.buildpaths.ModuleEncapsulationDetail.ModuleAddExport;
-import org.eclipse.jdt.internal.ui.wizards.buildpaths.ModuleEncapsulationDetail.ModuleAddExpose;
-import org.eclipse.jdt.internal.ui.wizards.buildpaths.ModuleEncapsulationDetail.ModuleAddOpens;
-import org.eclipse.jdt.internal.ui.wizards.buildpaths.ModuleEncapsulationDetail.ModuleAddReads;
-import org.eclipse.jdt.internal.ui.wizards.buildpaths.ModuleEncapsulationDetail.ModulePatch;
 
 import org.eclipse.jdt.launching.JavaRuntime;
 
 import org.eclipse.jdt.ui.JavaUI;
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.wizards.buildpaths.ModuleEncapsulationDetail.LimitModules;
+import org.eclipse.jdt.internal.ui.wizards.buildpaths.ModuleEncapsulationDetail.ModuleAddExport;
+import org.eclipse.jdt.internal.ui.wizards.buildpaths.ModuleEncapsulationDetail.ModuleAddExpose;
+import org.eclipse.jdt.internal.ui.wizards.buildpaths.ModuleEncapsulationDetail.ModuleAddOpens;
+import org.eclipse.jdt.internal.ui.wizards.buildpaths.ModuleEncapsulationDetail.ModuleAddReads;
+import org.eclipse.jdt.internal.ui.wizards.buildpaths.ModuleEncapsulationDetail.ModulePatch;
 
 public class CPListElement {
 
@@ -182,8 +180,7 @@
 									return;
 								}
 							}
-							for (int i= 0; i < entries.length; i++) {
-								IClasspathEntry currEntry= entries[i];
+							for (IClasspathEntry currEntry : entries) {
 								if (currEntry != null) {
 									CPListElement curr= createFromExisting(this, currEntry, fProject);
 									fChildren.add(curr);
@@ -458,9 +455,10 @@
 		if (moduleDetails instanceof ModuleEncapsulationDetail[]) {
 			ModuleEncapsulationDetail[] details= (ModuleEncapsulationDetail[]) moduleDetails;
 			List<T> elements= new ArrayList<>(details.length);
-			for (int i= 0; i < details.length; i++) {
-				if (clazz.isInstance(details[i]))
-					elements.add(clazz.cast(details[i]));
+			for (ModuleEncapsulationDetail detail : details) {
+				if (clazz.isInstance(detail)) {
+					elements.add(clazz.cast(detail));
+				}
 			}
 			return elements;
 		} else {
@@ -478,8 +476,8 @@
 		if (entry instanceof CPListElementAttribute) {
 			CPListElementAttribute curr= (CPListElementAttribute) entry;
 			String key= curr.getKey();
-			for (int i= 0; i < filteredKeys.length; i++) {
-				if (key.equals(filteredKeys[i])) {
+			for (String filteredKey : filteredKeys) {
+				if (key.equals(filteredKey)) {
 					return true;
 				}
 			}
@@ -781,14 +779,13 @@
 		elem.setAttribute(COMBINE_ACCESSRULES, Boolean.valueOf(curr.combineAccessRules()));
 
 		IClasspathAttribute[] extraAttributes= curr.getExtraAttributes();
-		for (int i= 0; i < extraAttributes.length; i++) {
-			IClasspathAttribute attrib= extraAttributes[i];
+		for (IClasspathAttribute attrib : extraAttributes) {
 			CPListElementAttribute attribElem= elem.findAttributeElement(attrib.getName());
 			if (attribElem == null) {
 				if (!isModuleAttribute(attrib.getName())) {
 					elem.createAttributeElement(attrib.getName(), attrib.getValue(), false);
 				} else if (attrib.getName().equals(MODULE)) {
-					attribElem = new CPListElementAttribute(elem, MODULE, null, true);
+					attribElem= new CPListElementAttribute(elem, MODULE, null, true);
 					attribElem.setValue(getModuleAttributeValue(attribElem, attrib, extraAttributes));
 					elem.fChildren.add(attribElem);
 				}
@@ -808,8 +805,7 @@
 	private static Object getModuleAttributeValue(CPListElementAttribute attribElem, IClasspathAttribute attrib, IClasspathAttribute[] extraAttributes) {
 		if (ModuleAttributeConfiguration.TRUE.equals(attrib.getValue())) {
 			List<ModuleEncapsulationDetail> details= new ArrayList<>();
-			for (int j= 0; j < extraAttributes.length; j++) {
-				IClasspathAttribute otherAttrib= extraAttributes[j];
+			for (IClasspathAttribute otherAttrib : extraAttributes) {
 				if (IClasspathAttribute.PATCH_MODULE.equals(otherAttrib.getName())) {
 					details.addAll(ModulePatch.fromMultiString(attribElem, otherAttrib.getValue()));
 				} else if (IClasspathAttribute.ADD_EXPORTS.equals(otherAttrib.getName())) {
@@ -856,8 +852,8 @@
 	public static StringBuffer appendEncodedFilter(IPath[] filters, StringBuffer buf) {
 		if (filters != null) {
 			buf.append('[').append(filters.length).append(']');
-			for (int i= 0; i < filters.length; i++) {
-				appendEncodePath(filters[i], buf).append(';');
+			for (IPath filter : filters) {
+				appendEncodePath(filter, buf).append(';');
 			}
 		} else {
 			buf.append('[').append(']');
@@ -868,9 +864,9 @@
 	public static StringBuffer appendEncodedAccessRules(IAccessRule[] rules, StringBuffer buf) {
 		if (rules != null) {
 			buf.append('[').append(rules.length).append(']');
-			for (int i= 0; i < rules.length; i++) {
-				appendEncodePath(rules[i].getPattern(), buf).append(';');
-				buf.append(rules[i].getKind()).append(';');
+			for (IAccessRule rule : rules) {
+				appendEncodePath(rule.getPattern(), buf).append(';');
+				buf.append(rule.getKind()).append(';');
 			}
 		} else {
 			buf.append('[').append(']');
@@ -977,8 +973,7 @@
 	public static IClasspathEntry[] convertToClasspathEntries(List<CPListElement> cpList) {
 		IClasspathEntry[] result= new IClasspathEntry[cpList.size()];
 		int i= 0;
-		for (Iterator<CPListElement> iter= cpList.iterator(); iter.hasNext();) {
-			CPListElement cur= iter.next();
+		for (CPListElement cur : cpList) {
 			result[i]= cur.getClasspathEntry();
 			i++;
 		}
@@ -996,8 +991,8 @@
 
 	public static boolean isProjectSourceFolder(CPListElement[] existing, IJavaProject project) {
 		IPath projPath= project.getProject().getFullPath();
-		for (int i= 0; i < existing.length; i++) {
-			IClasspathEntry curr= existing[i].getClasspathEntry();
+		for (CPListElement e : existing) {
+			IClasspathEntry curr= e.getClasspathEntry();
 			if (curr.getEntryKind() == IClasspathEntry.CPE_SOURCE) {
 				if (projPath.equals(curr.getPath())) {
 					return true;
@@ -1028,14 +1023,13 @@
     	result.fParentContainer= fParentContainer;
     	result.fCachedEntry= null;
     	result.fChildren= new ArrayList<>(fChildren.size());
-    	for (Iterator<Object> iterator= fChildren.iterator(); iterator.hasNext();) {
-    		Object child= iterator.next();
-    		if (child instanceof CPListElement) {
-    			result.fChildren.add(((CPListElement)child).copy());
-    		} else {
-	        	result.fChildren.add(((CPListElementAttribute)child).copy());
-    		}
-        }
+		for (Object child : fChildren) {
+			if (child instanceof CPListElement) {
+				result.fChildren.add(((CPListElement)child).copy());
+			} else {
+				result.fChildren.add(((CPListElementAttribute)child).copy());
+			}
+		}
     	result.fLinkTarget= fLinkTarget;
     	result.fOrginalLinkTarget= fOrginalLinkTarget;
 	    return result;
@@ -1043,9 +1037,7 @@
 
     public void setAttributesFromExisting(CPListElement existing) {
     	Assert.isTrue(existing.getEntryKind() == getEntryKind());
-		CPListElementAttribute[] attributes= existing.getAllAttributes();
-		for (int i= 0; i < attributes.length; i++) {
-			CPListElementAttribute curr= attributes[i];
+		for (CPListElementAttribute curr : existing.getAllAttributes()) {
 			CPListElementAttribute elem= findAttributeElement(curr.getKey());
 			if (elem == null) {
 				createAttributeElement(curr.getKey(), curr.getValue(), curr.isBuiltIn());
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/CPListLabelProvider.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/CPListLabelProvider.java
index 462ff85..298e0e8 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/CPListLabelProvider.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/CPListLabelProvider.java
@@ -166,9 +166,9 @@
 			if (patterns != null && patterns.length > 0) {
 				int patternsCount= 0;
 				StringBuilder buf= new StringBuilder();
-				for (int i= 0; i < patterns.length; i++) {
-					if (patterns[i].segmentCount() > 0) {
-						String pattern= BasicElementLabels.getPathLabel(patterns[i], false);
+				for (IPath p : patterns) {
+					if (p.segmentCount() > 0) {
+						String pattern= BasicElementLabels.getPathLabel(p, false);
 						if (patternsCount > 0) {
 							buf.append(NewWizardMessages.CPListLabelProvider_exclusion_filter_separator);
 						}
@@ -191,9 +191,9 @@
 			if (patterns != null && patterns.length > 0) {
 				int patternsCount= 0;
 				StringBuilder buf= new StringBuilder();
-				for (int i= 0; i < patterns.length; i++) {
-					if (patterns[i].segmentCount() > 0) {
-						String pattern= BasicElementLabels.getPathLabel(patterns[i], false);
+				for (IPath p : patterns) {
+					if (p.segmentCount() > 0) {
+						String pattern= BasicElementLabels.getPathLabel(p, false);
 						if (patternsCount > 0) {
 							buf.append(NewWizardMessages.CPListLabelProvider_inclusion_filter_separator);
 						}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/CPUserLibraryElement.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/CPUserLibraryElement.java
index 9549e68..fbc1e7c 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/CPUserLibraryElement.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/CPUserLibraryElement.java
@@ -92,9 +92,9 @@
 		fName= name;
 		fChildren= new ArrayList<>();
 		if (children != null) {
-			for (int i= 0; i < children.length; i++) {
-				children[i].setParentContainer(this);
-				fChildren.add(children[i]);
+			for (CPListElement child : children) {
+				child.setParentContainer(this);
+				fChildren.add(child);
 			}
 		}
 		fIsSystemLibrary= isSystemLibrary;
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathAttributeConfigurationDescriptors.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathAttributeConfigurationDescriptors.java
index 6f688e3..8692b66 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathAttributeConfigurationDescriptors.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathAttributeConfigurationDescriptors.java
@@ -115,9 +115,9 @@
 	private static HashMap<String, Descriptor> readExtensions() {
 		IConfigurationElement[] elements = Platform.getExtensionRegistry().getConfigurationElementsFor(JavaUI.ID_PLUGIN, ATT_EXTENSION);
 		HashMap<String, Descriptor> descriptors= new HashMap<>(elements.length * 2);
-		for (int i= 0; i < elements.length; i++) {
+		for (IConfigurationElement element : elements) {
 			try {
-				Descriptor curr= new Descriptor(elements[i]);
+				Descriptor curr= new Descriptor(element);
 				descriptors.put(curr.getKey(), curr);
 			} catch (CoreException e) {
 				JavaPlugin.log(e);
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathContainerDefaultPage.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathContainerDefaultPage.java
index a864097..0e30444 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathContainerDefaultPage.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathContainerDefaultPage.java
@@ -119,8 +119,7 @@
 
 	@Override
 	public void initialize(IJavaProject project, IClasspathEntry[] currentEntries) {
-		for (int i= 0; i < currentEntries.length; i++) {
-			IClasspathEntry curr= currentEntries[i];
+		for (IClasspathEntry curr : currentEntries) {
 			if (curr.getEntryKind() == IClasspathEntry.CPE_CONTAINER) {
 				fUsedPaths.add(curr.getPath());
 			}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathContainerDescriptor.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathContainerDescriptor.java
index 0a76286..2841025 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathContainerDescriptor.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathContainerDescriptor.java
@@ -115,10 +115,9 @@
 			ClasspathContainerDescriptor defaultPage= null;
 			String defaultPageName= ClasspathContainerDefaultPage.class.getName();
 
-			IConfigurationElement[] elements = extensionPoint.getConfigurationElements();
-			for (int i = 0; i < elements.length; i++) {
+			for (IConfigurationElement element : extensionPoint.getConfigurationElements()) {
 				try {
-					ClasspathContainerDescriptor curr= new ClasspathContainerDescriptor(elements[i]);
+					ClasspathContainerDescriptor curr= new ClasspathContainerDescriptor(element);
 					if (!WorkbenchActivityHelper.filterItem(curr)) {
 						if (defaultPageName.equals(curr.getPageClass())) {
 							defaultPage= curr;
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathContainerWizard.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathContainerWizard.java
index 2756876..fcfc8f8 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathContainerWizard.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathContainerWizard.java
@@ -178,9 +178,9 @@
 
 
 	private ClasspathContainerDescriptor findDescriptorPage(ClasspathContainerDescriptor[] containers, IClasspathEntry entry) {
-		for (int i = 0; i < containers.length; i++) {
-			if (containers[i].canEdit(entry)) {
-				return containers[i];
+		for (ClasspathContainerDescriptor container : containers) {
+			if (container.canEdit(entry)) {
+				return container;
 			}
 		}
 		return null;
@@ -189,9 +189,8 @@
 	@Override
 	public void dispose() {
 		if (fSelectionWizardPage != null) {
-			ClasspathContainerDescriptor[] descriptors= fSelectionWizardPage.getContainers();
-			for (int i= 0; i < descriptors.length; i++) {
-				descriptors[i].dispose();
+			for (ClasspathContainerDescriptor descriptor : fSelectionWizardPage.getContainers()) {
+				descriptor.dispose();
 			}
 		}
 		super.dispose();
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/CreateMultipleSourceFoldersDialog.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/CreateMultipleSourceFoldersDialog.java
index 81e996f..6388816 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/CreateMultipleSourceFoldersDialog.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/CreateMultipleSourceFoldersDialog.java
@@ -114,8 +114,7 @@
 		fInsertedElements= new HashSet<>();
 		fNonExistingFolders= new Hashtable<>();
 
-		for (int i= 0; i < existingElements.length; i++) {
-			CPListElement cur= existingElements[i];
+		for (CPListElement cur : existingElements) {
 			if (cur.getResource() == null || !cur.getResource().exists()) {
 				addFakeFolder(fJavaProject.getProject(), cur);
 			}
@@ -130,9 +129,9 @@
 		IProject[] allProjects= ResourcesPlugin.getWorkspace().getRoot().getProjects();
 		ArrayList<IProject> rejectedElements= new ArrayList<>(allProjects.length);
 		IProject currProject= fJavaProject.getProject();
-		for (int i= 0; i < allProjects.length; i++) {
-			if (!allProjects[i].equals(currProject)) {
-				rejectedElements.add(allProjects[i]);
+		for (IProject project : allProjects) {
+			if (!project.equals(currProject)) {
+				rejectedElements.add(project);
 			}
 		}
 		ViewerFilter filter= new TypedViewerFilter(acceptedClasses, rejectedElements.toArray()){
@@ -196,9 +195,8 @@
 		dialog.setInitialFocus(fJavaProject.getProject());
 
 		if (dialog.open() == Window.OK) {
-			Object[] elements= dialog.getResult();
-			for (int i= 0; i < elements.length; i++) {
-				IResource res= (IResource)elements[i];
+			for (Object element : dialog.getResult()) {
+				IResource res= (IResource) element;
 				fInsertedElements.add(new CPListElement(fJavaProject, IClasspathEntry.CPE_SOURCE, res.getFullPath(), res));
 			}
 
@@ -286,8 +284,8 @@
 
 	private List<IResource> getExistingContainers(CPListElement[] existingElements) {
 		List<IResource> res= new ArrayList<>();
-		for (int i= 0; i < existingElements.length; i++) {
-			IResource resource= existingElements[i].getResource();
+		for (CPListElement existingElement : existingElements) {
+			IResource resource= existingElement.getResource();
 			if (resource instanceof IContainer) {
 				res.add(resource);
 			}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/EditVariableEntryDialog.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/EditVariableEntryDialog.java
index c755e32..a94a90f 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/EditVariableEntryDialog.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/EditVariableEntryDialog.java
@@ -70,8 +70,7 @@
 
 		fExistingEntries= new HashSet<>();
 		if (existingEntries != null) {
-			for (int i = 0; i < existingEntries.length; i++) {
-				IPath curr= existingEntries[i];
+			for (IPath curr : existingEntries) {
 				if (!curr.equals(initialEntry)) {
 					fExistingEntries.add(curr);
 				}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ExclusionInclusionDialog.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ExclusionInclusionDialog.java
index 9dbb5d1..9f75e97 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ExclusionInclusionDialog.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ExclusionInclusionDialog.java
@@ -157,8 +157,8 @@
 		IPath[] pattern= (IPath[]) entryToEdit.getAttribute(key);
 
 		ArrayList<String> elements= new ArrayList<>(pattern.length);
-		for (int i= 0; i < pattern.length; i++) {
-			elements.add(pattern[i].toString());
+		for (IPath p : pattern) {
+			elements.add(p.toString());
 		}
 		patternList.setElements(elements);
 		patternList.selectFirstElement();
@@ -336,8 +336,8 @@
 
 		IPath[] res= ExclusionInclusionEntryDialog.chooseExclusionPattern(getShell(), fCurrSourceFolder, title, message, null, true);
 		if (res != null) {
-			for (int i= 0; i < res.length; i++) {
-				field.addElement(res[i].toString());
+			for (IPath p : res) {
+				field.addElement(p.toString());
 			}
 		}
 	}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/JARFileSelectionDialog.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/JARFileSelectionDialog.java
index e21d681..7ea5991 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/JARFileSelectionDialog.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/JARFileSelectionDialog.java
@@ -160,8 +160,8 @@
 				} else {
 					File[] listFiles= file.listFiles();
 					if (listFiles != null) {
-						for (int i= 0; i < listFiles.length; i++) {
-							if (select(viewer, file, listFiles[i])) {
+						for (File f : listFiles) {
+							if (select(viewer, file, f)) {
 								return true;
 							}
 						}
@@ -205,8 +205,7 @@
 			if (nSelected == 0 || (nSelected > 1 && !fMultiSelect)) {
 				return new StatusInfo(IStatus.ERROR, "");  //$NON-NLS-1$
 			}
-			for (int i= 0; i < selection.length; i++) {
-				Object curr= selection[i];
+			for (Object curr : selection) {
 				if (curr instanceof File) {
 					File file= (File) curr;
 					if (!fAcceptFolders && !file.isFile()) {
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/LibrariesWorkbookPage.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/LibrariesWorkbookPage.java
index 7e20739..83eef7a 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/LibrariesWorkbookPage.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/LibrariesWorkbookPage.java
@@ -19,7 +19,6 @@
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
@@ -641,10 +640,10 @@
 					final IJavaProject project= element.getJavaProject();
 					if (project != null) {
 						try {
-							final IPackageFragmentRoot[] roots= project.getPackageFragmentRoots();
-							for (int index= 0; index < roots.length; index++) {
-								if (entry.equals(roots[index].getRawClasspathEntry()))
-									return roots[index];
+							for (IPackageFragmentRoot root : project.getPackageFragmentRoots()) {
+								if (entry.equals(root.getRawClasspathEntry())) {
+									return root;
+								}
 							}
 						} catch (JavaModelException exception) {
 							JavaPlugin.log(exception);
@@ -705,8 +704,7 @@
 			}
 		
 		}
-		for (Iterator<Map.Entry<CPListElement, HashSet<String>>> iter= containerEntriesToUpdate.entrySet().iterator(); iter.hasNext();) {
-			Map.Entry<CPListElement, HashSet<String>> entry= iter.next();
+		for (Map.Entry<CPListElement, HashSet<String>> entry : containerEntriesToUpdate.entrySet()) {
 			CPListElement curr= entry.getKey();
 			HashSet<String> attribs= entry.getValue();
 			String[] changedAttributes= attribs.toArray(new String[attribs.size()]);
@@ -790,11 +788,10 @@
 		String key= elem.getKey();
 		CPListElement selElement= elem.getParent();
 
-		CPListElementAttribute[] allAttributes= selElement.getAllAttributes();
 		boolean canEditEncoding= false;
-		for (int i= 0; i < allAttributes.length; i++) {
-			if (CPListElement.SOURCE_ATTACHMENT_ENCODING.equals(allAttributes[i].getKey())) {
-				canEditEncoding= !(allAttributes[i].isNonModifiable() || allAttributes[i].isNotSupported());
+		for (CPListElementAttribute attribute : selElement.getAllAttributes()) {
+			if (CPListElement.SOURCE_ATTACHMENT_ENCODING.equals(attribute.getKey())) {
+				canEditEncoding= !(attribute.isNonModifiable() || attribute.isNotSupported());
 			}
 		}
 		if (key.equals(CPListElement.SOURCEATTACHMENT)) {
@@ -1116,9 +1113,7 @@
 		 	CPListElement ele= projelements.get(i);
 		 	// if root node, collect the CPList elements
 		 	if(ele.isRootNodeForPath()) {
-		 		ArrayList<Object> children= ((RootCPListElement)ele).getChildren();
-		 		for (Iterator<?> iterator= children.iterator(); iterator.hasNext();) {
-		 			Object object=  iterator.next();
+		 		for (Object object : ((RootCPListElement)ele).getChildren()) {
 		 			if(object instanceof CPListElement) {
 		 				flattenedProjElements.add((CPListElement) object);
 		 			}
@@ -1173,8 +1168,7 @@
 			if (selected != null) {
 				IWorkspaceRoot root= fCurrJProject.getProject().getWorkspace().getRoot();
 				ArrayList<CPListElement> res= new ArrayList<>();
-				for (int i= 0; i < selected.length; i++) {
-					IPath curr= selected[i];
+				for (IPath curr : selected) {
 					IResource resource= root.findMember(curr);
 					if (resource instanceof IContainer) {
 						CPListElement newCPLibraryElement= newCPLibraryElement(resource);
@@ -1198,8 +1192,7 @@
 			if (selected != null) {
 				ArrayList<CPListElement> res= new ArrayList<>();
 
-				for (int i= 0; i < selected.length; i++) {
-					IPath curr= selected[i];
+				for (IPath curr : selected) {
 					IResource resource= root.findMember(curr);
 					if (resource instanceof IFile) {
 						CPListElement newCPLibraryElement= newCPLibraryElement(resource);
@@ -1272,8 +1265,8 @@
 			IPath[] selected= BuildPathDialogAccess.chooseExternalJAREntries(getShell());
 			if (selected != null) {
 				ArrayList<CPListElement> res= new ArrayList<>();
-				for (int i= 0; i < selected.length; i++) {
-					CPListElement cpListElement= new CPListElement(fCurrJProject, IClasspathEntry.CPE_LIBRARY, selected[i], null);
+				for (IPath p : selected) {
+					CPListElement cpListElement= new CPListElement(fCurrJProject, IClasspathEntry.CPE_LIBRARY, p, null);
 					cpListElement.setModuleAttributeIf9OrHigher(fCurrJProject);
 					res.add(cpListElement);
 				}
@@ -1299,8 +1292,8 @@
 			IPath[] selected= BuildPathDialogAccess.chooseExternalClassFolderEntries(getShell());
 			if (selected != null) {
 				ArrayList<CPListElement> res= new ArrayList<>();
-				for (int i= 0; i < selected.length; i++) {
-					CPListElement cpListElement= new CPListElement(fCurrJProject, IClasspathEntry.CPE_LIBRARY, selected[i], null);
+				for (IPath p : selected) {
+					CPListElement cpListElement= new CPListElement(fCurrJProject, IClasspathEntry.CPE_LIBRARY, p, null);
 					cpListElement.setModuleAttributeIf9OrHigher(fCurrJProject);
 					res.add(cpListElement);
 				}
@@ -1330,8 +1323,7 @@
 			IPath[] paths= BuildPathDialogAccess.chooseVariableEntries(getShell(), existingPathsArray);
 			if (paths != null) {
 				ArrayList<CPListElement> result= new ArrayList<>();
-				for (int i= 0; i < paths.length; i++) {
-					IPath path= paths[i];
+				for (IPath path : paths) {
 					CPListElement elem= createCPVariableElement(path);
 					if (!existingElements.contains(elem)) {
 						elem.setModuleAttributeIf9OrHigher(fCurrJProject);
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ModuleAddExportsBlock.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ModuleAddExportsBlock.java
index 72e80c2..dfeee8b 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ModuleAddExportsBlock.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ModuleAddExportsBlock.java
@@ -145,9 +145,9 @@
 	private Set<String> moduleNames() {
 		Set<String> moduleNames= new HashSet<>();
 		if (fSourceJavaElements != null) {
-			for (int i= 0; i < fSourceJavaElements.length; i++) {
-				if (fSourceJavaElements[i] instanceof IPackageFragmentRoot) {
-					IModuleDescription module= ((IPackageFragmentRoot) fSourceJavaElements[i]).getModuleDescription();
+			for (IJavaElement element : fSourceJavaElements) {
+				if (element instanceof IPackageFragmentRoot) {
+					IModuleDescription module= ((IPackageFragmentRoot) element).getModuleDescription();
 					if (module != null) {
 						moduleNames.add(module.getElementName());
 					}
@@ -323,9 +323,10 @@
 					assert fSourceJavaElements.length == 1;
 					IPackageFragmentRoot[] packageFragmentRoots= ((IJavaProject) fSourceJavaElements[0]).getPackageFragmentRoots();
 					int count= 0;
-					for (int i= 0; i < packageFragmentRoots.length; i++) {
-						if (packageFragmentRoots[i].getKind() == IPackageFragmentRoot.K_SOURCE) // only the project's own sources
-							packageFragmentRoots[count++]= packageFragmentRoots[i];
+					for (IPackageFragmentRoot packageFragmentRoot : packageFragmentRoots) {
+						if (packageFragmentRoot.getKind() == IPackageFragmentRoot.K_SOURCE) {
+							packageFragmentRoots[count++]= packageFragmentRoot;
+						}
 					}
 					if (count < packageFragmentRoots.length)
 						packageFragmentRoots= Arrays.copyOf(packageFragmentRoots, count);
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ModuleAddReadsBlock.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ModuleAddReadsBlock.java
index 6d60ea1..f0f795d 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ModuleAddReadsBlock.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ModuleAddReadsBlock.java
@@ -114,9 +114,9 @@
 	private Set<String> moduleNames() {
 		Set<String> moduleNames= new HashSet<>();
 		if (fSourceJavaElements != null) {
-			for (int i= 0; i < fSourceJavaElements.length; i++) {
-				if (fSourceJavaElements[i] instanceof IPackageFragmentRoot) {
-					IModuleDescription module= ((IPackageFragmentRoot) fSourceJavaElements[i]).getModuleDescription();
+			for (IJavaElement element : fSourceJavaElements) {
+				if (element instanceof IPackageFragmentRoot) {
+					IModuleDescription module= ((IPackageFragmentRoot) element).getModuleDescription();
 					if (module != null) {
 						moduleNames.add(module.getElementName());
 					}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ModuleDependenciesPage.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ModuleDependenciesPage.java
index a914cce..26368fc 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ModuleDependenciesPage.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ModuleDependenciesPage.java
@@ -726,9 +726,9 @@
 				// no longer relevant, remove:
 				ModuleEncapsulationDetail[] details= (ModuleEncapsulationDetail[]) value;
 				int retainCount= 0;
-				for (int i= 0; i < details.length; i++) {
-					if (!(details[i] instanceof LimitModules)) {
-						details[retainCount++]= details[i];
+				for (ModuleEncapsulationDetail detail : details) {
+					if (!(detail instanceof LimitModules)) {
+						details[retainCount++]= detail;
 					}
 				}
 				if (retainCount < details.length)
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ModuleDialog.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ModuleDialog.java
index 052bc8c..be3b8c0 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ModuleDialog.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ModuleDialog.java
@@ -751,9 +751,10 @@
 		IClasspathAttribute[] oldAttributes= entry.getExtraAttributes();
 		IClasspathAttribute[] newAttributes= new IClasspathAttribute[oldAttributes.length];
 		int count= 0;
-		for (int i= 0; i < oldAttributes.length; i++) {
-			if (!oldAttributes[i].getName().equals(IClasspathAttribute.MODULE))
-				newAttributes[count++]= oldAttributes[i];
+		for (IClasspathAttribute oldAttribute : oldAttributes) {
+			if (!oldAttribute.getName().equals(IClasspathAttribute.MODULE)) {
+				newAttributes[count++]= oldAttribute;
+			}
 		}
 		if (count == oldAttributes.length)
 			return null;
@@ -766,25 +767,25 @@
 			return fModuleNames;
 		Set<String> moduleNames= new HashSet<>();
 		if (fJavaElements != null) {
-			for (int i= 0; i < fJavaElements.length; i++) {
-				if (fJavaElements[i] instanceof IPackageFragmentRoot) {
-					IModuleDescription module= ((IPackageFragmentRoot) fJavaElements[i]).getModuleDescription();
+			for (IJavaElement element : fJavaElements) {
+				if (element instanceof IPackageFragmentRoot) {
+					IModuleDescription module= ((IPackageFragmentRoot) element).getModuleDescription();
 					if (module != null) {
 						recordModule(module, moduleNames);
 					} else {
 						try {
-							recordModule(JavaCore.getAutomaticModuleDescription(fJavaElements[i]), moduleNames);
-						} catch (JavaModelException e) {
+							recordModule(JavaCore.getAutomaticModuleDescription(element), moduleNames);
+						}catch (JavaModelException e) {
 							JavaPlugin.log(e);
 						}
 					}
-				} else if (fJavaElements[i] instanceof IJavaProject) {
+				} else if (element instanceof IJavaProject) {
 					try {
-						IModuleDescription module= ((IJavaProject) fJavaElements[i]).getModuleDescription();
+						IModuleDescription module= ((IJavaProject) element).getModuleDescription();
 						if (module != null) {
 							recordModule(module, moduleNames);
 						} else {
-							recordModule(JavaCore.getAutomaticModuleDescription(fJavaElements[i]), moduleNames);
+							recordModule(JavaCore.getAutomaticModuleDescription(element), moduleNames);
 						}
 					} catch (JavaModelException e) {
 						JavaPlugin.log(e);
@@ -798,9 +799,9 @@
 	private List<String> defaultIncludedModuleNamesForUnnamedModule() {
 		if (fJavaElements != null) {
 			List<IPackageFragmentRoot> roots= new ArrayList<>();
-			for (int i= 0; i < fJavaElements.length; i++) {
-				if (fJavaElements[i] instanceof IPackageFragmentRoot) {
-					roots.add((IPackageFragmentRoot) fJavaElements[i]);
+			for (IJavaElement element : fJavaElements) {
+				if (element instanceof IPackageFragmentRoot) {
+					roots.add((IPackageFragmentRoot) element);
 				}
 			}
 			return JavaCore.defaultRootModules(roots);
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/NewContainerDialog.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/NewContainerDialog.java
index 422bcef..36985d7 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/NewContainerDialog.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/NewContainerDialog.java
@@ -143,8 +143,8 @@
 	}
 
 	private boolean isFolderExisting(IFolder folder) {
-		for (int i= 0; i < fExistingFolders.length; i++) {
-			if (folder.getFullPath().equals(fExistingFolders[i])) {
+		for (IPath existingFolder : fExistingFolders) {
+			if (folder.getFullPath().equals(existingFolder)) {
 				return true;
 			}
 		}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/NewVariableEntryDialog.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/NewVariableEntryDialog.java
index d6769a1..16c8b87 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/NewVariableEntryDialog.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/NewVariableEntryDialog.java
@@ -16,7 +16,6 @@
 import java.io.File;
 import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
@@ -167,8 +166,7 @@
 	private void initializeElements() {
 		String[] entries= JavaCore.getClasspathVariableNames();
 		ArrayList<CPVariableElement> elements= new ArrayList<>(entries.length);
-		for (int i= 0; i < entries.length; i++) {
-			String name= entries[i];
+		for (String name : entries) {
 			IPath entryPath= JavaCore.getClasspathVariable(name);
 			if (entryPath != null) {
 				elements.add(new CPVariableElement(name, entryPath));
@@ -286,8 +284,7 @@
 		if (fWarning == null || fWarning.isDisposed())
 			return;
 
-		for (Iterator<CPVariableElement> iter= fVariablesList.getSelectedElements().iterator(); iter.hasNext();) {
-			CPVariableElement element= iter.next();
+		for (CPVariableElement element : fVariablesList.getSelectedElements()) {
 			String deprecationMessage= element.getDeprecationMessage();
 			if (deprecationMessage != null) {
 				fWarning.setText(deprecationMessage);
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/OutputLocationDialog.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/OutputLocationDialog.java
index f3751fc..42c3c7e 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/OutputLocationDialog.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/OutputLocationDialog.java
@@ -231,9 +231,9 @@
 		final Class<?>[] acceptedClasses= new Class[] { IProject.class, IFolder.class };
 		IProject[] allProjects= root.getProjects();
 		ArrayList<IProject> rejectedElements= new ArrayList<>(allProjects.length);
-		for (int i= 0; i < allProjects.length; i++) {
-			if (!allProjects[i].equals(fCurrProject)) {
-				rejectedElements.add(allProjects[i]);
+		for (IProject project : allProjects) {
+			if (!project.equals(fCurrProject)) {
+				rejectedElements.add(project);
 			}
 		}
 		ViewerFilter filter= new TypedViewerFilter(acceptedClasses, rejectedElements.toArray());
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ProjectsWorkbookPage.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ProjectsWorkbookPage.java
index eb29807..c74ebfa 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ProjectsWorkbookPage.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ProjectsWorkbookPage.java
@@ -15,7 +15,6 @@
 
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Iterator;
 import java.util.List;
 
 import org.eclipse.swt.SWT;
@@ -297,9 +296,7 @@
 		 	CPListElement ele = projelements.get(i);
 		 	// if root node, collect the CPList elements
 		 	if(ele.isRootNodeForPath()) {
-		 		ArrayList<Object> children= ((RootCPListElement)ele).getChildren();
-		 		for (Iterator<?> iterator= children.iterator(); iterator.hasNext();) {
-		 			Object object=  iterator.next();
+		 		for (Object object : ((RootCPListElement)ele).getChildren()) {
 		 			if(object instanceof CPListElement) {
 		 				flattenedProjElements.add((CPListElement) object);
 		 			}
@@ -677,19 +674,14 @@
 		selectable.addAll(Arrays.asList(fCurrJProject.getJavaModel().getJavaProjects()));
 		selectable.remove(fCurrJProject);
 
-		List<CPListElement> elements= fProjectsList.getElements();
-		for (int i= 0; i < elements.size(); i++) {
-			CPListElement curr= elements.get(i);
+		for (CPListElement curr : fProjectsList.getElements()) {
 			if (curr.isRootNodeForPath()) {
-				ArrayList<Object> children= ((RootCPListElement)curr).getChildren();
-				for (Iterator<?> iterator= children.iterator(); iterator.hasNext();) {
-					Object object=  iterator.next();
+				for (Object object : ((RootCPListElement)curr).getChildren()) {
 					if(object instanceof CPListElement) {
 						CPListElement cpe = (CPListElement)object;
 						IJavaProject proj= (IJavaProject) JavaCore.create(cpe.getResource());
 						selectable.remove(proj);
 					}
-					
 				}
 			}
 			IJavaProject proj= (IJavaProject) JavaCore.create(curr.getResource());
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/SetFilterWizardPage.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/SetFilterWizardPage.java
index 9ee667a..0812899 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/SetFilterWizardPage.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/SetFilterWizardPage.java
@@ -188,8 +188,8 @@
 		IPath[] pattern= (IPath[]) entryToEdit.getAttribute(key);
 
 		ArrayList<String> elements= new ArrayList<>(pattern.length);
-		for (int i= 0; i < pattern.length; i++) {
-			String patternName= pattern[i].toString();
+		for (IPath p : pattern) {
+			String patternName= p.toString();
 			if (patternName.length() > 0)
 				elements.add(patternName);
 		}
@@ -354,8 +354,8 @@
 
 		IPath[] res= ExclusionInclusionEntryDialog.chooseExclusionPattern(getShell(), fCurrSourceFolder, title, message, null, true);
 		if (res != null) {
-			for (int i= 0; i < res.length; i++) {
-				field.addElement(res[i].toString());
+			for (IPath p : res) {
+				field.addElement(p.toString());
 			}
 		}
 	}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/SourceAttachmentBlock.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/SourceAttachmentBlock.java
index c7499e7..1834c4d 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/SourceAttachmentBlock.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/SourceAttachmentBlock.java
@@ -741,9 +741,7 @@
 			throw new IllegalArgumentException("Entry must be of kind CPE_LIBRARY or CPE_VARIABLE"); //$NON-NLS-1$
 		}
 
-		IClasspathAttribute[] extraAttributes= entry.getExtraAttributes();
-		for (int i= 0; i < extraAttributes.length; i++) {
-			IClasspathAttribute attrib= extraAttributes[i];
+		for (IClasspathAttribute attrib : entry.getExtraAttributes()) {
 			if (IClasspathAttribute.SOURCE_ATTACHMENT_ENCODING.equals(attrib.getName())) {
 				return attrib.getValue();
 			}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/SourceContainerWorkbookPage.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/SourceContainerWorkbookPage.java
index 3f75ff4..9e659f0 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/SourceContainerWorkbookPage.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/SourceContainerWorkbookPage.java
@@ -378,9 +378,8 @@
 	private boolean hasFolders(IContainer container) {
 
 		try {
-			IResource[] members= container.members();
-			for (int i= 0; i < members.length; i++) {
-				if (members[i] instanceof IContainer) {
+			for (IResource member : container.members()) {
+				if (member instanceof IContainer) {
 					return true;
 				}
 			}
@@ -511,9 +510,7 @@
 			for (Iterator<Object> iter= selElements.iterator(); iter.hasNext();) {
 				CPListElement element= (CPListElement)iter.next();
 				if (element.getEntryKind() == IClasspathEntry.CPE_SOURCE) {
-					List<CPListElement> list= ClasspathModifier.removeFilters(element.getPath(), fCurrJProject, fFoldersList.getElements());
-					for (Iterator<CPListElement> iterator= list.iterator(); iterator.hasNext();) {
-						CPListElement modified= iterator.next();
+					for (CPListElement modified : ClasspathModifier.removeFilters(element.getPath(), fCurrJProject, fFoldersList.getElements())) {
 						fFoldersList.refresh(modified);
 						fFoldersList.expandElement(modified, 3);
 					}
@@ -666,15 +663,13 @@
 
 	private void refresh(List<CPListElement> insertedElements, List<?> removedElements, List<CPListElement> modifiedElements, IPath outputLocation) {
 		fFoldersList.addElements(insertedElements);
-		for (Iterator<CPListElement> iter= insertedElements.iterator(); iter.hasNext();) {
-			CPListElement element= iter.next();
+		for (CPListElement element : insertedElements) {
 			fFoldersList.expandElement(element, 3);
 		}
 
 		fFoldersList.removeElements(removedElements);
 
-		for (Iterator<CPListElement> iter= modifiedElements.iterator(); iter.hasNext();) {
-			CPListElement element= iter.next();
+		for (CPListElement element : modifiedElements) {
 			fFoldersList.refresh(element);
 			fFoldersList.expandElement(element, 3);
 		}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/UserLibraryWizardPage.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/UserLibraryWizardPage.java
index 10d9904..93f4faa 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/UserLibraryWizardPage.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/UserLibraryWizardPage.java
@@ -131,8 +131,7 @@
 		Arrays.sort(names, Collator.getInstance());
 
 		ArrayList<CPUserLibraryElement> elements= new ArrayList<>(names.length);
-		for (int i= 0; i < names.length; i++) {
-			String curr= names[i];
+		for (String curr : names) {
 			IPath path= new Path(JavaCore.USER_LIBRARY_CONTAINER_ID).append(curr);
 			try {
 				IClasspathContainer container= JavaCore.getClasspathContainer(path, fProject);
@@ -334,8 +333,7 @@
 
 	@Override
 	public void initialize(IJavaProject project, IClasspathEntry[] currentEntries) {
-		for (int i= 0; i < currentEntries.length; i++) {
-			IClasspathEntry curr= currentEntries[i];
+		for (IClasspathEntry curr : currentEntries) {
 			if (curr.getEntryKind() == IClasspathEntry.CPE_CONTAINER) {
 				fUsedPaths.add(curr.getPath());
 			}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/VariableBlock.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/VariableBlock.java
index c023acd..14e400d 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/VariableBlock.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/VariableBlock.java
@@ -16,7 +16,6 @@
 import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Iterator;
 import java.util.List;
 
 import org.eclipse.swt.SWT;
@@ -227,8 +226,7 @@
 		if (fWarning == null || fWarning.isDisposed())
 			return;
 
-		for (Iterator<CPVariableElement> iter= fSelectedElements.iterator(); iter.hasNext();) {
-			CPVariableElement element= iter.next();
+		for (CPVariableElement element : fSelectedElements) {
 			String deprecationMessage= element.getDeprecationMessage();
 			if (deprecationMessage != null) {
 				fWarning.setText(deprecationMessage);
@@ -327,11 +325,8 @@
 	private boolean doesChangeRequireFullBuild(List<String> removed, List<String> changed) {
 		try {
 			IJavaModel model= JavaCore.create(ResourcesPlugin.getWorkspace().getRoot());
-			IJavaProject[] projects= model.getJavaProjects();
-			for (int i= 0; i < projects.length; i++) {
-				IClasspathEntry[] entries= projects[i].getRawClasspath();
-				for (int k= 0; k < entries.length; k++) {
-					IClasspathEntry curr= entries[k];
+			for (IJavaProject project : model.getJavaProjects()) {
+				for (IClasspathEntry curr : project.getRawClasspath()) {
 					if (curr.getEntryKind() == IClasspathEntry.CPE_VARIABLE) {
 						String var= curr.getPath().segment(0);
 						if (removed.contains(var) || changed.contains(var)) {
@@ -411,8 +406,7 @@
 
 		String[] entries= JavaCore.getClasspathVariableNames();
 		ArrayList<CPVariableElement> elements= new ArrayList<>(entries.length);
-		for (int i= 0; i < entries.length; i++) {
-			String name= entries[i];
+		for (String name : entries) {
 			CPVariableElement elem;
 			IPath entryPath= JavaCore.getClasspathVariable(name);
 			if (entryPath != null) {
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/AddLibraryToBuildpathAction.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/AddLibraryToBuildpathAction.java
index 0e065f3..764082d 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/AddLibraryToBuildpathAction.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/AddLibraryToBuildpathAction.java
@@ -129,8 +129,8 @@
 						pm.beginTask(NewWizardMessages.ClasspathModifier_Monitor_AddToBuildpath, 4);
 
 						List<CPListElement> addedEntries= new ArrayList<>();
-						for (int i= 0; i < selected.length; i++) {
-							addedEntries.add(CPListElement.create(selected[i], true, project));
+						for (IClasspathEntry entry : selected) {
+							addedEntries.add(CPListElement.create(entry, true, project));
 						}
 
 						pm.worked(1);
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/AddSelectedLibraryToBuildpathAction.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/AddSelectedLibraryToBuildpathAction.java
index 5579bc2..88ed5ed 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/AddSelectedLibraryToBuildpathAction.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/AddSelectedLibraryToBuildpathAction.java
@@ -130,8 +130,7 @@
 		List<CPListElement> addedEntries= new ArrayList<>();
 		try {
 			monitor.beginTask(NewWizardMessages.ClasspathModifier_Monitor_AddToBuildpath, 4);
-			for (int i= 0; i < resources.length; i++) {
-				IResource res= resources[i];
+			for (IFile res : resources) {
 				CPListElement cpListElement= new CPListElement(project, IClasspathEntry.CPE_LIBRARY, res.getFullPath(), res);
 				if(fForTestOnly) {
 					cpListElement.setAttribute(IClasspathAttribute.TEST, "true"); //$NON-NLS-1$
@@ -153,8 +152,7 @@
         	informListeners(delta);
 
 			List<IJavaElement> result= new ArrayList<>(addedEntries.size());
-			for (int i= 0; i < resources.length; i++) {
-				IResource res= resources[i];
+			for (IResource res : resources) {
 				IJavaElement elem= project.getPackageFragmentRoot(res);
 				if (elem != null) {
 					result.add(elem);
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/BuildpathModifierAction.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/BuildpathModifierAction.java
index 52643f3..d80b646 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/BuildpathModifierAction.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/BuildpathModifierAction.java
@@ -163,16 +163,15 @@
 
 		// get all the view and editor parts
 		List<IWorkbenchPart> parts= new ArrayList<>();
-		IWorkbenchPartReference refs[]= page.getViewReferences();
-		for (int i= 0; i < refs.length; i++) {
-			IWorkbenchPart part= refs[i].getPart(false);
+		for (IWorkbenchPartReference ref : page.getViewReferences()) {
+			IWorkbenchPart part= ref.getPart(false);
 			if (part != null)
 				parts.add(part);
 		}
-		refs= page.getEditorReferences();
-		for (int i= 0; i < refs.length; i++) {
-			if (refs[i].getPart(false) != null)
-				parts.add(refs[i].getPart(false));
+		for (IWorkbenchPartReference ref : page.getEditorReferences()) {
+			if (ref.getPart(false) != null) {
+				parts.add(ref.getPart(false));
+			}
 		}
 
 		Iterator<IWorkbenchPart> itr= parts.iterator();
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ClasspathModifierDropDownAction.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ClasspathModifierDropDownAction.java
index b5da4a1..c1b4bd2 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ClasspathModifierDropDownAction.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ClasspathModifierDropDownAction.java
@@ -15,7 +15,6 @@
 package org.eclipse.jdt.internal.ui.wizards.buildpaths.newsourcepage;
 
 import java.util.ArrayList;
-import java.util.Iterator;
 import java.util.List;
 
 import org.eclipse.swt.widgets.Control;
@@ -154,16 +153,15 @@
     }
 
 	private void update() {
-		for (Iterator<BuildpathModifierAction> iterator= fActions.iterator(); iterator.hasNext();) {
-	        BuildpathModifierAction action= iterator.next();
-	        if (action.isEnabled()) {
-	        	if (action != fFirstValidAction) {
-	        		updateButton(action);
-	        	}
-	        	fFirstValidAction= action;
-	        	return;
-	        }
-        }
+		for (BuildpathModifierAction action : fActions) {
+			if (action.isEnabled()) {
+				if (action != fFirstValidAction) {
+					updateButton(action);
+				}
+				fFirstValidAction= action;
+				return;
+			}
+		}
 		if (fFirstValidAction != null) {
 			if (fActions.size() > 0) {
 				updateButton(fActions.get(0));
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/EditFilterAction.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/EditFilterAction.java
index 491f015..faf92a2 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/EditFilterAction.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/EditFilterAction.java
@@ -145,8 +145,7 @@
 
 	private static CPListElement findElement(IJavaElement element, CPListElement[] elements) {
 		IPath path= element.getPath();
-		for (int i= 0; i < elements.length; i++) {
-			CPListElement cur= elements[i];
+		for (CPListElement cur : elements) {
 			if (cur.getEntryKind() == IClasspathEntry.CPE_SOURCE && cur.getPath().equals(path)) {
 				return cur;
 			}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/EditOutputFolderAction.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/EditOutputFolderAction.java
index 75c8f01..e7c4e88 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/EditOutputFolderAction.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/EditOutputFolderAction.java
@@ -181,13 +181,12 @@
 	}
 
 	private IFolder getOldOutputFolder(final BuildpathDelta delta) {
-	    IResource[] deletedResources= delta.getDeletedResources();
 	    List<IResource> existingFolders= new ArrayList<>();
-	    for (int i= 0; i < deletedResources.length; i++) {
-	        if (deletedResources[i] instanceof IFolder && deletedResources[i].exists()) {
-	        	existingFolders.add(deletedResources[i]);
-	        }
-	    }
+		for (IResource deletedResource : delta.getDeletedResources()) {
+			if (deletedResource instanceof IFolder && deletedResource.exists()) {
+				existingFolders.add(deletedResource);
+			}
+		}
 	    if (existingFolders.size() > 0) {
 	    	if (existingFolders.size() > 1) {
 	    		String message= "Found more then one existing folders:"; //$NON-NLS-1$
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/RemoveFromBuildpathAction.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/RemoveFromBuildpathAction.java
index d05d054..6c8642b 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/RemoveFromBuildpathAction.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/RemoveFromBuildpathAction.java
@@ -138,8 +138,7 @@
 						CPJavaProject cpProject= CPJavaProject.createFromExisting(project);
 						CPListElement[] toRemove= new CPListElement[elementsToRemove.size()];
 						int i= 0;
-						for (Iterator<Object> iterator= elementsToRemove.iterator(); iterator.hasNext();) {
-							Object element= iterator.next();
+						for (Object element : elementsToRemove) {
 							if (element instanceof IJavaProject) {
 								toRemove[i]= ClasspathModifier.getListElement(((IJavaProject)element).getPath(), cpProject.getCPListElements());
 							} else if (element instanceof IPackageFragmentRoot) {
@@ -147,8 +146,8 @@
 							} else {
 								toRemove[i]= CPListElement.createFromExisting(((ClassPathContainer)element).getClasspathEntry(), project);
 							}
-	                        i++;
-                        }
+							i++;
+						}
 
 						BuildpathDelta delta= ClasspathModifier.removeFromBuildpath(toRemove, cpProject);
 						ClasspathModifier.commitClassPath(cpProject, new SubProgressMonitor(monitor, 10));
@@ -200,8 +199,7 @@
 
 	private void queryToRemoveLinkedFolders(final List<Object> elementsToRemove, final List<IFolder> foldersToDelete) throws JavaModelException {
 		final Shell shell= getShell();
-		for (Iterator<?> iter= getSelectedElements().iterator(); iter.hasNext();) {
-			Object element= iter.next();
+		for (Object element : getSelectedElements()) {
 			if (element instanceof IPackageFragmentRoot) {
 				IFolder folder= getLinkedSourceFolder((IPackageFragmentRoot)element);
 				if (folder != null) {
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ResetAllAction.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ResetAllAction.java
index 8a4322b..c23251e 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ResetAllAction.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ResetAllAction.java
@@ -14,7 +14,6 @@
 package org.eclipse.jdt.internal.ui.wizards.buildpaths.newsourcepage;
 
 import java.lang.reflect.InvocationTargetException;
-import java.util.Iterator;
 import java.util.List;
 
 import org.eclipse.core.runtime.CoreException;
@@ -127,11 +126,10 @@
 	        			fJavaProject.setOutputLocation(fOutputLocation, monitor);
 	        			delta.setDefaultOutputLocation(fOutputLocation);
 
-	        			for (Iterator<IResource> iterator= fProvider.getCreatedResources().iterator(); iterator.hasNext();) {
-	                        IResource resource= iterator.next();
-	                        resource.delete(false, null);
-	                        delta.addDeletedResource(resource);
-                        }
+						for (IResource resource : fProvider.getCreatedResources()) {
+							resource.delete(false, null);
+							delta.addDeletedResource(resource);
+						}
 
 	        			fProvider.resetCreatedResources();
 
@@ -178,12 +176,11 @@
             return true;
 
         int i= 0;
-        for (Iterator<CPListElement> iterator= fEntries.iterator(); iterator.hasNext();) {
-	        CPListElement oldEntrie= iterator.next();
-	        if (!oldEntrie.getClasspathEntry().equals(currentEntries[i]))
-	        	return true;
-	        i++;
-        }
+		for (CPListElement oldEntry : fEntries) {
+			if (!oldEntry.getClasspathEntry().equals(currentEntries[i]))
+				return true;
+			i++;
+		}
         return false;
 	}
 }
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ResetAllOutputFoldersAction.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ResetAllOutputFoldersAction.java
index 3337bbf..368efe4 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ResetAllOutputFoldersAction.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ResetAllOutputFoldersAction.java
@@ -99,9 +99,8 @@
 			IPackageFragmentRoot[] roots= project.getPackageFragmentRoots();
 			monitor.beginTask(NewWizardMessages.ClasspathModifier_Monitor_ResetOutputFolder, roots.length + 10);
 			List<CPListElementAttribute> entries= new ArrayList<>();
-			for (int i= 0; i < roots.length; i++) {
+			for (IPackageFragmentRoot root : roots) {
 				monitor.worked(1);
-				IPackageFragmentRoot root= roots[i];
 				if (root.isArchive() || root.isExternal())
 					continue;
 				IClasspathEntry entry= root.getRawClasspathEntry();
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/CheckedListDialogField.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/CheckedListDialogField.java
index 3504fd4..e98f337 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/CheckedListDialogField.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/CheckedListDialogField.java
@@ -141,8 +141,8 @@
 			// workaround for bug 53853
 			Object[] checked= ((CheckboxTableViewer) fTable).getCheckedElements();
 			ArrayList<E> res= new ArrayList<>(checked.length);
-			for (int i= 0; i < checked.length; i++) {
-				res.add((E) checked[i]);
+			for (Object c : checked) {
+				res.add((E) c);
 			}
 			return res;
 		}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/LayoutUtil.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/LayoutUtil.java
index 79029a9..f372e28 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/LayoutUtil.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/LayoutUtil.java
@@ -29,8 +29,8 @@
 	 */
 	public static int getNumberOfColumns(DialogField[] editors) {
 		int nCulumns= 0;
-		for (int i= 0; i < editors.length; i++) {
-			nCulumns= Math.max(editors[i].getNumberOfControls(), nCulumns);
+		for (DialogField editor : editors) {
+			nCulumns= Math.max(editor.getNumberOfControls(), nCulumns);
 		}
 		return nCulumns;
 	}
@@ -76,8 +76,8 @@
 	}
 
 	private static void modifyLabelSpans(Control[][] controls, int nCulumns) {
-		for (int i= 0; i < controls.length; i++) {
-			setHorizontalSpan(controls[i][0], nCulumns);
+		for (Control[] control : controls) {
+			setHorizontalSpan(control[0], nCulumns);
 		}
 	}
 
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/SelectionButtonDialogField.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/SelectionButtonDialogField.java
index aba7bae..e39ff4d 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/SelectionButtonDialogField.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/SelectionButtonDialogField.java
@@ -59,8 +59,8 @@
 	 */
 	public void attachDialogFields(DialogField[] dialogFields) {
 		fAttachedDialogFields= dialogFields;
-		for (int i= 0; i < dialogFields.length; i++) {
-			dialogFields[i].setEnabled(fIsSelected);
+		for (DialogField dialogField : dialogFields) {
+			dialogField.setEnabled(fIsSelected);
 		}
 	}
 
@@ -69,8 +69,8 @@
 	 */
 	public boolean isAttached(DialogField editor) {
 		if (fAttachedDialogFields != null) {
-			for (int i=0; i < fAttachedDialogFields.length; i++) {
-				if (fAttachedDialogFields[i] == editor) {
+			for (DialogField dialogField : fAttachedDialogFields) {
+				if (dialogField == editor) {
 					return true;
 				}
 			}
@@ -171,10 +171,10 @@
 			fIsSelected= newState;
 			if (fAttachedDialogFields != null) {
 				boolean focusSet= false;
-				for (int i= 0; i < fAttachedDialogFields.length; i++) {
-					fAttachedDialogFields[i].setEnabled(fIsSelected);
+				for (DialogField dialogField : fAttachedDialogFields) {
+					dialogField.setEnabled(fIsSelected);
 					if (fIsSelected && !focusSet) {
-						focusSet= fAttachedDialogFields[i].setFocus();
+						focusSet= dialogField.setFocus();
 					}
 				}
 			}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/AbstractWorkingSetWizardPage.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/AbstractWorkingSetWizardPage.java
index e5d28b1..8eb573a 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/AbstractWorkingSetWizardPage.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/AbstractWorkingSetWizardPage.java
@@ -330,9 +330,8 @@
 		addAllButton.addSelectionListener(new SelectionAdapter() {
 			@Override
 			public void widgetSelected(SelectionEvent e) {
-				TreeItem[] items= fTree.getTree().getItems();
-				for (int i= 0; i < items.length; i++) {
-					fSelectedElements.add(items[i].getData());
+				for (TreeItem item : fTree.getTree().getItems()) {
+					fSelectedElements.add(item.getData());
 				}
 				fTable.refresh();
 				fTree.refresh();
@@ -381,8 +380,8 @@
 		fTable.remove(selectedElements);
 		try {
 			fTree.getTree().setRedraw(false);
-			for (int i= 0; i < selectedElements.length; i++) {
-				fTree.refresh(fTreeContentProvider.getParent(selectedElements[i]), true);
+			for (Object selectedElement : selectedElements) {
+				fTree.refresh(fTreeContentProvider.getParent(selectedElement), true);
 			}
 		} finally {
 			fTree.getTree().setRedraw(true);
@@ -461,22 +460,21 @@
 			fWorkingSet.setId(getPageId());
 		} else {
 			// Add inaccessible resources
-			IAdaptable[] oldItems= fWorkingSet.getElements();
 			HashSet<IProject> closedProjectsToRetain= new HashSet<>(elements.size());
 			HashSet<IProject> closedProjectsToRemove= new HashSet<>(elements.size());
-			for (int i= 0; i < oldItems.length; i++) {
+			for (IAdaptable oldItem : fWorkingSet.getElements()) {
 				IResource oldResource= null;
-				if (oldItems[i] instanceof IResource) {
-					oldResource= (IResource) oldItems[i];
+				if (oldItem instanceof IResource) {
+					oldResource= (IResource) oldItem;
 				} else {
-					oldResource= oldItems[i].getAdapter(IResource.class);
+					oldResource= oldItem.getAdapter(IResource.class);
 				}
 				if (oldResource != null && oldResource.isAccessible() == false) {
 					IProject project= oldResource.getProject();
 					if (oldResource.equals(project)) {
 						closedProjectsToRetain.add(project);
-					} else	if (elements.contains(project)) {
-						elements.add(oldItems[i]);
+					} else if (elements.contains(project)) {
+						elements.add(oldItem);
 						closedProjectsToRemove.add(project);
 					}
 				}
@@ -508,9 +506,8 @@
 		fFirstCheck= false;
 
 		if (errorMessage == null && (fWorkingSet == null || newText.equals(fWorkingSet.getName()) == false)) {
-			IWorkingSet[] workingSets= PlatformUI.getWorkbench().getWorkingSetManager().getWorkingSets();
-			for (int i= 0; i < workingSets.length; i++) {
-				if (newText.equals(workingSets[i].getName())) {
+			for (IWorkingSet workingSet : PlatformUI.getWorkbench().getWorkingSetManager().getWorkingSets()) {
+				if (newText.equals(workingSet.getName())) {
 					errorMessage= WorkingSetMessages.JavaWorkingSetPage_warning_workingSetExists;
 				}
 			}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/ConfigureWorkingSetAssignementAction.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/ConfigureWorkingSetAssignementAction.java
index 080f425..0a5d36e 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/ConfigureWorkingSetAssignementAction.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/ConfigureWorkingSetAssignementAction.java
@@ -488,8 +488,8 @@
 
 		protected void addNewWorkingSet(IWorkingSet workingSet) {
 			int checkCount= 0;
-			for (int i= 0; i < fElements.length; i++) {
-				IAdaptable adapted= adapt(workingSet, fElements[i]);
+			for (IAdaptable element : fElements) {
+				IAdaptable adapted= adapt(workingSet, element);
 				if (adapted != null && contains(workingSet, adapted)) {
 					checkCount++;
 				}
@@ -563,9 +563,9 @@
 
 		private void recalculateCheckedState(List<IWorkingSet> addedWorkingSets) {
 			Set<IWorkingSet> checkedWorkingSets= new HashSet<>();
-			GrayedCheckedModelElement[] elements= fModel.getChecked();
-			for (int i= 0; i < elements.length; i++)
-				checkedWorkingSets.add(elements[i].getWorkingSet());
+			for (GrayedCheckedModelElement element : fModel.getChecked()) {
+				checkedWorkingSets.add(element.getWorkingSet());
+			}
 
 			if (addedWorkingSets != null)
 				checkedWorkingSets.addAll(addedWorkingSets);
@@ -618,9 +618,7 @@
 		if (selection.isEmpty())
 			return false;
 
-		List<?> list= selection.toList();
-		for (Iterator<?> iterator= list.iterator(); iterator.hasNext();) {
-			Object object= iterator.next();
+		for (Object object : selection.toList()) {
 			if (!(object instanceof IResource) && !(object instanceof IJavaElement))
 				return false;
 		}
@@ -631,9 +629,7 @@
 	private IAdaptable[] getSelectedElements(IStructuredSelection selection) {
 		ArrayList<Object> result= new ArrayList<>();
 
-		List<?> list= selection.toList();
-		for (Iterator<?> iterator= list.iterator(); iterator.hasNext();) {
-			Object object= iterator.next();
+		for (Object object : selection.toList()) {
 			if (object instanceof IResource || object instanceof IJavaElement) {
 				result.add(object);
 			}
@@ -673,9 +669,9 @@
 			IWorkingSet workingSet= workingSets[i];
 			
 			int checkCount= 0;
-			for (int j= 0; j < elements.length; j++) {
+			for (IAdaptable element : elements) {
 				if (checkedWorkingSets == null) {
-					IAdaptable adapted= adapt(workingSet, elements[j]);
+					IAdaptable adapted= adapt(workingSet, element);
 					if (adapted != null && contains(workingSet, adapted))
 						checkCount++;
 				} else {
@@ -693,26 +689,22 @@
 	private void updateWorkingSets(IWorkingSet[] newWorkingSets, IWorkingSet[] grayedWorkingSets, IAdaptable[] elements) {
 		HashSet<IWorkingSet> selectedSets= new HashSet<>(Arrays.asList(newWorkingSets));
 		HashSet<IWorkingSet> grayedSets= new HashSet<>(Arrays.asList(grayedWorkingSets));
-		IWorkingSet[] workingSets= getAllWorkingSets();
-
-		for (int i= 0; i < workingSets.length; i++) {
-			IWorkingSet workingSet= workingSets[i];
+		
+		for (IWorkingSet workingSet : getAllWorkingSets()) {
 			if (isValidWorkingSet(workingSet) && !selectedSets.contains(workingSet) && !grayedSets.contains(workingSet)) {
-				for (int j= 0; j < elements.length; j++) {
-					IAdaptable adapted= adapt(workingSet, elements[j]);
+				for (IAdaptable element : elements) {
+					IAdaptable adapted= adapt(workingSet, element);
 					if (adapted != null && contains(workingSet, adapted)) {
 						remove(workingSet, adapted);
 					}
 				}
 			}
 		}
-
-		for (int i= 0; i < newWorkingSets.length; i++) {
-			IWorkingSet set= newWorkingSets[i];
+		for (IWorkingSet set : newWorkingSets) {
 			if (isValidWorkingSet(set) && !grayedSets.contains(set)) {
 				boolean checkForYetHiddenWorkingSet= false;
-				for (int j= 0; j < elements.length; j++) {
-					IAdaptable adapted= adapt(set, elements[j]);
+				for (IAdaptable element : elements) {
+					IAdaptable adapted= adapt(set, element);
 					if (adapted != null && !contains(set, adapted)) {
 						add(set, adapted);
 						checkForYetHiddenWorkingSet= true;
@@ -784,9 +776,10 @@
 		if (!set.isEditable())
 			return false;
 
-		for (int i= 0; i < VALID_WORKING_SET_IDS.length; i++) {
-			if (VALID_WORKING_SET_IDS[i].equals(set.getId()))
+		for (String v : VALID_WORKING_SET_IDS) {
+			if (v.equals(set.getId())) {
 				return true;
+			}
 		}
 
 		return false;
@@ -803,10 +796,10 @@
 	}
 
 	private static boolean contains(IWorkingSet set, IAdaptable adaptedElement) {
-		IAdaptable[] elements= set.getElements();
-		for (int i= 0; i < elements.length; i++) {
-			if (elements[i].equals(adaptedElement))
+		for (IAdaptable element : set.getElements()) {
+			if (element.equals(adaptedElement)) {
 				return true;
+			}
 		}
 
 		return false;
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/DynamicSourcesWorkingSetUpdater.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/DynamicSourcesWorkingSetUpdater.java
index 0b26040..435587c 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/DynamicSourcesWorkingSetUpdater.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/DynamicSourcesWorkingSetUpdater.java
@@ -201,12 +201,9 @@
 			IJavaModel model= JavaCore.create(root);
 			List<IAdaptable> testResult= new ArrayList<>();
 			List<IAdaptable> mainResult= new ArrayList<>();
-			IJavaProject[] jProjects= model.getJavaProjects();
-			for (int i= 0; i < jProjects.length; i++) {
+			for (IJavaProject project : model.getJavaProjects()) {
 				if (monitor.isCanceled() || isDisposed.get())
 					return Status.CANCEL_STATUS;
-
-				final IJavaProject project= jProjects[i];
 				if (project.getProject().isOpen()) {
 					for (IPackageFragmentRoot iPackageFragmentRoot : project.getPackageFragmentRoots()) {
 						IClasspathEntry classpathEntry= iPackageFragmentRoot.getRawClasspathEntry();
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/JavaWorkingSetElementAdapter.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/JavaWorkingSetElementAdapter.java
index 3b3c9c9..b55f3ef 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/JavaWorkingSetElementAdapter.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/JavaWorkingSetElementAdapter.java
@@ -34,8 +34,7 @@
 	public IAdaptable[] adaptElements(IWorkingSet ws, IAdaptable[] elements) {
 		ArrayList<Object> result= new ArrayList<>(elements.length);
 
-		for (int i= 0; i < elements.length; i++) {
-			IAdaptable curr= elements[i];
+		for (IAdaptable curr : elements) {
 			if (curr instanceof IJavaElement) {
 				result.add(curr);
 			} else if (curr instanceof IResource) {
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/JavaWorkingSetPage.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/JavaWorkingSetPage.java
index 9ce329b..3560e93 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/JavaWorkingSetPage.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/JavaWorkingSetPage.java
@@ -126,8 +126,8 @@
 			try {
 				tree.getTree().setRedraw(false);
 
-				for (int i= 0; i < selection.length; i++) {
-					tree.expandToLevel(selection[i], 0);
+				for (Object s : selection) {
+					tree.expandToLevel(s, 0);
 				}
 				tree.setSelection(new StructuredSelection(selection));
 			} finally {
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/JavaWorkingSetUpdater.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/JavaWorkingSetUpdater.java
index 315c188..6904ee1 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/JavaWorkingSetUpdater.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/JavaWorkingSetUpdater.java
@@ -118,13 +118,13 @@
 		synchronized(fWorkingSets) {
 			workingSets= fWorkingSets.toArray(new IWorkingSet[fWorkingSets.size()]);
 		}
-		for (int w= 0; w < workingSets.length; w++) {
-			WorkingSetDelta workingSetDelta= new WorkingSetDelta(workingSets[w]);
+		for (IWorkingSet workingSet : workingSets) {
+			WorkingSetDelta workingSetDelta= new WorkingSetDelta(workingSet);
 			processJavaDelta(workingSetDelta, event.getDelta());
 			IResourceDelta[] resourceDeltas= event.getDelta().getResourceDeltas();
 			if (resourceDeltas != null) {
-				for (int r= 0; r < resourceDeltas.length; r++) {
-					processResourceDelta(workingSetDelta, resourceDeltas[r]);
+				for (IResourceDelta resourceDelta : resourceDeltas) {
+					processResourceDelta(workingSetDelta, resourceDelta);
 				}
 			}
 			workingSetDelta.process();
@@ -157,13 +157,12 @@
 		}
 		IResourceDelta[] resourceDeltas= delta.getResourceDeltas();
 		if (resourceDeltas != null) {
-			for (int i= 0; i < resourceDeltas.length; i++) {
-				processResourceDelta(result, resourceDeltas[i]);
+			for (IResourceDelta resourceDelta : resourceDeltas) {
+				processResourceDelta(result, resourceDelta);
 			}
 		}
-		IJavaElementDelta[] children= delta.getAffectedChildren();
-		for (int i= 0; i < children.length; i++) {
-			processJavaDelta(result, children[i]);
+		for (IJavaElementDelta child : delta.getAffectedChildren()) {
+			processJavaDelta(result, child);
 		}
 	}
 
@@ -191,9 +190,8 @@
 		if (projectGotClosedOrOpened(resource, kind, flags))
 			return;
 
-		IResourceDelta[] children= delta.getAffectedChildren();
-		for (int i= 0; i < children.length; i++) {
-			processResourceDelta(result, children[i]);
+		for (IResourceDelta child : delta.getAffectedChildren()) {
+			processResourceDelta(result, child);
 		}
 	}
 
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/OthersWorkingSetUpdater.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/OthersWorkingSetUpdater.java
index 7503a18..e66ada3 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/OthersWorkingSetUpdater.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/OthersWorkingSetUpdater.java
@@ -65,9 +65,7 @@
 			if (affectedChildren.length > 0) {
 				updateElements();
 			} else {
-				affectedChildren= delta.getAffectedChildren(IResourceDelta.CHANGED, IResource.PROJECT);
-				for (int i= 0; i < affectedChildren.length; i++) {
-					IResourceDelta projectDelta= affectedChildren[i];
+				for (IResourceDelta projectDelta : delta.getAffectedChildren(IResourceDelta.CHANGED, IResource.PROJECT)) {
 					if ((projectDelta.getFlags() & IResourceDelta.DESCRIPTION) != 0) {
 						updateElements();
 						// one is enough
@@ -122,9 +120,8 @@
 				// don't visit below projects
 				return;
 			}
-			IJavaElementDelta[] children= delta.getAffectedChildren();
-			for (int i= 0; i < children.length; i++) {
-				processJavaDelta(elements, children[i]);
+			for (IJavaElementDelta child : delta.getAffectedChildren()) {
+				processJavaDelta(elements, child);
 			}
 		}
 	}
@@ -176,15 +173,13 @@
 	public void updateElements() {
 		Assert.isTrue(fWorkingSet != null && fWorkingSetModel != null); // init and addWorkingSet have happend
 
-		IWorkingSet[] activeWorkingSets= fWorkingSetModel.getActiveWorkingSets();
-
 		List<IAdaptable> result= new ArrayList<>();
 		Set<IResource> projects= new HashSet<>();
-		for (int i= 0; i < activeWorkingSets.length; i++) {
-			if (activeWorkingSets[i] == fWorkingSet) continue;
-			IAdaptable[] elements= activeWorkingSets[i].getElements();
-			for (int j= 0; j < elements.length; j++) {
-				IAdaptable element= elements[j];
+		for (IWorkingSet activeWorkingSet : fWorkingSetModel.getActiveWorkingSets()) {
+			if (activeWorkingSet == fWorkingSet) {
+				continue;
+			}
+			for (IAdaptable element : activeWorkingSet.getElements()) {
 				IResource resource= element.getAdapter(IResource.class);
 				if (resource != null && resource.getType() == IResource.PROJECT) {
 					projects.add(resource);
@@ -193,15 +188,15 @@
 		}
 		IJavaModel model= JavaCore.create(ResourcesPlugin.getWorkspace().getRoot());
 		try {
-			IJavaProject[] jProjects= model.getJavaProjects();
-			for (int i= 0; i < jProjects.length; i++) {
-				if (!projects.contains(jProjects[i].getProject()))
-					result.add(jProjects[i]);
+			for (IJavaProject jProject : model.getJavaProjects()) {
+				if (!projects.contains(jProject.getProject())) {
+					result.add(jProject);
+				}
 			}
-			Object[] rProjects= model.getNonJavaResources();
-			for (int i= 0; i < rProjects.length; i++) {
-				if (!projects.contains(rProjects[i]))
-					result.add((IProject) rProjects[i]);
+			for (Object rProject : model.getNonJavaResources()) {
+				if (!projects.contains(rProject)) {
+					result.add((IProject) rProject);
+				}
 			}
 		} catch (JavaModelException e) {
 			JavaPlugin.log(e);
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/RemoveWorkingSetElementAction.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/RemoveWorkingSetElementAction.java
index 89a7f54..e98caa8 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/RemoveWorkingSetElementAction.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/RemoveWorkingSetElementAction.java
@@ -15,8 +15,6 @@
 
 import java.util.Arrays;
 import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
 
 import org.eclipse.core.runtime.IAdaptable;
 
@@ -46,10 +44,8 @@
 		if (!(selection instanceof ITreeSelection))
 			return null;
 		ITreeSelection treeSelection= (ITreeSelection)selection;
-		List<?> elements= treeSelection.toList();
 		IWorkingSet result= null;
-		for (Iterator<?> iter= elements.iterator(); iter.hasNext();) {
-			Object element= iter.next();
+		for (Object element : treeSelection.toList()) {
 			TreePath[] paths= treeSelection.getPathsFor(element);
 			if (paths.length != 1)
 				return null;
@@ -75,9 +71,7 @@
 		if (ws == null)
 			return;
 		HashSet<IAdaptable> elements= new HashSet<>(Arrays.asList(ws.getElements()));
-		List<?> selectedElements= selection.toList();
-		for (Iterator<?> iter= selectedElements.iterator(); iter.hasNext();) {
-			Object object= iter.next();
+		for (Object object : selection.toList()) {
 			if (object instanceof IAdaptable) {
 				IAdaptable[] adaptedElements= ws.adaptElements(new IAdaptable[] {(IAdaptable)object});
 				if (adaptedElements.length == 1) {
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetConfigurationDialog.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetConfigurationDialog.java
index 5ada818..dd566b4 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetConfigurationDialog.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetConfigurationDialog.java
@@ -462,9 +462,8 @@
 				if (fAddedWorkingSets.contains(workingSet)) {
 					fAddedWorkingSets.remove(workingSet);
 				} else {
-					IWorkingSet[] recentWorkingSets= manager.getRecentWorkingSets();
-					for (int i= 0; i < recentWorkingSets.length; i++) {
-						if (workingSet.equals(recentWorkingSets[i])) {
+					for (IWorkingSet recentWorkingSet : manager.getRecentWorkingSets()) {
+						if (workingSet.equals(recentWorkingSet)) {
 							fRemovedMRUWorkingSets.add(workingSet);
 							break;
 						}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetFilter.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetFilter.java
index 9d3d1bb..355a54b 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetFilter.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetFilter.java
@@ -234,17 +234,16 @@
 	public boolean isEnclosing(IAdaptable a) {
 		WorkingSetCompareEntry curr= new WorkingSetCompareEntry(a);
 		if (fCachedCompareEntries != null) {
-			for (int i= 0; i < fCachedCompareEntries.length; i++) {
-				if (fCachedCompareEntries[i].contains(curr)) {
+			for (WorkingSetCompareEntry entry : fCachedCompareEntries) {
+				if (entry.contains(curr)) {
 					return  true;
 				}
 			}
 			return false;
 		}
 		if (fWorkingSet != null) {
-			IAdaptable[] elements= fWorkingSet.getElements();
-			for (int i= 0; i < elements.length; i++) {
-				if (new WorkingSetCompareEntry(elements[i]).contains(curr)) {
+			for (IAdaptable element : fWorkingSet.getElements()) {
+				if (new WorkingSetCompareEntry(element).contains(curr)) {
 					return true;
 				}
 			}
@@ -254,9 +253,8 @@
 
 	private boolean isEnclosing(PackageFragmentRootContainer container) {
 		// check whether the containing package fragment roots are enclosed
-		IAdaptable[] roots= container.getChildren();
-		for (int i= 0; i < roots.length; i++) {
-			if (isEnclosing(roots[i])) {
+		for (IAdaptable root : container.getChildren()) {
+			if (isEnclosing(root)) {
 				return true;
 			}
 		}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetFilterActionGroup.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetFilterActionGroup.java
index 33b2a43..daa3238 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetFilterActionGroup.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetFilterActionGroup.java
@@ -274,9 +274,9 @@
 			addLRUWorkingSetAction(mm, currId++, fWorkbenchPage.getAggregateWorkingSet());
 		}
 
-		for (int i= 0; i < workingSets.length; i++) {
-			if (!workingSets[i].isAggregateWorkingSet()) {
-				addLRUWorkingSetAction(mm, currId++, workingSets[i]);
+		for (IWorkingSet workingSet : workingSets) {
+			if (!workingSet.isAggregateWorkingSet()) {
+				addLRUWorkingSetAction(mm, currId++, workingSet);
 			}
 		}
 		fLRUMenuCount= currId;
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetModel.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetModel.java
index aa219e4..0e991f9 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetModel.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetModel.java
@@ -122,8 +122,8 @@
 		}
 		public void rebuild(IWorkingSet[] workingSets) {
 			clear();
-			for (int i= 0; i < workingSets.length; i++) {
-				put(workingSets[i]);
+			for (IWorkingSet workingSet : workingSets) {
+				put(workingSet);
 			}
 		}
 		public IAdaptable[] refresh(IWorkingSet ws) {
@@ -145,11 +145,11 @@
 			return oldElements;
 		}
 		private void computeDelta(List<IAdaptable> toRemove, List<IAdaptable> toAdd, IAdaptable[] oldElements, IAdaptable[] newElements) {
-			for (int i= 0; i < oldElements.length; i++) {
-				toAdd.remove(oldElements[i]);
+			for (IAdaptable oldElement : oldElements) {
+				toAdd.remove(oldElement);
 			}
-			for (int i= 0; i < newElements.length; i++) {
-				toRemove.remove(newElements[i]);
+			for (IAdaptable newElement : newElements) {
+				toRemove.remove(newElement);
 			}
 
 		}
@@ -175,8 +175,7 @@
 				return;
 			IAdaptable[] elements= ws.getElements();
 			fWorkingSetToElement.put(ws, elements);
-			for (int i= 0; i < elements.length; i++) {
-				IAdaptable element= elements[i];
+			for (IAdaptable element : elements) {
 				addElement(element, ws);
 				if (!(element instanceof IProject) && !(element instanceof IJavaProject)) {
 					fNonProjectTopLevelElements.add(element);
@@ -319,8 +318,7 @@
 
 	public Object[] addWorkingSets(Object[] elements) {
 		List<? super IWorkingSet> result= null;
-		for (int i= 0; i < elements.length; i++) {
-			Object element= elements[i];
+		for (Object element : elements) {
 			List<IWorkingSet> sets= null;
 			if (element instanceof IResource) {
 				sets= fElementMapper.getAllWorkingSetsForResource((IResource)element);
@@ -392,15 +390,15 @@
 	private List<IWorkingSet> getActiveAndAllWorkingSetsFromManagers() {
 		List<IWorkingSet> result= new ArrayList<>();
 		result.addAll(fActiveWorkingSets);
-		IWorkingSet[] locals= fLocalWorkingSetManager.getWorkingSets();
-		for (int i= 0; i < locals.length; i++) {
-			if (!result.contains(locals[i]) && isSupportedAsTopLevelElement(locals[i]))
-				result.add(locals[i]);
+		for (IWorkingSet local : fLocalWorkingSetManager.getWorkingSets()) {
+			if (!result.contains(local) && isSupportedAsTopLevelElement(local)) {
+				result.add(local);
+			}
 		}
-		IWorkingSet[] globals= PlatformUI.getWorkbench().getWorkingSetManager().getWorkingSets();
-		for (int i= 0; i < globals.length; i++) {
-			if (!result.contains(globals[i]) && isSupportedAsTopLevelElement(globals[i]))
-				result.add(globals[i]);
+		for (IWorkingSet global : PlatformUI.getWorkbench().getWorkingSetManager().getWorkingSets()) {
+			if (!result.contains(global) && isSupportedAsTopLevelElement(global)) {
+				result.add(global);
+			}
 		}
 
 		if (fIsSortingEnabled)
@@ -558,9 +556,7 @@
 
 		fConfigured= Boolean.valueOf(configured).booleanValue();
 		fLocalWorkingSetManager.restoreState(memento.getChild(TAG_LOCAL_WORKING_SET_MANAGER));
-		IWorkingSet[] allLocalWorkingSets= fLocalWorkingSetManager.getAllWorkingSets();
-		for (int i= 0; i < allLocalWorkingSets.length; i++) {
-			IWorkingSet ws= allLocalWorkingSets[i];
+		for (IWorkingSet ws : fLocalWorkingSetManager.getAllWorkingSets()) {
 			if (IWorkingSetIDs.OTHERS.equals(ws.getId())) {
 				// have to set the label again, since the locale could have been changed (bug 272737)
 				String otherProjectsLabel= WorkingSetMessages.WorkingSetModel_others_name;
@@ -577,9 +573,8 @@
 			fIsSortingEnabled= Boolean.valueOf(isSortingEnabled).booleanValue();
 		}
 
-		IMemento[] actives= memento.getChildren(TAG_ACTIVE_WORKING_SET);
-		for (int i= 0; i < actives.length; i++) {
-			String name= actives[i].getString(TAG_WORKING_SET_NAME);
+		for (IMemento active : memento.getChildren(TAG_ACTIVE_WORKING_SET)) {
+			String name= active.getString(TAG_WORKING_SET_NAME);
 			if (name != null) {
 				IWorkingSet ws= fLocalWorkingSetManager.getWorkingSet(name);
 				if (ws == null) {
@@ -590,9 +585,8 @@
 				}
 			}
 		}
-		IMemento[] allWorkingSets= memento.getChildren(TAG_ALL_WORKING_SETS);
-		for (int i= 0; i < allWorkingSets.length; i++) {
-			String name= allWorkingSets[i].getString(TAG_WORKING_SET_NAME);
+		for (IMemento allWorkingSet : memento.getChildren(TAG_ALL_WORKING_SETS)) {
+			String name= allWorkingSet.getString(TAG_WORKING_SET_NAME);
 			if (name != null) {
 				IWorkingSet ws= fLocalWorkingSetManager.getWorkingSet(name);
 				if (ws == null) {
@@ -681,9 +675,7 @@
 		if (!workingSet.isSelfUpdating() || workingSet.isAggregateWorkingSet())
 			return false;
 
-		IAdaptable[] elements= workingSet.getElements();
-		for (int i= 0; i < elements.length; i++) {
-			IAdaptable element= elements[i];
+		for (IAdaptable element : workingSet.getElements()) {
 			IProject p= element.getAdapter(IProject.class);
 			if (p != null && p.exists())
 				return true;
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/PreferenceConstants.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/PreferenceConstants.java
index c786b78..5b0857b 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/PreferenceConstants.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/PreferenceConstants.java
@@ -2956,6 +2956,18 @@
 	public final static String FORMATTER_COMMENT_FORMATHTML= "comment_format_html"; //$NON-NLS-1$
 
 	/**
+	 * A named preference that controls whether completion processors should be called from the non-UI thread,
+	 * when they declare ability to work from non-UI Thread.
+	 * <p>Completion processors can declare whether they
+	 * require UI Thread or not in their extension description, see {@link org.eclipse.jdt.internal.ui.text.java.CompletionProposalComputerDescriptor#requiresUIThread()}.</p>
+	 * <p>Value is of type <code>Boolean</code></p>
+	 *
+	 * @since 3.21
+	 */
+	public static final String CODEASSIST_NONUITHREAD_COMPUTATION= "content_assist_noUIThread_computation"; //$NON-NLS-1$
+
+
+	/**
 	 * A named preference that controls if the Java code assist gets auto activated.
 	 * <p>
 	 * Value is of type <code>Boolean</code>.
@@ -4087,6 +4099,7 @@
 		store.setDefault(PreferenceConstants.CODEASSIST_AUTOACTIVATION_DELAY, 0);
 		store.setDefault(PreferenceConstants.CODEASSIST_AUTOINSERT, true);
 		store.setDefault(PreferenceConstants.CODEASSIST_DISABLE_COMPLETION_PROPOSAL_TRIGGER_CHARS, false);
+		store.setDefault(PreferenceConstants.CODEASSIST_NONUITHREAD_COMPUTATION, false);
 		store.setDefault(PreferenceConstants.PREF_MIN_CHAIN_LENGTH, 2);
 		store.setDefault(PreferenceConstants.PREF_MAX_CHAIN_LENGTH, 4);
 		store.setDefault(PreferenceConstants.PREF_MAX_CHAINS, 20);
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/jarpackager/JarWriter3.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/jarpackager/JarWriter3.java
index c8685fe..936c1c9 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/jarpackager/JarWriter3.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/jarpackager/JarWriter3.java
@@ -101,7 +101,7 @@
 		fJarPackage= jarPackage;
 		Assert.isTrue(fJarPackage.isValid(), "The JAR package specification is invalid"); //$NON-NLS-1$
 		if (!canCreateJar(parent))
-			throw new OperationCanceledException();
+			throw new OperationCanceledException("Cannot create JAR with path: " + fJarPackage.getAbsoluteJarLocation()); //$NON-NLS-1$
 
 		try {
 			if (fJarPackage.usesManifest() && fJarPackage.areGeneratedFilesExported()) {
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/JavaSourceViewerConfiguration.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/JavaSourceViewerConfiguration.java
index 20ef33b..a6154dd 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/JavaSourceViewerConfiguration.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/JavaSourceViewerConfiguration.java
@@ -86,6 +86,7 @@
 import org.eclipse.jdt.internal.ui.text.PreferencesAdapter;
 import org.eclipse.jdt.internal.ui.text.SingleTokenJavaScanner;
 import org.eclipse.jdt.internal.ui.text.correction.JavaCorrectionAssistant;
+import org.eclipse.jdt.internal.ui.text.java.CompletionProposalComputerRegistry;
 import org.eclipse.jdt.internal.ui.text.java.ContentAssistProcessor;
 import org.eclipse.jdt.internal.ui.text.java.JavaAutoIndentStrategy;
 import org.eclipse.jdt.internal.ui.text.java.JavaCodeScanner;
@@ -434,8 +435,7 @@
 	public IContentAssistant getContentAssistant(ISourceViewer sourceViewer) {
 
 		if (getEditor() != null) {
-
-			ContentAssistant assistant= new ContentAssistant();
+			ContentAssistant assistant= new ContentAssistant(fPreferenceStore.getBoolean(PreferenceConstants.CODEASSIST_NONUITHREAD_COMPUTATION) && !CompletionProposalComputerRegistry.getDefault().computingCompletionRequiresUIThread());
 			assistant.setDocumentPartitioning(getConfiguredDocumentPartitioning(sourceViewer));
 
 			assistant.setRestoreCompletionProposalSize(getSettings("completion_proposal_size")); //$NON-NLS-1$
diff --git a/org.eclipse.ltk.core.refactoring.tests/META-INF/MANIFEST.MF b/org.eclipse.ltk.core.refactoring.tests/META-INF/MANIFEST.MF
index e29b826..1840c33 100644
--- a/org.eclipse.ltk.core.refactoring.tests/META-INF/MANIFEST.MF
+++ b/org.eclipse.ltk.core.refactoring.tests/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.ltk.core.refactoring.tests; singleton:=true
-Bundle-Version: 3.8.600.qualifier
+Bundle-Version: 3.8.700.qualifier
 Bundle-Activator: org.eclipse.ltk.core.refactoring.tests.RefactoringCoreTestPlugin
 Bundle-ActivationPolicy: lazy
 Bundle-Vendor: %providerName
diff --git a/org.eclipse.ltk.core.refactoring.tests/pom.xml b/org.eclipse.ltk.core.refactoring.tests/pom.xml
index c0fe30c..c92d0ac 100644
--- a/org.eclipse.ltk.core.refactoring.tests/pom.xml
+++ b/org.eclipse.ltk.core.refactoring.tests/pom.xml
@@ -20,7 +20,7 @@
   </parent>
   <groupId>org.eclipse.ltk</groupId>
   <artifactId>org.eclipse.ltk.core.refactoring.tests</artifactId>
-  <version>3.8.600-SNAPSHOT</version>
+  <version>3.8.700-SNAPSHOT</version>
   <packaging>eclipse-test-plugin</packaging>
   <properties>
   	<testSuite>${project.artifactId}</testSuite>
diff --git a/org.eclipse.ltk.core.refactoring.tests/src/org/eclipse/ltk/core/refactoring/tests/history/RefactoringHistorySerializationTests.java b/org.eclipse.ltk.core.refactoring.tests/src/org/eclipse/ltk/core/refactoring/tests/history/RefactoringHistorySerializationTests.java
index 44e91b4..98183ef 100644
--- a/org.eclipse.ltk.core.refactoring.tests/src/org/eclipse/ltk/core/refactoring/tests/history/RefactoringHistorySerializationTests.java
+++ b/org.eclipse.ltk.core.refactoring.tests/src/org/eclipse/ltk/core/refactoring/tests/history/RefactoringHistorySerializationTests.java
@@ -42,8 +42,8 @@
 
 	private static void compareReadHistory(RefactoringDescriptor[] descriptors, int flags, String xml, boolean ioException) throws CoreException {
 		List<RefactoringDescriptorProxyAdapter> list= new ArrayList<>();
-		for (int index= 0; index < descriptors.length; index++) {
-			list.add(new RefactoringDescriptorProxyAdapter(descriptors[index]));
+		for (RefactoringDescriptor descriptor : descriptors) {
+			list.add(new RefactoringDescriptorProxyAdapter(descriptor));
 		}
 		try {
 			ByteArrayInputStream stream= null;
diff --git a/org.eclipse.ltk.core.refactoring.tests/src/org/eclipse/ltk/core/refactoring/tests/history/RefactoringHistoryServiceTests.java b/org.eclipse.ltk.core.refactoring.tests/src/org/eclipse/ltk/core/refactoring/tests/history/RefactoringHistoryServiceTests.java
index c67752c..f8733d3 100644
--- a/org.eclipse.ltk.core.refactoring.tests/src/org/eclipse/ltk/core/refactoring/tests/history/RefactoringHistoryServiceTests.java
+++ b/org.eclipse.ltk.core.refactoring.tests/src/org/eclipse/ltk/core/refactoring/tests/history/RefactoringHistoryServiceTests.java
@@ -244,8 +244,9 @@
 		RefactoringHistory workspaceHistory= service.getWorkspaceHistory(null);
 		final RefactoringDescriptorProxy[] descriptors= workspaceHistory.getDescriptors();
 		assertEquals("Refactoring history has wrong size:", COMMON_NUMBER, descriptors.length);
-		for (int index= 0; index < descriptors.length; index++)
-			assertTrue("Workspace refactoring should have no project attribute set:\n\n" + descriptors[index].toString(), descriptors[index].getProject() == null);
+		for (RefactoringDescriptorProxy descriptor : descriptors) {
+			assertTrue("Workspace refactoring should have no project attribute set:\n\n" + descriptor.toString(), descriptor.getProject() == null);
+		}
 	}
 
 	public void testDeleteProjectHistory1() throws Exception {
@@ -253,11 +254,11 @@
 		final IProject project= fProject.getProject();
 		final RefactoringHistoryService service= RefactoringHistoryService.getInstance();
 		RefactoringHistory workspaceHistory= service.getWorkspaceHistory(null);
-		RefactoringDescriptorProxy[] descriptors= workspaceHistory.getDescriptors();
 		Set<RefactoringDescriptorProxy> set= new HashSet<>();
-		for (int index= 0; index < descriptors.length; index++) {
-			if (descriptors[index].getProject() == null)
-				set.add(descriptors[index]);
+		for (RefactoringDescriptorProxy descriptor : workspaceHistory.getDescriptors()) {
+			if (descriptor.getProject() == null) {
+				set.add(descriptor);
+			}
 		}
 		service.deleteRefactoringDescriptors(set.toArray(new RefactoringDescriptorProxy[set.size()]), null);
 		workspaceHistory= service.getWorkspaceHistory(null);
diff --git a/org.eclipse.ltk.core.refactoring.tests/src/org/eclipse/ltk/core/refactoring/tests/resource/ResourceRefactoringUndoTests.java b/org.eclipse.ltk.core.refactoring.tests/src/org/eclipse/ltk/core/refactoring/tests/resource/ResourceRefactoringUndoTests.java
index 1eb43aa..2fe4f15 100644
--- a/org.eclipse.ltk.core.refactoring.tests/src/org/eclipse/ltk/core/refactoring/tests/resource/ResourceRefactoringUndoTests.java
+++ b/org.eclipse.ltk.core.refactoring.tests/src/org/eclipse/ltk/core/refactoring/tests/resource/ResourceRefactoringUndoTests.java
@@ -132,8 +132,8 @@
 		fProject.delete();
 		final IFileStore[] toDelete= storesToDelete.toArray(new IFileStore[storesToDelete.size()]);
 		storesToDelete.clear();
-		for (int i= 0; i < toDelete.length; i++) {
-			clear(toDelete[i]);
+		for (IFileStore d : toDelete) {
+			clear(d);
 		}
 	}
 
@@ -518,8 +518,8 @@
 			if (!contentMatch) {
 				return false;
 			}
-			for (int i= 0; i < markerSnapshots.length; i++) {
-				if (!markerSnapshots[i].existsOn(resource)) {
+			for (MarkerSnapshot markerSnapshot : markerSnapshots) {
+				if (!markerSnapshot.existsOn(resource)) {
 					return false;
 				}
 			}
@@ -556,9 +556,9 @@
 					return false;
 				}
 			}
-			for (int i= 0; i < memberSnapshots.length; i++) {
-				if (!fileNameExcludes.contains(memberSnapshots[i].name)) {
-					if (!memberSnapshots[i].isValid(folder)) {
+			for (ResourceSnapshot memberSnapshot : memberSnapshots) {
+				if (!fileNameExcludes.contains(memberSnapshot.name)) {
+					if (!memberSnapshot.isValid(folder)) {
 						return false;
 					}
 				}
@@ -580,9 +580,8 @@
 		boolean existsOn(IResource resource) throws CoreException {
 			// comparison is based on equality of attributes, since id will
 			// change on create/delete/recreate sequence
-			IMarker[] markers= resource.findMarkers(type, false, IResource.DEPTH_ZERO);
-			for (int i= 0; i < markers.length; i++) {
-				if (markers[i].getAttributes().equals(attributes)) {
+			for (IMarker marker : resource.findMarkers(type, false, IResource.DEPTH_ZERO)) {
+				if (marker.getAttributes().equals(attributes)) {
 					return true;
 				}
 			}
@@ -623,9 +622,9 @@
 				project.open(null);
 			}
 
-			for (int i= 0; i < memberSnapshots.length; i++) {
-				if (!fileNameExcludes.contains(memberSnapshots[i].name)) {
-					if (!memberSnapshots[i].isValid(resource)) {
+			for (ResourceSnapshot memberSnapshot : memberSnapshots) {
+				if (!fileNameExcludes.contains(memberSnapshot.name)) {
+					if (!memberSnapshot.isValid(resource)) {
 						return false;
 					}
 				}
diff --git a/org.eclipse.ltk.ui.refactoring.tests/META-INF/MANIFEST.MF b/org.eclipse.ltk.ui.refactoring.tests/META-INF/MANIFEST.MF
index b5592db..da29b1f 100644
--- a/org.eclipse.ltk.ui.refactoring.tests/META-INF/MANIFEST.MF
+++ b/org.eclipse.ltk.ui.refactoring.tests/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.ltk.ui.refactoring.tests;singleton:=true
-Bundle-Version: 3.9.400.qualifier
+Bundle-Version: 3.9.500.qualifier
 Bundle-Activator: org.eclipse.ltk.ui.refactoring.tests.RefactoringUITestPlugin
 Bundle-ActivationPolicy: lazy
 Bundle-Vendor: %providerName
diff --git a/org.eclipse.ltk.ui.refactoring.tests/pom.xml b/org.eclipse.ltk.ui.refactoring.tests/pom.xml
index 57fbcee..7d6f266 100644
--- a/org.eclipse.ltk.ui.refactoring.tests/pom.xml
+++ b/org.eclipse.ltk.ui.refactoring.tests/pom.xml
@@ -20,7 +20,7 @@
   </parent>
   <groupId>org.eclipse.ltk</groupId>
   <artifactId>org.eclipse.ltk.ui.refactoring.tests</artifactId>
-  <version>3.9.400-SNAPSHOT</version>
+  <version>3.9.500-SNAPSHOT</version>
   <packaging>eclipse-test-plugin</packaging>
   <properties>
     <testSuite>${project.artifactId}</testSuite>
diff --git a/org.eclipse.ltk.ui.refactoring.tests/src/org/eclipse/ltk/ui/refactoring/examples/DeleteResourcesRefactoringAction.java b/org.eclipse.ltk.ui.refactoring.tests/src/org/eclipse/ltk/ui/refactoring/examples/DeleteResourcesRefactoringAction.java
index 50d7753..922de31 100644
--- a/org.eclipse.ltk.ui.refactoring.tests/src/org/eclipse/ltk/ui/refactoring/examples/DeleteResourcesRefactoringAction.java
+++ b/org.eclipse.ltk.ui.refactoring.tests/src/org/eclipse/ltk/ui/refactoring/examples/DeleteResourcesRefactoringAction.java
@@ -78,10 +78,11 @@
 		}
 	}
 
-	private static boolean isDeleteAvailable(IResource[] resource) {
-		for (int i= 0; i < resource.length; i++) {
-			if (!resource[i].exists())
+	private static boolean isDeleteAvailable(IResource[] resources) {
+		for (IResource resource : resources) {
+			if (!resource.exists()) {
 				return false;
+			}
 		}
 		return true;
 	}
@@ -97,9 +98,7 @@
 
 	private static IResource[] evaluateResources(IStructuredSelection sel) {
 		ArrayList<IResource> res= new ArrayList<>();
-		Object[] objects= sel.toArray();
-		for (int i= 0; i < objects.length; i++) {
-			Object curr= objects[i];
+		for (Object curr : sel.toArray()) {
 			if (curr instanceof IFile || curr instanceof IFolder) {
 				if (!addFileOrFolder(res, (IResource) curr)) {
 					return null;
diff --git a/org.eclipse.ltk.ui.refactoring.tests/src/org/eclipse/ltk/ui/refactoring/examples/MoveResourcesRefactoringAction.java b/org.eclipse.ltk.ui.refactoring.tests/src/org/eclipse/ltk/ui/refactoring/examples/MoveResourcesRefactoringAction.java
index a831abe..65d5437 100644
--- a/org.eclipse.ltk.ui.refactoring.tests/src/org/eclipse/ltk/ui/refactoring/examples/MoveResourcesRefactoringAction.java
+++ b/org.eclipse.ltk.ui.refactoring.tests/src/org/eclipse/ltk/ui/refactoring/examples/MoveResourcesRefactoringAction.java
@@ -75,10 +75,11 @@
 		}
 	}
 
-	private static boolean isMoveAvailable(IResource[] resource) {
-		for (int i= 0; i < resource.length; i++) {
-			if (!resource[i].exists())
+	private static boolean isMoveAvailable(IResource[] resources) {
+		for (IResource resource : resources) {
+			if (!resource.exists()) {
 				return false;
+			}
 		}
 		return true;
 	}
@@ -93,11 +94,9 @@
 	}
 
 	private static IResource[] evaluateResources(IStructuredSelection sel) {
-		Object[] objects= sel.toArray();
 		ArrayList<IResource> res= new ArrayList<>();
 		IContainer parent= null;
-		for (int i= 0; i < objects.length; i++) {
-			Object curr= objects[i];
+		for (Object curr : sel.toArray()) {
 			if (curr instanceof IFile || curr instanceof IFolder) {
 				IResource resource= (IResource) curr;
 				if (parent == null) {