Bug 515946 - Cleanup o.e.tests.resources

While working on other things I noticed the following in the log:
[WARNING] The effective compiler target level 1.8 is incompatible with
the following OSGi execution environments: [JavaSE-1.7 (assumes 1.7)]

So this patch movs the BREE to Java 1.8, remove the
jre.compilation.profile, use lambdas all over the place and fix other
warnings.

Change-Id: Ib6f01ca01b368b3713da881e56fb0e9139fbc89c
Signed-off-by: Alexander Kurtakov <akurtako@redhat.com>
diff --git a/tests/org.eclipse.core.tests.resources/.classpath b/tests/org.eclipse.core.tests.resources/.classpath
index 4f83b23..eca7bdb 100644
--- a/tests/org.eclipse.core.tests.resources/.classpath
+++ b/tests/org.eclipse.core.tests.resources/.classpath
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/tests/org.eclipse.core.tests.resources/META-INF/MANIFEST.MF b/tests/org.eclipse.core.tests.resources/META-INF/MANIFEST.MF
index 4846681..15228f1 100644
--- a/tests/org.eclipse.core.tests.resources/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.core.tests.resources/META-INF/MANIFEST.MF
@@ -39,5 +39,5 @@
  org.eclipse.pde.junit.runtime;bundle-version="3.5.0"
 Bundle-ActivationPolicy: lazy
 Bundle-Activator: org.eclipse.core.tests.internal.resources.TestActivator
-Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Eclipse-BundleShape: dir
diff --git a/tests/org.eclipse.core.tests.resources/build.properties b/tests/org.eclipse.core.tests.resources/build.properties
index fb07fd4..3cbcfae 100644
--- a/tests/org.eclipse.core.tests.resources/build.properties
+++ b/tests/org.eclipse.core.tests.resources/build.properties
@@ -19,5 +19,4 @@
                Plugin_Testing/
 src.includes = about.html
 javacWarnings.resourcestests.jar=-raw,-unchecked
-jre.compilation.profile = JavaSE-1.8
 
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/alias/BasicAliasTest.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/alias/BasicAliasTest.java
index d7b01d4..bb00543 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/alias/BasicAliasTest.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/alias/BasicAliasTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * Copyright (c) 2000, 2017 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,7 +13,6 @@
 
 import java.net.URI;
 import java.util.Arrays;
-import java.util.Comparator;
 import junit.framework.Test;
 import junit.framework.TestSuite;
 import org.eclipse.core.filesystem.EFS;
@@ -94,12 +93,7 @@
 		if (!(resource instanceof IContainer))
 			return new IResource[0];
 		IResource[] children = ((IContainer) resource).members();
-		Arrays.sort(children, new Comparator<IResource>() {
-			@Override
-			public int compare(IResource arg0, IResource arg1) {
-				return arg0.getFullPath().toString().compareTo(arg1.getFullPath().toString());
-			}
-		});
+		Arrays.sort(children, (arg0, arg1) -> arg0.getFullPath().toString().compareTo(arg1.getFullPath().toString()));
 		return children;
 	}
 
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/alias/SyncAliasTest.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/alias/SyncAliasTest.java
index 11bc9c0..a070e2e 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/alias/SyncAliasTest.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/alias/SyncAliasTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * Copyright (c) 2000, 2017 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -49,43 +49,37 @@
 		final IProject nestedProject = root.getProject("nestedProject");
 		final IFolder nestedTarget = nestedProject.getFolder("target");
 
-		getWorkspace().run(new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				//create top level project
-				IProject parent = root.getProject("parent");
-				parent.create(monitor);
-				parent.open(monitor);
-				parent.refreshLocal(IResource.DEPTH_INFINITE, monitor);
+		getWorkspace().run((IWorkspaceRunnable) monitor -> {
+			//create top level project
+			IProject parent = root.getProject("parent");
+			parent.create(monitor);
+			parent.open(monitor);
+			parent.refreshLocal(IResource.DEPTH_INFINITE, monitor);
 
-				//create project physically nested in top level project
-				IProjectDescription description = getWorkspace().newProjectDescription("nestedProject");
-				description.setLocation(new Path(childProject.getAbsolutePath()));
-				nestedProject.create(description, monitor);
-				nestedProject.open(monitor);
+			//create project physically nested in top level project
+			IProjectDescription description = getWorkspace().newProjectDescription("nestedProject");
+			description.setLocation(new Path(childProject.getAbsolutePath()));
+			nestedProject.create(description, monitor);
+			nestedProject.open(monitor);
 
-				//now create a folder in the nested project, which should also cause it to appear in parent
-				nestedTarget.create(false /*force*/, true /*local*/, monitor);
-			}
+			//now create a folder in the nested project, which should also cause it to appear in parent
+			nestedTarget.create(false /*force*/, true /*local*/, monitor);
 		}, new NullProgressMonitor());
 
 		//at this point the nested target exists, but the alias in the parent project has not been created
 		//IProject parent = root.getProject("parent");
 		//assertTrue(parent.getFolder("nestedProject/target").exists()); -> this will fail
 
-		getWorkspace().run(new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				File file = new File(childProject, "target/classes/META-INF/ejb.xml");
-				file.getParentFile().mkdirs();
-				try {
-					FileOutputStream fos = new FileOutputStream(file);
-					fos.close();
-				} catch (IOException e) {
-					throw new CoreException(new Status(IStatus.ERROR, "org.eclipse.core.tests.resources", "Test failed due to unexpected IOException"));
-				}
-				nestedTarget.refreshLocal(IResource.DEPTH_INFINITE, monitor);
+		getWorkspace().run((IWorkspaceRunnable) monitor -> {
+			File file = new File(childProject, "target/classes/META-INF/ejb.xml");
+			file.getParentFile().mkdirs();
+			try {
+				FileOutputStream fos = new FileOutputStream(file);
+				fos.close();
+			} catch (IOException e) {
+				throw new CoreException(new Status(IStatus.ERROR, "org.eclipse.core.tests.resources", "Test failed due to unexpected IOException"));
 			}
+			nestedTarget.refreshLocal(IResource.DEPTH_INFINITE, monitor);
 		}, new NullProgressMonitor());
 	}
 }
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/builders/BuilderTest.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/builders/BuilderTest.java
index efc6daf..dc421ba 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/builders/BuilderTest.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/builders/BuilderTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2015 IBM Corporation and others.
+ *  Copyright (c) 2000, 2017 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -18,7 +18,8 @@
 import junit.framework.Test;
 import junit.framework.TestSuite;
 import org.eclipse.core.resources.*;
-import org.eclipse.core.runtime.*;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.core.tests.harness.TestBarrier;
 import org.eclipse.core.tests.harness.TestJob;
@@ -394,12 +395,7 @@
 		// Create some resource handles
 		final boolean[] notified = new boolean[] {false};
 		IProject proj1 = workspace.getRoot().getProject("PROJECT" + 1);
-		final IResourceChangeListener listener = new IResourceChangeListener() {
-			@Override
-			public void resourceChanged(IResourceChangeEvent event) {
-				notified[0] = true;
-			}
-		};
+		final IResourceChangeListener listener = event -> notified[0] = true;
 		workspace.addResourceChangeListener(listener, IResourceChangeEvent.PRE_BUILD);
 		try {
 			// Turn auto-building off
@@ -533,15 +529,12 @@
 			wsDescription.setBuildOrder(null);
 			getWorkspace().setDescription(wsDescription);
 			// Create and set a build spec for project two
-			getWorkspace().run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor monitor) throws CoreException {
-					proj2.create(getMonitor());
-					proj2.open(getMonitor());
-					IProjectDescription desc = proj2.getDescription();
-					desc.setBuildSpec(new ICommand[] {createCommand(desc, "Build1")});
-					proj2.setDescription(desc, getMonitor());
-				}
+			getWorkspace().run((IWorkspaceRunnable) monitor -> {
+				proj2.create(getMonitor());
+				proj2.open(getMonitor());
+				IProjectDescription desc = proj2.getDescription();
+				desc.setBuildSpec(new ICommand[] {createCommand(desc, "Build1")});
+				proj2.setDescription(desc, getMonitor());
 			}, getMonitor());
 			waitForBuild();
 		} catch (CoreException e) {
@@ -553,21 +546,18 @@
 		//create project two and establish a build order by adding a dynamic 
 		//reference from proj2->proj1 in the same operation
 		try {
-			getWorkspace().run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor monitor) throws CoreException {
-					// Create and set a build specs for project one
-					proj1.create(getMonitor());
-					proj1.open(getMonitor());
-					IProjectDescription desc = proj1.getDescription();
-					desc.setBuildSpec(new ICommand[] {createCommand(desc, "Build0")});
-					proj1.setDescription(desc, getMonitor());
+			getWorkspace().run((IWorkspaceRunnable) monitor -> {
+				// Create and set a build specs for project one
+				proj1.create(getMonitor());
+				proj1.open(getMonitor());
+				IProjectDescription desc = proj1.getDescription();
+				desc.setBuildSpec(new ICommand[] {createCommand(desc, "Build0")});
+				proj1.setDescription(desc, getMonitor());
 
-					//add the dynamic reference to project two
-					IProjectDescription description = proj2.getDescription();
-					description.setDynamicReferences(new IProject[] {proj1});
-					proj2.setDescription(description, IResource.NONE, null);
-				}
+				//add the dynamic reference to project two
+				IProjectDescription description = proj2.getDescription();
+				description.setDynamicReferences(new IProject[] {proj1});
+				proj2.setDescription(description, IResource.NONE, null);
 			}, getMonitor());
 		} catch (CoreException e1) {
 			fail("2.99", e1);
@@ -609,25 +599,22 @@
 		workspace.build(IncrementalProjectBuilder.FULL_BUILD, getMonitor());
 
 		// Add pre-build listener that swap around the dependencies
-		IResourceChangeListener buildListener = new IResourceChangeListener() {
-			@Override
-			public void resourceChanged(IResourceChangeEvent event) {
-				try {
-					IProjectDescription desc1 = proj1.getDescription();
-					IProjectDescription desc2 = proj2.getDescription();
-					// Swap around the references
-					if (desc1.getDynamicReferences().length == 0) {
-						desc1.setDynamicReferences(new IProject[] {proj2});
-						desc2.setDynamicReferences(new IProject[0]);
-					} else {
-						desc1.setDynamicReferences(new IProject[0]);
-						desc2.setDynamicReferences(new IProject[] {proj1});
-					}
-					proj1.setDescription(desc1, getMonitor());
-					proj2.setDescription(desc2, getMonitor());
-				} catch (CoreException e) {
-					fail();
+		IResourceChangeListener buildListener = event -> {
+			try {
+				IProjectDescription desc1 = proj1.getDescription();
+				IProjectDescription desc2 = proj2.getDescription();
+				// Swap around the references
+				if (desc1.getDynamicReferences().length == 0) {
+					desc1.setDynamicReferences(new IProject[] {proj2});
+					desc2.setDynamicReferences(new IProject[0]);
+				} else {
+					desc1.setDynamicReferences(new IProject[0]);
+					desc2.setDynamicReferences(new IProject[] {proj1});
 				}
+				proj1.setDescription(desc1, getMonitor());
+				proj2.setDescription(desc2, getMonitor());
+			} catch (CoreException e) {
+				fail();
 			}
 		};
 		try {
@@ -912,12 +899,7 @@
 			fail("2.0", e);
 		}
 		final boolean[] listenerCalled = new boolean[] {false};
-		IResourceChangeListener listener = new IResourceChangeListener() {
-			@Override
-			public void resourceChanged(IResourceChangeEvent event) {
-				listenerCalled[0] = true;
-			}
-		};
+		IResourceChangeListener listener = event -> listenerCalled[0] = true;
 		getWorkspace().addResourceChangeListener(listener, IResourceChangeEvent.POST_BUILD);
 		//do an incremental build -- build should fail, but POST_BUILD should still occur
 		try {
@@ -1036,13 +1018,10 @@
 		//change the file and then immediately perform build
 		final ByteArrayOutputStream out = new ByteArrayOutputStream();
 		try {
-			getWorkspace().run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor monitor) throws CoreException {
-					input.setContents(new ByteArrayInputStream(new byte[] {5, 4, 3, 2, 1}), IResource.NONE, getMonitor());
-					project.build(IncrementalProjectBuilder.INCREMENTAL_BUILD, getMonitor());
-					transferStreams(output.getContents(), out, null, null);
-				}
+			getWorkspace().run((IWorkspaceRunnable) monitor -> {
+				input.setContents(new ByteArrayInputStream(new byte[] {5, 4, 3, 2, 1}), IResource.NONE, getMonitor());
+				project.build(IncrementalProjectBuilder.INCREMENTAL_BUILD, getMonitor());
+				transferStreams(output.getContents(), out, null, null);
 			}, getMonitor());
 		} catch (CoreException e) {
 			fail("1.99", e);
@@ -1087,21 +1066,18 @@
 		final TestBarrier barrier = new TestBarrier();
 		barrier.setStatus(TestBarrier.STATUS_WAIT_FOR_START);
 		//install a listener that will cause autobuild to be interrupted
-		IResourceChangeListener listener = new IResourceChangeListener() {
-			@Override
-			public void resourceChanged(IResourceChangeEvent event) {
-				blockedJob.schedule();
-				//wait for autobuild to become blocking
-				while (!Job.getJobManager().currentJob().isBlocking()) {
-					try {
-						Thread.sleep(100);
-					} catch (InterruptedException e) {
-						//ignore
-					}
+		IResourceChangeListener listener = event -> {
+			blockedJob.schedule();
+			//wait for autobuild to become blocking
+			while (!Job.getJobManager().currentJob().isBlocking()) {
+				try {
+					Thread.sleep(100);
+				} catch (InterruptedException e) {
+					//ignore
 				}
-				//allow the test main method to continue
-				barrier.setStatus(TestBarrier.STATUS_RUNNING);
 			}
+			//allow the test main method to continue
+			barrier.setStatus(TestBarrier.STATUS_RUNNING);
 		};
 		try {
 			getWorkspace().addResourceChangeListener(listener, IResourceChangeEvent.PRE_BUILD);
@@ -1295,14 +1271,11 @@
 		}
 		// Now make a change and then turn autobuild on. Turning it on should
 		// cause a build.
-		IWorkspaceRunnable r = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				file.setContents(getRandomContents(), IResource.NONE, getMonitor());
-				IWorkspaceDescription desc = getWorkspace().getDescription();
-				desc.setAutoBuilding(true);
-				getWorkspace().setDescription(desc);
-			}
+		IWorkspaceRunnable r = monitor -> {
+			file.setContents(getRandomContents(), IResource.NONE, getMonitor());
+			IWorkspaceDescription desc = getWorkspace().getDescription();
+			desc.setAutoBuilding(true);
+			getWorkspace().setDescription(desc);
 		};
 		waitForBuild();
 		getWorkspace().run(r, getMonitor());
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/builders/CycleBuilder.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/builders/CycleBuilder.java
index e95da91..dfd1339 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/builders/CycleBuilder.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/builders/CycleBuilder.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * Copyright (c) 2000, 2017 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -77,16 +77,13 @@
 	 * Method changeSomething.
 	 */
 	private void changeAllFiles() throws CoreException {
-		IResourceVisitor visitor = new IResourceVisitor() {
-			@Override
-			public boolean visit(IResource resource) throws CoreException {
-				if (resource.getType() == IResource.FILE) {
-					if (resource.getName().equals(IProjectDescription.DESCRIPTION_FILE_NAME))
-						return false;
-					((IFile) resource).setContents(getRandomContents(), IResource.NONE, null);
-				}
-				return true;
+		IResourceVisitor visitor = resource -> {
+			if (resource.getType() == IResource.FILE) {
+				if (resource.getName().equals(IProjectDescription.DESCRIPTION_FILE_NAME))
+					return false;
+				((IFile) resource).setContents(getRandomContents(), IResource.NONE, null);
 			}
+			return true;
 		};
 		getProject().accept(visitor, IResource.DEPTH_INFINITE, IResource.NONE);
 	}
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/builders/MultiProjectBuildTest.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/builders/MultiProjectBuildTest.java
index 1cc2c22..a13d1d5 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/builders/MultiProjectBuildTest.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/builders/MultiProjectBuildTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2015 IBM Corporation and others.
+ *  Copyright (c) 2000, 2017 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -16,7 +16,6 @@
 import junit.framework.TestSuite;
 import org.eclipse.core.resources.*;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.tests.resources.TestPerformer;
 
 /**
@@ -62,19 +61,16 @@
 	 * Modifies any files in the given projects, all in a single operation
 	 */
 	protected void dirty(final IProject[] projects) throws CoreException {
-		getWorkspace().run(new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				for (int i = 0; i < projects.length; i++) {
-					IResource[] members = projects[i].members();
-					for (int j = 0; j < members.length; j++) {
-						if (members[j].getType() == IResource.FILE && !members[j].getName().equals(IProjectDescription.DESCRIPTION_FILE_NAME)) {
-							((IFile) members[j]).setContents(getRandomContents(), true, true, null);
-						}
+		getWorkspace().run((IWorkspaceRunnable) monitor -> {
+			for (int i = 0; i < projects.length; i++) {
+				IResource[] members = projects[i].members();
+				for (int j = 0; j < members.length; j++) {
+					if (members[j].getType() == IResource.FILE && !members[j].getName().equals(IProjectDescription.DESCRIPTION_FILE_NAME)) {
+						((IFile) members[j]).setContents(getRandomContents(), true, true, null);
 					}
 				}
-				getWorkspace().build(IncrementalProjectBuilder.INCREMENTAL_BUILD, null);
 			}
+			getWorkspace().build(IncrementalProjectBuilder.INCREMENTAL_BUILD, null);
 		}, getMonitor());
 	}
 
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/builders/SortBuilder.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/builders/SortBuilder.java
index b5f69e7..56a23fe 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/builders/SortBuilder.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/builders/SortBuilder.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * Copyright (c) 2000, 2017 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -397,12 +397,9 @@
 		changedResources.clear();
 		if (delta == null)
 			return;
-		delta.accept(new IResourceDeltaVisitor() {
-			@Override
-			public boolean visit(IResourceDelta delta) {
-				changedResources.add(delta.getResource());
-				return true;
-			}
+		delta.accept(delta1 -> {
+			changedResources.add(delta1.getResource());
+			return true;
 		});
 	}
 
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/builders/TestBuilder.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/builders/TestBuilder.java
index 60ede1f..bad11a2 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/builders/TestBuilder.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/builders/TestBuilder.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * Copyright (c) 2000, 2017 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -104,7 +104,7 @@
 	 */
 	@Override
 	protected IProject[] build(int kind, Map<String, String> args, IProgressMonitor monitor) throws CoreException {
-		arguments = args == null ? new HashMap<String, String>(1) : args;
+		arguments = args == null ? new HashMap<>(1) : args;
 		logPluginLifecycleEvent(getBuildId());
 		if (ruleCallBack == null)
 			return new IProject[0];
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/localstore/FileSystemResourceManagerTest.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/localstore/FileSystemResourceManagerTest.java
index 5feb05c..96ed253 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/localstore/FileSystemResourceManagerTest.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/localstore/FileSystemResourceManagerTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2016 IBM Corporation and others.
+ * Copyright (c) 2000, 2017 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -188,13 +188,10 @@
 
 		// test the depth parameter
 		final IFolder folder = project.getFolder("Folder1");
-		IWorkspaceRunnable operation = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				IResource[] members = folder.members();
-				for (int i = 0; i < members.length; i++)
-					((Resource) members[i]).getResourceInfo(false, true).clear(M_LOCAL_EXISTS);
-			}
+		IWorkspaceRunnable operation = monitor -> {
+			IResource[] members = folder.members();
+			for (int i = 0; i < members.length; i++)
+				((Resource) members[i]).getResourceInfo(false, true).clear(M_LOCAL_EXISTS);
 		};
 		getWorkspace().run(operation, null);
 		assertTrue("2.0", project.isLocal(IResource.DEPTH_ONE));
@@ -450,14 +447,11 @@
 		final IFileStore fileStore = ((Resource) project).getStore();
 		// create project and then delete from file system
 		// wrap in runnable to prevent snapshot from occurring in the middle.
-		getWorkspace().run(new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				ensureDoesNotExistInFileSystem(project);
-				assertTrue("2.1", !fileStore.fetchInfo().isDirectory());
-				//write project in a runnable, otherwise tree will be locked
-				((Project) project).writeDescription(IResource.FORCE);
-			}
+		getWorkspace().run((IWorkspaceRunnable) monitor -> {
+			ensureDoesNotExistInFileSystem(project);
+			assertTrue("2.1", !fileStore.fetchInfo().isDirectory());
+			//write project in a runnable, otherwise tree will be locked
+			((Project) project).writeDescription(IResource.FORCE);
 		}, null);
 		assertTrue("2.2", fileStore.fetchInfo().isDirectory());
 		long lastModified = ((Resource) dotProject).getStore().fetchInfo().getLastModified();
@@ -465,24 +459,16 @@
 	}
 
 	protected void write(final IFile file, final InputStream contents, final boolean force, IProgressMonitor monitor) throws CoreException {
-		IWorkspaceRunnable operation = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor pm) throws CoreException {
-				int flags = force ? IResource.FORCE : IResource.NONE;
-				IFileInfo info = ((Resource) file).getStore().fetchInfo();
-				getLocalManager().write(file, contents, info, flags, false, null);
-			}
+		IWorkspaceRunnable operation = pm -> {
+			int flags = force ? IResource.FORCE : IResource.NONE;
+			IFileInfo info = ((Resource) file).getStore().fetchInfo();
+			getLocalManager().write(file, contents, info, flags, false, null);
 		};
 		getWorkspace().run(operation, null);
 	}
 
 	protected void write(final IFolder folder, final boolean force, IProgressMonitor monitor) throws CoreException {
-		IWorkspaceRunnable operation = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor pm) throws CoreException {
-				getLocalManager().write(folder, force, null);
-			}
-		};
+		IWorkspaceRunnable operation = pm -> getLocalManager().write(folder, force, null);
 		getWorkspace().run(operation, null);
 	}
 }
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/localstore/LocalStoreTest.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/localstore/LocalStoreTest.java
index 566ddb9..a9f0d55 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/localstore/LocalStoreTest.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/localstore/LocalStoreTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * Copyright (c) 2000, 2017 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,7 +16,6 @@
 import org.eclipse.core.internal.resources.Workspace;
 import org.eclipse.core.resources.*;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.tests.resources.ResourceTest;
 
 public abstract class LocalStoreTest extends ResourceTest {
@@ -155,15 +154,12 @@
 
 		projectNames = new String[numberOfProjects];
 		projects = new IProject[numberOfProjects];
-		getWorkspace().run(new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				for (int i = 0; i < projectNames.length; i++) {
-					projectNames[i] = "Project" + i;
-					projects[i] = getWorkspace().getRoot().getProject(projectNames[i]);
-					projects[i].create(null);
-					projects[i].open(null);
-				}
+		getWorkspace().run((IWorkspaceRunnable) monitor -> {
+			for (int i = 0; i < projectNames.length; i++) {
+				projectNames[i] = "Project" + i;
+				projects[i] = getWorkspace().getRoot().getProject(projectNames[i]);
+				projects[i].create(null);
+				projects[i].open(null);
 			}
 		}, null);
 	}
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/localstore/MoveTest.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/localstore/MoveTest.java
index 2be7914..e08e667 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/localstore/MoveTest.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/localstore/MoveTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * Copyright (c) 2000, 2017 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -542,12 +542,7 @@
 		file = projects[0].getFile("ghost");
 		final IFile hackFile = file;
 		final Workspace workspace = (Workspace) getWorkspace();
-		IWorkspaceRunnable operation = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				workspace.createResource(hackFile, false);
-			}
-		};
+		IWorkspaceRunnable operation = monitor -> workspace.createResource(hackFile, false);
 		workspace.run(operation, null);
 		destination = projects[0].getFile("destination");
 		ok = false;
@@ -560,12 +555,7 @@
 
 		/* move file over a phantom */
 		assertTrue("6.1", file.exists());
-		operation = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				((Resource) hackFile).convertToPhantom();
-			}
-		};
+		operation = monitor -> ((Resource) hackFile).convertToPhantom();
 		workspace.run(operation, null);
 		assertTrue("6.2", !file.exists());
 		ResourceInfo info = ((File) file).getResourceInfo(true, false);
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/localstore/RefreshLocalTest.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/localstore/RefreshLocalTest.java
index 6074959..332f1bb 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/localstore/RefreshLocalTest.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/localstore/RefreshLocalTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * Copyright (c) 2000, 2017 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,7 +17,6 @@
 import org.eclipse.core.internal.resources.*;
 import org.eclipse.core.resources.*;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
 
 //
 public class RefreshLocalTest extends LocalStoreTest implements ICoreConstants {
@@ -216,12 +215,9 @@
 		IFile file = project.getFile("file");
 		final IFile hackFile = file;
 		final Workspace workspace = (Workspace) getWorkspace();
-		IWorkspaceRunnable operation = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				workspace.createResource(hackFile, false);
-				((Resource) hackFile).getResourceInfo(false, true).set(M_LOCAL_EXISTS);
-			}
+		IWorkspaceRunnable operation = monitor -> {
+			workspace.createResource(hackFile, false);
+			((Resource) hackFile).getResourceInfo(false, true).set(M_LOCAL_EXISTS);
 		};
 		workspace.run(operation, null);
 		assertTrue("1.0", file.exists());
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/localstore/SymlinkResourceTest.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/localstore/SymlinkResourceTest.java
index f4f1d4e..9eac98c 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/localstore/SymlinkResourceTest.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/localstore/SymlinkResourceTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2015 Wind River Systems, Inc. and others.
+ * Copyright (c) 2008, 2017 Wind River Systems, Inc. and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,7 +17,8 @@
 import org.eclipse.core.filesystem.EFS;
 import org.eclipse.core.filesystem.IFileStore;
 import org.eclipse.core.resources.*;
-import org.eclipse.core.runtime.*;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.Path;
 
 /**
  * 
@@ -86,16 +87,13 @@
 			return;
 		/* Re-use projects which are cleaned up automatically */
 		final IProject project = projects[0];
-		getWorkspace().run(new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				/* delete open project because we must re-open with BACKGROUND_REFRESH */
-				project.delete(IResource.NEVER_DELETE_PROJECT_CONTENT, getMonitor());
-				project.create(null);
-				createBug232426Structure(EFS.getStore(project.getLocationURI()));
-				//Bug only happens with BACKGROUND_REFRESH.
-				project.open(IResource.BACKGROUND_REFRESH, getMonitor());
-			}
+		getWorkspace().run((IWorkspaceRunnable) monitor -> {
+			/* delete open project because we must re-open with BACKGROUND_REFRESH */
+			project.delete(IResource.NEVER_DELETE_PROJECT_CONTENT, getMonitor());
+			project.create(null);
+			createBug232426Structure(EFS.getStore(project.getLocationURI()));
+			//Bug only happens with BACKGROUND_REFRESH.
+			project.open(IResource.BACKGROUND_REFRESH, getMonitor());
 		}, null);
 
 		//wait for BACKGROUND_REFRESH to complete.
@@ -119,26 +117,20 @@
 			return;
 		/* Re-use projects which are cleaned up automatically */
 		final IProject project = projects[0];
-		getWorkspace().run(new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				/* delete open project because we must re-open with BACKGROUND_REFRESH */
-				project.delete(IResource.NEVER_DELETE_PROJECT_CONTENT, getMonitor());
-				project.create(null);
-				createBug358830Structure(EFS.getStore(project.getLocationURI()));
-				project.open(IResource.BACKGROUND_REFRESH, getMonitor());
-			}
+		getWorkspace().run((IWorkspaceRunnable) monitor -> {
+			/* delete open project because we must re-open with BACKGROUND_REFRESH */
+			project.delete(IResource.NEVER_DELETE_PROJECT_CONTENT, getMonitor());
+			project.create(null);
+			createBug358830Structure(EFS.getStore(project.getLocationURI()));
+			project.open(IResource.BACKGROUND_REFRESH, getMonitor());
 		}, null);
 
 		//wait for BACKGROUND_REFRESH to complete.
 		waitForRefresh();
 		final int resourceCount[] = new int[] {0};
-		project.accept(new IResourceVisitor() {
-			@Override
-			public boolean visit(IResource resource) {
-				resourceCount[0]++;
-				return true;
-			}
+		project.accept(resource -> {
+			resourceCount[0]++;
+			return true;
 		});
 		//We have 1 root + 1 folder + 1 file (.project) --> 3 elements to visit
 		assertEquals(3, resourceCount[0]);
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/localstore/UnifiedTreeTest.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/localstore/UnifiedTreeTest.java
index b19b8c3..30a4191 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/localstore/UnifiedTreeTest.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/localstore/UnifiedTreeTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2015 IBM Corporation and others.
+ *  Copyright (c) 2000, 2017 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -18,11 +18,13 @@
 import junit.framework.TestSuite;
 import org.eclipse.core.filesystem.EFS;
 import org.eclipse.core.filesystem.IFileStore;
-import org.eclipse.core.internal.localstore.*;
+import org.eclipse.core.internal.localstore.IUnifiedTreeVisitor;
+import org.eclipse.core.internal.localstore.UnifiedTree;
 import org.eclipse.core.internal.resources.Resource;
 import org.eclipse.core.internal.resources.Workspace;
 import org.eclipse.core.resources.*;
-import org.eclipse.core.runtime.*;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.Path;
 
 /**
  * 
@@ -59,15 +61,12 @@
 
 	protected void createFiles(final IContainer target, final Hashtable<String, String> set) throws CoreException {
 		final Workspace workspace = (Workspace) getWorkspace();
-		IWorkspaceRunnable operation = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				for (int i = 0; i < limit; i++) {
-					IFile child = target.getFile(new Path("wbFile" + i));
-					workspace.createResource(child, false);
-					String location = child.getLocation().toOSString();
-					set.put(location, "");
-				}
+		IWorkspaceRunnable operation = monitor -> {
+			for (int i = 0; i < limit; i++) {
+				IFile child = target.getFile(new Path("wbFile" + i));
+				workspace.createResource(child, false);
+				String location = child.getLocation().toOSString();
+				set.put(location, "");
 			}
 		};
 		workspace.run(operation, null);
@@ -125,20 +124,17 @@
 		createResourcesInFileSystem(((Resource) folder).getStore(), set);
 
 		/* create a visitor */
-		IUnifiedTreeVisitor visitor = new IUnifiedTreeVisitor() {
-			@Override
-			public boolean visit(UnifiedTreeNode node) {
-				/* test the node.getLocalName() method */
-				final IResource resource = node.getResource();
-				final IFileStore store = ((Resource) resource).getStore();
-				if (node.existsInFileSystem())
-					assertEquals("1.0", store.fetchInfo().getName(), node.getLocalName());
-				assertEquals("1.1", store, node.getStore());
+		IUnifiedTreeVisitor visitor = node -> {
+			/* test the node.getLocalName() method */
+			final IResource resource = node.getResource();
+			final IFileStore store = ((Resource) resource).getStore();
+			if (node.existsInFileSystem())
+				assertEquals("1.0", store.fetchInfo().getName(), node.getLocalName());
+			assertEquals("1.1", store, node.getStore());
 
-				/* remove from the hash table the resource we're visiting */
-				set.remove(resource.getLocation().toOSString());
-				return true;
-			}
+			/* remove from the hash table the resource we're visiting */
+			set.remove(resource.getLocation().toOSString());
+			return true;
 		};
 
 		/* instantiate a unified tree and use the visitor */
@@ -171,29 +167,26 @@
 		createResourcesInFileSystem(((Resource) folder).getStore(), set);
 
 		/* create a visitor */
-		IUnifiedTreeVisitor visitor = new IUnifiedTreeVisitor() {
-			@Override
-			public boolean visit(UnifiedTreeNode node) {
+		IUnifiedTreeVisitor visitor = node -> {
 
-				/* test the node.getLocalName() method */
-				final IResource resource = node.getResource();
-				IFileStore store = ((Resource) resource).getStore();
-				String key = store.fetchInfo().getName();
-				if (node.existsInFileSystem())
-					assertEquals("1.0", key, node.getLocalName());
-				assertEquals("1.1", store, node.getStore());
+			/* test the node.getLocalName() method */
+			final IResource resource = node.getResource();
+			IFileStore store = ((Resource) resource).getStore();
+			String key = store.fetchInfo().getName();
+			if (node.existsInFileSystem())
+				assertEquals("1.0", key, node.getLocalName());
+			assertEquals("1.1", store, node.getStore());
 
-				/* force children to be added to the queue */
-				node.getChildren();
+			/* force children to be added to the queue */
+			node.getChildren();
 
-				/* skip some resources */
-				if (resource.getName().startsWith("fsFolder"))
-					return false;
+			/* skip some resources */
+			if (resource.getName().startsWith("fsFolder"))
+				return false;
 
-				/* remove from the hash table the resource we're visiting */
-				set.remove(resource.getLocation().toOSString());
-				return true;
-			}
+			/* remove from the hash table the resource we're visiting */
+			set.remove(resource.getLocation().toOSString());
+			return true;
 		};
 
 		/**/
@@ -228,19 +221,16 @@
 		createResourcesInFileSystem(((Resource) project).getStore(), set);
 
 		/* create a visitor */
-		IUnifiedTreeVisitor visitor = new IUnifiedTreeVisitor() {
-			@Override
-			public boolean visit(UnifiedTreeNode node) {
-				/* test the node.getLocalName() method */
-				final IResource resource = node.getResource();
-				IFileStore store = ((Resource) resource).getStore();
-				if (node.existsInFileSystem())
-					assertEquals("1.0", store.fetchInfo().getName(), node.getLocalName());
-				assertEquals("1.1", store, node.getStore());
-				/* remove from the hash table the resource we're visiting */
-				set.remove(resource.getLocation().toOSString());
-				return true;
-			}
+		IUnifiedTreeVisitor visitor = node -> {
+			/* test the node.getLocalName() method */
+			final IResource resource = node.getResource();
+			IFileStore store = ((Resource) resource).getStore();
+			if (node.existsInFileSystem())
+				assertEquals("1.0", store.fetchInfo().getName(), node.getLocalName());
+			assertEquals("1.1", store, node.getStore());
+			/* remove from the hash table the resource we're visiting */
+			set.remove(resource.getLocation().toOSString());
+			return true;
 		};
 
 		/* instantiate a unified tree and use the visitor */
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/mapping/TestModelProvider.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/mapping/TestModelProvider.java
index 883c758..3981f26 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/mapping/TestModelProvider.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/mapping/TestModelProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2015 IBM Corporation and others.
+ * Copyright (c) 2006, 2017 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -38,12 +38,7 @@
 			return new ModelStatus(IStatus.OK, ResourcesPlugin.PI_RESOURCES, ID, Status.OK_STATUS.getMessage());
 		final ChangeDescription description = new ChangeDescription();
 		try {
-			rootDelta.accept(new IResourceDeltaVisitor() {
-				@Override
-				public boolean visit(IResourceDelta delta) {
-					return description.recordChange(delta);
-				}
-			});
+			rootDelta.accept(delta -> description.recordChange(delta));
 		} catch (CoreException e) {
 			description.addError(e);
 		}
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/properties/PropertyManagerTest.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/properties/PropertyManagerTest.java
index a604ccd..0f2d733 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/properties/PropertyManagerTest.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/properties/PropertyManagerTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * Copyright (c) 2000, 2017 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -78,18 +78,15 @@
 		Thread[] threads = new Thread[THREAD_COUNT];
 		for (int j = 0; j < THREAD_COUNT; j++) {
 			final String id = "GetSetProperty" + j;
-			threads[j] = new Thread(new Runnable() {
-				@Override
-				public void run() {
-					try {
-						doGetSetProperties(target, id, names, values);
-					} catch (CoreException e) {
-						//ignore failure if the project has been deleted
-						if (target.exists()) {
-							e.printStackTrace();
-							errorPointer[0] = e;
-							return;
-						}
+			threads[j] = new Thread((Runnable) () -> {
+				try {
+					doGetSetProperties(target, id, names, values);
+				} catch (CoreException e) {
+					//ignore failure if the project has been deleted
+					if (target.exists()) {
+						e.printStackTrace();
+						errorPointer[0] = e;
+						return;
 					}
 				}
 			}, id);
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/resources/WorkspaceConcurrencyTest.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/resources/WorkspaceConcurrencyTest.java
index 9358f4d..f3269ce 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/resources/WorkspaceConcurrencyTest.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/resources/WorkspaceConcurrencyTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2015 IBM Corporation and others.
+ * Copyright (c) 2004, 2017 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -48,12 +48,7 @@
 	public void testEndRuleInWorkspaceOperation() {
 		try {
 			final IProject project = getWorkspace().getRoot().getProject("testEndRuleInWorkspaceOperation");
-			getWorkspace().run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor monitor) {
-					Job.getJobManager().endRule(project);
-				}
-			}, project, IResource.NONE, getMonitor());
+			getWorkspace().run((IWorkspaceRunnable) monitor -> Job.getJobManager().endRule(project), project, IResource.NONE, getMonitor());
 			//should have failed
 			fail("1.0");
 		} catch (CoreException e) {
@@ -74,16 +69,13 @@
 		//simulating a scenario where workspace lock is held indefinitely
 		final int[] barrier = new int[1];
 		final Throwable[] error = new Throwable[1];
-		IResourceChangeListener listener = new IResourceChangeListener() {
-			@Override
-			public void resourceChanged(IResourceChangeEvent event) {
-				//block until we are told to do otherwise
-				barrier[0] = TestBarrier.STATUS_START;
-				try {
-					TestBarrier.waitForStatus(barrier, TestBarrier.STATUS_DONE);
-				} catch (Throwable e) {
-					error[0] = e;
-				}
+		IResourceChangeListener listener = event -> {
+			//block until we are told to do otherwise
+			barrier[0] = TestBarrier.STATUS_START;
+			try {
+				TestBarrier.waitForStatus(barrier, TestBarrier.STATUS_DONE);
+			} catch (Throwable e) {
+				error[0] = e;
 			}
 		};
 		getWorkspace().addResourceChangeListener(listener);
@@ -101,21 +93,15 @@
 			//create a second thread that attempts to modify the workspace, but immediately
 			//cancels itself. This thread should terminate immediately with a cancelation exception
 			final boolean[] canceled = new boolean[] {false};
-			Thread t2 = new Thread(new Runnable() {
-				@Override
-				public void run() {
-					try {
-						getWorkspace().run(new IWorkspaceRunnable() {
-							@Override
-							public void run(IProgressMonitor monitor) {
-								//no-op
-							}
-						}, new CancelingProgressMonitor());
-					} catch (CoreException e) {
-						fail("1.99", e);
-					} catch (OperationCanceledException e) {
-						canceled[0] = true;
-					}
+			Thread t2 = new Thread(() -> {
+				try {
+					getWorkspace().run((IWorkspaceRunnable) monitor -> {
+						//no-op
+					}, new CancelingProgressMonitor());
+				} catch (CoreException e1) {
+					fail("1.99", e1);
+				} catch (OperationCanceledException e2) {
+					canceled[0] = true;
 				}
 			});
 			t2.start();
@@ -158,11 +144,8 @@
 			}
 		};
 		try {
-			getWorkspace().run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor monitor) {
-					//noop
-				}
+			getWorkspace().run((IWorkspaceRunnable) monitor -> {
+				//noop
 			}, rule, IResource.NONE, getMonitor());
 		} catch (CoreException e) {
 			fail("1.99", e);
@@ -190,16 +173,13 @@
 		ensureExistsInWorkspace(touch, true);
 		ensureExistsInWorkspace(ruleFile, true);
 		final Throwable[] failure = new Throwable[1];
-		IResourceChangeListener listener = new IResourceChangeListener() {
-			@Override
-			public void resourceChanged(IResourceChangeEvent event) {
-				try {
-					touch.touch(null);
-				} catch (CoreException e) {
-					failure[0] = e;
-				} catch (RuntimeException e) {
-					failure[0] = e;
-				}
+		IResourceChangeListener listener = event -> {
+			try {
+				touch.touch(null);
+			} catch (CoreException e1) {
+				failure[0] = e1;
+			} catch (RuntimeException e2) {
+				failure[0] = e2;
 			}
 		};
 		workspace.addResourceChangeListener(listener, IResourceChangeEvent.POST_BUILD);
@@ -210,16 +190,13 @@
 				@Override
 				protected IStatus run(IProgressMonitor monitor) {
 					try {
-						workspace.run(new IWorkspaceRunnable() {
-							@Override
-							public void run(IProgressMonitor monitor) throws CoreException {
-								//do a build
-								workspace.build(IncrementalProjectBuilder.INCREMENTAL_BUILD, monitor);
-								//signal that the job has done the build
-								status[0] = TestBarrier.STATUS_RUNNING;
-								//wait for job two to start
-								TestBarrier.waitForStatus(status, 0, TestBarrier.STATUS_WAIT_FOR_DONE);
-							}
+						workspace.run((IWorkspaceRunnable) monitor1 -> {
+							//do a build
+							workspace.build(IncrementalProjectBuilder.INCREMENTAL_BUILD, monitor1);
+							//signal that the job has done the build
+							status[0] = TestBarrier.STATUS_RUNNING;
+							//wait for job two to start
+							TestBarrier.waitForStatus(status, 0, TestBarrier.STATUS_WAIT_FOR_DONE);
 						}, null);
 					} catch (CoreException e) {
 						return e.getStatus();
@@ -236,16 +213,13 @@
 				@Override
 				protected IStatus run(IProgressMonitor monitor) {
 					try {
-						workspace.run(new IWorkspaceRunnable() {
-							@Override
-							public void run(IProgressMonitor monitor) {
-								//signal that this job has started
-								status[1] = TestBarrier.STATUS_RUNNING;
-								//let job one finish
-								status[0] = TestBarrier.STATUS_WAIT_FOR_DONE;
-								//wait for job three to start
-								TestBarrier.waitForStatus(status, 1, TestBarrier.STATUS_WAIT_FOR_DONE);
-							}
+						workspace.run((IWorkspaceRunnable) monitor1 -> {
+							//signal that this job has started
+							status[1] = TestBarrier.STATUS_RUNNING;
+							//let job one finish
+							status[0] = TestBarrier.STATUS_WAIT_FOR_DONE;
+							//wait for job three to start
+							TestBarrier.waitForStatus(status, 1, TestBarrier.STATUS_WAIT_FOR_DONE);
 						}, null, IResource.NONE, null);
 					} catch (CoreException e) {
 						return e.getStatus();
@@ -259,18 +233,15 @@
 				@Override
 				protected IStatus run(IProgressMonitor monitor) {
 					try {
-						workspace.run(new IWorkspaceRunnable() {
-							@Override
-							public void run(IProgressMonitor monitor) throws CoreException {
-								//signal that this job has started
-								status[2] = TestBarrier.STATUS_RUNNING;
-								//let job two finish
-								status[1] = TestBarrier.STATUS_WAIT_FOR_DONE;
-								//ensure this job does something so the build listener runs
-								ruleFile.touch(null);
-								//wait for the ok to complete
-								TestBarrier.waitForStatus(status, 2, TestBarrier.STATUS_WAIT_FOR_DONE);
-							}
+						workspace.run((IWorkspaceRunnable) monitor1 -> {
+							//signal that this job has started
+							status[2] = TestBarrier.STATUS_RUNNING;
+							//let job two finish
+							status[1] = TestBarrier.STATUS_WAIT_FOR_DONE;
+							//ensure this job does something so the build listener runs
+							ruleFile.touch(null);
+							//wait for the ok to complete
+							TestBarrier.waitForStatus(status, 2, TestBarrier.STATUS_WAIT_FOR_DONE);
 						}, workspace.getRuleFactory().modifyRule(ruleFile), IResource.NONE, null);
 					} catch (CoreException e) {
 						return e.getStatus();
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/resources/WorkspacePreferencesTest.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/resources/WorkspacePreferencesTest.java
index 3190744..ffcf68e 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/resources/WorkspacePreferencesTest.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/resources/WorkspacePreferencesTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * Copyright (c) 2000, 2017 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -134,12 +134,7 @@
 		modified.setSnapshotInterval((original.getSnapshotInterval() + 1) * 2);
 
 		final List<String> changedProperties = new LinkedList<>();
-		Preferences.IPropertyChangeListener listener = new Preferences.IPropertyChangeListener() {
-			@Override
-			public void propertyChange(Preferences.PropertyChangeEvent event) {
-				changedProperties.add(event.getProperty());
-			}
-		};
+		Preferences.IPropertyChangeListener listener = event -> changedProperties.add(event.getProperty());
 		try {
 			preferences.addPropertyChangeListener(listener);
 			try {
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/watson/ElementTreeIteratorTest.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/watson/ElementTreeIteratorTest.java
index 889c7ee..27714ed 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/watson/ElementTreeIteratorTest.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/watson/ElementTreeIteratorTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2015 IBM Corporation and others.
+ *  Copyright (c) 2000, 2017 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -72,29 +72,20 @@
 		final ElementTree tree = baseTree.newEmptyDelta();
 		modifyTree(tree);
 		final ArrayList<Object> elts = new ArrayList<>();
-		final IElementContentVisitor visitor = new IElementContentVisitor() {
-			@Override
-			public boolean visitElement(ElementTree tree, IPathRequestor requestor, Object info) {
-				elts.add(info);
-				return true;
-			}
+		final IElementContentVisitor visitor = (tree1, requestor, info) -> {
+			elts.add(info);
+			return true;
 		};
-		Thread reader = new Thread(new Runnable() {
-			@Override
-			public void run() {
-				for (int i = 0; i < 80000; i++) {
-					new ElementTreeIterator(tree, Path.ROOT).iterate(visitor);
-				}
+		Thread reader = new Thread((Runnable) () -> {
+			for (int i = 0; i < 80000; i++) {
+				new ElementTreeIterator(tree, Path.ROOT).iterate(visitor);
 			}
 		}, "Holmes (reader)");
-		Thread writer = new Thread(new Runnable() {
-			@Override
-			public void run() {
-				for (int i = 0; i < 1000; i++) {
-					modifyTree(tree);
-					recursiveDelete(tree, Path.ROOT);
-					setupElementTree(tree, 3);
-				}
+		Thread writer = new Thread((Runnable) () -> {
+			for (int i = 0; i < 1000; i++) {
+				modifyTree(tree);
+				recursiveDelete(tree, Path.ROOT);
+				setupElementTree(tree, 3);
 			}
 		}, "Doyle (writer)");
 
@@ -123,12 +114,9 @@
 		int n = 3;
 		setupElementTree(tree, n);
 		final ArrayList<IPath> elts = new ArrayList<>();
-		IElementContentVisitor elementVisitor = new IElementContentVisitor() {
-			@Override
-			public boolean visitElement(ElementTree tree, IPathRequestor requestor, Object info) {
-				elts.add(requestor.requestPath());
-				return true;
-			}
+		IElementContentVisitor elementVisitor = (tree1, requestor, info) -> {
+			elts.add(requestor.requestPath());
+			return true;
 		};
 		new ElementTreeIterator(tree, Path.ROOT).iterate(elementVisitor);
 		assertEquals("1", 2 + n + n * n + n * n * n, elts.size());
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/CharsetTest.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/CharsetTest.java
index 39f305d..329e686 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/CharsetTest.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/CharsetTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2004, 2015 IBM Corporation and others.
+ *  Copyright (c) 2004, 2017 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -118,17 +118,14 @@
 			final IFile file = project.getFile("file.txt");
 			ensureExistsInWorkspace(file, true);
 			project.setDefaultCharset("FOO", getMonitor());
-			workspace.run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor monitor) throws CoreException {
-					assertEquals("0.9", "FOO", file.getCharset());
-					file.setCharset("BAR", getMonitor());
-					assertEquals("1.0", "BAR", file.getCharset());
-					file.move(project.getFullPath().append("file2.txt"), IResource.NONE, monitor);
-					IFile file2 = project.getFile("file2.txt");
-					assertExistsInWorkspace(file2, false);
-					assertEquals("2.0", "BAR", file.getCharset());
-				}
+			workspace.run((IWorkspaceRunnable) monitor -> {
+				assertEquals("0.9", "FOO", file.getCharset());
+				file.setCharset("BAR", getMonitor());
+				assertEquals("1.0", "BAR", file.getCharset());
+				file.move(project.getFullPath().append("file2.txt"), IResource.NONE, monitor);
+				IFile file2 = project.getFile("file2.txt");
+				assertExistsInWorkspace(file2, false);
+				assertEquals("2.0", "BAR", file.getCharset());
 			}, null);
 		} finally {
 			ensureDoesNotExistInWorkspace(project);
@@ -182,23 +179,20 @@
 	private void clearAllEncodings(IResource root) throws CoreException {
 		if (root == null || !root.exists())
 			return;
-		IResourceVisitor visitor = new IResourceVisitor() {
-			@Override
-			public boolean visit(IResource resource) throws CoreException {
-				if (!resource.exists())
-					return false;
-				switch (resource.getType()) {
-					case IResource.FILE :
-						((IFile) resource).setCharset(null, getMonitor());
-						break;
-					case IResource.ROOT :
-						// do nothing
-						break;
-					default :
-						((IContainer) resource).setDefaultCharset(null, getMonitor());
-				}
-				return true;
+		IResourceVisitor visitor = resource -> {
+			if (!resource.exists())
+				return false;
+			switch (resource.getType()) {
+				case IResource.FILE :
+					((IFile) resource).setCharset(null, getMonitor());
+					break;
+				case IResource.ROOT :
+					// do nothing
+					break;
+				default :
+					((IContainer) resource).setDefaultCharset(null, getMonitor());
 			}
+			return true;
 		};
 		root.accept(visitor);
 	}
@@ -1330,12 +1324,9 @@
 			verifier.addExpectedChange(prefs.getParent(), IResourceDelta.CHANGED, 0);
 			verifier.addExpectedChange(prefs, IResourceDelta.CHANGED, IResourceDelta.CONTENT);
 			try {
-				workspace.run(new IWorkspaceRunnable() {
-					@Override
-					public void run(IProgressMonitor monitor) throws CoreException {
-						file1.setCharset("FOO", getMonitor());
-						file2.setCharset("FOO", getMonitor());
-					}
+				workspace.run((IWorkspaceRunnable) monitor -> {
+					file1.setCharset("FOO", getMonitor());
+					file2.setCharset("FOO", getMonitor());
 				}, getMonitor());
 			} catch (CoreException e) {
 				fail("1.4.0", e);
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/HiddenResourceTest.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/HiddenResourceTest.java
index 7e51be3..f501673 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/HiddenResourceTest.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/HiddenResourceTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2015 IBM Corporation and others.
+ *  Copyright (c) 2000, 2017 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -14,7 +14,6 @@
 import junit.framework.TestSuite;
 import org.eclipse.core.resources.*;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
 
 public class HiddenResourceTest extends ResourceTest {
 	public HiddenResourceTest() {
@@ -585,12 +584,7 @@
 		final ResourceDeltaVerifier listener = new ResourceDeltaVerifier();
 		getWorkspace().addResourceChangeListener(listener);
 		try {
-			IWorkspaceRunnable body = new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor monitor) {
-					ensureExistsInWorkspace(resources, true);
-				}
-			};
+			IWorkspaceRunnable body = monitor -> ensureExistsInWorkspace(resources, true);
 			try {
 				listener.addExpectedChange(resources, IResourceDelta.ADDED, IResource.NONE);
 				listener.addExpectedChange(project, IResourceDelta.ADDED, IResourceDelta.OPEN);
@@ -609,12 +603,9 @@
 		// set the folder to be hidden and do the same test
 		getWorkspace().addResourceChangeListener(listener);
 		try {
-			IWorkspaceRunnable body = new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor monitor) {
-					ensureExistsInWorkspace(resources, true);
-					setHidden("2.0", folder, true, IResource.DEPTH_ZERO);
-				}
+			IWorkspaceRunnable body = monitor -> {
+				ensureExistsInWorkspace(resources, true);
+				setHidden("2.0", folder, true, IResource.DEPTH_ZERO);
 			};
 			try {
 				listener.reset();
@@ -634,12 +625,9 @@
 		// set all resources to be hidden and do the same test
 		getWorkspace().addResourceChangeListener(listener);
 		try {
-			IWorkspaceRunnable body = new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor monitor) {
-					ensureExistsInWorkspace(resources, true);
-					setHidden("3.0", project, true, IResource.DEPTH_INFINITE);
-				}
+			IWorkspaceRunnable body = monitor -> {
+				ensureExistsInWorkspace(resources, true);
+				setHidden("3.0", project, true, IResource.DEPTH_INFINITE);
 			};
 			try {
 				listener.reset();
@@ -791,15 +779,12 @@
 	}
 
 	protected void assertHidden(final String message, IResource root, final boolean value, int depth) {
-		IResourceVisitor visitor = new IResourceVisitor() {
-			@Override
-			public boolean visit(IResource resource) {
-				boolean expected = false;
-				if (resource.getType() == IResource.PROJECT || resource.getType() == IResource.FILE || resource.getType() == IResource.FOLDER)
-					expected = value;
-				assertEquals(message + resource.getFullPath(), expected, resource.isHidden());
-				return true;
-			}
+		IResourceVisitor visitor = resource -> {
+			boolean expected = false;
+			if (resource.getType() == IResource.PROJECT || resource.getType() == IResource.FILE || resource.getType() == IResource.FOLDER)
+				expected = value;
+			assertEquals(message + resource.getFullPath(), expected, resource.isHidden());
+			return true;
 		};
 		try {
 			root.accept(visitor, depth, IContainer.INCLUDE_HIDDEN);
@@ -809,16 +794,13 @@
 	}
 
 	protected void setHidden(final String message, IResource root, final boolean value, int depth) {
-		IResourceVisitor visitor = new IResourceVisitor() {
-			@Override
-			public boolean visit(IResource resource) {
-				try {
-					resource.setHidden(value);
-				} catch (CoreException e) {
-					fail(message + resource.getFullPath(), e);
-				}
-				return true;
+		IResourceVisitor visitor = resource -> {
+			try {
+				resource.setHidden(value);
+			} catch (CoreException e) {
+				fail(message + resource.getFullPath(), e);
 			}
+			return true;
 		};
 		try {
 			root.accept(visitor, depth, IContainer.INCLUDE_HIDDEN);
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/IProjectTest.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/IProjectTest.java
index 21b9178..723a7e0 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/IProjectTest.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/IProjectTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * Copyright (c) 2000, 2017 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -46,12 +46,9 @@
 	public void ensureExistsInWorkspace(final IProject project, final IProjectDescription description) {
 		if (project == null)
 			return;
-		IWorkspaceRunnable body = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				project.create(description, monitor);
-				project.open(monitor);
-			}
+		IWorkspaceRunnable body = monitor -> {
+			project.create(description, monitor);
+			project.open(monitor);
 		};
 		try {
 			getWorkspace().run(body, null);
@@ -2469,12 +2466,9 @@
 			assertTrue("2.0", !oldPath.equals(newPath));
 
 			// make sure all the resources still exist.	
-			IResourceVisitor visitor = new IResourceVisitor() {
-				@Override
-				public boolean visit(IResource resource) {
-					assertExistsInWorkspace("2.1." + resource.getFullPath(), resource);
-					return true;
-				}
+			IResourceVisitor visitor = resource -> {
+				assertExistsInWorkspace("2.1." + resource.getFullPath(), resource);
+				return true;
 			};
 			try {
 				getWorkspace().getRoot().accept(visitor);
@@ -2831,15 +2825,12 @@
 
 	public void testWorkspaceNotificationClose() {
 		final int[] count = new int[1];
-		IResourceChangeListener listener = new IResourceChangeListener() {
-			@Override
-			public void resourceChanged(IResourceChangeEvent event) {
-				assertEquals("1.0", IResourceChangeEvent.PRE_CLOSE, event.getType());
-				count[0]++;
-				assertEquals("1.1", IResource.PROJECT, event.getResource().getType());
-				assertTrue("1.2", event.getResource().exists());
-				assertTrue("1.3", ((IProject) event.getResource()).isOpen());
-			}
+		IResourceChangeListener listener = event -> {
+			assertEquals("1.0", IResourceChangeEvent.PRE_CLOSE, event.getType());
+			count[0]++;
+			assertEquals("1.1", IResource.PROJECT, event.getResource().getType());
+			assertTrue("1.2", event.getResource().exists());
+			assertTrue("1.3", ((IProject) event.getResource()).isOpen());
 		};
 		getWorkspace().addResourceChangeListener(listener, IResourceChangeEvent.PRE_CLOSE);
 		IProject project = getWorkspace().getRoot().getProject("MyProject");
@@ -2864,14 +2855,11 @@
 
 	public void testWorkspaceNotificationDelete() {
 		final int[] count = new int[1];
-		IResourceChangeListener listener = new IResourceChangeListener() {
-			@Override
-			public void resourceChanged(IResourceChangeEvent event) {
-				assertEquals("1.0", IResourceChangeEvent.PRE_DELETE, event.getType());
-				count[0]++;
-				assertEquals("1.1", IResource.PROJECT, event.getResource().getType());
-				assertTrue("1.2", event.getResource().exists());
-			}
+		IResourceChangeListener listener = event -> {
+			assertEquals("1.0", IResourceChangeEvent.PRE_DELETE, event.getType());
+			count[0]++;
+			assertEquals("1.1", IResource.PROJECT, event.getResource().getType());
+			assertTrue("1.2", event.getResource().exists());
 		};
 		getWorkspace().addResourceChangeListener(listener, IResourceChangeEvent.PRE_DELETE);
 		IProject project = getWorkspace().getRoot().getProject("MyProject");
@@ -2894,14 +2882,11 @@
 
 	public void testWorkspaceNotificationMove() {
 		final int[] count = new int[1];
-		IResourceChangeListener listener = new IResourceChangeListener() {
-			@Override
-			public void resourceChanged(IResourceChangeEvent event) {
-				assertEquals("1.0", IResourceChangeEvent.PRE_DELETE, event.getType());
-				count[0]++;
-				assertEquals("1.1", IResource.PROJECT, event.getResource().getType());
-				assertTrue("1.2", event.getResource().exists());
-			}
+		IResourceChangeListener listener = event -> {
+			assertEquals("1.0", IResourceChangeEvent.PRE_DELETE, event.getType());
+			count[0]++;
+			assertEquals("1.1", IResource.PROJECT, event.getResource().getType());
+			assertTrue("1.2", event.getResource().exists());
 		};
 		getWorkspace().addResourceChangeListener(listener, IResourceChangeEvent.PRE_DELETE);
 		IProject project = getWorkspace().getRoot().getProject("MyProject");
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/IResourceChangeEventTest.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/IResourceChangeEventTest.java
index 3866f64..bb1709a 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/IResourceChangeEventTest.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/IResourceChangeEventTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2015 IBM Corporation and others.
+ *  Copyright (c) 2000, 2017 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -14,7 +14,6 @@
 import junit.framework.TestSuite;
 import org.eclipse.core.resources.*;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
 
 /**
  * This class tests the public API of IResourceChangeEvent.
@@ -63,13 +62,10 @@
 		allResources = new IResource[] {project1, project2, folder1, folder2, folder3, file1, file2, file3};
 
 		// Create and open the resources
-		IWorkspaceRunnable body = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				ensureExistsInWorkspace(allResources, true);
-				marker2 = file2.createMarker(IMarker.BOOKMARK);
-				marker3 = file3.createMarker(IMarker.BOOKMARK);
-			}
+		IWorkspaceRunnable body = monitor -> {
+			ensureExistsInWorkspace(allResources, true);
+			marker2 = file2.createMarker(IMarker.BOOKMARK);
+			marker3 = file3.createMarker(IMarker.BOOKMARK);
 		};
 		try {
 			getWorkspace().run(body, getMonitor());
@@ -102,50 +98,44 @@
 		 * - remove marker2
 		 * - change marker3
 		 */
-		IResourceChangeListener listener = new IResourceChangeListener() {
-			@Override
-			public void resourceChanged(IResourceChangeEvent event) {
-				//bookmark type, no subtypes
-				IMarkerDelta[] deltas = event.findMarkerDeltas(IMarker.BOOKMARK, false);
-				verifyDeltas(deltas);
+		IResourceChangeListener listener = event -> {
+			//bookmark type, no subtypes
+			IMarkerDelta[] deltas = event.findMarkerDeltas(IMarker.BOOKMARK, false);
+			verifyDeltas(deltas);
 
-				//bookmark type, with subtypes
-				deltas = event.findMarkerDeltas(IMarker.BOOKMARK, true);
-				verifyDeltas(deltas);
+			//bookmark type, with subtypes
+			deltas = event.findMarkerDeltas(IMarker.BOOKMARK, true);
+			verifyDeltas(deltas);
 
-				//marker type, no subtypes
-				deltas = event.findMarkerDeltas(IMarker.MARKER, false);
-				assertNotNull("10.0", deltas);
-				assertTrue("10.1", deltas.length == 0);
+			//marker type, no subtypes
+			deltas = event.findMarkerDeltas(IMarker.MARKER, false);
+			assertNotNull("10.0", deltas);
+			assertTrue("10.1", deltas.length == 0);
 
-				//marker type, with subtypes
-				deltas = event.findMarkerDeltas(IMarker.MARKER, true);
-				verifyDeltas(deltas);
+			//marker type, with subtypes
+			deltas = event.findMarkerDeltas(IMarker.MARKER, true);
+			verifyDeltas(deltas);
 
-				//problem type, with subtypes
-				deltas = event.findMarkerDeltas(IMarker.PROBLEM, true);
-				assertNotNull("12.0", deltas);
-				assertTrue("12.1", deltas.length == 0);
+			//problem type, with subtypes
+			deltas = event.findMarkerDeltas(IMarker.PROBLEM, true);
+			assertNotNull("12.0", deltas);
+			assertTrue("12.1", deltas.length == 0);
 
-				//all types, include subtypes
-				deltas = event.findMarkerDeltas(null, true);
-				verifyDeltas(deltas);
+			//all types, include subtypes
+			deltas = event.findMarkerDeltas(null, true);
+			verifyDeltas(deltas);
 
-				//all types, no subtypes
-				deltas = event.findMarkerDeltas(null, false);
-				verifyDeltas(deltas);
-			}
+			//all types, no subtypes
+			deltas = event.findMarkerDeltas(null, false);
+			verifyDeltas(deltas);
 		};
 		getWorkspace().addResourceChangeListener(listener);
 
 		//do the work	
-		IWorkspaceRunnable body = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				marker1 = file1.createMarker(IMarker.BOOKMARK);
-				marker2.delete();
-				marker3.setAttribute("Foo", true);
-			}
+		IWorkspaceRunnable body = monitor -> {
+			marker1 = file1.createMarker(IMarker.BOOKMARK);
+			marker2.delete();
+			marker3.setAttribute("Foo", true);
 		};
 		try {
 			getWorkspace().run(body, getMonitor());
@@ -161,44 +151,41 @@
 		 * The following changes will occur:
 		 * - change file1
 		 */
-		IResourceChangeListener listener = new IResourceChangeListener() {
-			@Override
-			public void resourceChanged(IResourceChangeEvent event) {
-				//bookmark type, no subtypes
-				IMarkerDelta[] deltas = event.findMarkerDeltas(IMarker.BOOKMARK, false);
-				assertNotNull("1.0", deltas);
-				assertTrue("1.1", deltas.length == 0);
+		IResourceChangeListener listener = event -> {
+			//bookmark type, no subtypes
+			IMarkerDelta[] deltas = event.findMarkerDeltas(IMarker.BOOKMARK, false);
+			assertNotNull("1.0", deltas);
+			assertTrue("1.1", deltas.length == 0);
 
-				//bookmark type, with subtypes
-				deltas = event.findMarkerDeltas(IMarker.BOOKMARK, true);
-				assertNotNull("2.0", deltas);
-				assertTrue("2.1", deltas.length == 0);
+			//bookmark type, with subtypes
+			deltas = event.findMarkerDeltas(IMarker.BOOKMARK, true);
+			assertNotNull("2.0", deltas);
+			assertTrue("2.1", deltas.length == 0);
 
-				//marker type, no subtypes
-				deltas = event.findMarkerDeltas(IMarker.MARKER, false);
-				assertNotNull("3.0", deltas);
-				assertTrue("3.1", deltas.length == 0);
+			//marker type, no subtypes
+			deltas = event.findMarkerDeltas(IMarker.MARKER, false);
+			assertNotNull("3.0", deltas);
+			assertTrue("3.1", deltas.length == 0);
 
-				//marker type, with subtypes
-				deltas = event.findMarkerDeltas(IMarker.MARKER, true);
-				assertNotNull("4.0", deltas);
-				assertTrue("4.1", deltas.length == 0);
+			//marker type, with subtypes
+			deltas = event.findMarkerDeltas(IMarker.MARKER, true);
+			assertNotNull("4.0", deltas);
+			assertTrue("4.1", deltas.length == 0);
 
-				//problem type, with subtypes
-				deltas = event.findMarkerDeltas(IMarker.PROBLEM, true);
-				assertNotNull("5.0", deltas);
-				assertTrue("5.1", deltas.length == 0);
+			//problem type, with subtypes
+			deltas = event.findMarkerDeltas(IMarker.PROBLEM, true);
+			assertNotNull("5.0", deltas);
+			assertTrue("5.1", deltas.length == 0);
 
-				//all types, include subtypes
-				deltas = event.findMarkerDeltas(null, true);
-				assertNotNull("6.0", deltas);
-				assertTrue("6.1", deltas.length == 0);
+			//all types, include subtypes
+			deltas = event.findMarkerDeltas(null, true);
+			assertNotNull("6.0", deltas);
+			assertTrue("6.1", deltas.length == 0);
 
-				//all types, no subtypes
-				deltas = event.findMarkerDeltas(null, false);
-				assertNotNull("7.0", deltas);
-				assertTrue("7.1", deltas.length == 0);
-			}
+			//all types, no subtypes
+			deltas = event.findMarkerDeltas(null, false);
+			assertNotNull("7.0", deltas);
+			assertTrue("7.1", deltas.length == 0);
 		};
 		getWorkspace().addResourceChangeListener(listener);
 
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/IResourceChangeListenerTest.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/IResourceChangeListenerTest.java
index c1f3e35..3cf47d2 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/IResourceChangeListenerTest.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/IResourceChangeListenerTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * Copyright (c) 2000, 2017 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -85,12 +85,9 @@
 						fCounter = 0;
 						long start = System.currentTimeMillis();
 						IResourceDelta delta = event.getDelta();
-						delta.accept(new IResourceDeltaVisitor() {
-							@Override
-							public boolean visit(IResourceDelta delta2) {
-								fCounter++;
-								return true;
-							}
+						delta.accept(delta2 -> {
+							fCounter++;
+							return true;
 						});
 						long end = System.currentTimeMillis();
 						System.out.println("    Number of deltas: " + fCounter + ". Time needed: " + (end - start));
@@ -104,18 +101,15 @@
 		// add the listener
 		getWorkspace().addResourceChangeListener(listener);
 		// setup the test data
-		IWorkspaceRunnable body = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				IProject project = getWorkspace().getRoot().getProject("Test");
-				IProjectDescription description = getWorkspace().newProjectDescription(project.getName());
-				IPath root = getWorkspace().getRoot().getLocation();
-				IPath contents = root.append("temp/testing");
-				description.setLocation(contents);
-				project.create(description, getMonitor());
-				project.open(getMonitor());
-				project.refreshLocal(IResource.DEPTH_INFINITE, getMonitor());
-			}
+		IWorkspaceRunnable body = monitor -> {
+			IProject project = getWorkspace().getRoot().getProject("Test");
+			IProjectDescription description = getWorkspace().newProjectDescription(project.getName());
+			IPath root = getWorkspace().getRoot().getLocation();
+			IPath contents = root.append("temp/testing");
+			description.setLocation(contents);
+			project.create(description, getMonitor());
+			project.open(getMonitor());
+			project.refreshLocal(IResource.DEPTH_INFINITE, getMonitor());
 		};
 		try {
 			getWorkspace().run(body, getMonitor());
@@ -123,18 +117,12 @@
 			fail("2.0", e);
 		}
 		// touch all resources (so that they appear in the delta)
-		body = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				IResourceVisitor visitor = new IResourceVisitor() {
-					@Override
-					public boolean visit(IResource resource) throws CoreException {
-						resource.touch(getMonitor());
-						return true;
-					}
-				};
-				getWorkspace().getRoot().accept(visitor);
-			}
+		body = monitor -> {
+			IResourceVisitor visitor = resource -> {
+				resource.touch(getMonitor());
+				return true;
+			};
+			getWorkspace().getRoot().accept(visitor);
 		};
 		try {
 			getWorkspace().run(body, getMonitor());
@@ -180,15 +168,12 @@
 	 */
 	void assertNotDeltaVisits(final String message, IResourceDelta delta, final IResource[] resources) {
 		try {
-			delta.accept(new IResourceDeltaVisitor() {
-				@Override
-				public boolean visit(IResourceDelta delta2) {
-					IResource deltaResource = delta2.getResource();
-					for (int i = 0; i < resources.length; i++) {
-						assertTrue(message, !deltaResource.equals(resources[i]));
-					}
-					return true;
+			delta.accept(delta2 -> {
+				IResource deltaResource = delta2.getResource();
+				for (int i = 0; i < resources.length; i++) {
+					assertTrue(message, !deltaResource.equals(resources[i]));
 				}
+				return true;
 			});
 		} catch (CoreException e) {
 			fail(message, e);
@@ -239,14 +224,11 @@
 		project1MetaData = project1.getFile(IProjectDescription.DESCRIPTION_FILE_NAME);
 		project2MetaData = project2.getFile(IProjectDescription.DESCRIPTION_FILE_NAME);
 		// Create and open a project, folder and file
-		IWorkspaceRunnable body = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				project1.create(getMonitor());
-				project1.open(getMonitor());
-				folder1.create(true, true, getMonitor());
-				file1.create(getRandomContents(), true, getMonitor());
-			}
+		IWorkspaceRunnable body = monitor -> {
+			project1.create(getMonitor());
+			project1.open(getMonitor());
+			folder1.create(true, true, getMonitor());
+			file1.create(getRandomContents(), true, getMonitor());
 		};
 		verifier = new ResourceDeltaVerifier();
 		getWorkspace().addResourceChangeListener(verifier, IResourceChangeEvent.POST_CHANGE);
@@ -278,34 +260,25 @@
 	 */
 	public void test_1GDK9OG() {
 		// create the resource change listener
-		IResourceChangeListener listener = new IResourceChangeListener() {
-			@Override
-			public void resourceChanged(final IResourceChangeEvent event) {
-				try {
-					IWorkspaceRunnable body = new IWorkspaceRunnable() {
-						@Override
-						public void run(IProgressMonitor monitor) throws CoreException {
-							// modify the tree.
-							IResourceDeltaVisitor visitor = new IResourceDeltaVisitor() {
-								@Override
-								public boolean visit(IResourceDelta delta) throws CoreException {
-									IResource resource = delta.getResource();
-									try {
-										resource.touch(getMonitor());
-									} catch (RuntimeException e) {
-										throw e;
-									}
-									resource.createMarker(IMarker.PROBLEM);
-									return true;
-								}
-							};
-							event.getDelta().accept(visitor);
+		IResourceChangeListener listener = event -> {
+			try {
+				IWorkspaceRunnable body = monitor -> {
+					// modify the tree.
+					IResourceDeltaVisitor visitor = delta -> {
+						IResource resource = delta.getResource();
+						try {
+							resource.touch(getMonitor());
+						} catch (RuntimeException e) {
+							throw e;
 						}
+						resource.createMarker(IMarker.PROBLEM);
+						return true;
 					};
-					getWorkspace().run(body, getMonitor());
-				} catch (CoreException e) {
-					fail("1.0", e);
-				}
+					event.getDelta().accept(visitor);
+				};
+				getWorkspace().run(body, getMonitor());
+			} catch (CoreException e) {
+				fail("1.0", e);
 			}
 		};
 		// register the listener with the workspace.
@@ -313,12 +286,9 @@
 		try {
 			IWorkspaceRunnable body = new IWorkspaceRunnable() {
 				// cause a delta by touching all resources
-				final IResourceVisitor visitor = new IResourceVisitor() {
-					@Override
-					public boolean visit(IResource resource) throws CoreException {
-						resource.touch(getMonitor());
-						return true;
-					}
+				final IResourceVisitor visitor = resource -> {
+					resource.touch(getMonitor());
+					return true;
 				};
 
 				@Override
@@ -346,16 +316,13 @@
 	public void testAddAndRemoveFile() {
 		try {
 			verifier.reset();
-			getWorkspace().run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor m) throws CoreException {
-					m.beginTask("Creating and deleting", 100);
-					try {
-						file2.create(getRandomContents(), true, new SubProgressMonitor(m, 50));
-						file2.delete(true, new SubProgressMonitor(m, 50));
-					} finally {
-						m.done();
-					}
+			getWorkspace().run((IWorkspaceRunnable) m -> {
+				m.beginTask("Creating and deleting", 100);
+				try {
+					file2.create(getRandomContents(), true, SubMonitor.convert(m, 50));
+					file2.delete(true, SubMonitor.convert(m, 50));
+				} finally {
+					m.done();
 				}
 			}, getMonitor());
 			//should not have been verified since there was no change
@@ -368,16 +335,13 @@
 	public void testAddAndRemoveFolder() {
 		try {
 			verifier.reset();
-			getWorkspace().run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor m) throws CoreException {
-					m.beginTask("Creating and deleting", 100);
-					try {
-						folder2.create(true, true, new SubProgressMonitor(m, 50));
-						folder2.delete(true, new SubProgressMonitor(m, 50));
-					} finally {
-						m.done();
-					}
+			getWorkspace().run((IWorkspaceRunnable) m -> {
+				m.beginTask("Creating and deleting", 100);
+				try {
+					folder2.create(true, true, SubMonitor.convert(m, 50));
+					folder2.delete(true, SubMonitor.convert(m, 50));
+				} finally {
+					m.done();
 				}
 			}, getMonitor());
 			//should not have been verified since there was no change
@@ -401,16 +365,13 @@
 		try {
 			verifier.addExpectedChange(folder2, IResourceDelta.ADDED, 0);
 			verifier.addExpectedChange(file3, IResourceDelta.ADDED, 0);
-			getWorkspace().run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor m) throws CoreException {
-					m.beginTask("Creating folder and file", 100);
-					try {
-						folder2.create(true, true, new SubProgressMonitor(m, 50));
-						file3.create(getRandomContents(), true, new SubProgressMonitor(m, 50));
-					} finally {
-						m.done();
-					}
+			getWorkspace().run((IWorkspaceRunnable) m -> {
+				m.beginTask("Creating folder and file", 100);
+				try {
+					folder2.create(true, true, SubMonitor.convert(m, 50));
+					file3.create(getRandomContents(), true, SubMonitor.convert(m, 50));
+				} finally {
+					m.done();
 				}
 			}, getMonitor());
 			assertDelta();
@@ -446,50 +407,38 @@
 	 */
 	public void testBug45996() {
 		// create the resource change listener
-		IResourceChangeListener listener = new IResourceChangeListener() {
-			@Override
-			public void resourceChanged(final IResourceChangeEvent event) {
-				boolean failed = false;
-				try {
-					IWorkspaceRunnable body = new IWorkspaceRunnable() {
-						@Override
-						public void run(IProgressMonitor monitor) throws CoreException {
-							// modify the tree.
-							IResourceDeltaVisitor visitor = new IResourceDeltaVisitor() {
-								@Override
-								public boolean visit(IResourceDelta delta) throws CoreException {
-									IResource resource = delta.getResource();
-									try {
-										resource.touch(getMonitor());
-									} catch (RuntimeException e) {
-										throw e;
-									}
-									resource.createMarker(IMarker.PROBLEM);
-									return true;
-								}
-							};
-							event.getDelta().accept(visitor);
+		IResourceChangeListener listener = event -> {
+			boolean failed = false;
+			try {
+				IWorkspaceRunnable body = monitor -> {
+					// modify the tree.
+					IResourceDeltaVisitor visitor = delta -> {
+						IResource resource = delta.getResource();
+						try {
+							resource.touch(getMonitor());
+						} catch (RuntimeException e) {
+							throw e;
 						}
+						resource.createMarker(IMarker.PROBLEM);
+						return true;
 					};
-					getWorkspace().run(body, getMonitor());
-				} catch (CoreException e) {
-					//should fail
-					failed = true;
-				}
-				assertTrue("1.0", failed);
+					event.getDelta().accept(visitor);
+				};
+				getWorkspace().run(body, getMonitor());
+			} catch (CoreException e) {
+				//should fail
+				failed = true;
 			}
+			assertTrue("1.0", failed);
 		};
 		// register the listener with the workspace.
 		getWorkspace().addResourceChangeListener(listener, IResourceChangeEvent.POST_CHANGE);
 		try {
 			IWorkspaceRunnable body = new IWorkspaceRunnable() {
 				// cause a delta by touching all resources
-				final IResourceVisitor visitor = new IResourceVisitor() {
-					@Override
-					public boolean visit(IResource resource) throws CoreException {
-						resource.touch(getMonitor());
-						return true;
-					}
+				final IResourceVisitor visitor = resource -> {
+					resource.touch(getMonitor());
+					return true;
 				};
 
 				@Override
@@ -520,12 +469,9 @@
 			final int[] triggers = new int[] {IncrementalProjectBuilder.INCREMENTAL_BUILD, IncrementalProjectBuilder.FULL_BUILD, IncrementalProjectBuilder.CLEAN_BUILD,};
 			for (int i = 0; i < triggers.length; i++) {
 				final int trigger = triggers[i];
-				workspace.run(new IWorkspaceRunnable() {
-					@Override
-					public void run(IProgressMonitor monitor) throws CoreException {
-						file1.touch(null);
-						workspace.build(trigger, monitor);
-					}
+				workspace.run((IWorkspaceRunnable) monitor -> {
+					file1.touch(null);
+					workspace.build(trigger, monitor);
 				}, getMonitor());
 				assertEquals("1.0." + i, workspace, preBuild.source);
 				assertEquals("1.1." + i, workspace, postBuild.source);
@@ -534,12 +480,9 @@
 				assertEquals("1.4." + i, trigger, postBuild.trigger);
 				assertEquals("1.5." + i, 0, postChange.trigger);
 
-				workspace.run(new IWorkspaceRunnable() {
-					@Override
-					public void run(IProgressMonitor monitor) throws CoreException {
-						file1.touch(null);
-						project1.build(trigger, getMonitor());
-					}
+				workspace.run((IWorkspaceRunnable) monitor -> {
+					file1.touch(null);
+					project1.build(trigger, getMonitor());
 				}, getMonitor());
 				assertEquals("2.0." + i, project1, preBuild.source);
 				assertEquals("2.2." + i, project1, postBuild.source);
@@ -587,16 +530,13 @@
 		try {
 			/* change file1 into a folder */
 			verifier.addExpectedChange(file1, IResourceDelta.CHANGED, IResourceDelta.CONTENT | IResourceDelta.TYPE | IResourceDelta.REPLACED);
-			getWorkspace().run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor m) throws CoreException {
-					m.beginTask("Deleting and Creating", 100);
-					try {
-						file1.delete(true, new SubProgressMonitor(m, 50));
-						folder3.create(true, true, new SubProgressMonitor(m, 50));
-					} finally {
-						m.done();
-					}
+			getWorkspace().run((IWorkspaceRunnable) m -> {
+				m.beginTask("Deleting and Creating", 100);
+				try {
+					file1.delete(true, SubMonitor.convert(m, 50));
+					folder3.create(true, true, SubMonitor.convert(m, 50));
+				} finally {
+					m.done();
 				}
 			}, getMonitor());
 			assertDelta();
@@ -609,25 +549,19 @@
 		try {
 			/* change to a folder */
 			verifier.reset();
-			getWorkspace().run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor m) throws CoreException {
-					file1.delete(true, getMonitor());
-					folder3.create(true, true, getMonitor());
-				}
+			getWorkspace().run((IWorkspaceRunnable) m -> {
+				file1.delete(true, getMonitor());
+				folder3.create(true, true, getMonitor());
 			}, null);
 			/* now change back to a file and verify */
 			verifier.addExpectedChange(file1, IResourceDelta.CHANGED, IResourceDelta.CONTENT | IResourceDelta.TYPE | IResourceDelta.REPLACED);
-			getWorkspace().run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor m) throws CoreException {
-					m.beginTask("Deleting and Creating", 100);
-					try {
-						folder3.delete(true, new SubProgressMonitor(m, 50));
-						file1.create(getRandomContents(), true, new SubProgressMonitor(m, 50));
-					} finally {
-						m.done();
-					}
+			getWorkspace().run((IWorkspaceRunnable) m -> {
+				m.beginTask("Deleting and Creating", 100);
+				try {
+					folder3.delete(true, SubMonitor.convert(m, 50));
+					file1.create(getRandomContents(), true, SubMonitor.convert(m, 50));
+				} finally {
+					m.done();
 				}
 			}, getMonitor());
 			assertDelta();
@@ -639,12 +573,9 @@
 	public void testChangeProject() {
 		try {
 			verifier.reset();
-			getWorkspace().run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor m) throws CoreException {
-					project2.create(getMonitor());
-					project2.open(getMonitor());
-				}
+			getWorkspace().run((IWorkspaceRunnable) m -> {
+				project2.create(getMonitor());
+				project2.open(getMonitor());
 			}, null);
 			IProjectDescription desc = project2.getDescription();
 			desc.setReferencedProjects(new IProject[] {project1});
@@ -661,17 +592,14 @@
 		try {
 			verifier.addExpectedChange(folder2, IResourceDelta.ADDED, 0);
 			verifier.addExpectedChange(file3, IResourceDelta.ADDED, 0, null, null);
-			getWorkspace().run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor m) throws CoreException {
-					m.beginTask("Creating and moving", 150);
-					try {
-						folder2.create(true, true, new SubProgressMonitor(m, 50));
-						file1.copy(file3.getFullPath(), true, new SubProgressMonitor(m, 50));
-						file3.setContents(getRandomContents(), IResource.NONE, new SubProgressMonitor(m, 50));
-					} finally {
-						m.done();
-					}
+			getWorkspace().run((IWorkspaceRunnable) m -> {
+				m.beginTask("Creating and moving", 150);
+				try {
+					folder2.create(true, true, SubMonitor.convert(m, 50));
+					file1.copy(file3.getFullPath(), true, SubMonitor.convert(m, 50));
+					file3.setContents(getRandomContents(), IResource.NONE, SubMonitor.convert(m, 50));
+				} finally {
+					m.done();
 				}
 			}, getMonitor());
 			assertDelta();
@@ -684,16 +612,13 @@
 		try {
 			verifier.addExpectedChange(folder2, IResourceDelta.ADDED, 0);
 			verifier.addExpectedChange(file3, IResourceDelta.ADDED, 0, null, null);
-			getWorkspace().run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor m) throws CoreException {
-					m.beginTask("Creating and moving", 100);
-					try {
-						folder2.create(true, true, new SubProgressMonitor(m, 50));
-						file1.copy(file3.getFullPath(), true, new SubProgressMonitor(m, 50));
-					} finally {
-						m.done();
-					}
+			getWorkspace().run((IWorkspaceRunnable) m -> {
+				m.beginTask("Creating and moving", 100);
+				try {
+					folder2.create(true, true, SubMonitor.convert(m, 50));
+					file1.copy(file3.getFullPath(), true, SubMonitor.convert(m, 50));
+				} finally {
+					m.done();
 				}
 			}, getMonitor());
 			assertDelta();
@@ -712,16 +637,13 @@
 			getWorkspace().addResourceChangeListener(verifier);
 			/* change file1's contents */
 			verifier.addExpectedChange(file1, IResourceDelta.CHANGED, IResourceDelta.REPLACED | IResourceDelta.CONTENT);
-			getWorkspace().run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor m) throws CoreException {
-					m.beginTask("Deleting and Creating", 100);
-					try {
-						file1.delete(true, new SubProgressMonitor(m, 50));
-						file1.create(getRandomContents(), true, new SubProgressMonitor(m, 50));
-					} finally {
-						m.done();
-					}
+			getWorkspace().run((IWorkspaceRunnable) m -> {
+				m.beginTask("Deleting and Creating", 100);
+				try {
+					file1.delete(true, SubMonitor.convert(m, 50));
+					file1.create(getRandomContents(), true, SubMonitor.convert(m, 50));
+				} finally {
+					m.done();
 				}
 			}, getMonitor());
 			assertDelta();
@@ -732,45 +654,30 @@
 
 	public void testDeleteInPostBuildListener() {
 		// create the resource change listener
-		IResourceChangeListener listener = new IResourceChangeListener() {
-			@Override
-			public void resourceChanged(final IResourceChangeEvent event) {
-				try {
-					event.getDelta().accept(new IResourceDeltaVisitor() {
-						@Override
-						public boolean visit(IResourceDelta delta) throws CoreException {
-							IResource resource = delta.getResource();
-							if (resource.getType() == IResource.FILE) {
-								try {
-									((IFile) resource).delete(true, true, null);
-								} catch (RuntimeException e) {
-									throw e;
-								}
-							}
-							return true;
+		IResourceChangeListener listener = event -> {
+			try {
+				event.getDelta().accept(delta -> {
+					IResource resource = delta.getResource();
+					if (resource.getType() == IResource.FILE) {
+						try {
+							((IFile) resource).delete(true, true, null);
+						} catch (RuntimeException e) {
+							throw e;
 						}
-					});
-				} catch (CoreException e) {
-					fail("1.0", e);
-				}
+					}
+					return true;
+				});
+			} catch (CoreException e) {
+				fail("1.0", e);
 			}
 		};
 		// register the listener with the workspace.
 		getWorkspace().addResourceChangeListener(listener, IResourceChangeEvent.POST_BUILD);
 		try {
-			getWorkspace().run(new IWorkspaceRunnable() {
-				// cause a delta by touching all resources
-				@Override
-				public void run(IProgressMonitor monitor) throws CoreException {
-					getWorkspace().getRoot().accept(new IResourceVisitor() {
-						@Override
-						public boolean visit(IResource resource) throws CoreException {
-							resource.touch(getMonitor());
-							return true;
-						}
-					});
-				}
-			}, getMonitor());
+			getWorkspace().run((IWorkspaceRunnable) monitor -> getWorkspace().getRoot().accept(resource -> {
+				resource.touch(getMonitor());
+				return true;
+			}), getMonitor());
 		} catch (CoreException e) {
 			fail("2.0", e);
 		} finally {
@@ -791,16 +698,13 @@
 			int flags = IResourceDelta.REPLACED | IResourceDelta.MOVED_FROM | IResourceDelta.CONTENT;
 			verifier.addExpectedChange(file1, IResourceDelta.CHANGED, flags, file2.getFullPath(), null);
 			verifier.addExpectedChange(file2, IResourceDelta.REMOVED, IResourceDelta.MOVED_TO, null, file1.getFullPath());
-			getWorkspace().run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor m) throws CoreException {
-					m.beginTask("deleting and moving", 100);
-					try {
-						file1.delete(IResource.NONE, new SubProgressMonitor(m, 50));
-						file2.move(file1.getFullPath(), IResource.NONE, new SubProgressMonitor(m, 50));
-					} finally {
-						m.done();
-					}
+			getWorkspace().run((IWorkspaceRunnable) m -> {
+				m.beginTask("deleting and moving", 100);
+				try {
+					file1.delete(IResource.NONE, SubMonitor.convert(m, 50));
+					file2.move(file1.getFullPath(), IResource.NONE, SubMonitor.convert(m, 50));
+				} finally {
+					m.done();
 				}
 			}, getMonitor());
 			assertDelta();
@@ -1046,26 +950,18 @@
 		final IFile phantomFile = folder1.getFile("PhantomFile");
 		final IResource[] phantomResources = new IResource[] {phantomFolder, phantomFile};
 		final QualifiedName partner = new QualifiedName("Test", "Infected");
-		IResourceChangeListener listener = new IResourceChangeListener() {
-			@Override
-			public void resourceChanged(IResourceChangeEvent event) {
-				//make sure the delta doesn't include the phantom members
-				assertNotDeltaIncludes("1.0", event.getDelta(), phantomResources);
-				//make sure a visitor does not find phantom members
-				assertNotDeltaVisits("1.1", event.getDelta(), phantomResources);
-			}
+		IResourceChangeListener listener = event -> {
+			//make sure the delta doesn't include the phantom members
+			assertNotDeltaIncludes("1.0", event.getDelta(), phantomResources);
+			//make sure a visitor does not find phantom members
+			assertNotDeltaVisits("1.1", event.getDelta(), phantomResources);
 		};
 		workspace.addResourceChangeListener(listener);
 		workspace.getSynchronizer().add(partner);
 		ensureDoesNotExistInWorkspace(phantomResources);
 		try {
 			//create a phantom folder
-			workspace.run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor monitor) throws CoreException {
-					workspace.getSynchronizer().setSyncInfo(partner, phantomFolder, new byte[] {1});
-				}
-			}, getMonitor());
+			workspace.run((IWorkspaceRunnable) monitor -> workspace.getSynchronizer().setSyncInfo(partner, phantomFolder, new byte[] {1}), getMonitor());
 			//create children in phantom folder
 			IFile fileInFolder = phantomFolder.getFile("FileInPrivateFolder");
 			workspace.getSynchronizer().setSyncInfo(partner, fileInFolder, new byte[] {1});
@@ -1074,20 +970,12 @@
 			//delete children in phantom folder
 			workspace.getSynchronizer().flushSyncInfo(partner, fileInFolder, IResource.DEPTH_INFINITE);
 			//delete phantom folder and change some other file
-			workspace.run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor monitor) throws CoreException {
-					phantomFolder.delete(IResource.NONE, getMonitor());
-					file1.setContents(getRandomContents(), IResource.NONE, getMonitor());
-				}
+			workspace.run((IWorkspaceRunnable) monitor -> {
+				phantomFolder.delete(IResource.NONE, getMonitor());
+				file1.setContents(getRandomContents(), IResource.NONE, getMonitor());
 			}, getMonitor());
 			//create phantom file
-			workspace.run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor monitor) throws CoreException {
-					workspace.getSynchronizer().setSyncInfo(partner, phantomFile, new byte[] {2});
-				}
-			}, getMonitor());
+			workspace.run((IWorkspaceRunnable) monitor -> workspace.getSynchronizer().setSyncInfo(partner, phantomFile, new byte[] {2}), getMonitor());
 			//modify phantom file
 			workspace.getSynchronizer().setSyncInfo(partner, phantomFile, new byte[] {3});
 			//delete phantom file
@@ -1108,24 +996,18 @@
 		final IFolder teamPrivateFolder = project1.getFolder("TeamPrivateFolder");
 		final IFile teamPrivateFile = folder1.getFile("TeamPrivateFile");
 		final IResource[] privateResources = new IResource[] {teamPrivateFolder, teamPrivateFile};
-		IResourceChangeListener listener = new IResourceChangeListener() {
-			@Override
-			public void resourceChanged(IResourceChangeEvent event) {
-				//make sure the delta doesn't include the team private members
-				assertNotDeltaIncludes("1.0", event.getDelta(), privateResources);
-				//make sure a visitor does not find team private members
-				assertNotDeltaVisits("1.1", event.getDelta(), privateResources);
-			}
+		IResourceChangeListener listener = event -> {
+			//make sure the delta doesn't include the team private members
+			assertNotDeltaIncludes("1.0", event.getDelta(), privateResources);
+			//make sure a visitor does not find team private members
+			assertNotDeltaVisits("1.1", event.getDelta(), privateResources);
 		};
 		workspace.addResourceChangeListener(listener);
 		try {
 			//create a team private folder
-			workspace.run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor monitor) throws CoreException {
-					teamPrivateFolder.create(true, true, getMonitor());
-					teamPrivateFolder.setTeamPrivateMember(true);
-				}
+			workspace.run((IWorkspaceRunnable) monitor -> {
+				teamPrivateFolder.create(true, true, getMonitor());
+				teamPrivateFolder.setTeamPrivateMember(true);
 			}, getMonitor());
 			//create children in team private folder
 			IFile fileInFolder = teamPrivateFolder.getFile("FileInPrivateFolder");
@@ -1135,20 +1017,14 @@
 			//delete children in team private folder
 			fileInFolder.delete(IResource.NONE, getMonitor());
 			//delete team private folder and change some other file
-			workspace.run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor monitor) throws CoreException {
-					teamPrivateFolder.delete(IResource.NONE, getMonitor());
-					file1.setContents(getRandomContents(), IResource.NONE, getMonitor());
-				}
+			workspace.run((IWorkspaceRunnable) monitor -> {
+				teamPrivateFolder.delete(IResource.NONE, getMonitor());
+				file1.setContents(getRandomContents(), IResource.NONE, getMonitor());
 			}, getMonitor());
 			//create team private file
-			workspace.run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor monitor) throws CoreException {
-					teamPrivateFile.create(getRandomContents(), true, getMonitor());
-					teamPrivateFile.setTeamPrivateMember(true);
-				}
+			workspace.run((IWorkspaceRunnable) monitor -> {
+				teamPrivateFile.create(getRandomContents(), true, getMonitor());
+				teamPrivateFile.setTeamPrivateMember(true);
 			}, getMonitor());
 			//modify team private file
 			teamPrivateFile.setContents(getRandomContents(), IResource.NONE, getMonitor());
@@ -1166,17 +1042,14 @@
 			verifier.addExpectedChange(folder2, IResourceDelta.ADDED, 0);
 			verifier.addExpectedChange(file1, IResourceDelta.REMOVED, IResourceDelta.MOVED_TO, null, file3.getFullPath());
 			verifier.addExpectedChange(file3, IResourceDelta.ADDED, IResourceDelta.MOVED_FROM | IResourceDelta.CONTENT, file1.getFullPath(), null);
-			getWorkspace().run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor m) throws CoreException {
-					m.beginTask("Creating and moving", 100);
-					try {
-						folder2.create(true, true, new SubProgressMonitor(m, 50));
-						file1.setContents(getRandomContents(), IResource.NONE, getMonitor());
-						file1.move(file3.getFullPath(), true, new SubProgressMonitor(m, 50));
-					} finally {
-						m.done();
-					}
+			getWorkspace().run((IWorkspaceRunnable) m -> {
+				m.beginTask("Creating and moving", 100);
+				try {
+					folder2.create(true, true, SubMonitor.convert(m, 50));
+					file1.setContents(getRandomContents(), IResource.NONE, getMonitor());
+					file1.move(file3.getFullPath(), true, SubMonitor.convert(m, 50));
+				} finally {
+					m.done();
 				}
 			}, getMonitor());
 			assertDelta();
@@ -1190,16 +1063,13 @@
 			verifier.addExpectedChange(folder2, IResourceDelta.ADDED, 0);
 			verifier.addExpectedChange(file1, IResourceDelta.REMOVED, IResourceDelta.MOVED_TO, null, file3.getFullPath());
 			verifier.addExpectedChange(file3, IResourceDelta.ADDED, IResourceDelta.MOVED_FROM, file1.getFullPath(), null);
-			getWorkspace().run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor m) throws CoreException {
-					m.beginTask("Creating and moving", 100);
-					try {
-						folder2.create(true, true, new SubProgressMonitor(m, 50));
-						file1.move(file3.getFullPath(), true, new SubProgressMonitor(m, 50));
-					} finally {
-						m.done();
-					}
+			getWorkspace().run((IWorkspaceRunnable) m -> {
+				m.beginTask("Creating and moving", 100);
+				try {
+					folder2.create(true, true, SubMonitor.convert(m, 50));
+					file1.move(file3.getFullPath(), true, SubMonitor.convert(m, 50));
+				} finally {
+					m.done();
 				}
 			}, getMonitor());
 			assertDelta();
@@ -1213,17 +1083,14 @@
 			verifier.addExpectedChange(folder2, IResourceDelta.ADDED, 0);
 			verifier.addExpectedChange(file1, IResourceDelta.REMOVED, IResourceDelta.MOVED_TO, null, file3.getFullPath());
 			verifier.addExpectedChange(file3, IResourceDelta.ADDED, IResourceDelta.MOVED_FROM | IResourceDelta.MARKERS, file1.getFullPath(), null);
-			getWorkspace().run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor m) throws CoreException {
-					m.beginTask("Creating and moving", 100);
-					try {
-						folder2.create(true, true, new SubProgressMonitor(m, 50));
-						file1.move(file3.getFullPath(), true, new SubProgressMonitor(m, 50));
-						file3.createMarker(IMarker.TASK);
-					} finally {
-						m.done();
-					}
+			getWorkspace().run((IWorkspaceRunnable) m -> {
+				m.beginTask("Creating and moving", 100);
+				try {
+					folder2.create(true, true, SubMonitor.convert(m, 50));
+					file1.move(file3.getFullPath(), true, SubMonitor.convert(m, 50));
+					file3.createMarker(IMarker.TASK);
+				} finally {
+					m.done();
 				}
 			}, getMonitor());
 			assertDelta();
@@ -1245,16 +1112,13 @@
 			verifier.addExpectedChange(file2, IResourceDelta.REMOVED, IResourceDelta.MOVED_TO, null, file1.getFullPath());
 			int flags = IResourceDelta.MOVED_FROM | IResourceDelta.REPLACED | IResourceDelta.TYPE | IResourceDelta.CONTENT;
 			verifier.addExpectedChange(file1, IResourceDelta.CHANGED, flags, file2.getFullPath(), null);
-			getWorkspace().run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor m) throws CoreException {
-					m.beginTask("Deleting and moving", 100);
-					try {
-						folder3.delete(IResource.FORCE, new SubProgressMonitor(m, 50));
-						file2.move(file1.getFullPath(), true, new SubProgressMonitor(m, 50));
-					} finally {
-						m.done();
-					}
+			getWorkspace().run((IWorkspaceRunnable) m -> {
+				m.beginTask("Deleting and moving", 100);
+				try {
+					folder3.delete(IResource.FORCE, SubMonitor.convert(m, 50));
+					file2.move(file1.getFullPath(), true, SubMonitor.convert(m, 50));
+				} finally {
+					m.done();
 				}
 			}, getMonitor());
 			assertDelta();
@@ -1271,16 +1135,13 @@
 			verifier.addExpectedChange(folder2, IResourceDelta.REMOVED, 0, null, null);
 			verifier.addExpectedChange(file1, IResourceDelta.ADDED, IResourceDelta.MOVED_FROM, file3.getFullPath(), null);
 			verifier.addExpectedChange(file3, IResourceDelta.REMOVED, IResourceDelta.MOVED_TO, null, file1.getFullPath());
-			getWorkspace().run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor m) throws CoreException {
-					m.beginTask("Creating and moving", 100);
-					try {
-						file3.move(file1.getFullPath(), true, new SubProgressMonitor(m, 50));
-						folder2.delete(IResource.NONE, new SubProgressMonitor(m, 50));
-					} finally {
-						m.done();
-					}
+			getWorkspace().run((IWorkspaceRunnable) m -> {
+				m.beginTask("Creating and moving", 100);
+				try {
+					file3.move(file1.getFullPath(), true, SubMonitor.convert(m, 50));
+					folder2.delete(IResource.NONE, SubMonitor.convert(m, 50));
+				} finally {
+					m.done();
 				}
 			}, getMonitor());
 			assertDelta();
@@ -1294,17 +1155,14 @@
 			verifier.addExpectedChange(folder2, IResourceDelta.ADDED, 0);
 			verifier.addExpectedChange(file1, IResourceDelta.REMOVED, IResourceDelta.MOVED_TO, null, file3.getFullPath());
 			verifier.addExpectedChange(file3, IResourceDelta.ADDED, IResourceDelta.MOVED_FROM | IResourceDelta.CONTENT, file1.getFullPath(), null);
-			getWorkspace().run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor m) throws CoreException {
-					m.beginTask("Creating and moving", 100);
-					try {
-						folder2.create(true, true, new SubProgressMonitor(m, 50));
-						file1.move(file3.getFullPath(), true, new SubProgressMonitor(m, 50));
-						file3.setContents(getRandomContents(), IResource.NONE, getMonitor());
-					} finally {
-						m.done();
-					}
+			getWorkspace().run((IWorkspaceRunnable) m -> {
+				m.beginTask("Creating and moving", 100);
+				try {
+					folder2.create(true, true, SubMonitor.convert(m, 50));
+					file1.move(file3.getFullPath(), true, SubMonitor.convert(m, 50));
+					file3.setContents(getRandomContents(), IResource.NONE, getMonitor());
+				} finally {
+					m.done();
 				}
 			}, getMonitor());
 			assertDelta();
@@ -1319,16 +1177,13 @@
 		try {
 			verifier.addExpectedChange(file1, IResourceDelta.REMOVED, IResourceDelta.MOVED_TO, null, file3.getFullPath());
 			verifier.addExpectedChange(file3, IResourceDelta.ADDED, IResourceDelta.MOVED_FROM, file1.getFullPath(), null);
-			getWorkspace().run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor m) throws CoreException {
-					m.beginTask("moving and moving file", 100);
-					try {
-						file1.move(file2.getFullPath(), false, null);
-						file2.move(file3.getFullPath(), false, null);
-					} finally {
-						m.done();
-					}
+			getWorkspace().run((IWorkspaceRunnable) m -> {
+				m.beginTask("moving and moving file", 100);
+				try {
+					file1.move(file2.getFullPath(), false, null);
+					file2.move(file3.getFullPath(), false, null);
+				} finally {
+					m.done();
 				}
 			}, getMonitor());
 			assertDelta();
@@ -1346,16 +1201,13 @@
 			verifier.addExpectedChange(folder3, IResourceDelta.ADDED, IResourceDelta.MOVED_FROM, folder1.getFullPath(), null);
 			verifier.addExpectedChange(file1, IResourceDelta.REMOVED, IResourceDelta.MOVED_TO, null, file3.getFullPath());
 			verifier.addExpectedChange(file3, IResourceDelta.ADDED, IResourceDelta.MOVED_FROM, file1.getFullPath(), null);
-			getWorkspace().run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor m) throws CoreException {
-					m.beginTask("moving and moving folder", 100);
-					try {
-						folder1.move(folder2.getFullPath(), false, null);
-						folder2.move(folder3.getFullPath(), false, null);
-					} finally {
-						m.done();
-					}
+			getWorkspace().run((IWorkspaceRunnable) m -> {
+				m.beginTask("moving and moving folder", 100);
+				try {
+					folder1.move(folder2.getFullPath(), false, null);
+					folder2.move(folder3.getFullPath(), false, null);
+				} finally {
+					m.done();
 				}
 			}, getMonitor());
 			assertDelta();
@@ -1379,15 +1231,12 @@
 			verifier.addExpectedChange(project2.getFile(".project"), IResourceDelta.ADDED, IResourceDelta.CONTENT | IResourceDelta.MOVED_FROM, project1.getFile(".project").getFullPath(), null);
 			verifier.addExpectedChange(project2.getFolder(folder1.getProjectRelativePath()), IResourceDelta.ADDED, IResourceDelta.MOVED_FROM, folder1.getFullPath(), null);
 			verifier.addExpectedChange(project2.getFile(file1.getProjectRelativePath()), IResourceDelta.ADDED, IResourceDelta.MOVED_FROM, file1.getFullPath(), null);
-			getWorkspace().run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor m) throws CoreException {
-					m.beginTask("Creating and moving", 100);
-					try {
-						project1.move(project2.getFullPath(), IResource.NONE, new SubProgressMonitor(m, 50));
-					} finally {
-						m.done();
-					}
+			getWorkspace().run((IWorkspaceRunnable) m -> {
+				m.beginTask("Creating and moving", 100);
+				try {
+					project1.move(project2.getFullPath(), IResource.NONE, SubMonitor.convert(m, 50));
+				} finally {
+					m.done();
 				}
 			}, getMonitor());
 			assertDelta();
@@ -1404,17 +1253,14 @@
 		final IPath path = getRandomLocation();
 		try {
 			verifier.addExpectedChange(project1, IResourceDelta.CHANGED, IResourceDelta.DESCRIPTION);
-			getWorkspace().run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor m) throws CoreException {
-					m.beginTask("Creating and moving", 100);
-					try {
-						IProjectDescription desc = project1.getDescription();
-						desc.setLocation(path);
-						project1.move(desc, IResource.NONE, new SubProgressMonitor(m, 50));
-					} finally {
-						m.done();
-					}
+			getWorkspace().run((IWorkspaceRunnable) m -> {
+				m.beginTask("Creating and moving", 100);
+				try {
+					IProjectDescription desc = project1.getDescription();
+					desc.setLocation(path);
+					project1.move(desc, IResource.NONE, SubMonitor.convert(m, 50));
+				} finally {
+					m.done();
 				}
 			}, getMonitor());
 			assertDelta();
@@ -1547,16 +1393,13 @@
 		try {
 			/* change file1's contents */
 			verifier.addExpectedChange(file1, IResourceDelta.CHANGED, IResourceDelta.REPLACED | IResourceDelta.CONTENT);
-			getWorkspace().run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor m) throws CoreException {
-					m.beginTask("Deleting and Creating", 100);
-					try {
-						file1.delete(true, new SubProgressMonitor(m, 50));
-						file1.create(getRandomContents(), true, new SubProgressMonitor(m, 50));
-					} finally {
-						m.done();
-					}
+			getWorkspace().run((IWorkspaceRunnable) m -> {
+				m.beginTask("Deleting and Creating", 100);
+				try {
+					file1.delete(true, SubMonitor.convert(m, 50));
+					file1.create(getRandomContents(), true, SubMonitor.convert(m, 50));
+				} finally {
+					m.done();
 				}
 			}, getMonitor());
 			assertDelta();
@@ -1570,28 +1413,22 @@
 			folder2 = project1.getFolder("Folder2");
 			folder3 = project1.getFolder("Folder3");
 			verifier.reset();
-			getWorkspace().run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor m) throws CoreException {
-					file1.delete(false, null);
-					folder2.create(false, true, null);
-				}
+			getWorkspace().run((IWorkspaceRunnable) m -> {
+				file1.delete(false, null);
+				folder2.create(false, true, null);
 			}, null);
 			verifier.reset();
 			verifier.addExpectedChange(folder1, IResourceDelta.REMOVED, IResourceDelta.MOVED_TO, null, folder2.getFullPath());
 			int flags = IResourceDelta.MOVED_FROM | IResourceDelta.MOVED_TO | IResourceDelta.REPLACED | IResourceDelta.CONTENT;
 			verifier.addExpectedChange(folder2, IResourceDelta.CHANGED, flags, folder1.getFullPath(), folder3.getFullPath());
 			verifier.addExpectedChange(folder3, IResourceDelta.ADDED, IResourceDelta.MOVED_FROM, folder2.getFullPath(), null);
-			getWorkspace().run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor m) throws CoreException {
-					m.beginTask("replace folder with folder", 100);
-					try {
-						folder2.move(folder3.getFullPath(), false, null);
-						folder1.move(folder2.getFullPath(), false, null);
-					} finally {
-						m.done();
-					}
+			getWorkspace().run((IWorkspaceRunnable) m -> {
+				m.beginTask("replace folder with folder", 100);
+				try {
+					folder2.move(folder3.getFullPath(), false, null);
+					folder1.move(folder2.getFullPath(), false, null);
+				} finally {
+					m.done();
 				}
 			}, getMonitor());
 			assertDelta();
@@ -1621,28 +1458,22 @@
 			file2 = project1.getFile("File2");
 			file3 = project1.getFile("File3");
 			verifier.reset();
-			getWorkspace().run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor m) throws CoreException {
-					file1.create(new ByteArrayInputStream(new byte[] {65}), false, null);
-					file2.create(new ByteArrayInputStream(new byte[] {67}), false, null);
-				}
+			getWorkspace().run((IWorkspaceRunnable) m -> {
+				file1.create(new ByteArrayInputStream(new byte[] {65}), false, null);
+				file2.create(new ByteArrayInputStream(new byte[] {67}), false, null);
 			}, null);
 			verifier.reset();
 			final int flags = IResourceDelta.MOVED_FROM | IResourceDelta.MOVED_TO | IResourceDelta.REPLACED | IResourceDelta.CONTENT;
 			verifier.addExpectedChange(file1, IResourceDelta.CHANGED, flags, file2.getFullPath(), file2.getFullPath());
 			verifier.addExpectedChange(file2, IResourceDelta.CHANGED, flags, file1.getFullPath(), file1.getFullPath());
-			getWorkspace().run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor m) throws CoreException {
-					m.beginTask("swap files", 100);
-					try {
-						file1.move(file3.getFullPath(), false, null);
-						file2.move(file1.getFullPath(), false, null);
-						file3.move(file2.getFullPath(), false, null);
-					} finally {
-						m.done();
-					}
+			getWorkspace().run((IWorkspaceRunnable) m -> {
+				m.beginTask("swap files", 100);
+				try {
+					file1.move(file3.getFullPath(), false, null);
+					file2.move(file1.getFullPath(), false, null);
+					file3.move(file2.getFullPath(), false, null);
+				} finally {
+					m.done();
 				}
 			}, getMonitor());
 			assertDelta();
@@ -1654,30 +1485,24 @@
 	public void testSwapFolders() {
 		try {
 			verifier.reset();
-			getWorkspace().run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor m) throws CoreException {
-					folder2 = project1.getFolder("Folder2");
-					folder3 = project1.getFolder("Folder3");
-					file1.delete(false, null);
-					folder2.create(false, true, null);
-				}
+			getWorkspace().run((IWorkspaceRunnable) m -> {
+				folder2 = project1.getFolder("Folder2");
+				folder3 = project1.getFolder("Folder3");
+				file1.delete(false, null);
+				folder2.create(false, true, null);
 			}, null);
 			verifier.reset();
 			final int flags = IResourceDelta.MOVED_FROM | IResourceDelta.MOVED_TO | IResourceDelta.REPLACED | IResourceDelta.CONTENT;
 			verifier.addExpectedChange(folder1, IResourceDelta.CHANGED, flags, folder2.getFullPath(), folder2.getFullPath());
 			verifier.addExpectedChange(folder2, IResourceDelta.CHANGED, flags, folder1.getFullPath(), folder1.getFullPath());
-			getWorkspace().run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor m) throws CoreException {
-					m.beginTask("swap folders", 100);
-					try {
-						folder1.move(folder3.getFullPath(), false, null);
-						folder2.move(folder1.getFullPath(), false, null);
-						folder3.move(folder2.getFullPath(), false, null);
-					} finally {
-						m.done();
-					}
+			getWorkspace().run((IWorkspaceRunnable) m -> {
+				m.beginTask("swap folders", 100);
+				try {
+					folder1.move(folder3.getFullPath(), false, null);
+					folder2.move(folder1.getFullPath(), false, null);
+					folder3.move(folder2.getFullPath(), false, null);
+				} finally {
+					m.done();
 				}
 			}, getMonitor());
 			assertDelta();
@@ -1697,12 +1522,9 @@
 			//create a team private folder
 			verifier.reset();
 			verifier.addExpectedChange(teamPrivateFolder, IResourceDelta.ADDED, 0);
-			workspace.run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor monitor) throws CoreException {
-					teamPrivateFolder.create(true, true, getMonitor());
-					teamPrivateFolder.setTeamPrivateMember(true);
-				}
+			workspace.run((IWorkspaceRunnable) monitor -> {
+				teamPrivateFolder.create(true, true, getMonitor());
+				teamPrivateFolder.setTeamPrivateMember(true);
 			}, getMonitor());
 			assertDelta();
 			verifier.reset();
@@ -1725,23 +1547,17 @@
 			//delete team private folder and change some other file
 			verifier.addExpectedChange(teamPrivateFolder, IResourceDelta.REMOVED, 0);
 			verifier.addExpectedChange(file1, IResourceDelta.CHANGED, IResourceDelta.CONTENT);
-			workspace.run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor monitor) throws CoreException {
-					teamPrivateFolder.delete(IResource.NONE, getMonitor());
-					file1.setContents(getRandomContents(), IResource.NONE, getMonitor());
-				}
+			workspace.run((IWorkspaceRunnable) monitor -> {
+				teamPrivateFolder.delete(IResource.NONE, getMonitor());
+				file1.setContents(getRandomContents(), IResource.NONE, getMonitor());
 			}, getMonitor());
 			assertDelta();
 			verifier.reset();
 			//create team private file
 			verifier.addExpectedChange(teamPrivateFile, IResourceDelta.ADDED, 0);
-			workspace.run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor monitor) throws CoreException {
-					teamPrivateFile.create(getRandomContents(), true, getMonitor());
-					teamPrivateFile.setTeamPrivateMember(true);
-				}
+			workspace.run((IWorkspaceRunnable) monitor -> {
+				teamPrivateFile.create(getRandomContents(), true, getMonitor());
+				teamPrivateFile.setTeamPrivateMember(true);
 			}, getMonitor());
 			assertDelta();
 			verifier.reset();
@@ -1764,16 +1580,13 @@
 		try {
 			verifier.addExpectedChange(file1, IResourceDelta.CHANGED, IResourceDelta.CONTENT);
 			verifier.addExpectedChange(file2, IResourceDelta.ADDED, 0);
-			getWorkspace().run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor m) throws CoreException {
-					m.beginTask("setting contents and creating", 100);
-					try {
-						file1.setContents(getRandomContents(), true, false, new SubProgressMonitor(m, 50));
-						file2.create(getRandomContents(), true, new SubProgressMonitor(m, 50));
-					} finally {
-						m.done();
-					}
+			getWorkspace().run((IWorkspaceRunnable) m -> {
+				m.beginTask("setting contents and creating", 100);
+				try {
+					file1.setContents(getRandomContents(), true, false, SubMonitor.convert(m, 50));
+					file2.create(getRandomContents(), true, SubMonitor.convert(m, 50));
+				} finally {
+					m.done();
 				}
 			}, getMonitor());
 			assertDelta();
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/IResourceDeltaTest.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/IResourceDeltaTest.java
index 016da71..baaa9d4 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/IResourceDeltaTest.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/IResourceDeltaTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * Copyright (c) 2000, 2017 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,7 +13,8 @@
 import junit.framework.Test;
 import junit.framework.TestSuite;
 import org.eclipse.core.resources.*;
-import org.eclipse.core.runtime.*;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.Path;
 
 /**
  * Tests the public API of IResourceDelta
@@ -60,12 +61,7 @@
 		allResources = new IResource[] {project1, project2, folder1, folder2, folder3, file1, file2, file3};
 
 		// Create and open the resources
-		IWorkspaceRunnable body = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) {
-				ensureExistsInWorkspace(allResources, true);
-			}
-		};
+		IWorkspaceRunnable body = monitor -> ensureExistsInWorkspace(allResources, true);
 		try {
 			getWorkspace().run(body, getMonitor());
 		} catch (CoreException e) {
@@ -97,48 +93,42 @@
 		 * - delete folder2 (which deletes file3)
 		 * - add file4 below folder1
 		 */
-		IResourceChangeListener listener = new IResourceChangeListener() {
-			@Override
-			public void resourceChanged(IResourceChangeEvent event) {
-				//delta relative to root
-				IResourceDelta delta = event.getDelta();
-				assertNotNull("1.0", delta.findMember(project1.getFullPath()));
-				assertNotNull("1.1", delta.findMember(file1.getFullPath()));
-				assertNotNull("1.2", delta.findMember(folder2.getFullPath()));
-				assertNotNull("1.3", delta.findMember(file3.getFullPath()));
-				assertNotNull("1.4", delta.findMember(file4.getFullPath()));
-				assertNull("1.5", delta.findMember(project2.getFullPath()));
-				assertNull("1.6", delta.findMember(file2.getFullPath()));
-				assertNull("1.7", delta.findMember(folder3.getFullPath()));
+		IResourceChangeListener listener = event -> {
+			//delta relative to root
+			IResourceDelta delta = event.getDelta();
+			assertNotNull("1.0", delta.findMember(project1.getFullPath()));
+			assertNotNull("1.1", delta.findMember(file1.getFullPath()));
+			assertNotNull("1.2", delta.findMember(folder2.getFullPath()));
+			assertNotNull("1.3", delta.findMember(file3.getFullPath()));
+			assertNotNull("1.4", delta.findMember(file4.getFullPath()));
+			assertNull("1.5", delta.findMember(project2.getFullPath()));
+			assertNull("1.6", delta.findMember(file2.getFullPath()));
+			assertNull("1.7", delta.findMember(folder3.getFullPath()));
 
-				//delta relative to project
-				delta = delta.findMember(project1.getFullPath());
-				assertNotNull("2.1", delta.findMember(file1.getProjectRelativePath()));
-				assertNotNull("2.2", delta.findMember(folder2.getProjectRelativePath()));
-				assertNotNull("2.3", delta.findMember(file3.getProjectRelativePath()));
-				assertNotNull("2.4", delta.findMember(file4.getProjectRelativePath()));
-				assertNull("2.5", delta.findMember(project2.getFullPath()));
-				assertNull("2.6", delta.findMember(file2.getProjectRelativePath()));
-				assertNull("2.7", delta.findMember(folder3.getProjectRelativePath()));
-				assertNull("2.8", delta.findMember(project1.getFullPath()));
-				assertNull("2.9", delta.findMember(file1.getFullPath()));
+			//delta relative to project
+			delta = delta.findMember(project1.getFullPath());
+			assertNotNull("2.1", delta.findMember(file1.getProjectRelativePath()));
+			assertNotNull("2.2", delta.findMember(folder2.getProjectRelativePath()));
+			assertNotNull("2.3", delta.findMember(file3.getProjectRelativePath()));
+			assertNotNull("2.4", delta.findMember(file4.getProjectRelativePath()));
+			assertNull("2.5", delta.findMember(project2.getFullPath()));
+			assertNull("2.6", delta.findMember(file2.getProjectRelativePath()));
+			assertNull("2.7", delta.findMember(folder3.getProjectRelativePath()));
+			assertNull("2.8", delta.findMember(project1.getFullPath()));
+			assertNull("2.9", delta.findMember(file1.getFullPath()));
 
-				//delta with no children
-				delta = delta.findMember(file1.getProjectRelativePath());
-				assertEquals("3.1", delta, delta.findMember(Path.ROOT));
-				assertNull("3.2", delta.findMember(new Path("foo")));
-			}
+			//delta with no children
+			delta = delta.findMember(file1.getProjectRelativePath());
+			assertEquals("3.1", delta, delta.findMember(Path.ROOT));
+			assertNull("3.2", delta.findMember(new Path("foo")));
 		};
 		getWorkspace().addResourceChangeListener(listener);
 
 		//do the work	
-		IWorkspaceRunnable body = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				file1.setContents(getRandomContents(), true, true, getMonitor());
-				folder2.delete(true, getMonitor());
-				file4.create(getRandomContents(), true, getMonitor());
-			}
+		IWorkspaceRunnable body = monitor -> {
+			file1.setContents(getRandomContents(), true, true, getMonitor());
+			folder2.delete(true, getMonitor());
+			file4.create(getRandomContents(), true, getMonitor());
 		};
 		try {
 			getWorkspace().run(body, getMonitor());
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/IResourceTest.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/IResourceTest.java
index 4f744d1..836be47 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/IResourceTest.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/IResourceTest.java
@@ -791,13 +791,10 @@
 	public void testCopy() {
 		//add markers to all resources ... markers should not be copied
 		try {
-			getWorkspace().getRoot().accept(new IResourceVisitor() {
-				@Override
-				public boolean visit(IResource resource) throws CoreException {
-					if (resource.isAccessible())
-						resource.createMarker(IMarker.TASK);
-					return true;
-				}
+			getWorkspace().getRoot().accept(resource -> {
+				if (resource.isAccessible())
+					resource.createMarker(IMarker.TASK);
+				return true;
 			});
 		} catch (CoreException e) {
 			fail("1.0", e);
@@ -1565,17 +1562,14 @@
 		} catch (CoreException e) {
 			fail("7.1", e);
 		}
-		IResourceVisitor visitor = new IResourceVisitor() {
-			@Override
-			public boolean visit(IResource resource) {
-				//projects and root are always local
-				if (resource.getType() == IResource.ROOT || resource.getType() == IResource.PROJECT) {
-					assertTrue("7.2" + resource.getFullPath(), IResource.NULL_STAMP != resource.getModificationStamp());
-				} else {
-					assertEquals("7.3." + resource.getFullPath(), IResource.NULL_STAMP, resource.getModificationStamp());
-				}
-				return true;
+		IResourceVisitor visitor = resource -> {
+			//projects and root are always local
+			if (resource.getType() == IResource.ROOT || resource.getType() == IResource.PROJECT) {
+				assertTrue("7.2" + resource.getFullPath(), IResource.NULL_STAMP != resource.getModificationStamp());
+			} else {
+				assertEquals("7.3." + resource.getFullPath(), IResource.NULL_STAMP, resource.getModificationStamp());
 			}
+			return true;
 		};
 		try {
 			getWorkspace().getRoot().accept(visitor, IResource.DEPTH_INFINITE, false);
@@ -1661,13 +1655,10 @@
 		} catch (CoreException e) {
 			fail("12.0", e);
 		}
-		visitor = new IResourceVisitor() {
-			@Override
-			public boolean visit(IResource resource) {
-				if (resource.getType() != IResource.ROOT)
-					assertTrue("12.1." + resource.getFullPath(), IResource.NULL_STAMP != resource.getModificationStamp());
-				return true;
-			}
+		visitor = resource -> {
+			if (resource.getType() != IResource.ROOT)
+				assertTrue("12.1." + resource.getFullPath(), IResource.NULL_STAMP != resource.getModificationStamp());
+			return true;
 		};
 		try {
 			getWorkspace().getRoot().accept(visitor, IResource.DEPTH_INFINITE, false);
@@ -1688,12 +1679,9 @@
 		assertTrue("1.1", modificationStamp != IResource.NULL_STAMP);
 
 		// Remove and re-create the file in a workspace operation
-		getWorkspace().run(new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				file.delete(false, getMonitor());
-				create(file, true);
-			}
+		getWorkspace().run((IWorkspaceRunnable) monitor -> {
+			file.delete(false, getMonitor());
+			create(file, true);
 		}, getMonitor());
 
 		assertTrue("1.0", modificationStamp != file.getModificationStamp());
@@ -2288,22 +2276,19 @@
 	public void testRevertModificationStamp() {
 		//revert all existing resources
 		try {
-			getWorkspace().getRoot().accept(new IResourceVisitor() {
-				@Override
-				public boolean visit(IResource resource) throws CoreException {
-					if (!resource.isAccessible())
-						return false;
-					long oldStamp = resource.getModificationStamp();
-					resource.touch(null);
-					long newStamp = resource.getModificationStamp();
-					if (resource.getType() == IResource.ROOT)
-						assertTrue("1.0." + resource.getFullPath(), oldStamp == newStamp);
-					else
-						assertTrue("1.0." + resource.getFullPath(), oldStamp != newStamp);
-					resource.revertModificationStamp(oldStamp);
-					assertEquals("1.1." + resource.getFullPath(), oldStamp, resource.getModificationStamp());
-					return true;
-				}
+			getWorkspace().getRoot().accept(resource -> {
+				if (!resource.isAccessible())
+					return false;
+				long oldStamp = resource.getModificationStamp();
+				resource.touch(null);
+				long newStamp = resource.getModificationStamp();
+				if (resource.getType() == IResource.ROOT)
+					assertTrue("1.0." + resource.getFullPath(), oldStamp == newStamp);
+				else
+					assertTrue("1.0." + resource.getFullPath(), oldStamp != newStamp);
+				resource.revertModificationStamp(oldStamp);
+				assertEquals("1.1." + resource.getFullPath(), oldStamp, resource.getModificationStamp());
+				return true;
 			});
 		} catch (CoreException e) {
 			fail("1.99", e);
@@ -2519,12 +2504,9 @@
 		ensureExistsInWorkspace(new IResource[] {project, a, a1, a2, b, b1, b2}, true);
 
 		final List<IResource> actualOrder = new ArrayList<>();
-		IResourceProxyVisitor visitor = new IResourceProxyVisitor() {
-			@Override
-			public boolean visit(IResourceProxy proxy) {
-				actualOrder.add(proxy.requestResource());
-				return true;
-			}
+		IResourceProxyVisitor visitor = proxy -> {
+			actualOrder.add(proxy.requestResource());
+			return true;
 		};
 
 		project.accept(visitor, IResource.DEPTH_INFINITE, IResource.NONE);
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/ISynchronizerTest.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/ISynchronizerTest.java
index 1f0e940..701f38d 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/ISynchronizerTest.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/ISynchronizerTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2015 IBM Corporation and others.
+ *  Copyright (c) 2000, 2017 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -58,19 +58,13 @@
 
 		final ISynchronizer synchronizer = getWorkspace().getSynchronizer();
 		final QualifiedName[] partners = synchronizer.getPartners();
-		IWorkspaceRunnable body = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				IResourceVisitor visitor = new IResourceVisitor() {
-					@Override
-					public boolean visit(IResource resource) throws CoreException {
-						for (int i = 0; i < partners.length; i++)
-							synchronizer.setSyncInfo(partners[i], resource, null);
-						return true;
-					}
-				};
-				root.accept(visitor, IResource.DEPTH_INFINITE, true);
-			}
+		IWorkspaceRunnable body = monitor -> {
+			IResourceVisitor visitor = resource -> {
+				for (int i = 0; i < partners.length; i++)
+					synchronizer.setSyncInfo(partners[i], resource, null);
+				return true;
+			};
+			root.accept(visitor, IResource.DEPTH_INFINITE, true);
 		};
 		getWorkspace().run(body, null);
 	}
@@ -110,16 +104,13 @@
 
 		// setup the sync bytes
 		final Hashtable<IPath, byte[]> table = new Hashtable<>(10);
-		IResourceVisitor visitor = new IResourceVisitor() {
-			@Override
-			public boolean visit(IResource resource) throws CoreException {
-				if (resource.getType() == IResource.ROOT)
-					return true;
-				byte[] b = getRandomString().getBytes();
-				table.put(resource.getFullPath(), b);
-				synchronizer.setSyncInfo(qname, resource, b);
+		IResourceVisitor visitor = resource -> {
+			if (resource.getType() == IResource.ROOT)
 				return true;
-			}
+			byte[] b = getRandomString().getBytes();
+			table.put(resource.getFullPath(), b);
+			synchronizer.setSyncInfo(qname, resource, b);
+			return true;
 		};
 		try {
 			getWorkspace().getRoot().accept(visitor);
@@ -128,23 +119,20 @@
 		}
 
 		// get the info and ensure its the same
-		visitor = new IResourceVisitor() {
-			@Override
-			public boolean visit(IResource resource) {
-				try {
-					byte[] actual = synchronizer.getSyncInfo(qname, resource);
-					if (resource.getType() == IResource.ROOT) {
-						assertNull("1.0." + resource.getFullPath(), actual);
-						return true;
-					} else
-						assertNotNull("1.1." + resource.getFullPath(), actual);
-					byte[] expected = table.get(resource.getFullPath());
-					assertEquals("1.2." + resource.getFullPath(), expected, actual);
-				} catch (CoreException e) {
-					fail("1.3." + resource.getFullPath(), e);
-				}
-				return true;
+		visitor = resource -> {
+			try {
+				byte[] actual = synchronizer.getSyncInfo(qname, resource);
+				if (resource.getType() == IResource.ROOT) {
+					assertNull("1.0." + resource.getFullPath(), actual);
+					return true;
+				} else
+					assertNotNull("1.1." + resource.getFullPath(), actual);
+				byte[] expected = table.get(resource.getFullPath());
+				assertEquals("1.2." + resource.getFullPath(), expected, actual);
+			} catch (CoreException e) {
+				fail("1.3." + resource.getFullPath(), e);
 			}
+			return true;
 		};
 		try {
 			getWorkspace().getRoot().accept(visitor);
@@ -154,14 +142,11 @@
 
 		// delete all resources under the projects.
 		final IProject[] projects = getWorkspace().getRoot().getProjects();
-		IWorkspaceRunnable body = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				for (int i = 0; i < projects.length; i++) {
-					IResource[] children = projects[i].members();
-					for (int j = 0; j < children.length; j++)
-						children[j].delete(false, getMonitor());
-				}
+		IWorkspaceRunnable body = monitor -> {
+			for (int i = 0; i < projects.length; i++) {
+				IResource[] children = projects[i].members();
+				for (int j = 0; j < children.length; j++)
+					children[j].delete(false, getMonitor());
 			}
 		};
 		try {
@@ -171,23 +156,20 @@
 		}
 
 		// sync info should remain for the resources since they are now phantoms
-		visitor = new IResourceVisitor() {
-			@Override
-			public boolean visit(IResource resource) {
-				try {
-					byte[] actual = synchronizer.getSyncInfo(qname, resource);
-					if (resource.getType() == IResource.ROOT) {
-						assertNull("3.0", actual);
-						return true;
-					} else
-						assertNotNull("3.1." + resource.getFullPath(), actual);
-					byte[] expected = table.get(resource.getFullPath());
-					assertEquals("3.2." + resource.getFullPath(), expected, actual);
-				} catch (CoreException e) {
-					fail("3.3." + resource.getFullPath(), e);
-				}
-				return true;
+		visitor = resource -> {
+			try {
+				byte[] actual = synchronizer.getSyncInfo(qname, resource);
+				if (resource.getType() == IResource.ROOT) {
+					assertNull("3.0", actual);
+					return true;
+				} else
+					assertNotNull("3.1." + resource.getFullPath(), actual);
+				byte[] expected = table.get(resource.getFullPath());
+				assertEquals("3.2." + resource.getFullPath(), expected, actual);
+			} catch (CoreException e) {
+				fail("3.3." + resource.getFullPath(), e);
 			}
+			return true;
 		};
 		try {
 			getWorkspace().getRoot().accept(visitor);
@@ -206,16 +188,13 @@
 		}
 
 		// sync info should be gone since projects can't become phantoms
-		visitor = new IResourceVisitor() {
-			@Override
-			public boolean visit(IResource resource) {
-				try {
-					assertNull("5.0." + resource.getFullPath(), synchronizer.getSyncInfo(qname, resource));
-				} catch (CoreException e) {
-					fail("5.1." + resource.getFullPath(), e);
-				}
-				return true;
+		visitor = resource -> {
+			try {
+				assertNull("5.0." + resource.getFullPath(), synchronizer.getSyncInfo(qname, resource));
+			} catch (CoreException e) {
+				fail("5.1." + resource.getFullPath(), e);
 			}
+			return true;
 		};
 		try {
 			getWorkspace().getRoot().accept(visitor);
@@ -233,16 +212,13 @@
 
 		// setup the sync bytes
 		final Hashtable<IPath, byte[]> table = new Hashtable<>(10);
-		IResourceVisitor visitor = new IResourceVisitor() {
-			@Override
-			public boolean visit(IResource resource) throws CoreException {
-				if (resource.getType() == IResource.ROOT)
-					return true;
-				byte[] b = getRandomString().getBytes();
-				table.put(resource.getFullPath(), b);
-				synchronizer.setSyncInfo(qname, resource, b);
+		IResourceVisitor visitor = resource -> {
+			if (resource.getType() == IResource.ROOT)
 				return true;
-			}
+			byte[] b = getRandomString().getBytes();
+			table.put(resource.getFullPath(), b);
+			synchronizer.setSyncInfo(qname, resource, b);
+			return true;
 		};
 		try {
 			getWorkspace().getRoot().accept(visitor);
@@ -251,23 +227,20 @@
 		}
 
 		// get the info and ensure its the same
-		visitor = new IResourceVisitor() {
-			@Override
-			public boolean visit(IResource resource) {
-				try {
-					byte[] actual = synchronizer.getSyncInfo(qname, resource);
-					if (resource.getType() == IResource.ROOT) {
-						assertNull("1.0." + resource.getFullPath(), actual);
-						return true;
-					} else
-						assertNotNull("1.1." + resource.getFullPath(), actual);
-					byte[] expected = table.get(resource.getFullPath());
-					assertEquals("1.2." + resource.getFullPath(), expected, actual);
-				} catch (CoreException e) {
-					fail("1.3." + resource.getFullPath(), e);
-				}
-				return true;
+		visitor = resource -> {
+			try {
+				byte[] actual = synchronizer.getSyncInfo(qname, resource);
+				if (resource.getType() == IResource.ROOT) {
+					assertNull("1.0." + resource.getFullPath(), actual);
+					return true;
+				} else
+					assertNotNull("1.1." + resource.getFullPath(), actual);
+				byte[] expected = table.get(resource.getFullPath());
+				assertEquals("1.2." + resource.getFullPath(), expected, actual);
+			} catch (CoreException e) {
+				fail("1.3." + resource.getFullPath(), e);
 			}
+			return true;
 		};
 		try {
 			getWorkspace().getRoot().accept(visitor);
@@ -277,15 +250,12 @@
 
 		// delete all resources under the projects.
 		final IProject[] projects = getWorkspace().getRoot().getProjects();
-		IWorkspaceRunnable body = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				for (int i = 0; i < projects.length; i++) {
-					IResource[] children = projects[i].members();
-					for (int j = 0; j < children.length; j++) {
-						if (!children[j].getName().equals(IProjectDescription.DESCRIPTION_FILE_NAME))
-							children[j].delete(false, getMonitor());
-					}
+		IWorkspaceRunnable body = monitor -> {
+			for (int i = 0; i < projects.length; i++) {
+				IResource[] children = projects[i].members();
+				for (int j = 0; j < children.length; j++) {
+					if (!children[j].getName().equals(IProjectDescription.DESCRIPTION_FILE_NAME))
+						children[j].delete(false, getMonitor());
 				}
 			}
 		};
@@ -296,23 +266,20 @@
 		}
 
 		// sync info should remain for the resources since they are now phantoms
-		visitor = new IResourceVisitor() {
-			@Override
-			public boolean visit(IResource resource) {
-				try {
-					byte[] actual = synchronizer.getSyncInfo(qname, resource);
-					if (resource.getType() == IResource.ROOT) {
-						assertNull("3.0", actual);
-						return true;
-					} else
-						assertNotNull("3.1." + resource.getFullPath(), actual);
-					byte[] expected = table.get(resource.getFullPath());
-					assertEquals("3.2." + resource.getFullPath(), expected, actual);
-				} catch (CoreException e) {
-					fail("3.3." + resource.getFullPath(), e);
-				}
-				return true;
+		visitor = resource -> {
+			try {
+				byte[] actual = synchronizer.getSyncInfo(qname, resource);
+				if (resource.getType() == IResource.ROOT) {
+					assertNull("3.0", actual);
+					return true;
+				} else
+					assertNotNull("3.1." + resource.getFullPath(), actual);
+				byte[] expected = table.get(resource.getFullPath());
+				assertEquals("3.2." + resource.getFullPath(), expected, actual);
+			} catch (CoreException e) {
+				fail("3.3." + resource.getFullPath(), e);
 			}
+			return true;
 		};
 		try {
 			getWorkspace().getRoot().accept(visitor);
@@ -321,14 +288,11 @@
 		}
 
 		// remove the sync info for the immediate children of the projects.
-		body = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				for (int i = 0; i < projects.length; i++) {
-					IResource[] children = projects[i].members(true);
-					for (int j = 0; j < children.length; j++)
-						synchronizer.setSyncInfo(qname, children[j], null);
-				}
+		body = monitor -> {
+			for (int i = 0; i < projects.length; i++) {
+				IResource[] children = projects[i].members(true);
+				for (int j = 0; j < children.length; j++)
+					synchronizer.setSyncInfo(qname, children[j], null);
 			}
 		};
 		try {
@@ -338,17 +302,14 @@
 		}
 
 		// there should be no sync info for any resources except the project
-		visitor = new IResourceVisitor() {
-			@Override
-			public boolean visit(IResource resource) throws CoreException {
-				int type = resource.getType();
-				if (type == IResource.ROOT || type == IResource.PROJECT)
-					return true;
-				if (type == IResource.FILE && resource.getParent().getType() == IResource.PROJECT && resource.getName().equals(IProjectDescription.DESCRIPTION_FILE_NAME))
-					return true;
-				assertNull("5.0." + resource.getFullPath(), synchronizer.getSyncInfo(qname, resource));
+		visitor = resource -> {
+			int type = resource.getType();
+			if (type == IResource.ROOT || type == IResource.PROJECT)
 				return true;
-			}
+			if (type == IResource.FILE && resource.getParent().getType() == IResource.PROJECT && resource.getName().equals(IProjectDescription.DESCRIPTION_FILE_NAME))
+				return true;
+			assertNull("5.0." + resource.getFullPath(), synchronizer.getSyncInfo(qname, resource));
+			return true;
 		};
 
 		try {
@@ -521,20 +482,17 @@
 
 		// register the sync partner and set the sync info on the resources
 		synchronizer.add(qname);
-		IResourceVisitor visitor = new IResourceVisitor() {
-			@Override
-			public boolean visit(IResource resource) {
-				if (resource.getType() == IResource.ROOT)
-					return true;
-				try {
-					byte[] b = getRandomString().getBytes();
-					synchronizer.setSyncInfo(qname, resource, b);
-					table.put(resource.getFullPath(), b);
-				} catch (CoreException e) {
-					fail("0.0." + resource.getFullPath(), e);
-				}
+		IResourceVisitor visitor = resource -> {
+			if (resource.getType() == IResource.ROOT)
 				return true;
+			try {
+				byte[] b = getRandomString().getBytes();
+				synchronizer.setSyncInfo(qname, resource, b);
+				table.put(resource.getFullPath(), b);
+			} catch (CoreException e) {
+				fail("0.0." + resource.getFullPath(), e);
 			}
+			return true;
 		};
 		try {
 			getWorkspace().getRoot().accept(visitor);
@@ -554,30 +512,27 @@
 		}
 		final DataOutputStream output = o1;
 		final List<QualifiedName> list = new ArrayList<>(5);
-		visitor = new IResourceVisitor() {
-			@Override
-			public boolean visit(final IResource resource) {
-				try {
-					ResourceInfo info = ((Resource) resource).getResourceInfo(false, false);
-					if (info == null)
-						return true;
-					IPathRequestor requestor = new IPathRequestor() {
-						@Override
-						public IPath requestPath() {
-							return resource.getFullPath();
-						}
+		visitor = resource -> {
+			try {
+				ResourceInfo info = ((Resource) resource).getResourceInfo(false, false);
+				if (info == null)
+					return true;
+				IPathRequestor requestor = new IPathRequestor() {
+					@Override
+					public IPath requestPath() {
+						return resource.getFullPath();
+					}
 
-						@Override
-						public String requestName() {
-							return resource.getName();
-						}
-					};
-					synchronizer.saveSyncInfo(info, requestor, output, list);
-				} catch (IOException e) {
-					fail("1.1", e);
-				}
-				return true;
+					@Override
+					public String requestName() {
+						return resource.getName();
+					}
+				};
+				synchronizer.saveSyncInfo(info, requestor, output, list);
+			} catch (IOException e) {
+				fail("1.1", e);
 			}
+			return true;
 		};
 		try {
 			getWorkspace().getRoot().accept(visitor);
@@ -602,15 +557,12 @@
 		try {
 			InputStream fileInput = new FileInputStream(file);
 			final DataInputStream input = new DataInputStream(fileInput);
-			IWorkspaceRunnable body = new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor monitor) throws CoreException {
-					SyncInfoReader reader = new SyncInfoReader((Workspace) getWorkspace(), synchronizer);
-					try {
-						reader.readSyncInfo(input);
-					} catch (IOException e) {
-						fail("3.0", e);
-					}
+			IWorkspaceRunnable body = monitor -> {
+				SyncInfoReader reader = new SyncInfoReader((Workspace) getWorkspace(), synchronizer);
+				try {
+					reader.readSyncInfo(input);
+				} catch (IOException e) {
+					fail("3.0", e);
 				}
 			};
 			try {
@@ -629,19 +581,16 @@
 		}
 
 		// confirm the sync bytes are the same
-		visitor = new IResourceVisitor() {
-			@Override
-			public boolean visit(IResource resource) throws CoreException {
-				byte[] actual = synchronizer.getSyncInfo(qname, resource);
-				if (resource.getType() == IResource.ROOT) {
-					assertNull("4.0", actual);
-					return true;
-				} else
-					assertNotNull("4.1." + resource.getFullPath(), actual);
-				byte[] expected = table.get(resource.getFullPath());
-				assertEquals("4.2." + resource.getFullPath(), expected, actual);
+		visitor = resource -> {
+			byte[] actual = synchronizer.getSyncInfo(qname, resource);
+			if (resource.getType() == IResource.ROOT) {
+				assertNull("4.0", actual);
 				return true;
-			}
+			} else
+				assertNotNull("4.1." + resource.getFullPath(), actual);
+			byte[] expected = table.get(resource.getFullPath());
+			assertEquals("4.2." + resource.getFullPath(), expected, actual);
+			return true;
 		};
 		try {
 			getWorkspace().getRoot().accept(visitor);
@@ -785,15 +734,12 @@
 
 		// setup the sync bytes
 		final Hashtable<IPath, byte[]> table = new Hashtable<>(10);
-		IResourceVisitor visitor = new IResourceVisitor() {
-			@Override
-			public boolean visit(IResource resource) {
-				if (resource.getType() == IResource.ROOT)
-					return true;
-				byte[] b = getRandomString().getBytes();
-				table.put(resource.getFullPath(), b);
+		IResourceVisitor visitor = resource -> {
+			if (resource.getType() == IResource.ROOT)
 				return true;
-			}
+			byte[] b = getRandomString().getBytes();
+			table.put(resource.getFullPath(), b);
+			return true;
 		};
 		try {
 			getWorkspace().getRoot().accept(visitor);
@@ -802,18 +748,15 @@
 		}
 
 		// should not be able to set sync info before the target has been registered.
-		visitor = new IResourceVisitor() {
-			@Override
-			public boolean visit(IResource resource) {
-				if (resource.getType() == IResource.ROOT)
-					return true;
-				try {
-					synchronizer.setSyncInfo(qname, resource, table.get(resource.getFullPath()));
-					assertTrue("1.0." + resource.getFullPath(), false);
-				} catch (CoreException e) {
-				}
+		visitor = resource -> {
+			if (resource.getType() == IResource.ROOT)
 				return true;
+			try {
+				synchronizer.setSyncInfo(qname, resource, table.get(resource.getFullPath()));
+				assertTrue("1.0." + resource.getFullPath(), false);
+			} catch (CoreException e) {
 			}
+			return true;
 		};
 		try {
 			getWorkspace().getRoot().accept(visitor);
@@ -822,16 +765,13 @@
 		}
 
 		// should not be able to get sync info before the target has been registered
-		visitor = new IResourceVisitor() {
-			@Override
-			public boolean visit(IResource resource) {
-				try {
-					synchronizer.getSyncInfo(qname, resource);
-					assertTrue("2.0." + resource.getFullPath(), false);
-				} catch (CoreException e) {
-				}
-				return true;
+		visitor = resource -> {
+			try {
+				synchronizer.getSyncInfo(qname, resource);
+				assertTrue("2.0." + resource.getFullPath(), false);
+			} catch (CoreException e) {
 			}
+			return true;
 		};
 		try {
 			getWorkspace().getRoot().accept(visitor);
@@ -843,17 +783,14 @@
 		synchronizer.add(qname);
 
 		// there shouldn't be any info yet
-		visitor = new IResourceVisitor() {
-			@Override
-			public boolean visit(IResource resource) {
-				try {
-					byte[] actual = synchronizer.getSyncInfo(qname, resource);
-					assertNull("3.0." + resource.getFullPath(), actual);
-				} catch (CoreException e) {
-					fail("3.1." + resource.getFullPath(), e);
-				}
-				return true;
+		visitor = resource -> {
+			try {
+				byte[] actual = synchronizer.getSyncInfo(qname, resource);
+				assertNull("3.0." + resource.getFullPath(), actual);
+			} catch (CoreException e) {
+				fail("3.1." + resource.getFullPath(), e);
 			}
+			return true;
 		};
 		try {
 			getWorkspace().getRoot().accept(visitor);
@@ -862,16 +799,13 @@
 		}
 
 		// set the sync info
-		visitor = new IResourceVisitor() {
-			@Override
-			public boolean visit(IResource resource) {
-				try {
-					synchronizer.setSyncInfo(qname, resource, table.get(resource.getFullPath()));
-				} catch (CoreException e) {
-					fail("4.0." + resource.getFullPath(), e);
-				}
-				return true;
+		visitor = resource -> {
+			try {
+				synchronizer.setSyncInfo(qname, resource, table.get(resource.getFullPath()));
+			} catch (CoreException e) {
+				fail("4.0." + resource.getFullPath(), e);
 			}
+			return true;
 		};
 		try {
 			getWorkspace().getRoot().accept(visitor);
@@ -880,23 +814,20 @@
 		}
 
 		// get the info and ensure its the same
-		visitor = new IResourceVisitor() {
-			@Override
-			public boolean visit(IResource resource) {
-				try {
-					byte[] actual = synchronizer.getSyncInfo(qname, resource);
-					if (resource.getType() == IResource.ROOT) {
-						assertNull("5.0", actual);
-						return true;
-					} else
-						assertNotNull("5.1." + resource.getFullPath(), actual);
-					byte[] expected = table.get(resource.getFullPath());
-					assertEquals("5.2." + resource.getFullPath(), expected, actual);
-				} catch (CoreException e) {
-					fail("5.3." + resource.getFullPath(), e);
-				}
-				return true;
+		visitor = resource -> {
+			try {
+				byte[] actual = synchronizer.getSyncInfo(qname, resource);
+				if (resource.getType() == IResource.ROOT) {
+					assertNull("5.0", actual);
+					return true;
+				} else
+					assertNotNull("5.1." + resource.getFullPath(), actual);
+				byte[] expected = table.get(resource.getFullPath());
+				assertEquals("5.2." + resource.getFullPath(), expected, actual);
+			} catch (CoreException e) {
+				fail("5.3." + resource.getFullPath(), e);
 			}
+			return true;
 		};
 		try {
 			getWorkspace().getRoot().accept(visitor);
@@ -905,20 +836,17 @@
 		}
 
 		// change the info and then set it
-		visitor = new IResourceVisitor() {
-			@Override
-			public boolean visit(IResource resource) {
-				if (resource.getType() == IResource.ROOT)
-					return true;
-				try {
-					byte[] b = getRandomString().getBytes();
-					synchronizer.setSyncInfo(qname, resource, b);
-					table.put(resource.getFullPath(), b);
-				} catch (CoreException e) {
-					fail("6.0", e);
-				}
+		visitor = resource -> {
+			if (resource.getType() == IResource.ROOT)
 				return true;
+			try {
+				byte[] b = getRandomString().getBytes();
+				synchronizer.setSyncInfo(qname, resource, b);
+				table.put(resource.getFullPath(), b);
+			} catch (CoreException e) {
+				fail("6.0", e);
 			}
+			return true;
 		};
 		try {
 			getWorkspace().getRoot().accept(visitor);
@@ -927,23 +855,20 @@
 		}
 
 		// get the new info
-		visitor = new IResourceVisitor() {
-			@Override
-			public boolean visit(IResource resource) {
-				try {
-					byte[] actual = synchronizer.getSyncInfo(qname, resource);
-					if (resource.getType() == IResource.ROOT) {
-						assertNull("7.0", actual);
-						return true;
-					} else
-						assertNotNull("7.1." + resource.getFullPath(), actual);
-					byte[] expected = table.get(resource.getFullPath());
-					assertEquals("7.2." + resource.getFullPath(), expected, actual);
-				} catch (CoreException e) {
-					fail("7.3." + resource.getFullPath(), e);
-				}
-				return true;
+		visitor = resource -> {
+			try {
+				byte[] actual = synchronizer.getSyncInfo(qname, resource);
+				if (resource.getType() == IResource.ROOT) {
+					assertNull("7.0", actual);
+					return true;
+				} else
+					assertNotNull("7.1." + resource.getFullPath(), actual);
+				byte[] expected = table.get(resource.getFullPath());
+				assertEquals("7.2." + resource.getFullPath(), expected, actual);
+			} catch (CoreException e) {
+				fail("7.3." + resource.getFullPath(), e);
 			}
+			return true;
 		};
 		try {
 			getWorkspace().getRoot().accept(visitor);
@@ -955,16 +880,13 @@
 		synchronizer.remove(qname);
 
 		// should not be able to get sync info because the target has been unregistered
-		visitor = new IResourceVisitor() {
-			@Override
-			public boolean visit(IResource resource) {
-				try {
-					synchronizer.getSyncInfo(qname, resource);
-					assertTrue("9.0." + resource.getFullPath(), false);
-				} catch (CoreException e) {
-				}
-				return true;
+		visitor = resource -> {
+			try {
+				synchronizer.getSyncInfo(qname, resource);
+				assertTrue("9.0." + resource.getFullPath(), false);
+			} catch (CoreException e) {
 			}
+			return true;
 		};
 		try {
 			getWorkspace().getRoot().accept(visitor);
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/IWorkspaceRootTest.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/IWorkspaceRootTest.java
index 33dff1a..fd27998 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/IWorkspaceRootTest.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/IWorkspaceRootTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2016 IBM Corporation and others.
+ * Copyright (c) 2000, 2017 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -344,24 +344,14 @@
 		final String value = "this is a test property value";
 		final QualifiedName name = new QualifiedName("test", "testProperty");
 		try {
-			getWorkspace().run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor monitor) throws CoreException {
-					root.setPersistentProperty(name, value);
-				}
-			}, getMonitor());
+			getWorkspace().run((IWorkspaceRunnable) monitor -> root.setPersistentProperty(name, value), getMonitor());
 		} catch (CoreException e) {
 			fail("1.0", e);
 		}
 
 		try {
 			final String[] storedValue = new String[1];
-			getWorkspace().run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor monitor) throws CoreException {
-					storedValue[0] = root.getPersistentProperty(name);
-				}
-			}, getMonitor());
+			getWorkspace().run((IWorkspaceRunnable) monitor -> storedValue[0] = root.getPersistentProperty(name), getMonitor());
 			assertEquals("2.0", value, storedValue[0]);
 		} catch (CoreException e) {
 			fail("2.1", e);
@@ -370,12 +360,7 @@
 		try {
 			final QualifiedName name2 = new QualifiedName("test", "testNonProperty");
 			final String[] storedValue = new String[1];
-			getWorkspace().run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor monitor) throws CoreException {
-					storedValue[0] = root.getPersistentProperty(name2);
-				}
-			}, getMonitor());
+			getWorkspace().run((IWorkspaceRunnable) monitor -> storedValue[0] = root.getPersistentProperty(name2), getMonitor());
 			assertEquals("3.0", null, storedValue[0]);
 		} catch (CoreException e) {
 			fail("3.1", e);
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/IWorkspaceTest.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/IWorkspaceTest.java
index ae3f448..749285a 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/IWorkspaceTest.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/IWorkspaceTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2015 IBM Corporation and others.
+ *  Copyright (c) 2000, 2017 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -73,11 +73,8 @@
 	public void testCancelRunnable() {
 		boolean cancelled = false;
 		try {
-			getWorkspace().run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor monitor) {
-					throw new OperationCanceledException();
-				}
+			getWorkspace().run((IWorkspaceRunnable) monitor -> {
+				throw new OperationCanceledException();
 			}, getMonitor());
 		} catch (CoreException e) {
 			fail("1.0", e);
@@ -738,25 +735,22 @@
 	public void testMultiCreation() throws Throwable {
 		final IProject project = getWorkspace().getRoot().getProject("bar");
 		final IResource[] resources = buildResources(project, new String[] {"a/", "a/b"});
-		IWorkspaceRunnable body = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				project.create(null);
-				project.open(null);
-				// define an operation which will create a bunch of resources including a project.
-				for (int i = 0; i < resources.length; i++) {
-					IResource resource = resources[i];
-					switch (resource.getType()) {
-						case IResource.FILE :
-							((IFile) resource).create(null, false, getMonitor());
-							break;
-						case IResource.FOLDER :
-							((IFolder) resource).create(false, true, getMonitor());
-							break;
-						case IResource.PROJECT :
-							((IProject) resource).create(getMonitor());
-							break;
-					}
+		IWorkspaceRunnable body = monitor -> {
+			project.create(null);
+			project.open(null);
+			// define an operation which will create a bunch of resources including a project.
+			for (int i = 0; i < resources.length; i++) {
+				IResource resource = resources[i];
+				switch (resource.getType()) {
+					case IResource.FILE :
+						((IFile) resource).create(null, false, getMonitor());
+						break;
+					case IResource.FOLDER :
+						((IFolder) resource).create(false, true, getMonitor());
+						break;
+					case IResource.PROJECT :
+						((IProject) resource).create(getMonitor());
+						break;
 				}
 			}
 		};
@@ -783,26 +777,23 @@
 		final CoreException[] errorPointer = new CoreException[1];
 		Thread[] threads = new Thread[THREAD_COUNT];
 		for (int i = 0; i < THREAD_COUNT; i++) {
-			threads[i] = new Thread(new Runnable() {
-				@Override
-				public void run() {
-					IWorkspace workspace = ResourcesPlugin.getWorkspace();
-					IWorkspaceDescription description = workspace.getDescription();
-					for (int j = 0; j < 100; j++) {
-						description.setAutoBuilding(false);
-						try {
-							workspace.setDescription(description);
-						} catch (CoreException e) {
-							errorPointer[0] = e;
-							return;
-						}
-						description.setAutoBuilding(true);
-						try {
-							workspace.setDescription(description);
-						} catch (CoreException e) {
-							errorPointer[0] = e;
-							return;
-						}
+			threads[i] = new Thread((Runnable) () -> {
+				IWorkspace workspace = ResourcesPlugin.getWorkspace();
+				IWorkspaceDescription description = workspace.getDescription();
+				for (int j = 0; j < 100; j++) {
+					description.setAutoBuilding(false);
+					try {
+						workspace.setDescription(description);
+					} catch (CoreException e1) {
+						errorPointer[0] = e1;
+						return;
+					}
+					description.setAutoBuilding(true);
+					try {
+						workspace.setDescription(description);
+					} catch (CoreException e2) {
+						errorPointer[0] = e2;
+						return;
 					}
 				}
 			}, "Autobuild " + i);
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/LinkedResourceTest.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/LinkedResourceTest.java
index be0b029..9461c38 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/LinkedResourceTest.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/LinkedResourceTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * Copyright (c) 2000, 2017 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -728,12 +728,7 @@
 		final byte[] finalContents = oldContents;
 		try {
 			//recreate the link in a workspace runnable with create scheduling rule
-			getWorkspace().run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor monitor) throws CoreException {
-					dotProject.setContents(new ByteArrayInputStream(finalContents), IResource.NONE, getMonitor());
-				}
-			}, getWorkspace().getRuleFactory().modifyRule(dotProject), IResource.NONE, getMonitor());
+			getWorkspace().run((IWorkspaceRunnable) monitor -> dotProject.setContents(new ByteArrayInputStream(finalContents), IResource.NONE, getMonitor()), getWorkspace().getRuleFactory().modifyRule(dotProject), IResource.NONE, getMonitor());
 		} catch (CoreException e1) {
 			fail("2.99", e1);
 		}
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/MarkerSetTest.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/MarkerSetTest.java
index 001bc92..2dcb950 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/MarkerSetTest.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/MarkerSetTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * Copyright (c) 2000, 2017 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -43,15 +43,12 @@
 		System.arraycopy(array1, 0, m1, 0, array1.length);
 		IMarkerSetElement[] m2 = new IMarkerSetElement[array2.length];
 		System.arraycopy(array2, 0, m2, 0, array2.length);
-		java.util.Comparator<IMarkerSetElement> compare = new java.util.Comparator<IMarkerSetElement>() {
-			@Override
-			public int compare(IMarkerSetElement e1, IMarkerSetElement e2) {
-				long id1 = e1.getId();
-				long id2 = e2.getId();
-				if (id1 == id2)
-					return 0;
-				return id1 < id2 ? -1 : 1;
-			}
+		java.util.Comparator<IMarkerSetElement> compare = (e1, e2) -> {
+			long id1 = e1.getId();
+			long id2 = e2.getId();
+			if (id1 == id2)
+				return 0;
+			return id1 < id2 ? -1 : 1;
 		};
 		Arrays.sort(m1, compare);
 		Arrays.sort(m2, compare);
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/MarkerTest.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/MarkerTest.java
index 5a3ecb7..5e3bcd2 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/MarkerTest.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/MarkerTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2015 IBM Corporation and others.
+ *  Copyright (c) 2000, 2017 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -130,19 +130,13 @@
 		display("Total Number of Markers: " + numMarkers);
 
 		// Create an array with a bunch of markers.
-		IWorkspaceRunnable body = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				IResourceVisitor visitor = new IResourceVisitor() {
-					@Override
-					public boolean visit(IResource resource) throws CoreException {
-						for (int i = 0; i < markersPerResource; i++)
-							resource.createMarker(IMarker.PROBLEM);
-						return true;
-					}
-				};
-				getWorkspace().getRoot().accept(visitor);
-			}
+		IWorkspaceRunnable body = monitor -> {
+			IResourceVisitor visitor = resource -> {
+				for (int i = 0; i < markersPerResource; i++)
+					resource.createMarker(IMarker.PROBLEM);
+				return true;
+			};
+			getWorkspace().getRoot().accept(visitor);
 		};
 		try {
 			start = System.currentTimeMillis();
@@ -166,12 +160,9 @@
 		}
 
 		// create attributes on each marker
-		body = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				for (int i = 0; i < markers.length; i++)
-					markers[i].setAttribute(IMarker.MESSAGE, getRandomString());
-			}
+		body = monitor -> {
+			for (int i = 0; i < markers.length; i++)
+				markers[i].setAttribute(IMarker.MESSAGE, getRandomString());
 		};
 		try {
 			start = System.currentTimeMillis();
@@ -184,12 +175,9 @@
 		}
 
 		// get the attribute from each marker
-		body = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				for (int i = 0; i < markers.length; i++)
-					markers[i].getAttribute(IMarker.MESSAGE);
-			}
+		body = monitor -> {
+			for (int i = 0; i < markers.length; i++)
+				markers[i].getAttribute(IMarker.MESSAGE);
 		};
 		try {
 			start = System.currentTimeMillis();
@@ -214,13 +202,10 @@
 
 		// Create an array with a bunch of markers.
 		final IMarker markers[] = new IMarker[numMarkers];
-		IWorkspaceRunnable body = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				IResource resource = getWorkspace().getRoot();
-				for (int i = 0; i < markers.length; i++) {
-					markers[i] = resource.createMarker(IMarker.PROBLEM);
-				}
+		IWorkspaceRunnable body = monitor -> {
+			IResource resource = getWorkspace().getRoot();
+			for (int i = 0; i < markers.length; i++) {
+				markers[i] = resource.createMarker(IMarker.PROBLEM);
 			}
 		};
 		try {
@@ -234,12 +219,9 @@
 		}
 
 		// create attributes on each marker
-		body = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				for (int i = 0; i < markers.length; i++)
-					markers[i].setAttribute(IMarker.MESSAGE, getRandomString());
-			}
+		body = monitor -> {
+			for (int i = 0; i < markers.length; i++)
+				markers[i].setAttribute(IMarker.MESSAGE, getRandomString());
 		};
 		try {
 			start = System.currentTimeMillis();
@@ -251,24 +233,21 @@
 			fail("1.0", e);
 		}
 
-		java.util.Comparator<IMarker> c = new java.util.Comparator<IMarker>() {
-			@Override
-			public int compare(IMarker o1, IMarker o2) {
-				try {
-					String name1 = (String) o1.getAttribute(IMarker.MESSAGE);
-					String name2 = (String) o2.getAttribute(IMarker.MESSAGE);
-					if (name1 == null)
-						name1 = "";
-					if (name2 == null)
-						name2 = "";
-					int result = name1.compareToIgnoreCase(name2);
-					return result;
-				} catch (CoreException e) {
-					fail("2.0", e);
-				}
-				// avoid compiler error
-				return -1;
+		java.util.Comparator<IMarker> c = (o1, o2) -> {
+			try {
+				String name1 = (String) o1.getAttribute(IMarker.MESSAGE);
+				String name2 = (String) o2.getAttribute(IMarker.MESSAGE);
+				if (name1 == null)
+					name1 = "";
+				if (name2 == null)
+					name2 = "";
+				int result = name1.compareToIgnoreCase(name2);
+				return result;
+			} catch (CoreException e) {
+				fail("2.0", e);
 			}
+			// avoid compiler error
+			return -1;
 		};
 		start = System.currentTimeMillis();
 		Arrays.sort(markers, c);
@@ -364,12 +343,9 @@
 
 	protected IMarker[] createMarkers(final IResource[] hosts, final String type) throws CoreException {
 		final IMarker[] result = new IMarker[hosts.length];
-		getWorkspace().run(new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				for (int i = 0; i < hosts.length; i++) {
-					result[i] = hosts[i].createMarker(type);
-				}
+		getWorkspace().run((IWorkspaceRunnable) monitor -> {
+			for (int i = 0; i < hosts.length; i++) {
+				result[i] = hosts[i].createMarker(type);
 			}
 		}, getMonitor());
 		return result;
@@ -994,17 +970,14 @@
 
 		// create markers on various resources
 		final IMarker[] markers = new IMarker[3];
-		IWorkspaceRunnable body = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				markers[0] = resources[0].createMarker(IMarker.BOOKMARK);
-				markers[1] = resources[1].createMarker(IMarker.BOOKMARK);
-				markers[1].setAttribute(IMarker.CHAR_START, 5);
-				markers[2] = resources[2].createMarker(IMarker.PROBLEM);
-				markers[2].setAttribute(IMarker.DONE, true);
-				markers[2].setAttribute(IMarker.PRIORITY, IMarker.PRIORITY_HIGH);
-				markers[2].setAttribute(IMarker.MESSAGE, "Hello");
-			}
+		IWorkspaceRunnable body = monitor -> {
+			markers[0] = resources[0].createMarker(IMarker.BOOKMARK);
+			markers[1] = resources[1].createMarker(IMarker.BOOKMARK);
+			markers[1].setAttribute(IMarker.CHAR_START, 5);
+			markers[2] = resources[2].createMarker(IMarker.PROBLEM);
+			markers[2].setAttribute(IMarker.DONE, true);
+			markers[2].setAttribute(IMarker.PRIORITY, IMarker.PRIORITY_HIGH);
+			markers[2].setAttribute(IMarker.MESSAGE, "Hello");
 		};
 		try {
 			getWorkspace().run(body, getMonitor());
@@ -1038,35 +1011,26 @@
 
 			//add+change
 			listener.expectChanges(markers[1]);
-			getWorkspace().run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor monitor) throws CoreException {
-					markers[1].setAttribute(IMarker.CHAR_START, 5);
-					markers[1].setAttribute(IMarker.CHAR_END, 10);
-				}
+			getWorkspace().run((IWorkspaceRunnable) monitor -> {
+				markers[1].setAttribute(IMarker.CHAR_START, 5);
+				markers[1].setAttribute(IMarker.CHAR_END, 10);
 			}, getMonitor());
 			listener.verifyChanges();
 
 			//change+remove same marker
 			listener.expectChanges(markers[1]);
-			getWorkspace().run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor monitor) throws CoreException {
-					markers[1].setAttribute(IMarker.CHAR_START, 5);
-					markers[1].setAttribute(IMarker.CHAR_START, null);
-				}
+			getWorkspace().run((IWorkspaceRunnable) monitor -> {
+				markers[1].setAttribute(IMarker.CHAR_START, 5);
+				markers[1].setAttribute(IMarker.CHAR_START, null);
 			}, getMonitor());
 			listener.verifyChanges();
 
 			//change multiple markers
 			listener.expectChanges(markers);
-			getWorkspace().run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor monitor) throws CoreException {
-					markers[0].setAttribute(IMarker.CHAR_START, 5);
-					markers[1].setAttribute(IMarker.CHAR_START, 10);
-					markers[2].setAttribute(IMarker.PRIORITY, IMarker.PRIORITY_LOW);
-				}
+			getWorkspace().run((IWorkspaceRunnable) monitor -> {
+				markers[0].setAttribute(IMarker.CHAR_START, 5);
+				markers[1].setAttribute(IMarker.CHAR_START, 10);
+				markers[2].setAttribute(IMarker.PRIORITY, IMarker.PRIORITY_LOW);
 			}, getMonitor());
 			listener.verifyChanges();
 		} catch (CoreException e) {
@@ -1091,22 +1055,16 @@
 			final Hashtable<IResource, IMarker> table = new Hashtable<>(1);
 			final int[] count = new int[1];
 			count[0] = 0;
-			IWorkspaceRunnable body = new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor monitor) throws CoreException {
-					IResourceVisitor visitor = new IResourceVisitor() {
-						@Override
-						public boolean visit(IResource resource) throws CoreException {
-							if (resource.getType() == IResource.ROOT || resource.getType() == IResource.PROJECT)
-								return true;
-							IMarker marker = resource.createMarker(IMarker.BOOKMARK);
-							table.put(resource, marker);
-							count[0]++;
-							return true;
-						}
-					};
-					getWorkspace().getRoot().accept(visitor);
-				}
+			IWorkspaceRunnable body = monitor -> {
+				IResourceVisitor visitor = resource -> {
+					if (resource.getType() == IResource.ROOT || resource.getType() == IResource.PROJECT)
+						return true;
+					IMarker marker = resource.createMarker(IMarker.BOOKMARK);
+					table.put(resource, marker);
+					count[0]++;
+					return true;
+				};
+				getWorkspace().getRoot().accept(visitor);
 			};
 			try {
 				getWorkspace().run(body, getMonitor());
@@ -1179,15 +1137,12 @@
 
 				// ADD + REMOVE = nothing
 				try {
-					IWorkspaceRunnable body = new IWorkspaceRunnable() {
-						@Override
-						public void run(IProgressMonitor monitor) throws CoreException {
-							listener.reset();
-							IMarker marker = resource.createMarker(IMarker.PROBLEM);
-							assertExists("1.0." + resource.getFullPath(), marker);
-							marker.delete();
-							assertDoesNotExist("1.1." + resource.getFullPath(), marker);
-						}
+					IWorkspaceRunnable body = monitor -> {
+						listener.reset();
+						IMarker marker = resource.createMarker(IMarker.PROBLEM);
+						assertExists("1.0." + resource.getFullPath(), marker);
+						marker.delete();
+						assertDoesNotExist("1.1." + resource.getFullPath(), marker);
 					};
 					getWorkspace().run(body, getMonitor());
 					assertEquals("1.2." + resource.getFullPath(), 0, listener.numAffectedResources());
@@ -1201,15 +1156,12 @@
 					// cannot re-assign variable value within the code below, so must
 					// put our marker value inside an array and set the element.
 					final IMarker[] markers = new IMarker[1];
-					IWorkspaceRunnable body = new IWorkspaceRunnable() {
-						@Override
-						public void run(IProgressMonitor monitor) throws CoreException {
-							listener.reset();
-							markers[0] = resource.createMarker(IMarker.PROBLEM);
-							assertExists("2.0." + resource.getFullPath(), markers[0]);
-							markers[0].setAttribute(IMarker.MESSAGE, "my message text");
-							assertEquals("2.1." + resource.getFullPath(), "my message text", markers[0].getAttribute(IMarker.MESSAGE));
-						}
+					IWorkspaceRunnable body = monitor -> {
+						listener.reset();
+						markers[0] = resource.createMarker(IMarker.PROBLEM);
+						assertExists("2.0." + resource.getFullPath(), markers[0]);
+						markers[0].setAttribute(IMarker.MESSAGE, "my message text");
+						assertEquals("2.1." + resource.getFullPath(), "my message text", markers[0].getAttribute(IMarker.MESSAGE));
 					};
 					getWorkspace().run(body, getMonitor());
 					assertEquals("2.2." + resource.getFullPath(), 1, listener.numAffectedResources());
@@ -1245,15 +1197,12 @@
 					final IMarker[] markers = new IMarker[1];
 					markers[0] = resource.createMarker(IMarker.PROBLEM);
 					assertExists("4.0." + resource.getFullPath(), markers[0]);
-					IWorkspaceRunnable body = new IWorkspaceRunnable() {
-						@Override
-						public void run(IProgressMonitor monitor) throws CoreException {
-							listener.reset();
-							markers[0].setAttribute(IMarker.MESSAGE, "my message text");
-							assertEquals("4.1." + resource.getFullPath(), "my message text", markers[0].getAttribute(IMarker.MESSAGE));
-							markers[0].setAttribute(IMarker.PRIORITY, IMarker.PRIORITY_HIGH);
-							assertEquals("4.2." + resource.getFullPath(), IMarker.PRIORITY_HIGH, ((Integer) markers[0].getAttribute(IMarker.PRIORITY)).intValue());
-						}
+					IWorkspaceRunnable body = monitor -> {
+						listener.reset();
+						markers[0].setAttribute(IMarker.MESSAGE, "my message text");
+						assertEquals("4.1." + resource.getFullPath(), "my message text", markers[0].getAttribute(IMarker.MESSAGE));
+						markers[0].setAttribute(IMarker.PRIORITY, IMarker.PRIORITY_HIGH);
+						assertEquals("4.2." + resource.getFullPath(), IMarker.PRIORITY_HIGH, ((Integer) markers[0].getAttribute(IMarker.PRIORITY)).intValue());
 					};
 					getWorkspace().run(body, getMonitor());
 					assertEquals("4.3." + resource.getFullPath(), 1, listener.numAffectedResources());
@@ -1267,15 +1216,12 @@
 					final IMarker[] markers = new IMarker[1];
 					markers[0] = resource.createMarker(IMarker.PROBLEM);
 					assertExists("5.0." + resource.getFullPath(), markers[0]);
-					IWorkspaceRunnable body = new IWorkspaceRunnable() {
-						@Override
-						public void run(IProgressMonitor monitor) throws CoreException {
-							listener.reset();
-							markers[0].setAttribute(IMarker.MESSAGE, "my message text");
-							assertEquals("5.1." + resource.getFullPath(), "my message text", markers[0].getAttribute(IMarker.MESSAGE));
-							markers[0].delete();
-							assertDoesNotExist("5.2." + resource.getFullPath(), markers[0]);
-						}
+					IWorkspaceRunnable body = monitor -> {
+						listener.reset();
+						markers[0].setAttribute(IMarker.MESSAGE, "my message text");
+						assertEquals("5.1." + resource.getFullPath(), "my message text", markers[0].getAttribute(IMarker.MESSAGE));
+						markers[0].delete();
+						assertDoesNotExist("5.2." + resource.getFullPath(), markers[0]);
 					};
 					getWorkspace().run(body, getMonitor());
 					assertEquals("5.3." + resource.getFullPath(), 1, listener.numAffectedResources());
@@ -1449,22 +1395,16 @@
 			final Hashtable<IResource, IMarker> table = new Hashtable<>(1);
 			final int[] count = new int[1];
 			count[0] = 0;
-			IWorkspaceRunnable body = new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor monitor) throws CoreException {
-					IResourceVisitor visitor = new IResourceVisitor() {
-						@Override
-						public boolean visit(IResource resource) throws CoreException {
-							if (resource.getType() == IResource.ROOT)
-								return true;
-							IMarker marker = resource.createMarker(IMarker.BOOKMARK);
-							table.put(resource, marker);
-							count[0]++;
-							return true;
-						}
-					};
-					getWorkspace().getRoot().accept(visitor);
-				}
+			IWorkspaceRunnable body = monitor -> {
+				IResourceVisitor visitor = resource -> {
+					if (resource.getType() == IResource.ROOT)
+						return true;
+					IMarker marker = resource.createMarker(IMarker.BOOKMARK);
+					table.put(resource, marker);
+					count[0]++;
+					return true;
+				};
+				getWorkspace().getRoot().accept(visitor);
 			};
 			try {
 				getWorkspace().run(body, getMonitor());
@@ -1485,24 +1425,21 @@
 			}
 
 			// verify marker deltas
-			IResourceVisitor visitor = new IResourceVisitor() {
-				@Override
-				public boolean visit(IResource resource) throws CoreException {
-					if (resource.getType() == IResource.ROOT)
-						return true;
-					String name = resource.getFullPath().segment(0);
-					IPath path = new Path(name.substring(0, name.length() - 4)).makeAbsolute();
-					path = path.append(resource.getFullPath().removeFirstSegments(1));
-					IResource oldResource = ((Workspace) getWorkspace()).newResource(path, resource.getType());
-					IMarker marker = table.get(oldResource);
-					assertNotNull("2.1." + oldResource.getFullPath(), marker);
-					assertTrue("2.2." + oldResource.getFullPath(), listener.checkChanges(oldResource, null, new IMarker[] {marker}, null));
-					IMarker[] markers = resource.findMarkers(null, true, IResource.DEPTH_ZERO);
-					assertEquals("2.3." + resource.getFullPath(), 1, markers.length);
-					assertEquals("2.4." + resource.getFullPath(), marker.getId(), markers[0].getId());
-					assertTrue("2.5." + resource.getFullPath(), listener.checkChanges(resource, new IMarker[] {markers[0]}, null, null));
+			IResourceVisitor visitor = resource -> {
+				if (resource.getType() == IResource.ROOT)
 					return true;
-				}
+				String name = resource.getFullPath().segment(0);
+				IPath path = new Path(name.substring(0, name.length() - 4)).makeAbsolute();
+				path = path.append(resource.getFullPath().removeFirstSegments(1));
+				IResource oldResource = ((Workspace) getWorkspace()).newResource(path, resource.getType());
+				IMarker marker = table.get(oldResource);
+				assertNotNull("2.1." + oldResource.getFullPath(), marker);
+				assertTrue("2.2." + oldResource.getFullPath(), listener.checkChanges(oldResource, null, new IMarker[] {marker}, null));
+				IMarker[] markers = resource.findMarkers(null, true, IResource.DEPTH_ZERO);
+				assertEquals("2.3." + resource.getFullPath(), 1, markers.length);
+				assertEquals("2.4." + resource.getFullPath(), marker.getId(), markers[0].getId());
+				assertTrue("2.5." + resource.getFullPath(), listener.checkChanges(resource, new IMarker[] {markers[0]}, null, null));
+				return true;
 			};
 			assertEquals("2.6", count[0] * 2, listener.numAffectedResources());
 			try {
@@ -1549,30 +1486,27 @@
 		}
 		final DataOutputStream output = o1;
 		final List<String> list = new ArrayList<>(5);
-		IResourceVisitor visitor = new IResourceVisitor() {
-			@Override
-			public boolean visit(final IResource resource) {
-				try {
-					ResourceInfo info = ((Resource) resource).getResourceInfo(false, false);
-					if (info == null)
-						return true;
-					IPathRequestor requestor = new IPathRequestor() {
-						@Override
-						public IPath requestPath() {
-							return resource.getFullPath();
-						}
+		IResourceVisitor visitor = resource -> {
+			try {
+				ResourceInfo info = ((Resource) resource).getResourceInfo(false, false);
+				if (info == null)
+					return true;
+				IPathRequestor requestor = new IPathRequestor() {
+					@Override
+					public IPath requestPath() {
+						return resource.getFullPath();
+					}
 
-						@Override
-						public String requestName() {
-							return resource.getName();
-						}
-					};
-					manager.save(info, requestor, output, list);
-				} catch (IOException e) {
-					fail("2.1", e);
-				}
-				return true;
+					@Override
+					public String requestName() {
+						return resource.getName();
+					}
+				};
+				manager.save(info, requestor, output, list);
+			} catch (IOException e) {
+				fail("2.1", e);
 			}
+			return true;
 		};
 		try {
 			getWorkspace().getRoot().accept(visitor);
@@ -1598,15 +1532,12 @@
 		try {
 			InputStream fileInput = new FileInputStream(file);
 			final DataInputStream input = new DataInputStream(fileInput);
-			IWorkspaceRunnable body = new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor monitor) throws CoreException {
-					MarkerReader reader = new MarkerReader((Workspace) getWorkspace());
-					try {
-						reader.read(input, true);
-					} catch (IOException e) {
-						fail("4.0", e);
-					}
+			IWorkspaceRunnable body = monitor -> {
+				MarkerReader reader = new MarkerReader((Workspace) getWorkspace());
+				try {
+					reader.read(input, true);
+				} catch (IOException e) {
+					fail("4.0", e);
 				}
 			};
 			try {
@@ -1644,26 +1575,23 @@
 		// create the markers on the resources. create both transient
 		// and persistent markers.
 		final ArrayList<IMarker> persistentMarkers = new ArrayList<>();
-		IResourceVisitor visitor = new IResourceVisitor() {
-			@Override
-			public boolean visit(IResource resource) throws CoreException {
-				IMarker marker = resource.createMarker(IMarker.PROBLEM);
-				persistentMarkers.add(marker);
-				marker = resource.createMarker(IMarker.BOOKMARK);
-				persistentMarkers.add(marker);
-				marker = resource.createMarker(TRANSIENT_MARKER);
-				// create a transient marker of a persistent type
-				marker = resource.createMarker(IMarker.BOOKMARK);
-				marker.setAttribute(IMarker.TRANSIENT, Boolean.TRUE);
-				// create a marker of a persistent type and set TRANSIENT as false (should be persisted)
-				marker = resource.createMarker(IMarker.BOOKMARK);
-				marker.setAttribute(IMarker.TRANSIENT, Boolean.FALSE);
-				persistentMarkers.add(marker);
-				// create a marker of a transient type and set TRANSIENT to false (should NOT be persisted)
-				marker = resource.createMarker(TRANSIENT_MARKER);
-				marker.setAttribute(IMarker.TRANSIENT, Boolean.FALSE);
-				return true;
-			}
+		IResourceVisitor visitor = resource -> {
+			IMarker marker = resource.createMarker(IMarker.PROBLEM);
+			persistentMarkers.add(marker);
+			marker = resource.createMarker(IMarker.BOOKMARK);
+			persistentMarkers.add(marker);
+			marker = resource.createMarker(TRANSIENT_MARKER);
+			// create a transient marker of a persistent type
+			marker = resource.createMarker(IMarker.BOOKMARK);
+			marker.setAttribute(IMarker.TRANSIENT, Boolean.TRUE);
+			// create a marker of a persistent type and set TRANSIENT as false (should be persisted)
+			marker = resource.createMarker(IMarker.BOOKMARK);
+			marker.setAttribute(IMarker.TRANSIENT, Boolean.FALSE);
+			persistentMarkers.add(marker);
+			// create a marker of a transient type and set TRANSIENT to false (should NOT be persisted)
+			marker = resource.createMarker(TRANSIENT_MARKER);
+			marker.setAttribute(IMarker.TRANSIENT, Boolean.FALSE);
+			return true;
 		};
 		try {
 			getWorkspace().getRoot().accept(visitor);
@@ -1686,30 +1614,27 @@
 		}
 		final DataOutputStream output = o1;
 		final List<String> list = new ArrayList<>(5);
-		visitor = new IResourceVisitor() {
-			@Override
-			public boolean visit(final IResource resource) {
-				try {
-					ResourceInfo info = ((Resource) resource).getResourceInfo(false, false);
-					if (info == null)
-						return true;
-					IPathRequestor requestor = new IPathRequestor() {
-						@Override
-						public IPath requestPath() {
-							return resource.getFullPath();
-						}
+		visitor = resource -> {
+			try {
+				ResourceInfo info = ((Resource) resource).getResourceInfo(false, false);
+				if (info == null)
+					return true;
+				IPathRequestor requestor = new IPathRequestor() {
+					@Override
+					public IPath requestPath() {
+						return resource.getFullPath();
+					}
 
-						@Override
-						public String requestName() {
-							return resource.getName();
-						}
-					};
-					manager.save(info, requestor, output, list);
-				} catch (IOException e) {
-					fail("2.1", e);
-				}
-				return true;
+					@Override
+					public String requestName() {
+						return resource.getName();
+					}
+				};
+				manager.save(info, requestor, output, list);
+			} catch (IOException e) {
+				fail("2.1", e);
 			}
+			return true;
 		};
 		try {
 			getWorkspace().getRoot().accept(visitor);
@@ -1735,15 +1660,12 @@
 		try {
 			InputStream fileInput = new FileInputStream(file);
 			final DataInputStream input = new DataInputStream(fileInput);
-			IWorkspaceRunnable body = new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor monitor) throws CoreException {
-					MarkerReader reader = new MarkerReader((Workspace) getWorkspace());
-					try {
-						reader.read(input, true);
-					} catch (IOException e) {
-						fail("4.0", e);
-					}
+			IWorkspaceRunnable body = monitor -> {
+				MarkerReader reader = new MarkerReader((Workspace) getWorkspace());
+				try {
+					reader.read(input, true);
+				} catch (IOException e) {
+					fail("4.0", e);
 				}
 			};
 			try {
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/ResourceTest.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/ResourceTest.java
index 6e6a778..71b1787 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/ResourceTest.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/ResourceTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2016 IBM Corporation and others.
+ * Copyright (c) 2000, 2017 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -374,14 +374,11 @@
 	protected void cleanup() throws CoreException {
 		final IFileStore[] toDelete = storesToDelete.toArray(new IFileStore[0]);
 		storesToDelete.clear();
-		getWorkspace().run(new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				getWorkspace().getRoot().delete(IResource.FORCE | IResource.ALWAYS_DELETE_PROJECT_CONTENT, getMonitor());
-				//clear stores in workspace runnable to avoid interaction with resource jobs
-				for (int i = 0; i < toDelete.length; i++)
-					clear(toDelete[i]);
-			}
+		getWorkspace().run((IWorkspaceRunnable) monitor -> {
+			getWorkspace().getRoot().delete(IResource.FORCE | IResource.ALWAYS_DELETE_PROJECT_CONTENT, getMonitor());
+			//clear stores in workspace runnable to avoid interaction with resource jobs
+			for (int i = 0; i < toDelete.length; i++)
+				clear(toDelete[i]);
 		}, null);
 		getWorkspace().save(true, null);
 		//don't leak builder jobs, since they may affect subsequent tests
@@ -548,12 +545,9 @@
 	 * resource info tree.
 	 */
 	public void ensureDoesNotExistInWorkspace(final IResource[] resources) {
-		IWorkspaceRunnable body = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) {
-				for (int i = 0; i < resources.length; i++)
-					ensureDoesNotExistInWorkspace(resources[i]);
-			}
+		IWorkspaceRunnable body = monitor -> {
+			for (int i = 0; i < resources.length; i++)
+				ensureDoesNotExistInWorkspace(resources[i]);
 		};
 		try {
 			getWorkspace().run(body, null);
@@ -600,15 +594,12 @@
 	public void ensureExistsInWorkspace(final IFile resource, final InputStream contents) {
 		if (resource == null)
 			return;
-		IWorkspaceRunnable body = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				if (resource.exists()) {
-					resource.setContents(contents, true, false, null);
-				} else {
-					ensureExistsInWorkspace(resource.getParent(), true);
-					resource.create(contents, true, null);
-				}
+		IWorkspaceRunnable body = monitor -> {
+			if (resource.exists()) {
+				resource.setContents(contents, true, false, null);
+			} else {
+				ensureExistsInWorkspace(resource.getParent(), true);
+				resource.create(contents, true, null);
 			}
 		};
 		try {
@@ -629,12 +620,7 @@
 	 * Create the given resource in the workspace resource info tree.
 	 */
 	public void ensureExistsInWorkspace(final IResource resource, final boolean local) {
-		IWorkspaceRunnable body = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				create(resource, local);
-			}
-		};
+		IWorkspaceRunnable body = monitor -> create(resource, local);
 		try {
 			getWorkspace().run(body, null);
 		} catch (CoreException e) {
@@ -647,12 +633,9 @@
 	 * info tree.
 	 */
 	public void ensureExistsInWorkspace(final IResource[] resources, final boolean local) {
-		IWorkspaceRunnable body = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				for (int i = 0; i < resources.length; i++)
-					create(resources[i], local);
-			}
+		IWorkspaceRunnable body = monitor -> {
+			for (int i = 0; i < resources.length; i++)
+				create(resources[i], local);
 		};
 		try {
 			getWorkspace().run(body, null);
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/ResourceURLTest.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/ResourceURLTest.java
index e194a27..c535bcd 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/ResourceURLTest.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/ResourceURLTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * Copyright (c) 2000, 2017 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -55,7 +55,7 @@
 
 	private void checkURL(IResource resource) throws Throwable {
 		URL url = getURL(resource);
-		IPath file = new Path(Platform.resolve(url).getFile());
+		IPath file = new Path(FileLocator.resolve(url).getFile());
 		IPath metric = resource.getLocation();
 		assertEquals(metric, file);
 	}
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/WorkspaceTest.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/WorkspaceTest.java
index ef55cea..a912e03 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/WorkspaceTest.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/WorkspaceTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * Copyright (c) 2000, 2017 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -253,27 +253,24 @@
 	public void testMultiCreation() throws Throwable {
 		final IProject project = getWorkspace().getRoot().getProject("bar");
 		final IResource[] resources = buildResources(project, new String[] {"a/", "a/b"});
-		IWorkspaceRunnable body = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				if (!project.exists())
-					project.create(null);
-				if (!project.isOpen())
-					project.open(null);
-				// define an operation which will create a bunch of resources including a project.
-				for (int i = 0; i < resources.length; i++) {
-					IResource resource = resources[i];
-					switch (resource.getType()) {
-						case IResource.FILE :
-							((IFile) resource).create(null, false, getMonitor());
-							break;
-						case IResource.FOLDER :
-							((IFolder) resource).create(false, true, getMonitor());
-							break;
-						case IResource.PROJECT :
-							((IProject) resource).create(getMonitor());
-							break;
-					}
+		IWorkspaceRunnable body = monitor -> {
+			if (!project.exists())
+				project.create(null);
+			if (!project.isOpen())
+				project.open(null);
+			// define an operation which will create a bunch of resources including a project.
+			for (int i = 0; i < resources.length; i++) {
+				IResource resource = resources[i];
+				switch (resource.getType()) {
+					case IResource.FILE :
+						((IFile) resource).create(null, false, getMonitor());
+						break;
+					case IResource.FOLDER :
+						((IFolder) resource).create(false, true, getMonitor());
+						break;
+					case IResource.PROJECT :
+						((IProject) resource).create(getMonitor());
+						break;
 				}
 			}
 		};
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/content/IContentTypeManagerTest.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/content/IContentTypeManagerTest.java
index 78bafae..6c016aa 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/content/IContentTypeManagerTest.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/content/IContentTypeManagerTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2016 IBM Corporation and others.
+ * Copyright (c) 2004, 2017 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -176,29 +176,26 @@
 
 		//test late addition of content type 
 		TestRegistryChangeListener listener = new TestRegistryChangeListener(Platform.PI_RUNTIME, ContentTypeBuilder.PT_CONTENTTYPES, null, null);
-		BundleTestingHelper.runWithBundles("2", new Runnable() {
-			@Override
-			public void run() {
-				IContentType alias = contentTypeManager.getContentType(PI_RESOURCES_TESTS + ".alias");
-				assertNull("2.1.1", alias);
-				IContentType derived = contentTypeManager.getContentType(PI_RESOURCES_TESTS + ".derived-from-alias");
-				assertNotNull("2.1.2", derived);
-				IContentType target = contentTypeManager.getContentType("org.eclipse.bundle02.missing-target");
-				assertNotNull("2.1.3", target);
-				// checks associations
-				IContentType[] selected = contentTypeManager.findContentTypesFor("foo.missing-target");
-				assertEquals("2.2.1", 2, selected.length);
-				assertEquals("2.2.2", target, selected[0]);
-				assertEquals("2.2.3", derived, selected[1]);
-				try {
-					selected = contentTypeManager.findContentTypesFor(getRandomContents(), "foo.missing-target");
-				} catch (IOException e) {
-					fail("2.2.4", e);
-				}
-				assertEquals("2.2.5", 2, selected.length);
-				assertEquals("2.2.6", target, selected[0]);
-				assertEquals("2.2.7", derived, selected[1]);
+		BundleTestingHelper.runWithBundles("2", () -> {
+			IContentType alias1 = contentTypeManager.getContentType(PI_RESOURCES_TESTS + ".alias");
+			assertNull("2.1.1", alias1);
+			IContentType derived1 = contentTypeManager.getContentType(PI_RESOURCES_TESTS + ".derived-from-alias");
+			assertNotNull("2.1.2", derived1);
+			IContentType target1 = contentTypeManager.getContentType("org.eclipse.bundle02.missing-target");
+			assertNotNull("2.1.3", target1);
+			// checks associations
+			IContentType[] selected1 = contentTypeManager.findContentTypesFor("foo.missing-target");
+			assertEquals("2.2.1", 2, selected1.length);
+			assertEquals("2.2.2", target1, selected1[0]);
+			assertEquals("2.2.3", derived1, selected1[1]);
+			try {
+				selected1 = contentTypeManager.findContentTypesFor(getRandomContents(), "foo.missing-target");
+			} catch (IOException e) {
+				fail("2.2.4", e);
 			}
+			assertEquals("2.2.5", 2, selected1.length);
+			assertEquals("2.2.6", target1, selected1[0]);
+			assertEquals("2.2.7", derived1, selected1[1]);
 		}, getContext(), new String[] {ContentTypeTest.TEST_FILES_ROOT + "content/bundle02"}, listener);
 	}
 
@@ -684,18 +681,15 @@
 		assertTrue("2.1", text[0] == text[1]);
 		//	make arbitrary dynamic changes to the contentTypes extension point
 		TestRegistryChangeListener listener = new TestRegistryChangeListener(Platform.PI_RUNTIME, ContentTypeBuilder.PT_CONTENTTYPES, null, null);
-		BundleTestingHelper.runWithBundles("3", new Runnable() {
-			@Override
-			public void run() {
-				IContentType missing = manager.getContentType("org.eclipse.bundle01.missing");
-				assertNotNull("3.1", missing);
-				// ensure the content type instances are different
-				text[2] = manager.getContentType(IContentTypeManager.CT_TEXT);
-				assertNotNull("3.2", text[2]);
-				text[2] = ((ContentTypeHandler) text[2]).getTarget();
-				assertEquals("3.3", text[0], text[2]);
-				assertTrue("3.4", text[0] != text[2]);
-			}
+		BundleTestingHelper.runWithBundles("3", () -> {
+			IContentType missing = manager.getContentType("org.eclipse.bundle01.missing");
+			assertNotNull("3.1", missing);
+			// ensure the content type instances are different
+			text[2] = manager.getContentType(IContentTypeManager.CT_TEXT);
+			assertNotNull("3.2", text[2]);
+			text[2] = ((ContentTypeHandler) text[2]).getTarget();
+			assertEquals("3.3", text[0], text[2]);
+			assertTrue("3.4", text[0] != text[2]);
 		}, getContext(), new String[] {ContentTypeTest.TEST_FILES_ROOT + "content/bundle01"}, listener);
 		assertNull("4.0", manager.getContentType("org.eclipse.bundle01.missing"));
 		// ensure the content type instances are all different
@@ -724,20 +718,17 @@
 		assertTrue("2.1", text[0] == text[1]);
 		//	make arbitrary dynamic changes to the contentTypes extension point
 		TestRegistryChangeListener listener = new TestRegistryChangeListener(IContentConstants.CONTENT_NAME, ContentTypeBuilder.PT_CONTENTTYPES, null, null);
-		BundleTestingHelper.runWithBundles("3", new Runnable() {
-			@Override
-			public void run() {
-				IContentType contentType = manager.getContentType("org.eclipse.bug485227.bug485227_contentType");
-				assertNotNull("3.1 Contributed content type not found", contentType);
-				// ensure the content type instances are different
-				text[2] = manager.getContentType(IContentTypeManager.CT_TEXT);
-				assertNotNull("3.2 Text content type not modified", text[2]);
-				text[2] = ((ContentTypeHandler) text[2]).getTarget();
-				assertEquals("3.3", text[0], text[2]);
-				assertTrue("3.4", text[0] != text[2]);
-				assertEquals("3.5 default extension not associated", contentType, manager.findContentTypeFor("file.bug485227"));
-				assertEquals("3.6 additional extension not associated", contentType, manager.findContentTypeFor("file.bug485227_2"));
-			}
+		BundleTestingHelper.runWithBundles("3", () -> {
+			IContentType contentType = manager.getContentType("org.eclipse.bug485227.bug485227_contentType");
+			assertNotNull("3.1 Contributed content type not found", contentType);
+			// ensure the content type instances are different
+			text[2] = manager.getContentType(IContentTypeManager.CT_TEXT);
+			assertNotNull("3.2 Text content type not modified", text[2]);
+			text[2] = ((ContentTypeHandler) text[2]).getTarget();
+			assertEquals("3.3", text[0], text[2]);
+			assertTrue("3.4", text[0] != text[2]);
+			assertEquals("3.5 default extension not associated", contentType, manager.findContentTypeFor("file.bug485227"));
+			assertEquals("3.6 additional extension not associated", contentType, manager.findContentTypeFor("file.bug485227_2"));
 		}, getContext(), new String[] {ContentTypeTest.TEST_FILES_ROOT + "content/bug485227"}, listener);
 		assertNull("4.0 Content type not cleared after bundle uninstall", manager.getContentType("org.eclipse.bug485227.bug485227_contentType"));
 		// ensure the content type instances are all different
@@ -905,24 +896,21 @@
 		assertEquals("2.0", 0, finder.findContentTypesFor("invalid.missing.name").length);
 		assertNull("3.0", contentTypeManager.getContentType(PI_RESOURCES_TESTS + '.' + "invalid-missing-name"));
 		TestRegistryChangeListener listener = new TestRegistryChangeListener(Platform.PI_RUNTIME, ContentTypeBuilder.PT_CONTENTTYPES, null, null);
-		BundleTestingHelper.runWithBundles("1", new Runnable() {
-			@Override
-			public void run() {
-				// ensure the invalid content types are not available
-				assertEquals("1.2", 0, contentTypeManager.findContentTypesFor("invalid.missing.identifier").length);
-				assertEquals("1.3", 0, contentTypeManager.findContentTypesFor("invalid.missing.name").length);
-				assertNull("1.4", contentTypeManager.getContentType("org.eclipse.bundle03.invalid-missing-name"));
-				// this content type has good markup, but invalid describer class
-				IContentType invalidDescriber = contentTypeManager.getContentType("org.eclipse.bundle03.invalid-describer");
-				assertNotNull("1.5", invalidDescriber);
-				// name based matching should work fine
-				assertEquals("1.6", invalidDescriber, contentTypeManager.findContentTypeFor("invalid.describer"));
-				try {
-					// the describer class is invalid, content matchong should fail
-					assertNull("1.7", contentTypeManager.findContentTypeFor(getRandomContents(), "invalid.describer"));
-				} catch (IOException e) {
-					fail("1.8", e);
-				}
+		BundleTestingHelper.runWithBundles("1", () -> {
+			// ensure the invalid content types are not available
+			assertEquals("1.2", 0, contentTypeManager.findContentTypesFor("invalid.missing.identifier").length);
+			assertEquals("1.3", 0, contentTypeManager.findContentTypesFor("invalid.missing.name").length);
+			assertNull("1.4", contentTypeManager.getContentType("org.eclipse.bundle03.invalid-missing-name"));
+			// this content type has good markup, but invalid describer class
+			IContentType invalidDescriber = contentTypeManager.getContentType("org.eclipse.bundle03.invalid-describer");
+			assertNotNull("1.5", invalidDescriber);
+			// name based matching should work fine
+			assertEquals("1.6", invalidDescriber, contentTypeManager.findContentTypeFor("invalid.describer"));
+			try {
+				// the describer class is invalid, content matchong should fail
+				assertNull("1.7", contentTypeManager.findContentTypeFor(getRandomContents(), "invalid.describer"));
+			} catch (IOException e) {
+				fail("1.8", e);
 			}
 		}, getContext(), new String[] {ContentTypeTest.TEST_FILES_ROOT + "content/bundle03"}, listener);
 	}
@@ -1081,54 +1069,51 @@
 		assertEquals("0.1", 0, selected.length);
 
 		TestRegistryChangeListener listener = new TestRegistryChangeListener(Platform.PI_RUNTIME, ContentTypeBuilder.PT_CONTENTTYPES, null, null);
-		BundleTestingHelper.runWithBundles("1", new Runnable() {
-			@Override
-			public void run() {
-				final String namespace = "org.eclipse.bundle04";
+		BundleTestingHelper.runWithBundles("1", () -> {
+			final String namespace = "org.eclipse.bundle04";
 
-				IContentType empty1 = manager.getContentType(namespace + ".empty_extension1");
-				IContentType empty2 = manager.getContentType(namespace + ".empty_extension2");
-				IContentType empty3 = manager.getContentType(namespace + ".empty_extension3");
-				IContentType empty4 = manager.getContentType(namespace + ".empty_extension4");
-				IContentType nonEmpty = manager.getContentType(namespace + ".non_empty_extension");
+			IContentType empty1 = manager.getContentType(namespace + ".empty_extension1");
+			IContentType empty2 = manager.getContentType(namespace + ".empty_extension2");
+			IContentType empty3 = manager.getContentType(namespace + ".empty_extension3");
+			IContentType empty4 = manager.getContentType(namespace + ".empty_extension4");
+			IContentType nonEmpty = manager.getContentType(namespace + ".non_empty_extension");
 
-				assertNotNull("1.1.1", empty1);
-				assertNotNull("1.1.2", empty2);
-				assertNotNull("1.1.3", empty3);
-				assertNotNull("1.1.4", empty4);
-				assertNotNull("1.1.5", nonEmpty);
+			assertNotNull("1.1.1", empty1);
+			assertNotNull("1.1.2", empty2);
+			assertNotNull("1.1.3", empty3);
+			assertNotNull("1.1.4", empty4);
+			assertNotNull("1.1.5", nonEmpty);
 
-				IContentType[] selected = manager.findContentTypesFor("file_with_no_extension");
-				assertEquals("1.2.0", 4, selected.length);
-				assertTrue("1.2.1", contains(selected, empty1));
-				assertTrue("1.2.2", contains(selected, empty2));
-				assertTrue("1.2.3", contains(selected, empty3));
-				assertTrue("1.2.4", contains(selected, empty4));
+			IContentType[] selected1 = manager.findContentTypesFor("file_with_no_extension");
+			assertEquals("1.2.0", 4, selected1.length);
+			assertTrue("1.2.1", contains(selected1, empty1));
+			assertTrue("1.2.2", contains(selected1, empty2));
+			assertTrue("1.2.3", contains(selected1, empty3));
+			assertTrue("1.2.4", contains(selected1, empty4));
 
-				selected = manager.findContentTypesFor("file_with_extension.non-empty");
-				assertEquals("1.2.5", 1, selected.length);
-				assertTrue("1.2.6", contains(selected, nonEmpty));
+			selected1 = manager.findContentTypesFor("file_with_extension.non-empty");
+			assertEquals("1.2.5", 1, selected1.length);
+			assertTrue("1.2.6", contains(selected1, nonEmpty));
 
-				try {
-					nonEmpty.addFileSpec("", IContentType.FILE_EXTENSION_SPEC);
-				} catch (CoreException e) {
-					fail("1.3.0", e);
-				}
-				try {
-					selected = manager.findContentTypesFor("file_with_no_extension");
-					assertEquals("1.3.1", 5, selected.length);
-					assertTrue("1.3.2", contains(selected, nonEmpty));
-				} finally {
-					try {
-						nonEmpty.removeFileSpec("", IContentType.FILE_EXTENSION_SPEC);
-					} catch (CoreException e) {
-						fail("1.3.3", e);
-					}
-				}
-				selected = manager.findContentTypesFor("file_with_no_extension");
-				assertEquals("1.4.0", 4, selected.length);
-				assertTrue("1.4.1", !contains(selected, nonEmpty));
+			try {
+				nonEmpty.addFileSpec("", IContentType.FILE_EXTENSION_SPEC);
+			} catch (CoreException e1) {
+				fail("1.3.0", e1);
 			}
+			try {
+				selected1 = manager.findContentTypesFor("file_with_no_extension");
+				assertEquals("1.3.1", 5, selected1.length);
+				assertTrue("1.3.2", contains(selected1, nonEmpty));
+			} finally {
+				try {
+					nonEmpty.removeFileSpec("", IContentType.FILE_EXTENSION_SPEC);
+				} catch (CoreException e2) {
+					fail("1.3.3", e2);
+				}
+			}
+			selected1 = manager.findContentTypesFor("file_with_no_extension");
+			assertEquals("1.4.0", 4, selected1.length);
+			assertTrue("1.4.1", !contains(selected1, nonEmpty));
 		}, getContext(), new String[] {ContentTypeTest.TEST_FILES_ROOT + "content/bundle04"}, listener);
 	}
 
@@ -1163,22 +1148,19 @@
 		//test late addition of content type - orphan2 should become visible
 		TestRegistryChangeListener listener = new TestRegistryChangeListener(Platform.PI_RUNTIME, ContentTypeBuilder.PT_CONTENTTYPES, null, null);
 
-		BundleTestingHelper.runWithBundles("2", new Runnable() {
-			@Override
-			public void run() {
-				IContentType orphan = contentTypeManager.getContentType(PI_RESOURCES_TESTS + ".orphan");
-				assertNotNull("2.1", orphan);
-				IContentType missing = contentTypeManager.getContentType("org.eclipse.bundle01.missing");
-				assertNotNull("2.2", missing);
-				// checks orphan's associations
-				assertEquals("2.3", 1, contentTypeManager.findContentTypesFor("foo.orphan").length);
-				assertEquals("2.4", orphan, contentTypeManager.findContentTypesFor("foo.orphan")[0]);
-				assertEquals("2.5", 1, contentTypeManager.findContentTypesFor("orphan.orphan").length);
-				assertEquals("2.6", orphan, contentTypeManager.findContentTypesFor("foo.orphan")[0]);
-				// check whether an orphan association was added to the dynamically added bundle
-				assertEquals("2.7", 1, contentTypeManager.findContentTypesFor("foo.orphan2").length);
-				assertEquals("2.8", missing, contentTypeManager.findContentTypesFor("foo.orphan2")[0]);
-			}
+		BundleTestingHelper.runWithBundles("2", () -> {
+			IContentType orphan1 = contentTypeManager.getContentType(PI_RESOURCES_TESTS + ".orphan");
+			assertNotNull("2.1", orphan1);
+			IContentType missing1 = contentTypeManager.getContentType("org.eclipse.bundle01.missing");
+			assertNotNull("2.2", missing1);
+			// checks orphan's associations
+			assertEquals("2.3", 1, contentTypeManager.findContentTypesFor("foo.orphan").length);
+			assertEquals("2.4", orphan1, contentTypeManager.findContentTypesFor("foo.orphan")[0]);
+			assertEquals("2.5", 1, contentTypeManager.findContentTypesFor("orphan.orphan").length);
+			assertEquals("2.6", orphan1, contentTypeManager.findContentTypesFor("foo.orphan")[0]);
+			// check whether an orphan association was added to the dynamically added bundle
+			assertEquals("2.7", 1, contentTypeManager.findContentTypesFor("foo.orphan2").length);
+			assertEquals("2.8", missing1, contentTypeManager.findContentTypesFor("foo.orphan2")[0]);
 		}, getContext(), new String[] {ContentTypeTest.TEST_FILES_ROOT + "content/bundle01"}, listener);
 	}
 
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/perf/BenchMiscWorkspace.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/perf/BenchMiscWorkspace.java
index 0f6afc4..2c7e5e7 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/perf/BenchMiscWorkspace.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/perf/BenchMiscWorkspace.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2015 IBM Corporation and others.
+ *  Copyright (c) 2000, 2017 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -14,7 +14,6 @@
 import junit.framework.TestSuite;
 import org.eclipse.core.resources.*;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.tests.harness.PerformanceTestRunner;
 import org.eclipse.core.tests.resources.ResourceTest;
 
@@ -46,10 +45,7 @@
 	 */
 	public void testNoOp() throws Exception {
 		final IWorkspace ws = ResourcesPlugin.getWorkspace();
-		final IWorkspaceRunnable noop = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) {
-			}
+		final IWorkspaceRunnable noop = monitor -> {
 		};
 		//run a first operation to make sure no other jobs are running before starting timer
 		ws.run(noop, null);
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 df1b033..dd4c2ec 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
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * Copyright (c) 2000, 2017 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,7 +15,6 @@
 import org.eclipse.core.internal.resources.Workspace;
 import org.eclipse.core.resources.*;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.tests.harness.PerformanceTestRunner;
 import org.eclipse.core.tests.resources.ResourceTest;
 
@@ -50,21 +49,13 @@
 	 * @param i
 	 */
 	private void addProblems(final int problemCount) {
-		IWorkspaceRunnable runnable = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				getWorkspace().getRoot().accept(new IResourceVisitor() {
-					@Override
-					public boolean visit(IResource resource) throws CoreException {
-						for (int i = 0; i < problemCount; i++) {
-							IMarker marker = resource.createMarker(IMarker.PROBLEM);
-							marker.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_WARNING);
-						}
-						return true;
-					}
-				});
+		IWorkspaceRunnable runnable = monitor -> getWorkspace().getRoot().accept(resource -> {
+			for (int i = 0; i < problemCount; i++) {
+				IMarker marker = resource.createMarker(IMarker.PROBLEM);
+				marker.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_WARNING);
 			}
-		};
+			return true;
+		});
 		try {
 			getWorkspace().run(runnable, null);
 		} catch (CoreException e) {
@@ -140,16 +131,13 @@
 	protected void setUp() throws Exception {
 		super.setUp();
 
-		IWorkspaceRunnable runnable = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				//create resources
-				project = getWorkspace().getRoot().getProject("TestProject");
-				project.create(null);
-				project.open(null);
-				IResource[] resources = buildResources(project, defineHierarchy());
-				ensureExistsInWorkspace(resources, true);
-			}
+		IWorkspaceRunnable runnable = monitor -> {
+			//create resources
+			project = getWorkspace().getRoot().getProject("TestProject");
+			project.create(null);
+			project.open(null);
+			IResource[] resources = buildResources(project, defineHierarchy());
+			ensureExistsInWorkspace(resources, true);
 		};
 		try {
 			getWorkspace().run(runnable, null);
@@ -195,24 +183,18 @@
 
 	public void testCountResourcesDuringOperation() {
 		final Workspace workspace = (Workspace) getWorkspace();
-		IWorkspaceRunnable runnable = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				//touch all files
-				workspace.getRoot().accept(new IResourceVisitor() {
-					@Override
-					public boolean visit(IResource resource) throws CoreException {
-						resource.touch(null);
-						return true;
-					}
-				});
-				new PerformanceTestRunner() {
-					@Override
-					protected void test() {
-						workspace.countResources(project.getFullPath(), IResource.DEPTH_INFINITE, true);
-					}
-				}.run(BenchWorkspace.this, 10, 10);
-			}
+		IWorkspaceRunnable runnable = monitor -> {
+			//touch all files
+			workspace.getRoot().accept(resource -> {
+				resource.touch(null);
+				return true;
+			});
+			new PerformanceTestRunner() {
+				@Override
+				protected void test() {
+					workspace.countResources(project.getFullPath(), IResource.DEPTH_INFINITE, true);
+				}
+			}.run(BenchWorkspace.this, 10, 10);
 		};
 		try {
 			workspace.run(runnable, getMonitor());
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 e9ebf57..f5d3f19 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
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2015 IBM Corporation and others.
+ * Copyright (c) 2009, 2017 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,7 +16,6 @@
 import junit.framework.TestSuite;
 import org.eclipse.core.resources.*;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.tests.harness.PerformanceTestRunner;
 import org.eclipse.core.tests.internal.builders.SortBuilder;
 import org.eclipse.core.tests.internal.builders.TestBuilder;
@@ -45,15 +44,12 @@
 	 */
 	void createAndPopulateProject(final IProject project, final IFolder folder, final int totalResources) {
 		try {
-			getWorkspace().run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor monitor) throws CoreException {
-					IProjectDescription desc = project.getWorkspace().newProjectDescription(project.getName());
-					desc.setBuildSpec(new ICommand[] {createCommand(desc, "Builder1"), createCommand(desc, "Builder2"), createCommand(desc, "Builder3"), createCommand(desc, "Builder4"), createCommand(desc, "Builder5")});
-					project.create(desc, getMonitor());
-					project.open(getMonitor());
-					createFolder(folder, totalResources);
-				}
+			getWorkspace().run((IWorkspaceRunnable) monitor -> {
+				IProjectDescription desc = project.getWorkspace().newProjectDescription(project.getName());
+				desc.setBuildSpec(new ICommand[] {createCommand(desc, "Builder1"), createCommand(desc, "Builder2"), createCommand(desc, "Builder3"), createCommand(desc, "Builder4"), createCommand(desc, "Builder5")});
+				project.create(desc, getMonitor());
+				project.open(getMonitor());
+				createFolder(folder, totalResources);
 			}, getMonitor());
 		} catch (CoreException e) {
 			fail("Failed to create project in performance test", e);
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/perf/ContentDescriptionPerformanceTest.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/perf/ContentDescriptionPerformanceTest.java
index d86abab..841b1bf 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/perf/ContentDescriptionPerformanceTest.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/perf/ContentDescriptionPerformanceTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2005, 2015 IBM Corporation and others.
+ *  Copyright (c) 2005, 2017 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -80,13 +80,10 @@
 			@Override
 			protected void test() {
 				try {
-					project.accept(new IResourceVisitor() {
-						@Override
-						public boolean visit(IResource resource) throws CoreException {
-							if (resource.getType() == IResource.FILE && !resource.getName().equals(".project"))
-								assertHasExpectedDescription(resource.getName(), ((IFile) resource).getContentDescription());
-							return true;
-						}
+					project.accept(resource -> {
+						if (resource.getType() == IResource.FILE && !resource.getName().equals(".project"))
+							assertHasExpectedDescription(resource.getName(), ((IFile) resource).getContentDescription());
+						return true;
 					});
 				} catch (CoreException e) {
 					CoreTest.fail("Failed visiting resources", e);
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 d346f15..794d9df 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
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2004, 2015 IBM Corporation and others.
+ *  Copyright (c) 2004, 2017 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -58,22 +58,19 @@
 		folders[4] = folders[3].getFolder("folder5");
 		final IWorkspace workspace = getWorkspace();
 		try {
-			workspace.run(new IWorkspaceRunnable() {
-				@Override
-				public void run(org.eclipse.core.runtime.IProgressMonitor monitor) {
-					ensureExistsInWorkspace(folders, true);
-					for (IFolder folder : folders)
-						for (int j = 0; j < filesPerFolder; j++) {
-							IFile file = folder.getFile("file" + j);
-							ensureExistsInWorkspace(file, getRandomContents());
-							try {
-								for (int k = 0; k < statesPerFile; k++)
-									file.setContents(getRandomContents(), IResource.KEEP_HISTORY, getMonitor());
-							} catch (CoreException ce) {
-								fail("0.5", ce);
-							}
+			workspace.run((IWorkspaceRunnable) monitor -> {
+				ensureExistsInWorkspace(folders, true);
+				for (IFolder folder : folders)
+					for (int j = 0; j < filesPerFolder; j++) {
+						IFile file = folder.getFile("file" + j);
+						ensureExistsInWorkspace(file, getRandomContents());
+						try {
+							for (int k = 0; k < statesPerFile; k++)
+								file.setContents(getRandomContents(), IResource.KEEP_HISTORY, getMonitor());
+						} catch (CoreException ce) {
+							fail("0.5", ce);
 						}
-				}
+					}
 			}, workspace.getRuleFactory().modifyRule(workspace.getRoot()), IWorkspace.AVOID_UPDATE, getMonitor());
 		} catch (CoreException e) {
 			fail("#createTree at : " + base.getFullPath(), e);
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/perf/MarkerPerformanceTest.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/perf/MarkerPerformanceTest.java
index fa899a7..97ff0e5 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/perf/MarkerPerformanceTest.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/perf/MarkerPerformanceTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2015 IBM Corporation and others.
+ *  Copyright (c) 2000, 2017 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -13,7 +13,8 @@
 import junit.framework.Test;
 import junit.framework.TestSuite;
 import org.eclipse.core.resources.*;
-import org.eclipse.core.runtime.*;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.Path;
 import org.eclipse.core.tests.harness.PerformanceTestRunner;
 import org.eclipse.core.tests.resources.ResourceTest;
 
@@ -48,14 +49,11 @@
 
 	public void testSetAttributes1() {
 		//benchmark setting many attributes in a single operation
-		final IWorkspaceRunnable runnable = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				//set all attributes for each marker
-				for (int i = 0; i < NUM_MARKERS; i++) {
-					for (int j = 0; j < REPEAT; j++) {
-						markers[i].setAttribute("attrib", "hello");
-					}
+		final IWorkspaceRunnable runnable = monitor -> {
+			//set all attributes for each marker
+			for (int i = 0; i < NUM_MARKERS; i++) {
+				for (int j = 0; j < REPEAT; j++) {
+					markers[i].setAttribute("attrib", "hello");
 				}
 			}
 		};
@@ -75,14 +73,11 @@
 
 	public void testSetAttributes2() {
 		//benchmark setting many attributes in a single operation
-		final IWorkspaceRunnable runnable = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				//set one attribute per marker, repeat for all attributes
-				for (int j = 0; j < REPEAT; j++) {
-					for (int i = 0; i < NUM_MARKERS; i++) {
-						markers[i].setAttribute("attrib", "hello");
-					}
+		final IWorkspaceRunnable runnable = monitor -> {
+			//set one attribute per marker, repeat for all attributes
+			for (int j = 0; j < REPEAT; j++) {
+				for (int i = 0; i < NUM_MARKERS; i++) {
+					markers[i].setAttribute("attrib", "hello");
 				}
 			}
 		};
@@ -106,19 +101,16 @@
 		super.setUp();
 
 		final IMarker[] createdMarkers = new IMarker[NUM_MARKERS];
-		IWorkspaceRunnable runnable = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				//create resources
-				project = getWorkspace().getRoot().getProject("TestProject");
-				project.create(null);
-				project.open(null);
-				file = project.getFile(Path.ROOT.append("file.txt"));
-				file.create(getRandomContents(), true, null);
-				//create markers
-				for (int i = 0; i < NUM_MARKERS; i++) {
-					createdMarkers[i] = file.createMarker(IMarker.BOOKMARK);
-				}
+		IWorkspaceRunnable runnable = monitor -> {
+			//create resources
+			project = getWorkspace().getRoot().getProject("TestProject");
+			project.create(null);
+			project.open(null);
+			file = project.getFile(Path.ROOT.append("file.txt"));
+			file.create(getRandomContents(), true, null);
+			//create markers
+			for (int i = 0; i < NUM_MARKERS; i++) {
+				createdMarkers[i] = file.createMarker(IMarker.BOOKMARK);
 			}
 		};
 
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/perf/WorkspacePerformanceTest.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/perf/WorkspacePerformanceTest.java
index 0a5b2ca..472d787 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/perf/WorkspacePerformanceTest.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/perf/WorkspacePerformanceTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2015 IBM Corporation and others.
+ *  Copyright (c) 2000, 2017 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -65,13 +65,10 @@
 	 */
 	void createAndPopulateProject(final int totalResources) {
 		try {
-			getWorkspace().run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor monitor) throws CoreException {
-					testProject.create(getMonitor());
-					testProject.open(getMonitor());
-					createFolder(testFolder, totalResources);
-				}
+			getWorkspace().run((IWorkspaceRunnable) monitor -> {
+				testProject.create(getMonitor());
+				testProject.open(getMonitor());
+				createFolder(testFolder, totalResources);
 			}, getMonitor());
 		} catch (CoreException e) {
 			fail("Failed to create project in performance test", e);
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/Bug_029851.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/Bug_029851.java
index 4d5413c..5dffb1c 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/Bug_029851.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/Bug_029851.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2004, 2015 IBM Corporation and others.
+ *  Copyright (c) 2004, 2017 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -14,7 +14,6 @@
 import java.util.Collection;
 import junit.framework.Test;
 import junit.framework.TestSuite;
-import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.IResourceVisitor;
 import org.eclipse.core.runtime.*;
 import org.eclipse.core.tests.resources.ResourceTest;
@@ -68,12 +67,9 @@
 		createHierarchy();
 		final QualifiedName key = new QualifiedName("local", getUniqueString());
 		final String value = getUniqueString();
-		IResourceVisitor visitor = new IResourceVisitor() {
-			@Override
-			public boolean visit(IResource resource) throws CoreException {
-				resource.setPersistentProperty(key, value);
-				return true;
-			}
+		IResourceVisitor visitor = resource -> {
+			resource.setPersistentProperty(key, value);
+			return true;
 		};
 		try {
 			getWorkspace().getRoot().accept(visitor);
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/Bug_098740.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/Bug_098740.java
index 324f91b..829be58 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/Bug_098740.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/Bug_098740.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2015 IBM Corporation and others.
+ *  Copyright (c) 2000, 2017 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -46,12 +46,7 @@
 			//should fail
 		}
 		try {
-			IResourceVisitor visitor = new IResourceVisitor() {
-				@Override
-				public boolean visit(IResource resource) {
-					return true;
-				}
-			};
+			IResourceVisitor visitor = resource -> true;
 			project.accept(visitor, IResource.DEPTH_INFINITE, IResource.NONE);
 			fail("2.0");
 		} catch (CoreException e) {
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/Bug_127562.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/Bug_127562.java
index 202c750..1724993 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/Bug_127562.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/Bug_127562.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * Copyright (c) 2000, 2017 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,7 +14,6 @@
 import junit.framework.TestSuite;
 import org.eclipse.core.resources.*;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.tests.resources.ResourceTest;
 
 /**
@@ -43,12 +42,7 @@
 		}
 		final IProjectDescription finalDescription = description;
 		try {
-			getWorkspace().run(new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor monitor) throws CoreException {
-					project.setDescription(finalDescription, getMonitor());
-				}
-			}, getWorkspace().getRoot(), IResource.NONE, getMonitor());
+			getWorkspace().run((IWorkspaceRunnable) monitor -> project.setDescription(finalDescription, getMonitor()), getWorkspace().getRoot(), IResource.NONE, getMonitor());
 		} catch (CoreException e) {
 			fail("4.99", e);
 		}
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/Bug_192631.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/Bug_192631.java
index b56af8c..5e331cb 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/Bug_192631.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/Bug_192631.java
@@ -1,5 +1,5 @@
 /*******************************************************************************

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

+ * Copyright (c) 2012, 2017 IBM Corporation and others.

  * All rights reserved. This program and the accompanying materials

  * are made available under the terms of the Eclipse Public License v1.0

  * which accompanies this distribution, and is available at

@@ -61,13 +61,10 @@
 

 		final Set<URI> toVisit = new HashSet<>();

 		final int toVisitCount[] = new int[] {0};

-		IResourceVisitor visitor = new IResourceVisitor() {

-			@Override

-			public boolean visit(IResource resource) {

-				toVisit.remove(resource.getLocationURI());

-				toVisitCount[0]--;

-				return true;

-			}

+		IResourceVisitor visitor = resource -> {

+			toVisit.remove(resource.getLocationURI());

+			toVisitCount[0]--;

+			return true;

 		};

 

 		EFS.getStore(folderA).mkdir(EFS.NONE, null);

@@ -109,13 +106,10 @@
 

 		final Set<URI> toVisit = new HashSet<>();

 		final int toVisitCount[] = new int[] {0};

-		IResourceVisitor visitor = new IResourceVisitor() {

-			@Override

-			public boolean visit(IResource resource) {

-				toVisit.remove(resource.getLocationURI());

-				toVisitCount[0]--;

-				return true;

-			}

+		IResourceVisitor visitor = resource -> {

+			toVisit.remove(resource.getLocationURI());

+			toVisitCount[0]--;

+			return true;

 		};

 

 		EFS.getStore(folderA).mkdir(EFS.NONE, null);

@@ -157,13 +151,10 @@
 

 		final Set<URI> toVisit = new HashSet<>();

 		final int toVisitCount[] = new int[] {0};

-		IResourceVisitor visitor = new IResourceVisitor() {

-			@Override

-			public boolean visit(IResource resource) {

-				toVisit.remove(resource.getLocationURI());

-				toVisitCount[0]--;

-				return true;

-			}

+		IResourceVisitor visitor = resource -> {

+			toVisit.remove(resource.getLocationURI());

+			toVisitCount[0]--;

+			return true;

 		};

 

 		EFS.getStore(folderA).mkdir(EFS.NONE, null);

diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/Bug_226264.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/Bug_226264.java
index f641306..8426e8b 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/Bug_226264.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/Bug_226264.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2015 IBM Corporation and others.
+ * Copyright (c) 2008, 2017 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -55,19 +55,16 @@
 		};
 
 		// the listener will schedule another project delete
-		workspace.addResourceChangeListener(new IResourceChangeListener() {
-			@Override
-			public void resourceChanged(IResourceChangeEvent event) {
-				if (event.getResource() == project1) {
-					// because notification is run in a protected block,
-					// this job will start after the notification
-					job.schedule();
-					//give the job a chance to start before continuing
-					try {
-						Thread.sleep(2000);
-					} catch (InterruptedException e) {
-						//ignore
-					}
+		workspace.addResourceChangeListener(event -> {
+			if (event.getResource() == project1) {
+				// because notification is run in a protected block,
+				// this job will start after the notification
+				job.schedule();
+				//give the job a chance to start before continuing
+				try {
+					Thread.sleep(2000);
+				} catch (InterruptedException e) {
+					//ignore
 				}
 			}
 		}, IResourceChangeEvent.PRE_DELETE);
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/Bug_231301.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/Bug_231301.java
index 709d1f4..6af5f03 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/Bug_231301.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/Bug_231301.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2015 IBM Corporation and others.
+ * Copyright (c) 2008, 2017 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -55,19 +55,16 @@
 		};
 
 		// the listener will schedule another project close
-		workspace.addResourceChangeListener(new IResourceChangeListener() {
-			@Override
-			public void resourceChanged(IResourceChangeEvent event) {
-				if (event.getResource() == project1) {
-					// because notification is run in a protected block,
-					// this job will start after the notification
-					job.schedule();
-					//give the job a chance to start before continuing
-					try {
-						Thread.sleep(2000);
-					} catch (InterruptedException e) {
-						//ignore
-					}
+		workspace.addResourceChangeListener(event -> {
+			if (event.getResource() == project1) {
+				// because notification is run in a protected block,
+				// this job will start after the notification
+				job.schedule();
+				//give the job a chance to start before continuing
+				try {
+					Thread.sleep(2000);
+				} catch (InterruptedException e) {
+					//ignore
 				}
 			}
 		}, IResourceChangeEvent.PRE_CLOSE);
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/Bug_265810.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/Bug_265810.java
index 4dcbc61..69694c0 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/Bug_265810.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/Bug_265810.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2015 IBM Corporation and others.
+ * Copyright (c) 2009, 2017 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -180,24 +180,18 @@
 		}
 	}
 
-	IResourceChangeListener ll = new IResourceChangeListener() {
-		@Override
-		public void resourceChanged(IResourceChangeEvent event) {
-			try {
-				event.getDelta().accept(new IResourceDeltaVisitor() {
-					@Override
-					public boolean visit(IResourceDelta delta) {
-						IResource resource = delta.getResource();
-						if (resource instanceof IFile && !resource.getName().equals(".project"))
-							addToResourceDelta(delta);
-						if (delta.getAffectedChildren().length > 0)
-							return true;
-						return false;
-					}
-				});
-			} catch (CoreException e) {
-				fail("listener failed", e);
-			}
+	IResourceChangeListener ll = event -> {
+		try {
+			event.getDelta().accept(delta -> {
+				IResource resource = delta.getResource();
+				if (resource instanceof IFile && !resource.getName().equals(".project"))
+					addToResourceDelta(delta);
+				if (delta.getAffectedChildren().length > 0)
+					return true;
+				return false;
+			});
+		} catch (CoreException e) {
+			fail("listener failed", e);
 		}
 	};
 
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/IProjectTest.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/IProjectTest.java
index 7f9f0ce..24c2b06 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/IProjectTest.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/IProjectTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2015 IBM Corporation and others.
+ *  Copyright (c) 2000, 2017 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -37,19 +37,15 @@
 		project.open(null);
 
 		/* define a visitor that renames all resources it visits */
-		IResourceVisitor renameVisitor = new IResourceVisitor() {
-			@Override
-			public boolean visit(IResource resource) throws CoreException {
-				if (!resource.exists())
-					return false;
-				IPath path = resource.getFullPath();
-				path = path.removeLastSegments(1);
-				long timestamp = System.currentTimeMillis();
-				path = path.append(resource.getName() + " renamed at " + timestamp);
-				resource.move(path, false, null);
-				return true;
-			}
-
+		IResourceVisitor renameVisitor = resource -> {
+			if (!resource.exists())
+				return false;
+			IPath path = resource.getFullPath();
+			path = path.removeLastSegments(1);
+			long timestamp = System.currentTimeMillis();
+			path = path.append(resource.getName() + " renamed at " + timestamp);
+			resource.move(path, false, null);
+			return true;
 		};
 		/* test */
 		try {
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/IResourceTest.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/IResourceTest.java
index 852e23c..e88b000 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/IResourceTest.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/IResourceTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * Copyright (c) 2000, 2017 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -129,11 +129,8 @@
 	 * not handled correctly if it occurs within a proxy visitor.
 	 */
 	public void testBug31750() {
-		IResourceProxyVisitor visitor = new IResourceProxyVisitor() {
-			@Override
-			public boolean visit(IResourceProxy proxy) {
-				throw new OperationCanceledException();
-			}
+		IResourceProxyVisitor visitor = proxy -> {
+			throw new OperationCanceledException();
 		};
 		try {
 			getWorkspace().getRoot().accept(visitor, IResource.NONE);
@@ -178,18 +175,15 @@
 				return true;
 			}
 		}
-		IResourceChangeListener listener = new IResourceChangeListener() {
-			@Override
-			public void resourceChanged(IResourceChangeEvent event) {
-				IResourceDelta delta = event.getDelta();
-				if (delta == null)
-					return;
-				try {
-					delta.accept(new DeltaVisitor(seen));
-					delta.accept(new DeltaVisitor(phantomSeen), true);
-				} catch (CoreException e) {
-					fail("1.99", e);
-				}
+		IResourceChangeListener listener = event -> {
+			IResourceDelta delta = event.getDelta();
+			if (delta == null)
+				return;
+			try {
+				delta.accept(new DeltaVisitor(seen));
+				delta.accept(new DeltaVisitor(phantomSeen), true);
+			} catch (CoreException e) {
+				fail("1.99", e);
 			}
 		};
 		try {
@@ -197,13 +191,10 @@
 
 			try {
 				//removing and adding sync info causes phantom to be deleted and recreated
-				getWorkspace().run(new IWorkspaceRunnable() {
-					@Override
-					public void run(IProgressMonitor monitor) throws CoreException {
-						ISynchronizer synchronizer = getWorkspace().getSynchronizer();
-						synchronizer.flushSyncInfo(name, file, IResource.DEPTH_INFINITE);
-						synchronizer.setSyncInfo(name, file, new byte[] {1});
-					}
+				getWorkspace().run((IWorkspaceRunnable) monitor -> {
+					ISynchronizer synchronizer = getWorkspace().getSynchronizer();
+					synchronizer.flushSyncInfo(name, file, IResource.DEPTH_INFINITE);
+					synchronizer.setSyncInfo(name, file, new byte[] {1});
 				}, null, IWorkspace.AVOID_UPDATE, getMonitor());
 				//ensure file was only seen by phantom listener
 				assertTrue("1.0", !seen[0]);
@@ -615,17 +606,14 @@
 		createFileInFileSystem(target.getLocation(), getContents(newContents));
 
 		final boolean[] failed = new boolean[1];
-		IResourceChangeListener listener = new IResourceChangeListener() {
-			@Override
-			public void resourceChanged(IResourceChangeEvent event) {
-				try {
-					failed[0] = true;
-					InputStream is = target.getContents(true);
-					assertTrue("4.0", compareContent(getContents(newContents), is));
-					failed[0] = false;
-				} catch (CoreException e) {
-					fail("4.1", e);
-				}
+		IResourceChangeListener listener = event -> {
+			try {
+				failed[0] = true;
+				InputStream is = target.getContents(true);
+				assertTrue("4.0", compareContent(getContents(newContents), is));
+				failed[0] = false;
+			} catch (CoreException e) {
+				fail("4.1", e);
 			}
 		};
 		getWorkspace().addResourceChangeListener(listener);
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/PR_1GEAB3C_Test.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/PR_1GEAB3C_Test.java
index 237d53b..6ea13df 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/PR_1GEAB3C_Test.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/PR_1GEAB3C_Test.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2015 IBM Corporation and others.
+ *  Copyright (c) 2000, 2017 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -13,7 +13,8 @@
 import junit.framework.Test;
 import junit.framework.TestSuite;
 import org.eclipse.core.resources.*;
-import org.eclipse.core.runtime.*;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.SubMonitor;
 import org.eclipse.core.tests.resources.ResourceDeltaVerifier;
 import org.eclipse.core.tests.resources.ResourceTest;
 
@@ -79,16 +80,13 @@
 		final IProject project = getWorkspace().getRoot().getProject("MyAddedAndOpenedProject");
 		verifier.addExpectedChange(project, IResourceDelta.ADDED, IResourceDelta.OPEN);
 		verifier.addExpectedChange(project.getFile(IProjectDescription.DESCRIPTION_FILE_NAME), IResourceDelta.ADDED, 0);
-		IWorkspaceRunnable body = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				monitor.beginTask("Creating and deleting", 100);
-				try {
-					project.create(new SubProgressMonitor(monitor, 50));
-					project.open(new SubProgressMonitor(monitor, 50));
-				} finally {
-					monitor.done();
-				}
+		IWorkspaceRunnable body = monitor -> {
+			monitor.beginTask("Creating and deleting", 100);
+			try {
+				project.create(SubMonitor.convert(monitor, 50));
+				project.open(SubMonitor.convert(monitor, 50));
+			} finally {
+				monitor.done();
 			}
 		};
 		try {
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/PR_1GHOM0N_Test.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/PR_1GHOM0N_Test.java
index 22163c9..8e4377c 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/PR_1GHOM0N_Test.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/PR_1GHOM0N_Test.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * Copyright (c) 2000, 2017 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,7 +14,6 @@
 import junit.framework.TestSuite;
 import org.eclipse.core.resources.*;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.tests.resources.ResourceTest;
 
 public class PR_1GHOM0N_Test extends ResourceTest {
@@ -78,13 +77,10 @@
 
 		// try and reproduce the error (there are problems when calling an incremental
 		// build from within an operation...it leaves the tree immutable)
-		IWorkspaceRunnable body = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				project.build(IncrementalProjectBuilder.INCREMENTAL_BUILD, getMonitor());
-				IFile file = project.getFile("test.txt");
-				file.create(getRandomContents(), true, getMonitor());
-			}
+		IWorkspaceRunnable body = monitor -> {
+			project.build(IncrementalProjectBuilder.INCREMENTAL_BUILD, getMonitor());
+			IFile file = project.getFile("test.txt");
+			file.create(getRandomContents(), true, getMonitor());
 		};
 		try {
 			getWorkspace().run(body, getMonitor());
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/usecase/ConcurrencyPerformanceTest.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/usecase/ConcurrencyPerformanceTest.java
index c6ca4b4..e3c8b19 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/usecase/ConcurrencyPerformanceTest.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/usecase/ConcurrencyPerformanceTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * Copyright (c) 2000, 2017 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,7 +14,6 @@
 import junit.framework.TestSuite;
 import org.eclipse.core.resources.IWorkspaceRunnable;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.tests.harness.PerformanceTestRunner;
 import org.eclipse.core.tests.resources.ResourceTest;
 
@@ -32,11 +31,8 @@
 	}
 
 	public void testSimpleCalls() {
-		final IWorkspaceRunnable job = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) {
-				// do nothing
-			}
+		final IWorkspaceRunnable job = monitor -> {
+			// do nothing
 		};
 		new PerformanceTestRunner() {
 			@Override
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/usecase/IWorkspaceRunnableUseCaseTest.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/usecase/IWorkspaceRunnableUseCaseTest.java
index 67d38e9..392bdb8 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/usecase/IWorkspaceRunnableUseCaseTest.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/usecase/IWorkspaceRunnableUseCaseTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * Copyright (c) 2000, 2017 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,23 +26,20 @@
 	}
 
 	protected IWorkspaceRunnable createRunnable(final IProject project, final IWorkspaceRunnable nestedOperation, final boolean triggerBuild, final Exception exceptionToThrow) {
-		return new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				if (exceptionToThrow != null) {
-					if (exceptionToThrow instanceof CoreException) {
-						throw (CoreException) exceptionToThrow;
-					}
-					if (exceptionToThrow instanceof RuntimeException) {
-						throw (RuntimeException) exceptionToThrow;
-					}
-					throw new IllegalArgumentException(exceptionToThrow);
+		return monitor -> {
+			if (exceptionToThrow != null) {
+				if (exceptionToThrow instanceof CoreException) {
+					throw (CoreException) exceptionToThrow;
 				}
-				if (triggerBuild)
-					project.touch(getMonitor());
-				if (nestedOperation != null)
-					getWorkspace().run(nestedOperation, getMonitor());
+				if (exceptionToThrow instanceof RuntimeException) {
+					throw (RuntimeException) exceptionToThrow;
+				}
+				throw new IllegalArgumentException(exceptionToThrow);
 			}
+			if (triggerBuild)
+				project.touch(getMonitor());
+			if (nestedOperation != null)
+				getWorkspace().run(nestedOperation, getMonitor());
 		};
 	}