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 1d4fccc..cd49a48 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
@@ -920,7 +920,7 @@
 
 	private void createFoldingSupport(ProjectionViewer projectionViewer) {
 		fProjectionSupport = new ProjectionSupport(projectionViewer, getAnnotationAccess(), getSharedColors());
-		fProjectionSupport.setHoverControlCreator(shell -> new AntSourceViewerInformationControl(shell));
+		fProjectionSupport.setHoverControlCreator(AntSourceViewerInformationControl::new);
 		fProjectionSupport.install();
 		((ProjectionViewer) getViewer()).addProjectionListener(this);
 
diff --git a/ant/org.eclipse.ant.ui/Remote Ant Support/org/eclipse/ant/internal/ui/antsupport/inputhandler/SWTInputHandler.java b/ant/org.eclipse.ant.ui/Remote Ant Support/org/eclipse/ant/internal/ui/antsupport/inputhandler/SWTInputHandler.java
index 1a5de23..68fe296 100644
--- a/ant/org.eclipse.ant.ui/Remote Ant Support/org/eclipse/ant/internal/ui/antsupport/inputhandler/SWTInputHandler.java
+++ b/ant/org.eclipse.ant.ui/Remote Ant Support/org/eclipse/ant/internal/ui/antsupport/inputhandler/SWTInputHandler.java
@@ -20,8 +20,6 @@
 import org.apache.tools.ant.input.InputRequest;
 import org.apache.tools.ant.input.MultipleChoiceInputRequest;
 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.graphics.FontMetrics;
@@ -34,7 +32,6 @@
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Event;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Listener;
 import org.eclipse.swt.widgets.Shell;
@@ -67,22 +64,19 @@
 	}
 
 	protected Runnable getHandleInputRunnable(final BuildException[] problem) {
-		return new Runnable() {
-			@Override
-			public void run() {
-				String prompt;
-				if (fRequest instanceof MultipleChoiceInputRequest) {
-					prompt = fRequest.getPrompt();
-				} else {
-					prompt = getPrompt(fRequest);
-				}
-				String title = RemoteAntMessages.getString("SWTInputHandler.1"); //$NON-NLS-1$
-				boolean[] result = new boolean[1];
-				open(title, prompt, result);
+		return () -> {
+			String prompt;
+			if (fRequest instanceof MultipleChoiceInputRequest) {
+				prompt = fRequest.getPrompt();
+			} else {
+				prompt = getPrompt(fRequest);
+			}
+			String title = RemoteAntMessages.getString("SWTInputHandler.1"); //$NON-NLS-1$
+			boolean[] result = new boolean[1];
+			open(title, prompt, result);
 
-				if (!result[0]) {
-					problem[0] = new BuildException(RemoteAntMessages.getString("SWTInputHandler.2")); //$NON-NLS-1$
-				}
+			if (!result[0]) {
+				problem[0] = new BuildException(RemoteAntMessages.getString("SWTInputHandler.2")); //$NON-NLS-1$
 			}
 		};
 	}
@@ -134,12 +128,7 @@
 		} else {
 			fText = new Text(fDialog, SWT.SINGLE | SWT.BORDER);
 			fText.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL));
-			fText.addModifyListener(new ModifyListener() {
-				@Override
-				public void modifyText(ModifyEvent e) {
-					validateInput();
-				}
-			});
+			fText.addModifyListener(e -> validateInput());
 		}
 
 		String value = null;
@@ -217,12 +206,9 @@
 
 		Button cancel = new Button(parent, SWT.PUSH);
 		cancel.setText(RemoteAntMessages.getString("SWTInputHandler.5")); //$NON-NLS-1$
-		Listener listener = new Listener() {
-			@Override
-			public void handleEvent(Event event) {
-				result[0] = event.widget == fOkButton;
-				fDialog.close();
-			}
+		Listener listener = event -> {
+			result[0] = event.widget == fOkButton;
+			fDialog.close();
 		};
 		setButtonLayoutData(cancel);
 		fOkButton.addListener(SWT.Selection, listener);
