diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/perf/BenchCopyFile.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/perf/BenchCopyFile.java
index 2ccf907..4a0d8ca 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/perf/BenchCopyFile.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/perf/BenchCopyFile.java
@@ -29,9 +29,9 @@
 			output[i] = getTempStore();
 		}
 		startBench();
-		for (int i = 0; i < output.length; i++) {
+		for (IFileStore element : output) {
 			try {
-				input.copy(output[i], EFS.NONE, null);
+				input.copy(element, EFS.NONE, null);
 			} catch (CoreException e) {
 				fail("4.99", e);
 			}
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/perf/BenchElementTree.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/perf/BenchElementTree.java
index 9943642..05788c4 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/perf/BenchElementTree.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/perf/BenchElementTree.java
@@ -74,8 +74,8 @@
 
 		startBench();
 		for (int rep = repeat; --rep >= 0;) {
-			for (int i = 0, len = files.length; i < len; ++i) {
-				trees[rep].deleteElement(files[i]);
+			for (IPath file : files) {
+				trees[rep].deleteElement(file);
 			}
 		}
 
@@ -93,8 +93,8 @@
 		startBench();
 
 		for (int rep = repeat; --rep >= 0;) {
-			for (int i = 0, len = files.length; i < len; ++i) {
-				tree.getElementData(files[i]);
+			for (IPath file : files) {
+				tree.getElementData(file);
 			}
 		}
 
@@ -150,8 +150,8 @@
 		startBench();
 
 		for (int rep = 500; --rep >= 0;) {
-			for (int i = 0, len = files.length; i < len; ++i) {
-				tree.setElementData(files[i], data);
+			for (IPath file : files) {
+				tree.setElementData(file, data);
 			}
 		}
 
@@ -171,9 +171,9 @@
 		/* create file elements */
 		tree = tree.newEmptyDelta();
 		IPath[] filePaths = getFilePaths();
-		for (int i = 0; i < filePaths.length; i++) {
-			Object data = filePaths[i].toString();
-			tree.createElement(filePaths[i], data);
+		for (IPath filePath : filePaths) {
+			Object data = filePath.toString();
+			tree.createElement(filePath, data);
 
 			tree.immutable();
 			trees.addElement(tree);
@@ -183,8 +183,8 @@
 		/* modify the data of all file elements a few times */
 		for (int i = 0; i < repeat; i++) {
 			Object data = "data" + i;
-			for (int f = 0; f < filePaths.length; f++) {
-				tree.setElementData(filePaths[f], data);
+			for (IPath filePath : filePaths) {
+				tree.setElementData(filePath, data);
 
 				tree.immutable();
 				trees.addElement(tree);
@@ -193,8 +193,8 @@
 		}
 
 		/* delete all file elements */
-		for (int i = 0; i < filePaths.length; i++) {
-			tree.deleteElement(filePaths[i]);
+		for (IPath filePath : filePaths) {
+			tree.deleteElement(filePath);
 			tree.immutable();
 			trees.addElement(tree);
 			tree = tree.newEmptyDelta();
@@ -226,12 +226,12 @@
 		}
 		tree.createElement(folder, data);
 
-		for (int i = 0, len = javaLangUnits.length; i < len; ++i) {
+		for (String javaLangUnit : javaLangUnits) {
 			if (withDeltas) {
 				tree.immutable();
 				tree = tree.newEmptyDelta();
 			}
-			IPath file = folder.append(javaLangUnits[i]);
+			IPath file = folder.append(javaLangUnit);
 			tree.createElement(file, data);
 		}
 		return tree;
@@ -249,17 +249,17 @@
 		/* modify the data of all file elements a few times */
 		for (int i = 0; i < repeat; i++) {
 			Object data = "data" + i;
-			for (int f = 0; f < files.length; f++) {
+			for (IPath file : files) {
 				tree = tree.newEmptyDelta();
-				tree.setElementData(files[f], data);
+				tree.setElementData(file, data);
 				tree.immutable();
 			}
 		}
 
 		/* delete all file elements */
-		for (int i = 0; i < files.length; i++) {
+		for (IPath file : files) {
 			tree = tree.newEmptyDelta();
-			tree.deleteElement(files[i]);
+			tree.deleteElement(file);
 			tree.immutable();
 		}
 
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/perf/BenchWorkspace.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/perf/BenchWorkspace.java
index e343e73..df1b033 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/perf/BenchWorkspace.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/perf/BenchWorkspace.java
@@ -106,8 +106,8 @@
 			@Override
 			public boolean visit(IResource resource) throws CoreException {
 				IMarker[] markers = resource.findMarkers(IMarker.PROBLEM, true, IResource.DEPTH_ZERO);
-				for (int i = 0; i < markers.length; i++) {
-					int severity = markers[i].getAttribute(IMarker.SEVERITY, -1);
+				for (IMarker marker : markers) {
+					int severity = marker.getAttribute(IMarker.SEVERITY, -1);
 					if (severity > maxSeverity)
 						maxSeverity = severity;
 				}
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/perf/BuilderPerformanceTest.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/perf/BuilderPerformanceTest.java
index 9f17c85..e9ebf57 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/perf/BuilderPerformanceTest.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/perf/BuilderPerformanceTest.java
@@ -114,8 +114,8 @@
 			protected void test() {
 				try {
 					for (int repeats = 0; repeats < REPEAT; repeats++) {
-						for (int i = 0; i < projects.length; i++) {
-							projects[i].build(IncrementalProjectBuilder.INCREMENTAL_BUILD, getMonitor());
+						for (IProject project : projects) {
+							project.build(IncrementalProjectBuilder.INCREMENTAL_BUILD, getMonitor());
 						}
 					}
 				} catch (CoreException e) {
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/perf/FileSystemPerformanceTest.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/perf/FileSystemPerformanceTest.java
index 4d7717d..89d9090 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/perf/FileSystemPerformanceTest.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/perf/FileSystemPerformanceTest.java
@@ -58,13 +58,13 @@
 
 	void setAttributesOnTree() throws CoreException {
 		IFileStore[] dirs = baseStore.childStores(EFS.NONE, null);
-		for (int i = 0; i < dirs.length; i++) {
-			IFileStore[] files = dirs[i].childStores(EFS.NONE, null);
-			for (int j = 0; j < files.length; j++) {
-				IFileInfo fileInfo = files[j].fetchInfo();
+		for (IFileStore dir : dirs) {
+			IFileStore[] files = dir.childStores(EFS.NONE, null);
+			for (IFileStore file : files) {
+				IFileInfo fileInfo = file.fetchInfo();
 				boolean clear = fileInfo.getAttribute(EFS.ATTRIBUTE_READ_ONLY);
 				fileInfo.setAttribute(EFS.ATTRIBUTE_EXECUTABLE | EFS.ATTRIBUTE_READ_ONLY, !clear);
-				files[j].putInfo(fileInfo, EFS.SET_ATTRIBUTES, null);
+				file.putInfo(fileInfo, EFS.SET_ATTRIBUTES, null);
 			}
 		}
 	}
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/perf/LocalHistoryPerformanceTest.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/perf/LocalHistoryPerformanceTest.java
index abbd4db..d346f15 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/perf/LocalHistoryPerformanceTest.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/perf/LocalHistoryPerformanceTest.java
@@ -62,9 +62,9 @@
 				@Override
 				public void run(org.eclipse.core.runtime.IProgressMonitor monitor) {
 					ensureExistsInWorkspace(folders, true);
-					for (int i = 0; i < folders.length; i++)
+					for (IFolder folder : folders)
 						for (int j = 0; j < filesPerFolder; j++) {
-							IFile file = folders[i].getFile("file" + j);
+							IFile file = folder.getFile("file" + j);
 							ensureExistsInWorkspace(file, getRandomContents());
 							try {
 								for (int k = 0; k < statesPerFile; k++)
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/perf/PropertyManagerPerformanceTest.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/perf/PropertyManagerPerformanceTest.java
index 4786851..4f7a005 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/perf/PropertyManagerPerformanceTest.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/perf/PropertyManagerPerformanceTest.java
@@ -52,12 +52,12 @@
 		folders[3] = folders[2].getFolder("folder4");
 		folders[4] = folders[3].getFolder("folder5");
 		List<IResource> resources = new ArrayList<>(filesPerFolder * folders.length);
-		for (int i = 0; i < folders.length; i++)
-			resources.add(folders[i]);
+		for (IFolder folder : folders)
+			resources.add(folder);
 		ensureExistsInWorkspace(folders, true);
-		for (int i = 0; i < folders.length; i++) {
+		for (IFolder folder : folders) {
 			for (int j = 0; j < filesPerFolder; j++) {
-				IFile file = folders[i].getFile("file" + j);
+				IFile file = folder.getFile("file" + j);
 				ensureExistsInWorkspace(file, getRandomContents());
 				resources.add(file);
 			}
@@ -69,8 +69,7 @@
 		IProject proj1 = getWorkspace().getRoot().getProject("proj1");
 		final IFolder folder1 = proj1.getFolder("folder1");
 		final List<IResource> allResources = createTree(folder1, filesPerFolder);
-		for (Iterator<IResource> i = allResources.iterator(); i.hasNext();) {
-			IResource resource = i.next();
+		for (IResource resource : allResources) {
 			for (int j = 0; j < properties; j++)
 				try {
 					resource.setPersistentProperty(new QualifiedName(PI_RESOURCES_TESTS, "prop" + j), getPropertyValue(200));
@@ -83,8 +82,7 @@
 			@Override
 			protected void test() {
 				for (int j = 0; j < properties; j++)
-					for (Iterator<IResource> i = allResources.iterator(); i.hasNext();) {
-						IResource resource = i.next();
+					for (IResource resource : allResources) {
 						try {
 							assertNotNull(resource.getPersistentProperty(new QualifiedName(PI_RESOURCES_TESTS, "prop" + j)));
 						} catch (CoreException ce) {
@@ -130,8 +128,7 @@
 
 			@Override
 			protected void test() {
-				for (Iterator<IResource> i = allResources.iterator(); i.hasNext();) {
-					IResource resource = i.next();
+				for (IResource resource : allResources) {
 					try {
 						resource.setPersistentProperty(new QualifiedName(PI_RESOURCES_TESTS, "prop" + ((int) Math.random() * 50)), getPropertyValue(200));
 					} catch (CoreException ce) {
