diff --git a/ant/org.eclipse.ant.core/src/org/eclipse/ant/core/AntCorePreferences.java b/ant/org.eclipse.ant.core/src/org/eclipse/ant/core/AntCorePreferences.java
index e61d7b5..adf093c 100644
--- a/ant/org.eclipse.ant.core/src/org/eclipse/ant/core/AntCorePreferences.java
+++ b/ant/org.eclipse.ant.core/src/org/eclipse/ant/core/AntCorePreferences.java
@@ -51,7 +51,6 @@
 import org.eclipse.core.runtime.URIUtil;
 import org.eclipse.core.runtime.preferences.IEclipsePreferences;
 import org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener;
-import org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent;
 import org.eclipse.core.runtime.preferences.InstanceScope;
 import org.eclipse.core.variables.IDynamicVariable;
 import org.eclipse.core.variables.VariablesPlugin;
@@ -139,25 +138,22 @@
 		}
 	}
 
-	private IPreferenceChangeListener prefListener = new IPreferenceChangeListener() {
-		@Override
-		public void preferenceChange(PreferenceChangeEvent event) {
-			String property = event.getKey();
-			if (property.equals(IAntCoreConstants.PREFERENCE_TASKS) || property.startsWith(IAntCoreConstants.PREFIX_TASK)) {
-				restoreTasks();
-			} else if (property.equals(IAntCoreConstants.PREFERENCE_TYPES) || property.startsWith(IAntCoreConstants.PREFIX_TYPE)) {
-				restoreTypes();
-			} else if (property.equals(IAntCoreConstants.PREFERENCE_ANT_HOME_ENTRIES)) {
-				restoreAntHomeEntries();
-			} else if (property.equals(IAntCoreConstants.PREFERENCE_ADDITIONAL_ENTRIES)) {
-				restoreAdditionalEntries();
-			} else if (property.equals(IAntCoreConstants.PREFERENCE_ANT_HOME)) {
-				restoreAntHome();
-			} else if (property.equals(IAntCoreConstants.PREFERENCE_PROPERTIES) || property.startsWith(IAntCoreConstants.PREFIX_PROPERTY)) {
-				restoreCustomProperties();
-			} else if (property.equals(IAntCoreConstants.PREFERENCE_PROPERTY_FILES)) {
-				restoreCustomPropertyFiles();
-			}
+	private IPreferenceChangeListener prefListener = event -> {
+		String property = event.getKey();
+		if (property.equals(IAntCoreConstants.PREFERENCE_TASKS) || property.startsWith(IAntCoreConstants.PREFIX_TASK)) {
+			restoreTasks();
+		} else if (property.equals(IAntCoreConstants.PREFERENCE_TYPES) || property.startsWith(IAntCoreConstants.PREFIX_TYPE)) {
+			restoreTypes();
+		} else if (property.equals(IAntCoreConstants.PREFERENCE_ANT_HOME_ENTRIES)) {
+			restoreAntHomeEntries();
+		} else if (property.equals(IAntCoreConstants.PREFERENCE_ADDITIONAL_ENTRIES)) {
+			restoreAdditionalEntries();
+		} else if (property.equals(IAntCoreConstants.PREFERENCE_ANT_HOME)) {
+			restoreAntHome();
+		} else if (property.equals(IAntCoreConstants.PREFERENCE_PROPERTIES) || property.startsWith(IAntCoreConstants.PREFIX_PROPERTY)) {
+			restoreCustomProperties();
+		} else if (property.equals(IAntCoreConstants.PREFERENCE_PROPERTY_FILES)) {
+			restoreCustomPropertyFiles();
 		}
 	};
 
@@ -967,12 +963,7 @@
 			return urls;
 		}
 
-		File[] matches = location.listFiles(new FilenameFilter() {
-			@Override
-			public boolean accept(File dir, String name) {
-				return name.toLowerCase().endsWith(extension);
-			}
-		});
+		File[] matches = location.listFiles((FilenameFilter) (dir, name) -> name.toLowerCase().endsWith(extension));
 
 		urls = new URL[matches.length];
 		for (int i = 0; i < matches.length; ++i) {
diff --git a/ant/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/debug/model/AntLineBreakpoint.java b/ant/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/debug/model/AntLineBreakpoint.java
index 705a0e3..84563d9 100644
--- a/ant/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/debug/model/AntLineBreakpoint.java
+++ b/ant/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/debug/model/AntLineBreakpoint.java
@@ -21,7 +21,6 @@
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.IWorkspaceRunnable;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.debug.core.DebugException;
 import org.eclipse.debug.core.DebugPlugin;
 import org.eclipse.debug.core.model.IBreakpoint;
@@ -72,20 +71,17 @@
 	 *             if unable to create the breakpoint
 	 */
 	public AntLineBreakpoint(final IResource resource, final int lineNumber, final Map<String, Object> attributes, final boolean register) throws CoreException {
-		IWorkspaceRunnable wr = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				IMarker marker = resource.createMarker(IAntDebugConstants.ID_ANT_LINE_BREAKPOINT_MARKER);
-				setMarker(marker);
-				attributes.put(IBreakpoint.ENABLED, Boolean.TRUE);
-				attributes.put(IMarker.LINE_NUMBER, Integer.valueOf(lineNumber));
-				attributes.put(IBreakpoint.ID, IAntDebugConstants.ID_ANT_DEBUG_MODEL);
-				attributes.put(IMarker.MESSAGE, MessageFormat.format(DebugModelMessages.AntLineBreakpoint_0, new Object[] {
-						Integer.toString(lineNumber) }));
-				ensureMarker().setAttributes(attributes);
+		IWorkspaceRunnable wr = monitor -> {
+			IMarker marker = resource.createMarker(IAntDebugConstants.ID_ANT_LINE_BREAKPOINT_MARKER);
+			setMarker(marker);
+			attributes.put(IBreakpoint.ENABLED, Boolean.TRUE);
+			attributes.put(IMarker.LINE_NUMBER, Integer.valueOf(lineNumber));
+			attributes.put(IBreakpoint.ID, IAntDebugConstants.ID_ANT_DEBUG_MODEL);
+			attributes.put(IMarker.MESSAGE, MessageFormat.format(DebugModelMessages.AntLineBreakpoint_0, new Object[] {
+					Integer.toString(lineNumber) }));
+			ensureMarker().setAttributes(attributes);
 
-				register(register);
-			}
+			register(register);
 		};
 		run(getMarkerRule(resource), wr);
 	}
diff --git a/ant/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/launchConfigurations/AntLaunchDelegate.java b/ant/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/launchConfigurations/AntLaunchDelegate.java
index e05f0cb..1d0a7e3 100644
--- a/ant/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/launchConfigurations/AntLaunchDelegate.java
+++ b/ant/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/launchConfigurations/AntLaunchDelegate.java
@@ -592,15 +592,12 @@
 			}
 		} else {
 			final AtomicBoolean terminated = new AtomicBoolean(false);
-			IDebugEventSetListener listener = new IDebugEventSetListener() {
-				@Override
-				public void handleDebugEvents(DebugEvent[] events) {
-					for (DebugEvent event : events) {
-						for (IProcess process : processes) {
-							if (event.getSource() == process && event.getKind() == DebugEvent.TERMINATE) {
-								terminated.set(true);
-								break;
-							}
+			IDebugEventSetListener listener = events -> {
+				for (DebugEvent event : events) {
+					for (IProcess process : processes) {
+						if (event.getSource() == process && event.getKind() == DebugEvent.TERMINATE) {
+							terminated.set(true);
+							break;
 						}
 					}
 				}
diff --git a/ant/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/launchConfigurations/ContributedClasspathEntriesEntry.java b/ant/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/launchConfigurations/ContributedClasspathEntriesEntry.java
index 03fd17a..1ddb2ad 100644
--- a/ant/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/launchConfigurations/ContributedClasspathEntriesEntry.java
+++ b/ant/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/launchConfigurations/ContributedClasspathEntriesEntry.java
@@ -16,7 +16,6 @@
 package org.eclipse.ant.internal.launching.launchConfigurations;
 
 import java.io.File;
-import java.io.FilenameFilter;
 import java.io.IOException;
 import java.net.MalformedURLException;
 import java.net.URI;
@@ -187,12 +186,7 @@
 					if (!bundleFolder.isDirectory()) {
 						continue;
 					}
-					String[] names = bundleFolder.list(new FilenameFilter() {
-						@Override
-						public boolean accept(File dir, String name) {
-							return name.endsWith(".jar"); //$NON-NLS-1$
-						}
-					});
+					String[] names = bundleFolder.list((dir, name) -> name.endsWith(".jar")); //$NON-NLS-1$
 					for (String jarName : names) {
 						fgSWTEntries.add(JavaRuntime.newArchiveRuntimeClasspathEntry(fragmentPath.append(jarName)));
 					}
diff --git a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditor.java b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditor.java
index a23594c..7522b26 100644
--- a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditor.java
+++ b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditor.java
@@ -44,7 +44,6 @@
 import org.eclipse.ant.internal.ui.editor.text.XMLTextHover;
 import org.eclipse.ant.internal.ui.model.AntElementNode;
 import org.eclipse.ant.internal.ui.model.AntModel;
-import org.eclipse.ant.internal.ui.model.AntModelChangeEvent;
 import org.eclipse.ant.internal.ui.model.AntModelCore;
 import org.eclipse.ant.internal.ui.model.AntProjectNode;
 import org.eclipse.ant.internal.ui.model.IAntElement;
@@ -70,8 +69,6 @@
 import org.eclipse.jface.text.IAutoEditStrategy;
 import org.eclipse.jface.text.IDocument;
 import org.eclipse.jface.text.IDocumentListener;
-import org.eclipse.jface.text.IInformationControl;
-import org.eclipse.jface.text.IInformationControlCreator;
 import org.eclipse.jface.text.IRegion;
 import org.eclipse.jface.text.ISelectionValidator;
 import org.eclipse.jface.text.ISynchronizable;
@@ -444,13 +441,10 @@
 	/**
 	 * Selection changed listener for the outline view.
 	 */
-	protected ISelectionChangedListener fSelectionChangedListener = new ISelectionChangedListener() {
-		@Override
-		public void selectionChanged(SelectionChangedEvent event) {
-			fSelectionSetFromOutline = false;
-			doSelectionChanged(event);
-			fSelectionSetFromOutline = true;
-		}
+	protected ISelectionChangedListener fSelectionChangedListener = event -> {
+		fSelectionSetFromOutline = false;
+		doSelectionChanged(event);
+		fSelectionSetFromOutline = true;
 	};
 
 	private IAntModelListener fAntModelListener;
@@ -541,18 +535,14 @@
 		setSourceViewerConfiguration(new AntEditorSourceViewerConfiguration(this));
 		setDocumentProvider(AntUIPlugin.getDefault().getDocumentProvider());
 
-		fAntModelListener = new IAntModelListener() {
-
-			@Override
-			public void antModelChanged(AntModelChangeEvent event) {
-				AntModel model = getAntModel();
-				if (event.getModel() == model) {
-					if (event.isPreferenceChange()) {
-						updateEditorImage(model);
-					}
-					if (fFoldingStructureProvider != null) {
-						fFoldingStructureProvider.updateFoldingRegions(model);
-					}
+		fAntModelListener = event -> {
+			AntModel model = getAntModel();
+			if (event.getModel() == model) {
+				if (event.isPreferenceChange()) {
+					updateEditorImage(model);
+				}
+				if (fFoldingStructureProvider != null) {
+					fFoldingStructureProvider.updateFoldingRegions(model);
 				}
 			}
 		};
@@ -574,12 +564,7 @@
 		}
 
 		if (key == IShowInTargetList.class) {
-			return (T) new IShowInTargetList() {
-				@Override
-				public String[] getShowInTargetIds() {
-					return new String[] { JavaUI.ID_PACKAGES, IPageLayout.ID_PROJECT_EXPLORER };
-				}
-			};
+			return (T) (IShowInTargetList) () -> new String[] { JavaUI.ID_PACKAGES, IPageLayout.ID_PROJECT_EXPLORER };
 		}
 
 		if (key == IToggleBreakpointsTarget.class) {
@@ -963,12 +948,7 @@
 
 	private void createFoldingSupport(ProjectionViewer projectionViewer) {
 		fProjectionSupport = new ProjectionSupport(projectionViewer, getAnnotationAccess(), getSharedColors());
-		fProjectionSupport.setHoverControlCreator(new IInformationControlCreator() {
-			@Override
-			public IInformationControl createInformationControl(Shell shell) {
-				return new AntSourceViewerInformationControl(shell);
-			}
-		});
+		fProjectionSupport.setHoverControlCreator(shell -> new AntSourceViewerInformationControl(shell));
 		fProjectionSupport.install();
 		((ProjectionViewer) getViewer()).addProjectionListener(this);
 
diff --git a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditorCompletionProcessor.java b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditorCompletionProcessor.java
index a84d9eb..56a63b3 100644
--- a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditorCompletionProcessor.java
+++ b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditorCompletionProcessor.java
@@ -78,7 +78,6 @@
 import org.eclipse.ant.internal.ui.model.IAntElement;
 import org.eclipse.core.commands.Command;
 import org.eclipse.core.commands.ParameterizedCommand;
-import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jface.bindings.TriggerSequence;
 import org.eclipse.jface.operation.IRunnableWithProgress;
 import org.eclipse.jface.text.BadLocationException;
@@ -1785,18 +1784,15 @@
 
 	protected ISchema getDtd() {
 		if (fgDtd == null) {
-			IRunnableWithProgress runnable = new IRunnableWithProgress() {
-				@Override
-				public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
-					try {
-						fgDtd = parseDtd();
-					}
-					catch (IOException e) {
-						AntUIPlugin.log(e);
-					}
-					catch (ParseError e) {
-						AntUIPlugin.log(e);
-					}
+			IRunnableWithProgress runnable = monitor -> {
+				try {
+					fgDtd = parseDtd();
+				}
+				catch (IOException e1) {
+					AntUIPlugin.log(e1);
+				}
+				catch (ParseError e2) {
+					AntUIPlugin.log(e2);
 				}
 			};
 
diff --git a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditorSourceViewerConfiguration.java b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditorSourceViewerConfiguration.java
index d519be7..5a7248c 100644
--- a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditorSourceViewerConfiguration.java
+++ b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditorSourceViewerConfiguration.java
@@ -41,7 +41,6 @@
 import org.eclipse.jface.text.DefaultInformationControl;
 import org.eclipse.jface.text.IAutoEditStrategy;
 import org.eclipse.jface.text.IDocument;
-import org.eclipse.jface.text.IInformationControl;
 import org.eclipse.jface.text.IInformationControlCreator;
 import org.eclipse.jface.text.ITextHover;
 import org.eclipse.jface.text.contentassist.ContentAssistant;
@@ -56,7 +55,6 @@
 import org.eclipse.jface.text.source.ISourceViewer;
 import org.eclipse.jface.util.PropertyChangeEvent;
 import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.widgets.Shell;
 
 /**
  * The source viewer configuration for the Ant Editor.
@@ -138,12 +136,7 @@
 	 */
 	@Override
 	public IInformationControlCreator getInformationControlCreator(ISourceViewer sourceViewer) {
-		return new IInformationControlCreator() {
-			@Override
-			public IInformationControl createInformationControl(Shell parent) {
-				return new DefaultInformationControl(parent, false);
-			}
-		};
+		return parent -> new DefaultInformationControl(parent, false);
 	}
 
 	/*
@@ -220,12 +213,7 @@
 	 * @since 3.1
 	 */
 	public static IInformationControlCreator getInformationPresenterControlCreator() {
-		return new IInformationControlCreator() {
-			@Override
-			public IInformationControl createInformationControl(Shell parent) {
-				return new DefaultInformationControl(parent, true);
-			}
-		};
+		return parent -> new DefaultInformationControl(parent, true);
 	}
 
 	@Override
diff --git a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/TaskDescriptionProvider.java b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/TaskDescriptionProvider.java
index b426762..9790d80 100644
--- a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/TaskDescriptionProvider.java
+++ b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/TaskDescriptionProvider.java
@@ -29,7 +29,6 @@
 
 import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.ant.internal.ui.AntUIPlugin;
-import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jface.operation.IRunnableWithProgress;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.progress.IProgressService;
@@ -112,12 +111,7 @@
 	public static TaskDescriptionProvider getDefault() {
 		if (fgDefault == null) {
 			fgDefault = new TaskDescriptionProvider();
-			IRunnableWithProgress runnable = new IRunnableWithProgress() {
-				@Override
-				public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
-					fgDefault.initialize();
-				}
-			};
+			IRunnableWithProgress runnable = monitor -> fgDefault.initialize();
 
 			IProgressService service = PlatformUI.getWorkbench().getProgressService();
 			try {
diff --git a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/outline/AntEditorContentOutlinePage.java b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/outline/AntEditorContentOutlinePage.java
index 580e5a5..f63d85e 100644
--- a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/outline/AntEditorContentOutlinePage.java
+++ b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/outline/AntEditorContentOutlinePage.java
@@ -28,7 +28,6 @@
 import org.eclipse.ant.internal.ui.model.AntElementNode;
 import org.eclipse.ant.internal.ui.model.AntImportNode;
 import org.eclipse.ant.internal.ui.model.AntModel;
-import org.eclipse.ant.internal.ui.model.AntModelChangeEvent;
 import org.eclipse.ant.internal.ui.model.AntModelContentProvider;
 import org.eclipse.ant.internal.ui.model.AntModelCore;
 import org.eclipse.ant.internal.ui.model.AntModelLabelProvider;
@@ -42,7 +41,6 @@
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.ListenerList;
-import org.eclipse.jface.action.IMenuListener;
 import org.eclipse.jface.action.IMenuManager;
 import org.eclipse.jface.action.IToolBarManager;
 import org.eclipse.jface.action.MenuManager;
@@ -307,12 +305,7 @@
 
 		MenuManager manager = new MenuManager("#PopUp"); //$NON-NLS-1$
 		manager.setRemoveAllWhenShown(true);
-		manager.addMenuListener(new IMenuListener() {
-			@Override
-			public void menuAboutToShow(IMenuManager menuManager) {
-				contextMenuAboutToShow(menuManager);
-			}
-		});
+		manager.addMenuListener(menuManager -> contextMenuAboutToShow(menuManager));
 		fMenu = manager.createContextMenu(viewer.getTree());
 		viewer.getTree().setMenu(fMenu);
 
@@ -331,12 +324,7 @@
 
 		fOpenWithMenu = new AntOpenWithMenu(this.getSite().getPage());
 
-		viewer.addPostSelectionChangedListener(new ISelectionChangedListener() {
-			@Override
-			public void selectionChanged(SelectionChangedEvent event) {
-				firePostSelectionChanged(event.getSelection());
-			}
-		});
+		viewer.addPostSelectionChangedListener(event -> firePostSelectionChanged(event.getSelection()));
 
 		site.getActionBars().setGlobalActionHandler(ITextEditorActionDefinitionIds.TOGGLE_SHOW_SELECTED_ELEMENT_ONLY, fTogglePresentation);
 	}
@@ -373,18 +361,15 @@
 	}
 
 	private IAntModelListener createAntModelChangeListener() {
-		return new IAntModelListener() {
-			@Override
-			public void antModelChanged(final AntModelChangeEvent event) {
-				if (event.getModel() == fModel && !getControl().isDisposed()) {
-					getControl().getDisplay().asyncExec(() -> {
-						Control ctrl = getControl();
-						if (ctrl != null && !ctrl.isDisposed()) {
-							getTreeViewer().refresh();
-							updateTreeExpansion();
-						}
-					});
-				}
+		return event -> {
+			if (event.getModel() == fModel && !getControl().isDisposed()) {
+				getControl().getDisplay().asyncExec(() -> {
+					Control ctrl = getControl();
+					if (ctrl != null && !ctrl.isDisposed()) {
+						getTreeViewer().refresh();
+						updateTreeExpansion();
+					}
+				});
 			}
 		};
 	}
diff --git a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/templates/AntTemplateInformationControlCreator.java b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/templates/AntTemplateInformationControlCreator.java
index c238bec..6f68b36 100644
--- a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/templates/AntTemplateInformationControlCreator.java
+++ b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/templates/AntTemplateInformationControlCreator.java
@@ -17,8 +17,6 @@
 import org.eclipse.jface.text.IInformationControl;
 import org.eclipse.jface.text.IInformationControlCreator;
 import org.eclipse.jface.text.IInformationControlCreatorExtension;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
 import org.eclipse.swt.widgets.Shell;
 
 public class AntTemplateInformationControlCreator implements IInformationControlCreator, IInformationControlCreatorExtension {
@@ -34,12 +32,7 @@
 	@Override
 	public IInformationControl createInformationControl(Shell parent) {
 		fControl = new AntSourceViewerInformationControl(parent);
-		fControl.addDisposeListener(new DisposeListener() {
-			@Override
-			public void widgetDisposed(DisposeEvent e) {
-				fControl = null;
-			}
-		});
+		fControl.addDisposeListener(e -> fControl = null);
 		return fControl;
 	}
 
diff --git a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/text/XMLTextHover.java b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/text/XMLTextHover.java
index 130870b..44ab3ce 100644
--- a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/text/XMLTextHover.java
+++ b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/text/XMLTextHover.java
@@ -37,7 +37,6 @@
 import org.eclipse.jface.text.BadLocationException;
 import org.eclipse.jface.text.DefaultInformationControl;
 import org.eclipse.jface.text.IDocument;
-import org.eclipse.jface.text.IInformationControl;
 import org.eclipse.jface.text.IInformationControlCreator;
 import org.eclipse.jface.text.IRegion;
 import org.eclipse.jface.text.ITextHover;
@@ -49,7 +48,6 @@
 import org.eclipse.jface.text.source.Annotation;
 import org.eclipse.jface.text.source.IAnnotationModel;
 import org.eclipse.jface.text.source.ISourceViewer;
-import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.editors.text.EditorsUI;
 
 public class XMLTextHover implements ITextHover, ITextHoverExtension, IInformationProviderExtension2 {
@@ -334,12 +332,7 @@
 
 	@Override
 	public IInformationControlCreator getHoverControlCreator() {
-		return new IInformationControlCreator() {
-			@Override
-			public IInformationControl createInformationControl(Shell parent) {
-				return new DefaultInformationControl(parent, EditorsUI.getTooltipAffordanceString());
-			}
-		};
+		return parent -> new DefaultInformationControl(parent, EditorsUI.getTooltipAffordanceString());
 	}
 
 	/**
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/console/JavacMarkerCreator.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/console/JavacMarkerCreator.java
index 41908b7..6f0c7ad 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/console/JavacMarkerCreator.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/console/JavacMarkerCreator.java
@@ -26,7 +26,6 @@
 import org.eclipse.core.resources.IWorkspaceRunnable;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.jobs.ISchedulingRule;
 import org.eclipse.debug.core.model.IProcess;
 import org.eclipse.debug.internal.ui.views.console.ProcessConsole;
@@ -109,24 +108,21 @@
 	}
 
 	private void createMarkers(final IFile file, final List<MarkerInfo> infos) {
-		IWorkspaceRunnable wr = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
+		IWorkspaceRunnable wr = monitor -> {
 
-				try {
-					for (MarkerInfo info : infos) {
-						IMarker marker = file.createMarker(IJavaModelMarker.JAVA_MODEL_PROBLEM_MARKER);
-						Map<String, Object> attributes = new HashMap<>(3);
-						attributes.put(IMarker.LINE_NUMBER, Integer.valueOf(info.fLineNumber));
-						String message = getMessage(info);
-						attributes.put(IMarker.MESSAGE, message);
-						attributes.put(IMarker.SEVERITY, info.fType);
-						marker.setAttributes(attributes);
-					}
+			try {
+				for (MarkerInfo info : infos) {
+					IMarker marker = file.createMarker(IJavaModelMarker.JAVA_MODEL_PROBLEM_MARKER);
+					Map<String, Object> attributes = new HashMap<>(3);
+					attributes.put(IMarker.LINE_NUMBER, Integer.valueOf(info.fLineNumber));
+					String message = getMessage(info);
+					attributes.put(IMarker.MESSAGE, message);
+					attributes.put(IMarker.SEVERITY, info.fType);
+					marker.setAttributes(attributes);
 				}
-				catch (CoreException e) {
-					AntUIPlugin.log(e.getStatus());
-				}
+			}
+			catch (CoreException e) {
+				AntUIPlugin.log(e.getStatus());
 			}
 		};
 		run(getMarkerRule(file), wr);
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/AntBuildfileExportPage.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/AntBuildfileExportPage.java
index e09cd5e..b46691b 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/AntBuildfileExportPage.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/AntBuildfileExportPage.java
@@ -32,7 +32,6 @@
 import org.eclipse.core.resources.IWorkspaceRoot;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.SubMonitor;
 import org.eclipse.jdt.core.IJavaModel;
 import org.eclipse.jdt.core.IJavaProject;
@@ -41,13 +40,10 @@
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.operation.IRunnableWithProgress;
-import org.eclipse.jface.viewers.CheckStateChangedEvent;
 import org.eclipse.jface.viewers.CheckboxTableViewer;
-import org.eclipse.jface.viewers.ICheckStateListener;
 import org.eclipse.jface.viewers.TableLayout;
 import org.eclipse.jface.wizard.WizardPage;
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ModifyEvent;
 import org.eclipse.swt.events.ModifyListener;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
@@ -123,16 +119,13 @@
 			}
 		});
 		fTableViewer.setLabelProvider(new WorkbenchLabelProvider());
-		fTableViewer.addCheckStateListener(new ICheckStateListener() {
-			@Override
-			public void checkStateChanged(CheckStateChangedEvent event) {
-				if (event.getChecked()) {
-					fSelectedJavaProjects.add((IJavaProject) event.getElement());
-				} else {
-					fSelectedJavaProjects.remove(event.getElement());
-				}
-				updateEnablement();
+		fTableViewer.addCheckStateListener(event -> {
+			if (event.getChecked()) {
+				fSelectedJavaProjects.add((IJavaProject) event.getElement());
+			} else {
+				fSelectedJavaProjects.remove(event.getElement());
 			}
+			updateEnablement();
 		});
 
 		initializeProjects();
@@ -221,12 +214,7 @@
 		junitdirText.setText("junit"); //$NON-NLS-1$
 		junitdirText.setLayoutData(data);
 
-		ModifyListener listener = new ModifyListener() {
-			@Override
-			public void modifyText(ModifyEvent e) {
-				updateEnablement();
-			}
-		};
+		ModifyListener listener = e -> updateEnablement();
 		buildfilenameText.addModifyListener(listener);
 		junitdirText.addModifyListener(listener);
 	}
@@ -322,38 +310,35 @@
 			setErrorMessage(MessageFormat.format(DataTransferMessages.AntBuildfileExportPage_10, new Object[] { e.toString() }));
 			return false;
 		}
-		IRunnableWithProgress runnable = new IRunnableWithProgress() {
-			@Override
-			public void run(IProgressMonitor pm) throws InterruptedException {
-				SubMonitor localmonitor = SubMonitor.convert(pm, DataTransferMessages.AntBuildfileExportPage_creating_build_files, projects.size());
-				Exception problem = null;
-				try {
-					BuildFileCreator.setOptions(buildfilenameText.getText(), junitdirText.getText(), compatibilityCheckbox.getSelection(), compilerCheckbox.getSelection());
-					projectNames.addAll(BuildFileCreator.createBuildFiles(projects, getShell(), localmonitor.newChild(projects.size())));
-				}
-				catch (JavaModelException e) {
-					problem = e;
-				}
-				catch (TransformerConfigurationException e) {
-					problem = e;
-				}
-				catch (ParserConfigurationException e) {
-					problem = e;
-				}
-				catch (TransformerException e) {
-					problem = e;
-				}
-				catch (IOException e) {
-					problem = e;
-				}
-				catch (CoreException e) {
-					problem = e;
-				}
+		IRunnableWithProgress runnable = pm -> {
+			SubMonitor localmonitor = SubMonitor.convert(pm, DataTransferMessages.AntBuildfileExportPage_creating_build_files, projects.size());
+			Exception problem = null;
+			try {
+				BuildFileCreator.setOptions(buildfilenameText.getText(), junitdirText.getText(), compatibilityCheckbox.getSelection(), compilerCheckbox.getSelection());
+				projectNames.addAll(BuildFileCreator.createBuildFiles(projects, getShell(), localmonitor.newChild(projects.size())));
+			}
+			catch (JavaModelException e1) {
+				problem = e1;
+			}
+			catch (TransformerConfigurationException e2) {
+				problem = e2;
+			}
+			catch (ParserConfigurationException e3) {
+				problem = e3;
+			}
+			catch (TransformerException e4) {
+				problem = e4;
+			}
+			catch (IOException e5) {
+				problem = e5;
+			}
+			catch (CoreException e6) {
+				problem = e6;
+			}
 
-				if (problem != null) {
-					AntUIPlugin.log(problem);
-					setErrorMessage(MessageFormat.format(DataTransferMessages.AntBuildfileExportPage_10, new Object[] { problem.toString() }));
-				}
+			if (problem != null) {
+				AntUIPlugin.log(problem);
+				setErrorMessage(MessageFormat.format(DataTransferMessages.AntBuildfileExportPage_10, new Object[] { problem.toString() }));
 			}
 		};
 
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/AntNewJavaProjectPage.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/AntNewJavaProjectPage.java
index 49d9181..1d57dde 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/AntNewJavaProjectPage.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/AntNewJavaProjectPage.java
@@ -52,7 +52,6 @@
 import org.eclipse.jface.wizard.WizardPage;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ModifyEvent;
 import org.eclipse.swt.events.ModifyListener;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
@@ -86,39 +85,31 @@
 	private Button fLinkButton;
 
 	private IAntModel fAntModel;
+	private TableViewer fTableViewer;
 
-	private ModifyListener fLocationModifyListener = new ModifyListener() {
-		@Override
-		public void modifyText(ModifyEvent e) {
-			// no lexical or position, has task info
-			fAntModel = AntUtil.getAntModel(getProjectLocationFieldValue(), false, false, true);
-			AntProjectNode projectNode = fAntModel == null ? null : fAntModel.getProjectNode();
-			if (fAntModel != null && projectNode != null) {
-				setProjectName(); // page will be validated on setting the project name
-				List<AntTaskNode> javacNodes = new ArrayList<>();
-				getJavacNodes(javacNodes, projectNode);
-				fTableViewer.setInput(javacNodes.toArray());
-				if (!javacNodes.isEmpty()) {
-					fTableViewer.setSelection(new StructuredSelection(javacNodes.get(0)));
-				}
-				fTableViewer.getControl().setEnabled(true);
-			} else {
-				fTableViewer.setInput(new Object[] {});
-				fTableViewer.getControl().setEnabled(false);
+	private ModifyListener fLocationModifyListener = e -> {
+		// no lexical or position, has task info
+		fAntModel = AntUtil.getAntModel(getProjectLocationFieldValue(), false, false, true);
+		AntProjectNode projectNode = fAntModel == null ? null : fAntModel.getProjectNode();
+		if (fAntModel != null && projectNode != null) {
+			setProjectName(); // page will be validated on setting the project name
+			List<AntTaskNode> javacNodes = new ArrayList<>();
+			getJavacNodes(javacNodes, projectNode);
+			fTableViewer.setInput(javacNodes.toArray());
+			if (!javacNodes.isEmpty()) {
+				fTableViewer.setSelection(new StructuredSelection(javacNodes.get(0)));
 			}
-			setPageComplete(validatePage());
+			fTableViewer.getControl().setEnabled(true);
+		} else {
+			fTableViewer.setInput(new Object[] {});
+			fTableViewer.getControl().setEnabled(false);
 		}
+		setPageComplete(validatePage());
 	};
 
-	private ModifyListener fNameModifyListener = new ModifyListener() {
-		@Override
-		public void modifyText(ModifyEvent e) {
-			setPageComplete(validatePage());
-		}
-	};
+	private ModifyListener fNameModifyListener = e -> setPageComplete(validatePage());
 
 	private static final int SIZING_TEXT_FIELD_WIDTH = 250;
-	private TableViewer fTableViewer;
 
 	public AntNewJavaProjectPage() {
 		super("newPage"); //$NON-NLS-1$
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/BuildFileCreator.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/BuildFileCreator.java
index b919939..717315c 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/BuildFileCreator.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/BuildFileCreator.java
@@ -289,12 +289,7 @@
 	public void createImports() {
 		// <import file="javadoc.xml"/>
 		File dir = new File(projectRoot);
-		FilenameFilter filter = new FilenameFilter() {
-			@Override
-			public boolean accept(File acceptDir, String name) {
-				return name.endsWith(".xml"); //$NON-NLS-1$
-			}
-		};
+		FilenameFilter filter = (acceptDir, name) -> name.endsWith(".xml"); //$NON-NLS-1$
 
 		File[] files = dir.listFiles(filter);
 		if (files == null) {
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntTargetsTab.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntTargetsTab.java
index ff01471..6d9adb7 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntTargetsTab.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntTargetsTab.java
@@ -34,7 +34,6 @@
 import org.eclipse.core.externaltools.internal.IExternalToolConstants;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.jobs.ISchedulingRule;
 import org.eclipse.core.variables.IStringVariableManager;
@@ -46,12 +45,8 @@
 import org.eclipse.jface.dialogs.IDialogConstants;
 import org.eclipse.jface.operation.IRunnableContext;
 import org.eclipse.jface.operation.IRunnableWithProgress;
-import org.eclipse.jface.viewers.CheckStateChangedEvent;
 import org.eclipse.jface.viewers.CheckboxTableViewer;
 import org.eclipse.jface.viewers.ColumnWeightData;
-import org.eclipse.jface.viewers.DoubleClickEvent;
-import org.eclipse.jface.viewers.ICheckStateListener;
-import org.eclipse.jface.viewers.IDoubleClickListener;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.TableLayout;
@@ -394,26 +389,18 @@
 		fTableViewer.setContentProvider(new AntModelContentProvider());
 		fTableViewer.setComparator(new AntTargetsComparator());
 
-		fTableViewer.addDoubleClickListener(new IDoubleClickListener() {
-			@Override
-			public void doubleClick(DoubleClickEvent event) {
-				ISelection selection = event.getSelection();
-				if (!selection.isEmpty() && selection instanceof IStructuredSelection) {
-					IStructuredSelection ss = (IStructuredSelection) selection;
-					Object element = ss.getFirstElement();
-					boolean checked = !fTableViewer.getChecked(element);
-					fTableViewer.setChecked(element, checked);
-					updateOrderedTargets(element, checked);
-				}
+		fTableViewer.addDoubleClickListener(event -> {
+			ISelection selection = event.getSelection();
+			if (!selection.isEmpty() && selection instanceof IStructuredSelection) {
+				IStructuredSelection ss = (IStructuredSelection) selection;
+				Object element = ss.getFirstElement();
+				boolean checked = !fTableViewer.getChecked(element);
+				fTableViewer.setChecked(element, checked);
+				updateOrderedTargets(element, checked);
 			}
 		});
 
-		fTableViewer.addCheckStateListener(new ICheckStateListener() {
-			@Override
-			public void checkStateChanged(CheckStateChangedEvent event) {
-				updateOrderedTargets(event.getElement(), event.getChecked());
-			}
-		});
+		fTableViewer.addCheckStateListener(event -> updateOrderedTargets(event.getElement(), event.getChecked()));
 
 		TableColumn[] columns = fTableViewer.getTable().getColumns();
 		for (int i = 0; i < columns.length; i++) {
@@ -522,15 +509,12 @@
 			}
 			final CoreException[] exceptions = new CoreException[1];
 			try {
-				IRunnableWithProgress operation = new IRunnableWithProgress() {
-					@Override
-					public void run(IProgressMonitor monitor) {
-						try {
-							fAllTargets = AntUtil.getTargets(expandedLocation, fLaunchConfiguration);
-						}
-						catch (CoreException ce) {
-							exceptions[0] = ce;
-						}
+				IRunnableWithProgress operation = monitor -> {
+					try {
+						fAllTargets = AntUtil.getTargets(expandedLocation, fLaunchConfiguration);
+					}
+					catch (CoreException ce) {
+						exceptions[0] = ce;
 					}
 				};
 
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntModel.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntModel.java
index be8971a..3627873 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntModel.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntModel.java
@@ -130,13 +130,10 @@
 	private AntEditorMarkerUpdater fMarkerUpdater = null;
 	private List<AntElementNode> fNonStructuralNodes = new ArrayList<>(1);
 
-	private IPreferenceChangeListener fCoreListener = new IPreferenceChangeListener() {
-		@Override
-		public void preferenceChange(PreferenceChangeEvent event) {
-			if (IAntCoreConstants.PREFERENCE_CLASSPATH_CHANGED.equals(event.getKey())) {
-				if (Boolean.parseBoolean((String) event.getNewValue()) == true) {
-					reconcileForPropertyChange(true);
-				}
+	private IPreferenceChangeListener fCoreListener = event -> {
+		if (IAntCoreConstants.PREFERENCE_CLASSPATH_CHANGED.equals(event.getKey())) {
+			if (Boolean.parseBoolean((String) event.getNewValue()) == true) {
+				reconcileForPropertyChange(true);
 			}
 		}
 	};
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntModelCore.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntModelCore.java
index c5b0eff..eddfe2e 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntModelCore.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntModelCore.java
@@ -25,7 +25,6 @@
 import org.eclipse.core.resources.IWorkspaceRunnable;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.debug.core.DebugPlugin;
 import org.eclipse.debug.core.IBreakpointsListener;
 import org.eclipse.debug.core.model.IBreakpoint;
@@ -77,16 +76,13 @@
 	 * @see org.eclipse.debug.core.IBreakpointsListener#breakpointsAdded(org.eclipse.debug.core.model.IBreakpoint[])
 	 */
 	private void updateBreakpointMessages(final IBreakpoint[] breakpoints) {
-		IWorkspaceRunnable runnable = new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				for (IBreakpoint breakpoint : breakpoints) {
-					if (breakpoint instanceof AntLineBreakpoint) {
-						IMarker marker = breakpoint.getMarker();
-						if (marker.exists()) {
-							int lineNumber = marker.getAttribute(IMarker.LINE_NUMBER, 0);
-							marker.setAttribute(IMarker.MESSAGE, MessageFormat.format(DebugModelMessages.AntLineBreakpoint_0, new Object[] { Integer.toString(lineNumber) }));
-						}
+		IWorkspaceRunnable runnable = monitor -> {
+			for (IBreakpoint breakpoint : breakpoints) {
+				if (breakpoint instanceof AntLineBreakpoint) {
+					IMarker marker = breakpoint.getMarker();
+					if (marker.exists()) {
+						int lineNumber = marker.getAttribute(IMarker.LINE_NUMBER, 0);
+						marker.setAttribute(IMarker.MESSAGE, MessageFormat.format(DebugModelMessages.AntLineBreakpoint_0, new Object[] { Integer.toString(lineNumber) }));
 					}
 				}
 			}
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AbstractAntEditorPreferencePage.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AbstractAntEditorPreferencePage.java
index f5697f5..c19fdbd 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AbstractAntEditorPreferencePage.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AbstractAntEditorPreferencePage.java
@@ -27,7 +27,6 @@
 import org.eclipse.jface.dialogs.IMessageProvider;
 import org.eclipse.jface.preference.PreferencePage;
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ModifyEvent;
 import org.eclipse.swt.events.ModifyListener;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.events.SelectionListener;
@@ -65,23 +64,17 @@
 	};
 
 	private Map<Text, String> fTextFields = new HashMap<>();
-	private ModifyListener fTextFieldListener = new ModifyListener() {
-		@Override
-		public void modifyText(ModifyEvent e) {
-			if (fInitialized) {
-				Text text = (Text) e.widget;
-				fOverlayStore.setValue(fTextFields.get(text), text.getText());
-			}
+	private ModifyListener fTextFieldListener = e -> {
+		if (fInitialized) {
+			Text text = (Text) e.widget;
+			fOverlayStore.setValue(fTextFields.get(text), text.getText());
 		}
 	};
 
 	private Map<Text, String[]> fNumberFields = new HashMap<>();
-	private ModifyListener fNumberFieldListener = new ModifyListener() {
-		@Override
-		public void modifyText(ModifyEvent e) {
-			if (fInitialized) {
-				numberFieldChanged((Text) e.widget);
-			}
+	private ModifyListener fNumberFieldListener = e -> {
+		if (fInitialized) {
+			numberFieldChanged((Text) e.widget);
 		}
 	};
 
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AddCustomDialog.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AddCustomDialog.java
index d9bf1de..de4871d 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AddCustomDialog.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AddCustomDialog.java
@@ -35,20 +35,15 @@
 import org.eclipse.core.variables.VariablesPlugin;
 import org.eclipse.jface.dialogs.IDialogConstants;
 import org.eclipse.jface.dialogs.StatusDialog;
-import org.eclipse.jface.viewers.DoubleClickEvent;
-import org.eclipse.jface.viewers.IDoubleClickListener;
 import org.eclipse.jface.viewers.ISelectionChangedListener;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.ITreeContentProvider;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.BusyIndicator;
 import org.eclipse.swt.events.FocusAdapter;
 import org.eclipse.swt.events.FocusEvent;
 import org.eclipse.swt.events.KeyAdapter;
 import org.eclipse.swt.events.KeyEvent;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.layout.GridData;
@@ -145,12 +140,7 @@
 		nameField.setLayoutData(data);
 		nameField.setFont(topComposite.getFont());
 		nameField.setText(name);
-		nameField.addModifyListener(new ModifyListener() {
-			@Override
-			public void modifyText(ModifyEvent e) {
-				updateStatus();
-			}
-		});
+		nameField.addModifyListener(e -> updateStatus());
 	}
 
 	@Override
@@ -307,23 +297,15 @@
 		FileSystemElement dummyRoot = new FileSystemElement("Dummy", null, true); //$NON-NLS-1$
 		this.selectionGroup = new TreeAndListGroup(parent, dummyRoot, getFolderProvider(), new WorkbenchLabelProvider(), getFileProvider(), new WorkbenchLabelProvider(), SWT.NONE, 400, 150, false);
 
-		ISelectionChangedListener listener = new ISelectionChangedListener() {
-			@Override
-			public void selectionChanged(SelectionChangedEvent event) {
-				updateStatus();
-			}
-		};
+		ISelectionChangedListener listener = event -> updateStatus();
 
 		WorkbenchViewerComparator comparator = new WorkbenchViewerComparator();
 		this.selectionGroup.setTreeComparator(comparator);
 		this.selectionGroup.setListSorter(comparator);
 		this.selectionGroup.addSelectionChangedListener(listener);
-		selectionGroup.addDoubleClickListener(new IDoubleClickListener() {
-			@Override
-			public void doubleClick(DoubleClickEvent event) {
-				if (getButton(IDialogConstants.OK_ID).isEnabled()) {
-					buttonPressed(IDialogConstants.OK_ID);
-				}
+		selectionGroup.addDoubleClickListener(event -> {
+			if (getButton(IDialogConstants.OK_ID).isEnabled()) {
+				buttonPressed(IDialogConstants.OK_ID);
 			}
 		});
 	}
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AddPropertyDialog.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AddPropertyDialog.java
index 10e6276..ec23745 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AddPropertyDialog.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AddPropertyDialog.java
@@ -18,8 +18,6 @@
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.dialogs.IDialogConstants;
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.layout.GridData;
@@ -67,12 +65,7 @@
 		gd.widthHint = 300;
 		fNameText.setLayoutData(gd);
 		fNameText.setFont(comp.getFont());
-		fNameText.addModifyListener(new ModifyListener() {
-			@Override
-			public void modifyText(ModifyEvent e) {
-				updateButtons();
-			}
-		});
+		fNameText.addModifyListener(e -> updateButtons());
 
 		fValueLabel = new Label(comp, SWT.NONE);
 		fValueLabel.setText(AntPreferencesMessages.AddPropertyDialog__Value__2);
@@ -84,12 +77,7 @@
 		gd.widthHint = 300;
 		fValueText.setLayoutData(gd);
 		fValueText.setFont(comp.getFont());
-		fValueText.addModifyListener(new ModifyListener() {
-			@Override
-			public void modifyText(ModifyEvent e) {
-				updateButtons();
-			}
-		});
+		fValueText.addModifyListener(e -> updateButtons());
 
 		Button variablesButton = new Button(comp, SWT.PUSH);
 		variablesButton.setText(AntPreferencesMessages.AddPropertyDialog_2);
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntClasspathBlock.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntClasspathBlock.java
index 93ef1c3..83d938f 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntClasspathBlock.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntClasspathBlock.java
@@ -37,9 +37,7 @@
 import org.eclipse.jface.dialogs.IDialogConstants;
 import org.eclipse.jface.dialogs.IDialogSettings;
 import org.eclipse.jface.dialogs.MessageDialogWithToggle;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
 import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
 import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.KeyAdapter;
@@ -348,12 +346,7 @@
 		treeViewer = new TreeViewer(tree);
 		treeViewer.setContentProvider(antContentProvider);
 		treeViewer.setLabelProvider(labelProvider);
-		treeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
-			@Override
-			public void selectionChanged(SelectionChangedEvent event) {
-				tableSelectionChanged((IStructuredSelection) event.getSelection(), (AntClasspathContentProvider) treeViewer.getContentProvider());
-			}
-		});
+		treeViewer.addSelectionChangedListener(event -> tableSelectionChanged((IStructuredSelection) event.getSelection(), (AntClasspathContentProvider) treeViewer.getContentProvider()));
 	}
 
 	public void createContents(Composite parent) {
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntClasspathPage.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntClasspathPage.java
index 21410ba..fe7c08e 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntClasspathPage.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntClasspathPage.java
@@ -158,12 +158,7 @@
 			return urls;
 		}
 
-		File[] matches = location.listFiles(new FilenameFilter() {
-			@Override
-			public boolean accept(File dir, String name) {
-				return name.toLowerCase().endsWith(extension);
-			}
-		});
+		File[] matches = location.listFiles((FilenameFilter) (dir, name) -> name.toLowerCase().endsWith(extension));
 
 		urls = new URL[matches.length];
 		for (int i = 0; i < matches.length; ++i) {
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntEditorPreferencePage.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntEditorPreferencePage.java
index d3770c3..82c81b5 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntEditorPreferencePage.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntEditorPreferencePage.java
@@ -33,11 +33,9 @@
 import org.eclipse.jface.text.IDocument;
 import org.eclipse.jface.text.source.SourceViewer;
 import org.eclipse.jface.viewers.IColorProvider;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
 import org.eclipse.jface.viewers.IStructuredContentProvider;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.jface.viewers.TableViewer;
 import org.eclipse.jface.viewers.Viewer;
@@ -486,12 +484,7 @@
 		gd.heightHint = convertHeightInCharsToPixels(5);
 		previewer.setLayoutData(gd);
 
-		fHighlightingColorListViewer.addSelectionChangedListener(new ISelectionChangedListener() {
-			@Override
-			public void selectionChanged(SelectionChangedEvent event) {
-				handleSyntaxColorListSelection();
-			}
-		});
+		fHighlightingColorListViewer.addSelectionChangedListener(event -> handleSyntaxColorListSelection());
 
 		foregroundColorButton.addSelectionListener(new SelectionListener() {
 			@Override
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntPage.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntPage.java
index 51ca0a0..997a522 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntPage.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntPage.java
@@ -25,11 +25,7 @@
 import org.eclipse.jface.dialogs.IDialogSettings;
 import org.eclipse.jface.viewers.ColumnLayoutData;
 import org.eclipse.jface.viewers.ColumnWeightData;
-import org.eclipse.jface.viewers.DoubleClickEvent;
-import org.eclipse.jface.viewers.IDoubleClickListener;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
 import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
 import org.eclipse.jface.viewers.TableLayout;
 import org.eclipse.jface.viewers.TableViewer;
 import org.eclipse.swt.SWT;
@@ -177,19 +173,11 @@
 		tableViewer = new TableViewer(table);
 		tableViewer.setContentProvider(contentProvider);
 		tableViewer.setLabelProvider(this.labelProvider);
-		tableViewer.addSelectionChangedListener(new ISelectionChangedListener() {
-			@Override
-			public void selectionChanged(SelectionChangedEvent event) {
-				tableSelectionChanged((IStructuredSelection) event.getSelection());
-			}
-		});
+		tableViewer.addSelectionChangedListener(event -> tableSelectionChanged((IStructuredSelection) event.getSelection()));
 
-		tableViewer.addDoubleClickListener(new IDoubleClickListener() {
-			@Override
-			public void doubleClick(DoubleClickEvent event) {
-				if (!event.getSelection().isEmpty() && editButton.isEnabled()) {
-					edit((IStructuredSelection) event.getSelection());
-				}
+		tableViewer.addDoubleClickListener(event -> {
+			if (!event.getSelection().isEmpty() && editButton.isEnabled()) {
+				edit((IStructuredSelection) event.getSelection());
 			}
 		});
 		ArrayList<ColumnSorter> sorters = new ArrayList<>(fTableColumnHeaders.length);
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntPreviewerUpdater.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntPreviewerUpdater.java
index f96be65..dd7e1a3 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntPreviewerUpdater.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntPreviewerUpdater.java
@@ -25,8 +25,6 @@
 import org.eclipse.jface.util.IPropertyChangeListener;
 import org.eclipse.jface.util.PropertyChangeEvent;
 import org.eclipse.swt.custom.StyledText;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
 import org.eclipse.swt.graphics.Color;
 import org.eclipse.swt.graphics.Font;
 import org.eclipse.swt.graphics.RGB;
@@ -59,16 +57,10 @@
 
 		initializeViewerColors(viewer, preferenceStore);
 
-		final IPropertyChangeListener fontChangeListener = new IPropertyChangeListener() {
-			/*
-			 * @see org.eclipse.jface.util.IPropertyChangeListener#propertyChange(org.eclipse.jface.util.PropertyChangeEvent)
-			 */
-			@Override
-			public void propertyChange(PropertyChangeEvent event) {
-				if (event.getProperty().equals(JFaceResources.TEXT_FONT)) {
-					Font font = JFaceResources.getFont(JFaceResources.TEXT_FONT);
-					viewer.getTextWidget().setFont(font);
-				}
+		final IPropertyChangeListener fontChangeListener = event -> {
+			if (event.getProperty().equals(JFaceResources.TEXT_FONT)) {
+				Font font = JFaceResources.getFont(JFaceResources.TEXT_FONT);
+				viewer.getTextWidget().setFont(font);
 			}
 		};
 		final IPropertyChangeListener propertyChangeListener = new IPropertyChangeListener() {
@@ -113,15 +105,9 @@
 				viewer.getDocument().set(contents);
 			}
 		};
-		viewer.getTextWidget().addDisposeListener(new DisposeListener() {
-			/*
-			 * @see org.eclipse.swt.events.DisposeListener#widgetDisposed(org.eclipse.swt.events.DisposeEvent)
-			 */
-			@Override
-			public void widgetDisposed(DisposeEvent e) {
-				preferenceStore.removePropertyChangeListener(propertyChangeListener);
-				JFaceResources.getFontRegistry().removeListener(fontChangeListener);
-			}
+		viewer.getTextWidget().addDisposeListener(e -> {
+			preferenceStore.removePropertyChangeListener(propertyChangeListener);
+			JFaceResources.getFontRegistry().removeListener(fontChangeListener);
 		});
 		JFaceResources.getFontRegistry().addListener(fontChangeListener);
 		preferenceStore.addPropertyChangeListener(propertyChangeListener);
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntPropertiesBlock.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntPropertiesBlock.java
index b16421f..d7f851d 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntPropertiesBlock.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntPropertiesBlock.java
@@ -34,11 +34,8 @@
 import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.viewers.ColumnLayoutData;
 import org.eclipse.jface.viewers.ColumnWeightData;
-import org.eclipse.jface.viewers.DoubleClickEvent;
-import org.eclipse.jface.viewers.IDoubleClickListener;
 import org.eclipse.jface.viewers.ISelectionChangedListener;
 import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
 import org.eclipse.jface.viewers.TableLayout;
 import org.eclipse.jface.viewers.TableViewer;
 import org.eclipse.jface.window.Window;
@@ -152,15 +149,12 @@
 	/**
 	 * Selection changed listener that delegates selection events.
 	 */
-	private ISelectionChangedListener tableListener = new ISelectionChangedListener() {
-		@Override
-		public void selectionChanged(SelectionChangedEvent event) {
-			if (tablesEnabled) {
-				if (event.getSource() == propertyTableViewer) {
-					propertyTableSelectionChanged((IStructuredSelection) event.getSelection());
-				} else if (event.getSource() == fileTableViewer) {
-					fileTableSelectionChanged((IStructuredSelection) event.getSelection());
-				}
+	private ISelectionChangedListener tableListener = event -> {
+		if (tablesEnabled) {
+			if (event.getSource() == propertyTableViewer) {
+				propertyTableSelectionChanged((IStructuredSelection) event.getSelection());
+			} else if (event.getSource() == fileTableViewer) {
+				fileTableSelectionChanged((IStructuredSelection) event.getSelection());
 			}
 		}
 	};
@@ -219,12 +213,9 @@
 			// do nothing
 		}
 		propertyTableViewer = createTableViewer(top, true, false, idx, direction);
-		propertyTableViewer.addDoubleClickListener(new IDoubleClickListener() {
-			@Override
-			public void doubleClick(DoubleClickEvent event) {
-				if (!event.getSelection().isEmpty() && editButton.isEnabled()) {
-					edit();
-				}
+		propertyTableViewer.addDoubleClickListener(event -> {
+			if (!event.getSelection().isEmpty() && editButton.isEnabled()) {
+				edit();
 			}
 		});
 
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/FileSelectionDialog.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/FileSelectionDialog.java
index 7d31e3e..92941dc 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/FileSelectionDialog.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/FileSelectionDialog.java
@@ -56,19 +56,16 @@
 		setInput(ResourcesPlugin.getWorkspace().getRoot());
 		setComparator(new ResourceComparator(ResourceComparator.NAME));
 
-		ISelectionStatusValidator validator = new ISelectionStatusValidator() {
-			@Override
-			public IStatus validate(Object[] selection) {
-				if (selection.length == 0) {
+		ISelectionStatusValidator validator = selection -> {
+			if (selection.length == 0) {
+				return new Status(IStatus.ERROR, AntUIPlugin.getUniqueIdentifier(), 0, IAntCoreConstants.EMPTY_STRING, null);
+			}
+			for (int i = 0; i < selection.length; i++) {
+				if (!(selection[i] instanceof IFile)) {
 					return new Status(IStatus.ERROR, AntUIPlugin.getUniqueIdentifier(), 0, IAntCoreConstants.EMPTY_STRING, null);
 				}
-				for (int i = 0; i < selection.length; i++) {
-					if (!(selection[i] instanceof IFile)) {
-						return new Status(IStatus.ERROR, AntUIPlugin.getUniqueIdentifier(), 0, IAntCoreConstants.EMPTY_STRING, null);
-					}
-				}
-				return new Status(IStatus.OK, AntUIPlugin.getUniqueIdentifier(), 0, IAntCoreConstants.EMPTY_STRING, null);
 			}
+			return new Status(IStatus.OK, AntUIPlugin.getUniqueIdentifier(), 0, IAntCoreConstants.EMPTY_STRING, null);
 		};
 		setValidator(validator);
 	}
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/AntView.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/AntView.java
index 63f7b3d..d803687 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/AntView.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/AntView.java
@@ -50,17 +50,12 @@
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;
-import org.eclipse.jface.action.IMenuListener;
 import org.eclipse.jface.action.IMenuManager;
 import org.eclipse.jface.action.IToolBarManager;
 import org.eclipse.jface.action.MenuManager;
 import org.eclipse.jface.action.Separator;
-import org.eclipse.jface.viewers.DoubleClickEvent;
-import org.eclipse.jface.viewers.IDoubleClickListener;
 import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
 import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.jface.viewers.Viewer;
@@ -202,12 +197,7 @@
 		Control menuControl = viewer.getControl();
 		MenuManager menuMgr = new MenuManager("#PopUp"); //$NON-NLS-1$
 		menuMgr.setRemoveAllWhenShown(true);
-		menuMgr.addMenuListener(new IMenuListener() {
-			@Override
-			public void menuAboutToShow(IMenuManager mgr) {
-				fillContextMenu(mgr);
-			}
-		});
+		menuMgr.addMenuListener(mgr -> fillContextMenu(mgr));
 		Menu menu = menuMgr.createContextMenu(menuControl);
 		menuControl.setMenu(menu);
 
@@ -305,19 +295,11 @@
 			}
 		});
 
-		projectViewer.addSelectionChangedListener(new ISelectionChangedListener() {
-			@Override
-			public void selectionChanged(SelectionChangedEvent event) {
-				handleSelectionChanged((IStructuredSelection) event.getSelection());
-			}
-		});
+		projectViewer.addSelectionChangedListener(event -> handleSelectionChanged((IStructuredSelection) event.getSelection()));
 
-		projectViewer.addDoubleClickListener(new IDoubleClickListener() {
-			@Override
-			public void doubleClick(DoubleClickEvent event) {
-				if (!event.getSelection().isEmpty()) {
-					handleProjectViewerDoubleClick();
-				}
+		projectViewer.addDoubleClickListener(event -> {
+			if (!event.getSelection().isEmpty()) {
+				handleProjectViewerDoubleClick();
 			}
 		});
 
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/actions/AddBuildFilesAction.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/actions/AddBuildFilesAction.java
index 4932f84..92093c8 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/actions/AddBuildFilesAction.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/actions/AddBuildFilesAction.java
@@ -26,9 +26,7 @@
 import org.eclipse.ant.internal.ui.preferences.FileSelectionDialog;
 import org.eclipse.ant.internal.ui.views.AntView;
 import org.eclipse.core.resources.IFile;
-import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jface.action.Action;
-import org.eclipse.jface.operation.IRunnableWithProgress;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.ui.PlatformUI;
 
@@ -61,19 +59,16 @@
 		}
 
 		try {
-			PlatformUI.getWorkbench().getProgressService().busyCursorWhile(new IRunnableWithProgress() {
-				@Override
-				public void run(IProgressMonitor monitor) {
-					monitor.beginTask(AntViewActionMessages.AddBuildFilesAction_3, result.length);
-					for (int i = 0; i < result.length && !monitor.isCanceled(); i++) {
-						Object file = result[i];
-						if (file instanceof IFile) {
-							String buildFileName = ((IFile) file).getFullPath().toString();
-							final AntProjectNode project = new AntProjectNodeProxy(buildFileName);
-							project.getName();
-							monitor.worked(1);
-							Display.getDefault().asyncExec(() -> view.addProject(project));
-						}
+			PlatformUI.getWorkbench().getProgressService().busyCursorWhile(monitor -> {
+				monitor.beginTask(AntViewActionMessages.AddBuildFilesAction_3, result.length);
+				for (int i = 0; i < result.length && !monitor.isCanceled(); i++) {
+					Object file = result[i];
+					if (file instanceof IFile) {
+						String buildFileName = ((IFile) file).getFullPath().toString();
+						final AntProjectNode project = new AntProjectNodeProxy(buildFileName);
+						project.getName();
+						monitor.worked(1);
+						Display.getDefault().asyncExec(() -> view.addProject(project));
 					}
 				}
 			});
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/actions/AntOpenWithMenu.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/actions/AntOpenWithMenu.java
index 7454e88..e68d0fb 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/actions/AntOpenWithMenu.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/actions/AntOpenWithMenu.java
@@ -15,7 +15,6 @@
 
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Comparator;
 import java.util.Hashtable;
 import java.util.List;
 import java.util.Map;
@@ -30,7 +29,6 @@
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.program.Program;
-import org.eclipse.swt.widgets.Event;
 import org.eclipse.swt.widgets.Listener;
 import org.eclipse.swt.widgets.Menu;
 import org.eclipse.swt.widgets.MenuItem;
@@ -149,18 +147,15 @@
 		if (image != null) {
 			menuItem.setImage(image);
 		}
-		Listener listener = new Listener() {
-			@Override
-			public void handleEvent(Event event) {
-				switch (event.type) {
-					case SWT.Selection:
-						if (menuItem.getSelection()) {
-							openEditor(descriptor);
-						}
-						break;
-					default:
-						break;
-				}
+		Listener listener = event -> {
+			switch (event.type) {
+				case SWT.Selection:
+					if (menuItem.getSelection()) {
+						openEditor(descriptor);
+					}
+					break;
+				default:
+					break;
 			}
 		};
 		menuItem.addListener(SWT.Selection, listener);
@@ -177,14 +172,11 @@
 		IEditorDescriptor preferredEditor = IDE.getDefaultEditor(fileResource); // may be null
 
 		IEditorDescriptor[] editors = fRegistry.getEditors(fileResource.getName());
-		Arrays.sort(editors, new Comparator<IEditorDescriptor>() {
-			@Override
-			public int compare(IEditorDescriptor o1, IEditorDescriptor o2) {
-				String s1 = o1.getLabel();
-				String s2 = o2.getLabel();
-				// Return true if elementTwo is 'greater than' elementOne
-				return s1.compareToIgnoreCase(s2);
-			}
+		Arrays.sort(editors, (o1, o2) -> {
+			String s1 = o1.getLabel();
+			String s2 = o2.getLabel();
+			// Return true if elementTwo is 'greater than' elementOne
+			return s1.compareToIgnoreCase(s2);
 		});
 		IEditorDescriptor antEditor = fRegistry.findEditor("org.eclipse.ant.internal.ui.editor.AntEditor"); //$NON-NLS-1$
 
@@ -257,25 +249,22 @@
 		menuItem.setSelection(IDE.getDefaultEditor(fileResource) == null);
 		menuItem.setText(AntViewActionMessages.AntViewOpenWithMenu_Default_Editor_4);
 
-		Listener listener = new Listener() {
-			@Override
-			public void handleEvent(Event event) {
-				switch (event.type) {
-					case SWT.Selection:
-						if (menuItem.getSelection()) {
-							IDE.setDefaultEditor(fileResource, null);
-							try {
-								IDE.openEditor(fPage, fileResource, true);
-							}
-							catch (PartInitException e) {
-								AntUIPlugin.log(MessageFormat.format(AntViewActionMessages.AntViewOpenWithMenu_Editor_failed, new Object[] {
-										fileResource.getLocation().toOSString() }), e);
-							}
+		Listener listener = event -> {
+			switch (event.type) {
+				case SWT.Selection:
+					if (menuItem.getSelection()) {
+						IDE.setDefaultEditor(fileResource, null);
+						try {
+							IDE.openEditor(fPage, fileResource, true);
 						}
-						break;
-					default:
-						break;
-				}
+						catch (PartInitException e) {
+							AntUIPlugin.log(MessageFormat.format(AntViewActionMessages.AntViewOpenWithMenu_Editor_failed, new Object[] {
+									fileResource.getLocation().toOSString() }), e);
+						}
+					}
+					break;
+				default:
+					break;
 			}
 		};
 
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/actions/RefreshBuildFilesAction.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/actions/RefreshBuildFilesAction.java
index c052688..b9c382f 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/actions/RefreshBuildFilesAction.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/actions/RefreshBuildFilesAction.java
@@ -25,9 +25,7 @@
 import org.eclipse.ant.internal.ui.model.AntProjectNodeProxy;
 import org.eclipse.ant.internal.ui.model.AntTargetNode;
 import org.eclipse.ant.internal.ui.views.AntView;
-import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jface.action.Action;
-import org.eclipse.jface.operation.IRunnableWithProgress;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.texteditor.IUpdate;
@@ -72,17 +70,14 @@
 		}
 
 		try {
-			PlatformUI.getWorkbench().getProgressService().busyCursorWhile(new IRunnableWithProgress() {
-				@Override
-				public void run(IProgressMonitor monitor) {
-					monitor.beginTask(AntViewActionMessages.RefreshBuildFilesAction_Refreshing_buildfiles_3, projects.size());
-					AntProjectNodeProxy project;
-					while (iter.hasNext()) {
-						project = (AntProjectNodeProxy) iter.next();
-						monitor.subTask(MessageFormat.format(AntViewActionMessages.RefreshBuildFilesAction_Refreshing__0__4, new Object[] { project.getBuildFileName() }));
-						project.parseBuildFile(true);
-						monitor.worked(1);
-					}
+			PlatformUI.getWorkbench().getProgressService().busyCursorWhile(monitor -> {
+				monitor.beginTask(AntViewActionMessages.RefreshBuildFilesAction_Refreshing_buildfiles_3, projects.size());
+				AntProjectNodeProxy project;
+				while (iter.hasNext()) {
+					project = (AntProjectNodeProxy) iter.next();
+					monitor.subTask(MessageFormat.format(AntViewActionMessages.RefreshBuildFilesAction_Refreshing__0__4, new Object[] { project.getBuildFileName() }));
+					project.parseBuildFile(true);
+					monitor.worked(1);
 				}
 			});
 		}
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/actions/SearchForBuildFilesDialog.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/actions/SearchForBuildFilesDialog.java
index dd33f74..bd56587 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/actions/SearchForBuildFilesDialog.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/actions/SearchForBuildFilesDialog.java
@@ -31,7 +31,6 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.jface.dialogs.IDialogSettings;
-import org.eclipse.jface.dialogs.IInputValidator;
 import org.eclipse.jface.dialogs.InputDialog;
 import org.eclipse.jface.window.Window;
 import org.eclipse.swt.SWT;
@@ -105,15 +104,12 @@
 	 * Creates a new dialog to search for build files.
 	 */
 	public SearchForBuildFilesDialog() {
-		super(Display.getCurrent().getActiveShell(), AntViewActionMessages.SearchForBuildFilesDialog_Search_for_Build_Files_1, AntViewActionMessages.SearchForBuildFilesDialog__Input, settings.get(IAntUIPreferenceConstants.ANTVIEW_LAST_SEARCH_STRING), new IInputValidator() {
-			@Override
-			public String isValid(String newText) {
-				String trimmedText = newText.trim();
-				if (trimmedText.length() == 0) {
-					return AntViewActionMessages.SearchForBuildFilesDialog_Build_name_cannot_be_empty_3;
-				}
-				return null;
+		super(Display.getCurrent().getActiveShell(), AntViewActionMessages.SearchForBuildFilesDialog_Search_for_Build_Files_1, AntViewActionMessages.SearchForBuildFilesDialog__Input, settings.get(IAntUIPreferenceConstants.ANTVIEW_LAST_SEARCH_STRING), newText -> {
+			String trimmedText = newText.trim();
+			if (trimmedText.length() == 0) {
+				return AntViewActionMessages.SearchForBuildFilesDialog_Build_name_cannot_be_empty_3;
 			}
+			return null;
 		});
 	}
 
