diff --git a/bundles/org.eclipse.core.tools.resources/src/org/eclipse/core/tools/resources/CountResourcesAction.java b/bundles/org.eclipse.core.tools.resources/src/org/eclipse/core/tools/resources/CountResourcesAction.java
index 45ece84..310ed8e 100644
--- a/bundles/org.eclipse.core.tools.resources/src/org/eclipse/core/tools/resources/CountResourcesAction.java
+++ b/bundles/org.eclipse.core.tools.resources/src/org/eclipse/core/tools/resources/CountResourcesAction.java
@@ -207,12 +207,7 @@
 			return;
 
 		//	we sort the resources list by path so it is easier to check for redundancies     
-		Collections.sort(resourcesList, new Comparator<IResource>() {
-			@Override
-			public int compare(IResource resource1, IResource resource2) {
-				return resource1.getFullPath().toString().compareTo(resource2.getFullPath().toString());
-			}
-		});
+		Collections.sort(resourcesList, (resource1, resource2) -> resource1.getFullPath().toString().compareTo(resource2.getFullPath().toString()));
 
 		// We iterate through the list removing any resource which is descendant 
 		// from any resource previously visited 
diff --git a/bundles/org.eclipse.core.tools.resources/src/org/eclipse/core/tools/resources/DeltaView.java b/bundles/org.eclipse.core.tools.resources/src/org/eclipse/core/tools/resources/DeltaView.java
index bb0b908..35c6972 100644
--- a/bundles/org.eclipse.core.tools.resources/src/org/eclipse/core/tools/resources/DeltaView.java
+++ b/bundles/org.eclipse.core.tools.resources/src/org/eclipse/core/tools/resources/DeltaView.java
@@ -136,32 +136,29 @@
 			return;
 
 		// we need to access UI widgets from a SWT thread 
-		Runnable update = new Runnable() {
-			@Override
-			public void run() {
-				// the view might have been disposed at the moment this code runs
-				if (parent.isDisposed())
-					return;
+		Runnable update = () -> {
+			// the view might have been disposed at the moment this code runs
+			if (parent.isDisposed())
+				return;
 
-				// updates viewer document, appending new delta information     
-				IDocument doc = viewer.getDocument();
-				StringBuilder contents = new StringBuilder(doc.get());
-				contents.append('\n');
+			// updates viewer document, appending new delta information     
+			IDocument doc = viewer.getDocument();
+			StringBuilder contents = new StringBuilder(doc.get());
+			contents.append('\n');
 
-				// asks for a string representation for the delta
-				contents.append(delta.toDeepDebugString());
+			// asks for a string representation for the delta
+			contents.append(delta.toDeepDebugString());
 
-				// save current number of lines
-				int previousNOL = doc.getNumberOfLines();
+			// save current number of lines
+			int previousNOL = doc.getNumberOfLines();
 
-				// sets the viewer document's new contents
-				// ensuring there will be no more than MAX_SIZE chars in it 						
-				int length = contents.length();
-				doc.set(contents.substring(length - (Math.min(MAX_SIZE, length))));
+			// sets the viewer document's new contents
+			// ensuring there will be no more than MAX_SIZE chars in it 						
+			int length = contents.length();
+			doc.set(contents.substring(length - (Math.min(MAX_SIZE, length))));
 
-				// ensures the added content will be immediately visible
-				viewer.setTopIndex(previousNOL + 1);
-			}
+			// ensures the added content will be immediately visible
+			viewer.setTopIndex(previousNOL + 1);
 		};
 		// run our code in the SWT thread
 		parent.getDisplay().syncExec(update);
diff --git a/bundles/org.eclipse.core.tools.resources/src/org/eclipse/core/tools/resources/ElementTreeView.java b/bundles/org.eclipse.core.tools.resources/src/org/eclipse/core/tools/resources/ElementTreeView.java
index 6c1fcaf..3489bb7 100644
--- a/bundles/org.eclipse.core.tools.resources/src/org/eclipse/core/tools/resources/ElementTreeView.java
+++ b/bundles/org.eclipse.core.tools.resources/src/org/eclipse/core/tools/resources/ElementTreeView.java
@@ -188,27 +188,24 @@
 			phantomCount = 0;
 			hiddenCount = 0;
 			syncInfoCount = 0;
-			IElementContentVisitor visitor = new IElementContentVisitor() {
-				@Override
-				public boolean visitElement(ElementTree tree, IPathRequestor requestor, Object elementContents) {
-					ResourceInfo info = (ResourceInfo) elementContents;
-					if (info == null)
-						return true;
-					resourceCount++;
-					if (info.isSet(ICoreConstants.M_TEAM_PRIVATE_MEMBER))
-						teamPrivateCount++;
-					if (info.isSet(ICoreConstants.M_PHANTOM))
-						phantomCount++;
-					if (info.isSet(ICoreConstants.M_HIDDEN))
-						hiddenCount++;
-					MarkerSet markers = info.getMarkers();
-					if (markers != null)
-						markerCount += markers.size();
-					Map<QualifiedName, Object> syncInfo = SpySupport.getSyncInfo(info);
-					if (syncInfo != null)
-						syncInfoCount += syncInfo.size();
+			IElementContentVisitor visitor = (tree, requestor, elementContents) -> {
+				ResourceInfo info = (ResourceInfo) elementContents;
+				if (info == null)
 					return true;
-				}
+				resourceCount++;
+				if (info.isSet(ICoreConstants.M_TEAM_PRIVATE_MEMBER))
+					teamPrivateCount++;
+				if (info.isSet(ICoreConstants.M_PHANTOM))
+					phantomCount++;
+				if (info.isSet(ICoreConstants.M_HIDDEN))
+					hiddenCount++;
+				MarkerSet markers = info.getMarkers();
+				if (markers != null)
+					markerCount += markers.size();
+				Map<QualifiedName, Object> syncInfo = SpySupport.getSyncInfo(info);
+				if (syncInfo != null)
+					syncInfoCount += syncInfo.size();
+				return true;
 			};
 			new ElementTreeIterator(workspace.getElementTree(), Path.ROOT).iterate(visitor);
 		}
@@ -325,12 +322,7 @@
 		private List<Map.Entry<Object, Integer>> sortEntrySet(Set<Map.Entry<Object, Integer>> set) {
 			List<Map.Entry<Object, Integer>> result = new ArrayList<>();
 			result.addAll(set);
-			Collections.sort(result, new Comparator<Map.Entry<Object, Integer>>() {
-				@Override
-				public int compare(Map.Entry<Object, Integer> arg0, Map.Entry<Object, Integer> arg1) {
-					return arg1.getValue().intValue() - arg0.getValue().intValue();
-				}
-			});
+			Collections.sort(result, (arg0, arg1) -> arg1.getValue().intValue() - arg0.getValue().intValue());
 			return result;
 		}
 
@@ -372,14 +364,11 @@
 			buffer.append("Potential savings of using unique strings: " + prettyPrint(savings) + "\n");
 
 			//post changes to UI thread
-			viewer.getControl().getDisplay().asyncExec(new Runnable() {
-				@Override
-				public void run() {
-					if (!viewer.getControl().isDisposed()) {
-						IDocument doc = viewer.getDocument();
-						doc.set(buffer.toString());
-						viewer.setDocument(doc);
-					}
+			viewer.getControl().getDisplay().asyncExec(() -> {
+				if (!viewer.getControl().isDisposed()) {
+					IDocument doc = viewer.getDocument();
+					doc.set(buffer.toString());
+					viewer.setDocument(doc);
 				}
 			});
 		}
diff --git a/bundles/org.eclipse.core.tools.resources/src/org/eclipse/core/tools/resources/LocalHistoryBrowserView.java b/bundles/org.eclipse.core.tools.resources/src/org/eclipse/core/tools/resources/LocalHistoryBrowserView.java
index 47cbd31..808f006 100644
--- a/bundles/org.eclipse.core.tools.resources/src/org/eclipse/core/tools/resources/LocalHistoryBrowserView.java
+++ b/bundles/org.eclipse.core.tools.resources/src/org/eclipse/core/tools/resources/LocalHistoryBrowserView.java
@@ -239,12 +239,7 @@
 	private void hookContextMenu() {
 		MenuManager menuMgr = new MenuManager("#PopupMenu"); //$NON-NLS-1$
 		menuMgr.setRemoveAllWhenShown(true);
-		menuMgr.addMenuListener(new IMenuListener() {
-			@Override
-			public void menuAboutToShow(IMenuManager manager) {
-				LocalHistoryBrowserView.this.fillContextMenu(manager);
-			}
-		});
+		menuMgr.addMenuListener(manager -> LocalHistoryBrowserView.this.fillContextMenu(manager));
 		Menu menu = menuMgr.createContextMenu(viewer.getControl());
 		viewer.getControl().setMenu(menu);
 		getSite().registerContextMenu(menuMgr, viewer);
@@ -312,12 +307,7 @@
 	}
 
 	private void hookDoubleClickAction() {
-		viewer.addDoubleClickListener(new IDoubleClickListener() {
-			@Override
-			public void doubleClick(DoubleClickEvent event) {
-				doubleClickAction.run();
-			}
-		});
+		viewer.addDoubleClickListener(event -> doubleClickAction.run());
 	}
 
 	protected void showMessage(String message) {
diff --git a/bundles/org.eclipse.core.tools.resources/src/org/eclipse/core/tools/resources/ProjectView.java b/bundles/org.eclipse.core.tools.resources/src/org/eclipse/core/tools/resources/ProjectView.java
index 5780161..ef8c008 100644
--- a/bundles/org.eclipse.core.tools.resources/src/org/eclipse/core/tools/resources/ProjectView.java
+++ b/bundles/org.eclipse.core.tools.resources/src/org/eclipse/core/tools/resources/ProjectView.java
@@ -81,13 +81,10 @@
 
 		final MenuManager menuMgr = new MenuManager();
 		menuMgr.setRemoveAllWhenShown(true);
-		menuMgr.addMenuListener(new IMenuListener() {
-			@Override
-			public void menuAboutToShow(IMenuManager manager) {
-				manager.add(copyAction);
-				// Other plug-ins can contribute their actions here
-				manager.add(new Separator("Additions")); //$NON-NLS-1$
-			}
+		menuMgr.addMenuListener(manager -> {
+			manager.add(copyAction);
+			// Other plug-ins can contribute their actions here
+			manager.add(new Separator("Additions")); //$NON-NLS-1$
 		});
 		Menu menu = menuMgr.createContextMenu(viewer.getControl());
 		viewer.getControl().setMenu(menu);
@@ -130,12 +127,7 @@
 	 */
 	private void addSelectionListener() {
 		ISelectionService selectionService = getSite().getPage().getWorkbenchWindow().getSelectionService();
-		selectionListener = new ISelectionListener() {
-			@Override
-			public void selectionChanged(IWorkbenchPart part, ISelection sel) {
-				processSelection(sel);
-			}
-		};
+		selectionListener = (part, sel) -> processSelection(sel);
 		selectionService.addSelectionListener(selectionListener);
 		processSelection(selectionService.getSelection());
 	}
@@ -210,12 +202,7 @@
 				return;
 
 			// rebuild the project view contents with the new state
-			Display.getDefault().asyncExec(new Runnable() {
-				@Override
-				public void run() {
-					loadResource(currentResource);
-				}
-			});
+			Display.getDefault().asyncExec(() -> loadResource(currentResource));
 		}
 	}
 
diff --git a/bundles/org.eclipse.core.tools.resources/src/org/eclipse/core/tools/resources/ResourceChangeView.java b/bundles/org.eclipse.core.tools.resources/src/org/eclipse/core/tools/resources/ResourceChangeView.java
index bba19e5..4d0e74c 100644
--- a/bundles/org.eclipse.core.tools.resources/src/org/eclipse/core/tools/resources/ResourceChangeView.java
+++ b/bundles/org.eclipse.core.tools.resources/src/org/eclipse/core/tools/resources/ResourceChangeView.java
@@ -389,12 +389,7 @@
 
 		IActionBars bars = getViewSite().getActionBars();
 		IMenuManager menuMgr = bars.getMenuManager();
-		menuMgr.addMenuListener(new IMenuListener() {
-			@Override
-			public void menuAboutToShow(final IMenuManager manager) {
-				fillPullDownBar(manager);
-			}
-		});
+		menuMgr.addMenuListener(manager -> fillPullDownBar(manager));
 		fillPullDownBar(menuMgr);
 
 		// register for all types of events and then filter out the one that we
@@ -460,14 +455,11 @@
 		if (display == null)
 			return;
 		rootObject = event;
-		display.asyncExec(new Runnable() {
-			@Override
-			public void run() {
-				viewer.getControl().setRedraw(false);
-				viewer.setInput(ResourceChangeView.this.rootObject);
-				viewer.expandAll();
-				viewer.getControl().setRedraw(true);
-			}
+		display.asyncExec(() -> {
+			viewer.getControl().setRedraw(false);
+			viewer.setInput(ResourceChangeView.this.rootObject);
+			viewer.expandAll();
+			viewer.getControl().setRedraw(true);
 		});
 	}
 }
\ No newline at end of file
diff --git a/bundles/org.eclipse.core.tools.resources/src/org/eclipse/core/tools/resources/ResourceView.java b/bundles/org.eclipse.core.tools.resources/src/org/eclipse/core/tools/resources/ResourceView.java
index 9d761b8..14f6173 100644
--- a/bundles/org.eclipse.core.tools.resources/src/org/eclipse/core/tools/resources/ResourceView.java
+++ b/bundles/org.eclipse.core.tools.resources/src/org/eclipse/core/tools/resources/ResourceView.java
@@ -89,12 +89,7 @@
 
 		final MenuManager menuMgr = new MenuManager();
 		menuMgr.setRemoveAllWhenShown(true);
-		menuMgr.addMenuListener(new IMenuListener() {
-			@Override
-			public void menuAboutToShow(IMenuManager manager) {
-				manager.add(copyAction);
-			}
-		});
+		menuMgr.addMenuListener(manager -> manager.add(copyAction));
 		Menu menu = menuMgr.createContextMenu(viewer.getControl());
 		viewer.getControl().setMenu(menu);
 	}
@@ -139,12 +134,7 @@
 		ISelectionService selectionService = getSite().getPage().getWorkbenchWindow().getSelectionService();
 
 		// creates a selection listener that ignores who generated the event	
-		selectionListener = new ISelectionListener() {
-			@Override
-			public void selectionChanged(IWorkbenchPart part, ISelection sel) {
-				processSelection(sel);
-			}
-		};
+		selectionListener = (part, sel) -> processSelection(sel);
 
 		selectionService.addSelectionListener(selectionListener);
 
@@ -249,12 +239,7 @@
 			// if there is a delta, something has changed
 			if (resourceDelta != null) {
 				// so rebuild the resource view contents with the new state
-				Display.getDefault().asyncExec(new Runnable() {
-					@Override
-					public void run() {
-						loadResource(currentResource);
-					}
-				});
+				Display.getDefault().asyncExec(() -> loadResource(currentResource));
 			}
 		}
 	}
diff --git a/bundles/org.eclipse.core.tools.resources/src/org/eclipse/core/tools/resources/markers/MarkerView.java b/bundles/org.eclipse.core.tools.resources/src/org/eclipse/core/tools/resources/markers/MarkerView.java
index aeca738..aba27e8 100644
--- a/bundles/org.eclipse.core.tools.resources/src/org/eclipse/core/tools/resources/markers/MarkerView.java
+++ b/bundles/org.eclipse.core.tools.resources/src/org/eclipse/core/tools/resources/markers/MarkerView.java
@@ -424,22 +424,19 @@
 		viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
 		viewer.setContentProvider(new ViewContentProvider());
 		viewer.setLabelProvider(new ViewLabelProvider());
-		viewer.addSelectionChangedListener(new ISelectionChangedListener() {
-			@Override
-			public void selectionChanged(SelectionChangedEvent event) {
-				IStructuredSelection sel = (IStructuredSelection) event.getSelection();
-				IStructuredSelection newSelection = emptySelection;
-				if (!sel.isEmpty() && sel.size() == 1) {
-					Object first = sel.getFirstElement();
-					if (first instanceof IMarker) {
-						IMarker marker = (IMarker) first;
-						propertySource.setSourceMarker(marker);
-						newSelection = new StructuredSelection(propertySource);
-					}
+		viewer.addSelectionChangedListener(event -> {
+			IStructuredSelection sel = (IStructuredSelection) event.getSelection();
+			IStructuredSelection newSelection = emptySelection;
+			if (!sel.isEmpty() && sel.size() == 1) {
+				Object first = sel.getFirstElement();
+				if (first instanceof IMarker) {
+					IMarker marker = (IMarker) first;
+					propertySource.setSourceMarker(marker);
+					newSelection = new StructuredSelection(propertySource);
 				}
-
-				getSite().getSelectionProvider().setSelection(newSelection);
 			}
+
+			getSite().getSelectionProvider().setSelection(newSelection);
 		});
 
 		pagePartListener = new PagePartListener();
@@ -472,12 +469,7 @@
 	void hookContextMenu() {
 		MenuManager menuMgr = new MenuManager("#PopupMenu"); //$NON-NLS-1$
 		menuMgr.setRemoveAllWhenShown(true);
-		menuMgr.addMenuListener(new IMenuListener() {
-			@Override
-			public void menuAboutToShow(IMenuManager manager) {
-				MarkerView.this.fillContextMenu(manager);
-			}
-		});
+		menuMgr.addMenuListener(manager -> MarkerView.this.fillContextMenu(manager));
 		Menu menu = menuMgr.createContextMenu(viewer.getControl());
 		viewer.getControl().setMenu(menu);
 		getSite().registerContextMenu(menuMgr, viewer);
@@ -577,12 +569,7 @@
 			return;
 		// could have been called from a non-UI thread.
 		// handle appropriately
-		Display.getDefault().asyncExec(new Runnable() {
-			@Override
-			public void run() {
-				viewer.setInput(currentResource);
-			}
-		});
+		Display.getDefault().asyncExec(() -> viewer.setInput(currentResource));
 	}
 
 	/**
diff --git a/tests/org.eclipse.core.tests.resources.saveparticipant/src/org/eclipse/core/tests/resources/saveparticipant/SaveManagerTest.java b/tests/org.eclipse.core.tests.resources.saveparticipant/src/org/eclipse/core/tests/resources/saveparticipant/SaveManagerTest.java
index b52d064..4335520 100644
--- a/tests/org.eclipse.core.tests.resources.saveparticipant/src/org/eclipse/core/tests/resources/saveparticipant/SaveManagerTest.java
+++ b/tests/org.eclipse.core.tests.resources.saveparticipant/src/org/eclipse/core/tests/resources/saveparticipant/SaveManagerTest.java
@@ -107,14 +107,12 @@
 	}
 
 	protected void touch(IProject project) throws CoreException {
-		project.accept(new IResourceVisitor() {
-			public boolean visit(IResource resource) throws CoreException {
-				if (resource.getType() == IResource.FILE) {
-					resource.touch(null);
-					return false;
-				}
-				return true;
+		project.accept(resource -> {
+			if (resource.getType() == IResource.FILE) {
+				resource.touch(null);
+				return false;
 			}
+			return true;
 		});
 	}
 }
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/resources/ProjectPreferencesTest.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/resources/ProjectPreferencesTest.java
index e896503..8733aee 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/resources/ProjectPreferencesTest.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/resources/ProjectPreferencesTest.java
@@ -589,26 +589,18 @@
 		}
 
 		// add a log listener to ensure that no errors are reported silently
-		ILogListener logListener = new ILogListener() {
-			@Override
-			public void logging(IStatus status, String plugin) {
-				Throwable exception = status.getException();
-				if (exception == null || !(exception instanceof CoreException)) {
-					return;
-				}
-				if (IResourceStatus.WORKSPACE_LOCKED == ((CoreException) exception).getStatus().getCode()) {
-					fail("3.0");
-				}
+		ILogListener logListener = (status, plugin) -> {
+			Throwable exception = status.getException();
+			if (exception == null || !(exception instanceof CoreException)) {
+				return;
+			}
+			if (IResourceStatus.WORKSPACE_LOCKED == ((CoreException) exception).getStatus().getCode()) {
+				fail("3.0");
 			}
 		};
 
 		// listener to react to changes in the workspace
-		IResourceChangeListener rclistener = new IResourceChangeListener() {
-			@Override
-			public void resourceChanged(IResourceChangeEvent event) {
-				new ProjectScope(project).getNode(qualifier);
-			}
-		};
+		IResourceChangeListener rclistener = event -> new ProjectScope(project).getNode(qualifier);
 
 		// add the listeners
 		Platform.addLogListener(logListener);
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/TeamPrivateMemberTest.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/TeamPrivateMemberTest.java
index 141a909..0cd77be 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/TeamPrivateMemberTest.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/TeamPrivateMemberTest.java
@@ -17,7 +17,6 @@
 import junit.framework.TestSuite;
 import org.eclipse.core.resources.*;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
 
 public class TeamPrivateMemberTest extends ResourceTest {
 	public TeamPrivateMemberTest() {
@@ -628,12 +627,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);
@@ -652,12 +646,9 @@
 		// set the folder to be team private and do the same test
 		getWorkspace().addResourceChangeListener(listener);
 		try {
-			IWorkspaceRunnable body = new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor monitor) {
-					ensureExistsInWorkspace(resources, true);
-					setTeamPrivateMember("2.0", folder, true, IResource.DEPTH_ZERO);
-				}
+			IWorkspaceRunnable body = monitor -> {
+				ensureExistsInWorkspace(resources, true);
+				setTeamPrivateMember("2.0", folder, true, IResource.DEPTH_ZERO);
 			};
 			try {
 				listener.reset();
@@ -677,12 +668,9 @@
 		// set all resources to be team private and do the same test
 		getWorkspace().addResourceChangeListener(listener);
 		try {
-			IWorkspaceRunnable body = new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor monitor) {
-					ensureExistsInWorkspace(resources, true);
-					setTeamPrivateMember("3.0", project, true, IResource.DEPTH_INFINITE);
-				}
+			IWorkspaceRunnable body = monitor -> {
+				ensureExistsInWorkspace(resources, true);
+				setTeamPrivateMember("3.0", project, true, IResource.DEPTH_INFINITE);
 			};
 			try {
 				listener.reset();
@@ -796,16 +784,13 @@
 	}
 
 	protected void assertTeamPrivateMember(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.FILE || resource.getType() == IResource.FOLDER) {
-					expected = value;
-				}
-				assertEquals(message + resource.getFullPath(), expected, resource.isTeamPrivateMember());
-				return true;
+		IResourceVisitor visitor = resource -> {
+			boolean expected = false;
+			if (resource.getType() == IResource.FILE || resource.getType() == IResource.FOLDER) {
+				expected = value;
 			}
+			assertEquals(message + resource.getFullPath(), expected, resource.isTeamPrivateMember());
+			return true;
 		};
 		try {
 			root.accept(visitor, depth, IContainer.INCLUDE_TEAM_PRIVATE_MEMBERS);
@@ -815,16 +800,13 @@
 	}
 
 	protected void setTeamPrivateMember(final String message, IResource root, final boolean value, int depth) {
-		IResourceVisitor visitor = new IResourceVisitor() {
-			@Override
-			public boolean visit(IResource resource) {
-				try {
-					resource.setTeamPrivateMember(value);
-				} catch (CoreException e) {
-					fail(message + resource.getFullPath(), e);
-				}
-				return true;
+		IResourceVisitor visitor = resource -> {
+			try {
+				resource.setTeamPrivateMember(value);
+			} catch (CoreException e) {
+				fail(message + resource.getFullPath(), e);
 			}
+			return true;
 		};
 		try {
 			root.accept(visitor, depth, IContainer.INCLUDE_TEAM_PRIVATE_MEMBERS);
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/Bug_378156.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/Bug_378156.java
index 53bfc8e..31cad3b 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/Bug_378156.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/regression/Bug_378156.java
@@ -129,23 +129,16 @@
 		SignaledBuilder builder = SignaledBuilder.getInstance(project1);
 		builder.reset();
 
-		getWorkspace().run(new IWorkspaceRunnable() {
-
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				//modify the file so autobuild is needed
-				file.setContents(getRandomContents(), IResource.NONE, null);
-				//create a nested operation that immediately cancels
-				try {
-					getWorkspace().run(new IWorkspaceRunnable() {
-						@Override
-						public void run(IProgressMonitor monitor) {
-							throw new OperationCanceledException();
-						}
-					}, null);
-				} catch (OperationCanceledException e) {
-					//don't let this propagate - we changed our mind about canceling
-				}
+		getWorkspace().run((IWorkspaceRunnable) monitor -> {
+			//modify the file so autobuild is needed
+			file.setContents(getRandomContents(), IResource.NONE, null);
+			//create a nested operation that immediately cancels
+			try {
+				getWorkspace().run((IWorkspaceRunnable) monitor1 -> {
+					throw new OperationCanceledException();
+				}, null);
+			} catch (OperationCanceledException e) {
+				//don't let this propagate - we changed our mind about canceling
 			}
 		}, null);
 		waitForBuild();
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/session/ProjectPreferenceSessionTest.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/session/ProjectPreferenceSessionTest.java
index 263c764..ace6fe8 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/session/ProjectPreferenceSessionTest.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/session/ProjectPreferenceSessionTest.java
@@ -70,19 +70,16 @@
 	public void testDeleteFileBeforeLoad2() {
 		IProject project = getProject("testDeleteFileBeforeLoad");
 		Platform.getPreferencesService().getRootNode().node(ProjectScope.SCOPE).node(project.getName());
-		ILogListener listener = new ILogListener() {
-			@Override
-			public void logging(IStatus status, String plugin) {
-				if (!Platform.PI_RUNTIME.equals(plugin)) {
-					return;
-				}
-				Throwable t = status.getException();
-				if (t == null) {
-					return;
-				}
-				if (t instanceof BackingStoreException) {
-					fail("1.0", t);
-				}
+		ILogListener listener = (status, plugin) -> {
+			if (!Platform.PI_RUNTIME.equals(plugin)) {
+				return;
+			}
+			Throwable t = status.getException();
+			if (t == null) {
+				return;
+			}
+			if (t instanceof BackingStoreException) {
+				fail("1.0", t);
 			}
 		};
 		try {
