Bug 529935 - Modernize workbench addons bundle

* Lambda conversion.
* Remove redundant type information.

Change-Id: Ief0862d01fc503a5832ef9cd97dc36c83f2c6a2d
Signed-off-by: Alexander Kurtakov <akurtako@redhat.com>
diff --git a/bundles/org.eclipse.e4.ui.workbench.addons.swt/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.e4.ui.workbench.addons.swt/.settings/org.eclipse.jdt.core.prefs
index d71603a..3b4af1e 100644
--- a/bundles/org.eclipse.e4.ui.workbench.addons.swt/.settings/org.eclipse.jdt.core.prefs
+++ b/bundles/org.eclipse.e4.ui.workbench.addons.swt/.settings/org.eclipse.jdt.core.prefs
@@ -19,8 +19,11 @@
 org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
 org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
 org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
 org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
 org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
 org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
@@ -32,6 +35,7 @@
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.doc.comment.support=enabled
 org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
+org.eclipse.jdt.core.compiler.problem.APILeak=warning
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
@@ -80,20 +84,22 @@
 org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
 org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
 org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
 org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
 org.eclipse.jdt.core.compiler.problem.nullReference=error
 org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
 org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
 org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=error
 org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
 org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
 org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
 org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
 org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
-org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
-org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
 org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
@@ -102,12 +108,16 @@
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
 org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
 org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
 org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
 org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
 org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
 org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
 org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
 org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
+org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
 org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
 org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
 org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
diff --git a/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/cleanupaddon/CleanupAddon.java b/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/cleanupaddon/CleanupAddon.java
index 6280776..6f37dc6 100644
--- a/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/cleanupaddon/CleanupAddon.java
+++ b/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/cleanupaddon/CleanupAddon.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011, 2016 IBM Corporation and others.
+ * Copyright (c) 2011, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -85,62 +85,59 @@
 
 		// Stall the removal to handle cases where the container is only
 		// transiently empty
-		Display.getCurrent().asyncExec(new Runnable() {
-			@Override
-			public void run() {
-				// Remove it from the display if no visible children
-				int tbrCount = modelService.toBeRenderedCount(container);
+		Display.getCurrent().asyncExec(() -> {
+			// Remove it from the display if no visible children
+			int tbrCount = modelService.toBeRenderedCount(container);
 
-				// Cache the value since setting the TBR may change the
-				// result
-				boolean lastStack = isLastEditorStack(container);
-				if (tbrCount == 0 && !lastStack) {
+			// Cache the value since setting the TBR may change the
+			// result
+			boolean lastStack = isLastEditorStack(container);
+			if (tbrCount == 0 && !lastStack) {
+				container.setToBeRendered(false);
+			}
+
+			// Remove it from the model if it has no children at all
+			MElementContainer<?> lclContainer = container;
+			if (lclContainer.getChildren().size() == 0) {
+				MElementContainer<MUIElement> parent = container.getParent();
+				if (parent != null && !lastStack) {
 					container.setToBeRendered(false);
+					parent.getChildren().remove(container);
+				} else if (container instanceof MWindow) {
+					// Must be a Detached Window
+					MUIElement eParent = (MUIElement) ((EObject) container).eContainer();
+					if (eParent instanceof MPerspective) {
+						((MPerspective) eParent).getWindows().remove(container);
+					} else if (eParent instanceof MWindow) {
+						((MWindow) eParent).getWindows().remove(container);
+					}
 				}
+			} else if (container.getChildren().size() == 1 && container instanceof MPartSashContainer) {
+				// if a sash container has only one element then remove
+				// it and move
+				// its child up to where it used to be
+				MUIElement theChild = container.getChildren().get(0);
+				MElementContainer<MUIElement> parentContainer = container.getParent();
+				if (parentContainer != null) {
+					int index = parentContainer.getChildren().indexOf(container);
 
-				// Remove it from the model if it has no children at all
-				MElementContainer<?> lclContainer = container;
-				if (lclContainer.getChildren().size() == 0) {
-					MElementContainer<MUIElement> parent = container.getParent();
-					if (parent != null && !lastStack) {
-						container.setToBeRendered(false);
-						parent.getChildren().remove(container);
-					} else if (container instanceof MWindow) {
-						// Must be a Detached Window
-						MUIElement eParent = (MUIElement) ((EObject) container).eContainer();
-						if (eParent instanceof MPerspective) {
-							((MPerspective) eParent).getWindows().remove(container);
-						} else if (eParent instanceof MWindow) {
-							((MWindow) eParent).getWindows().remove(container);
+					// Magic check, are we unwrapping a sash container
+					if (theChild instanceof MPartSashContainer) {
+						if (container.getWidget() instanceof Composite) {
+							Composite theComp = (Composite) container.getWidget();
+							Object tmp = theChild.getWidget();
+							theChild.setWidget(theComp);
+							theComp.setLayout(new SashLayout(theComp, theChild));
+							theComp.setData(AbstractPartRenderer.OWNING_ME, theChild);
+							container.setWidget(tmp);
 						}
 					}
-				} else if (container.getChildren().size() == 1 && container instanceof MPartSashContainer) {
-					// if a sash container has only one element then remove
-					// it and move
-					// its child up to where it used to be
-					MUIElement theChild = container.getChildren().get(0);
-					MElementContainer<MUIElement> parentContainer = container.getParent();
-					if (parentContainer != null) {
-						int index = parentContainer.getChildren().indexOf(container);
 
-						// Magic check, are we unwrapping a sash container
-						if (theChild instanceof MPartSashContainer) {
-							if (container.getWidget() instanceof Composite) {
-								Composite theComp = (Composite) container.getWidget();
-								Object tmp = theChild.getWidget();
-								theChild.setWidget(theComp);
-								theComp.setLayout(new SashLayout(theComp, theChild));
-								theComp.setData(AbstractPartRenderer.OWNING_ME, theChild);
-								container.setWidget(tmp);
-							}
-						}
-
-						theChild.setContainerData(container.getContainerData());
-						container.getChildren().remove(theChild);
-						parentContainer.getChildren().add(index, theChild);
-						container.setToBeRendered(false);
-						parentContainer.getChildren().remove(container);
-					}
+					theChild.setContainerData(container.getContainerData());
+					container.getChildren().remove(theChild);
+					parentContainer.getChildren().add(index, theChild);
+					container.setToBeRendered(false);
+					parentContainer.getChildren().remove(container);
 				}
 			}
 		});
@@ -329,13 +326,10 @@
 				// model)
 				final MElementContainer<MUIElement> theContainer = container;
 				if (visCount == 0) {
-					Display.getCurrent().asyncExec(new Runnable() {
-						@Override
-						public void run() {
-							int visCount = modelService.countRenderableChildren(theContainer);
-							if (!isLastEditorStack(theContainer) && visCount == 0) {
-								theContainer.setToBeRendered(false);
-							}
+				Display.getCurrent().asyncExec(() -> {
+					int visCount1 = modelService.countRenderableChildren(theContainer);
+					if (!isLastEditorStack(theContainer) && visCount1 == 0) {
+						theContainer.setToBeRendered(false);
 						}
 					});
 				} else {
diff --git a/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/dndaddon/DnDManager.java b/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/dndaddon/DnDManager.java
index 4540bb0..c98e112 100644
--- a/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/dndaddon/DnDManager.java
+++ b/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/dndaddon/DnDManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010, 2015 IBM Corporation and others.
+ * Copyright (c) 2010, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -27,14 +27,9 @@
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.CTabFolder;
 import org.eclipse.swt.custom.CTabItem;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.events.DragDetectEvent;
 import org.eclipse.swt.events.DragDetectListener;
 import org.eclipse.swt.events.KeyEvent;
 import org.eclipse.swt.events.KeyListener;
-import org.eclipse.swt.events.PaintEvent;
-import org.eclipse.swt.events.PaintListener;
 import org.eclipse.swt.graphics.Cursor;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.graphics.Rectangle;
@@ -43,8 +38,6 @@
 import org.eclipse.swt.layout.FillLayout;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Listener;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Tracker;
 import org.osgi.service.event.EventHandler;
@@ -57,8 +50,8 @@
 	public static final int SIMPLE = 3;
 	private int feedbackStyle = SIMPLE;
 
-	Collection<DragAgent> dragAgents = new ArrayList<DragAgent>();
-	Collection<DropAgent> dropAgents = new ArrayList<DropAgent>();
+	Collection<DragAgent> dragAgents = new ArrayList<>();
+	Collection<DropAgent> dropAgents = new ArrayList<>();
 
 	DnDInfo info;
 	DragAgent dragAgent;
@@ -72,25 +65,22 @@
 	boolean dragging = false;
 
 	private Shell overlayFrame;
-	private List<Rectangle> frames = new ArrayList<Rectangle>();
+	private List<Rectangle> frames = new ArrayList<>();
 
-	DragDetectListener dragDetector = new DragDetectListener() {
-		@Override
-		public void dragDetected(DragDetectEvent e) {
-			if (dragging || e.widget.isDisposed()) {
-				return;
-			}
+	DragDetectListener dragDetector = e -> {
+		if (dragging || e.widget.isDisposed()) {
+			return;
+		}
 
-			info.update(e);
-			dragAgent = getDragAgent(info);
-			if (dragAgent != null) {
-				try {
-					dragging = true;
-					isModified = (e.stateMask & SWT.MOD1) != 0;
-					startDrag();
-				} finally {
-					dragging = false;
-				}
+		info.update(e);
+		dragAgent = getDragAgent(info);
+		if (dragAgent != null) {
+			try {
+				dragging = true;
+				isModified = (e.stateMask & SWT.MOD1) != 0;
+				startDrag();
+			} finally {
+				dragging = false;
 			}
 		}
 	};
@@ -100,8 +90,8 @@
 		updateOverlay();
 	}
 
-	private List<Image> images = new ArrayList<Image>();
-	private List<Rectangle> imageRects = new ArrayList<Rectangle>();
+	private List<Image> images = new ArrayList<>();
+	private List<Rectangle> imageRects = new ArrayList<>();
 
 	protected boolean isModified;
 
@@ -129,12 +119,7 @@
 		// Register a 'dragDetect' against any stacks that get created
 		hookWidgets();
 
-		getDragShell().addDisposeListener(new DisposeListener() {
-			@Override
-			public void widgetDisposed(DisposeEvent e) {
-				dispose();
-			}
-		});
+		getDragShell().addDisposeListener(e -> dispose());
 	}
 
 	/**
@@ -142,26 +127,22 @@
 	 * specific platform by moving this code into an SWT-specific subclass
 	 */
 	private void hookWidgets() {
-		EventHandler stackWidgetHandler = new EventHandler() {
-			@Override
-			public void handleEvent(org.osgi.service.event.Event event) {
-				MUIElement element = (MUIElement) event.getProperty(UIEvents.EventTags.ELEMENT);
+		EventHandler stackWidgetHandler = event -> {
+			MUIElement element = (MUIElement) event.getProperty(UIEvents.EventTags.ELEMENT);
 
-				// Only add listeners for stacks in *this* window
-				MWindow elementWin = getModelService().getTopLevelWindowFor(element);
-				if (elementWin != dragWindow) {
-					return;
-				}
+			// Only add listeners for stacks in *this* window
+			MWindow elementWin = getModelService().getTopLevelWindowFor(element);
+			if (elementWin != dragWindow) {
+				return;
+			}
 
-				// Listen for drags starting in CTabFolders
-				if (element.getWidget() instanceof CTabFolder
-						|| element.getWidget() instanceof ImageBasedFrame) {
-					Control ctrl = (Control) element.getWidget();
+			// Listen for drags starting in CTabFolders
+			if (element.getWidget() instanceof CTabFolder || element.getWidget() instanceof ImageBasedFrame) {
+				Control ctrl = (Control) element.getWidget();
 
-					// Ensure there's only one drag detect listener per ctrl
-					ctrl.removeDragDetectListener(dragDetector);
-					ctrl.addDragDetectListener(dragDetector);
-				}
+				// Ensure there's only one drag detect listener per ctrl
+				ctrl.removeDragDetectListener(dragDetector);
+				ctrl.addDragDetectListener(dragDetector);
 			}
 		};
 
@@ -198,15 +179,12 @@
 	}
 
 	private void track() {
-		Display.getCurrent().syncExec(new Runnable() {
-			@Override
-			public void run() {
-				info.update();
-				dragAgent.track(info);
+		Display.getCurrent().syncExec(() -> {
+			info.update();
+			dragAgent.track(info);
 
-				// Hack: Spin the event loop
-				update();
-			}
+			// Hack: Spin the event loop
+			update();
 		});
 	}
 
@@ -234,12 +212,7 @@
 			}
 		});
 
-		tracker.addListener(SWT.Move, new Listener() {
-			@Override
-			public void handleEvent(final Event event) {
-				track();
-			}
-		});
+		tracker.addListener(SWT.Move, event -> track());
 
 		// Some control needs to capture the mouse during the drag or
 		// other controls will interfere with the cursor
@@ -419,14 +392,11 @@
 			stylingEngine.setClassname(overlayFrame, "DragFeedback"); //$NON-NLS-1$
 			stylingEngine.style(overlayFrame);
 
-			overlayFrame.addPaintListener(new PaintListener() {
-				@Override
-				public void paintControl(PaintEvent e) {
-					for (int i = 0; i < images.size(); i++) {
-						Image image = images.get(i);
-						Rectangle iRect = imageRects.get(i);
-						e.gc.drawImage(image, iRect.x, iRect.y);
-					}
+			overlayFrame.addPaintListener(e -> {
+				for (int i = 0; i < images.size(); i++) {
+					Image image = images.get(i);
+					Rectangle iRect = imageRects.get(i);
+					e.gc.drawImage(image, iRect.x, iRect.y);
 				}
 			});
 		}
@@ -476,13 +446,9 @@
 	}
 
 	private void addResourceDisposeListener(Control control, final Resource resource) {
-		control.addDisposeListener(new DisposeListener() {
-
-			@Override
-			public void widgetDisposed(DisposeEvent e) {
-				if (!resource.isDisposed()) {
-					resource.dispose();
-				}
+		control.addDisposeListener(e -> {
+			if (!resource.isDisposed()) {
+				resource.dispose();
 			}
 		});
 	}
diff --git a/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/dndaddon/Overlay.java b/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/dndaddon/Overlay.java
index 94fd6c3..acf069e 100644
--- a/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/dndaddon/Overlay.java
+++ b/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/dndaddon/Overlay.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2013, 2014 IBM Corporation and others.
+ * Copyright (c) 2013, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,8 +13,6 @@
 import java.util.ArrayList;
 import java.util.List;
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.PaintEvent;
-import org.eclipse.swt.events.PaintListener;
 import org.eclipse.swt.graphics.Color;
 import org.eclipse.swt.graphics.GC;
 import org.eclipse.swt.graphics.Rectangle;
@@ -82,7 +80,7 @@
 		}
 	}
 
-	List<Adornment> adornments = new ArrayList<Adornment>();
+	List<Adornment> adornments = new ArrayList<>();
 
 	public void addAdornment(Adornment a) {
 		adornments.add(a);
@@ -126,14 +124,11 @@
 		overlayShell.setAlpha(128);
 
 		blue = new Color(baseShell.getDisplay(), 0, 0, 128);
-		overlayShell.addPaintListener(new PaintListener() {
-			@Override
-			public void paintControl(PaintEvent e) {
-				e.gc.setForeground(blue);
-				e.gc.setBackground(blue);
-				for (Adornment adornment : adornments) {
-					adornment.drawAdornment(e.gc);
-				}
+		overlayShell.addPaintListener(e -> {
+			e.gc.setForeground(blue);
+			e.gc.setBackground(blue);
+			for (Adornment adornment : adornments) {
+				adornment.drawAdornment(e.gc);
 			}
 		});
 	}
diff --git a/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/dndaddon/SplitDropAgent2.java b/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/dndaddon/SplitDropAgent2.java
index 4fafd2b..bf0f6295 100644
--- a/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/dndaddon/SplitDropAgent2.java
+++ b/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/dndaddon/SplitDropAgent2.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010, 2015 IBM Corporation and others.
+ * Copyright (c) 2010, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,11 +8,9 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  ******************************************************************************/
-
 package org.eclipse.e4.ui.workbench.addons.dndaddon;
 
 import java.util.List;
-import org.eclipse.e4.ui.model.application.MApplicationElement;
 import org.eclipse.e4.ui.model.application.ui.MUIElement;
 import org.eclipse.e4.ui.model.application.ui.advanced.MArea;
 import org.eclipse.e4.ui.model.application.ui.advanced.MPerspective;
@@ -22,7 +20,6 @@
 import org.eclipse.e4.ui.model.application.ui.basic.MWindow;
 import org.eclipse.e4.ui.model.application.ui.basic.impl.BasicFactoryImpl;
 import org.eclipse.e4.ui.workbench.IPresentationEngine;
-import org.eclipse.e4.ui.workbench.Selector;
 import org.eclipse.e4.ui.workbench.modeling.EModelService;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.CTabFolder;
@@ -108,49 +105,46 @@
 		// Collect up the elements we can be split 'relative to'
 		final EModelService ms = dndManager.getModelService();
 		List<MPartStack> stacks = ms.findElements(ms.getTopLevelWindowFor(dragElement),
-				MPartStack.class, EModelService.PRESENTATION, new Selector() {
-					@Override
-					public boolean select(MApplicationElement element) {
-						MPartStack stack = (MPartStack) element;
+				MPartStack.class, EModelService.PRESENTATION, element -> {
+					MPartStack stack = (MPartStack) element;
 
-						// Has to be visible...
-						if (!stack.isVisible() || !(stack.getWidget() instanceof CTabFolder)) {
-							return false;
-						}
-
-						// ...not disposed...
-						CTabFolder ctf = (CTabFolder) stack.getWidget();
-						if (ctf.isDisposed()) {
-							return false;
-						}
-
-						// ...and in the shell the cursor is over
-						if (!isInCursorShell(info, ctf)) {
-							return false;
-						}
-
-						// ...and the cursor must be in the CTF's client area
-						Rectangle bb = ctf.getClientArea();
-						bb = ctf.getDisplay().map(ctf, null, bb);
-						if (!bb.contains(info.cursorPos)) {
-							return false;
-						}
-
-						// Can't split with ourselves if we're dragging a stack
-						if (dragElement instanceof MPartStack && stack == dragElement) {
-							return false;
-						}
-
-						// Can't split with ourselves if we're dragging the only visible element in
-						// a stack
-						MUIElement deParent = dragElement.getParent();
-						if (dragElement instanceof MStackElement && stack == deParent
-								&& ms.countRenderableChildren(deParent) == 1) {
-							return false;
-						}
-
-						return true;
+					// Has to be visible...
+					if (!stack.isVisible() || !(stack.getWidget() instanceof CTabFolder)) {
+						return false;
 					}
+
+					// ...not disposed...
+					CTabFolder ctf = (CTabFolder) stack.getWidget();
+					if (ctf.isDisposed()) {
+						return false;
+					}
+
+					// ...and in the shell the cursor is over
+					if (!isInCursorShell(info, ctf)) {
+						return false;
+					}
+
+					// ...and the cursor must be in the CTF's client area
+					Rectangle bb = ctf.getClientArea();
+					bb = ctf.getDisplay().map(ctf, null, bb);
+					if (!bb.contains(info.cursorPos)) {
+						return false;
+					}
+
+					// Can't split with ourselves if we're dragging a stack
+					if (dragElement instanceof MPartStack && stack == dragElement) {
+						return false;
+					}
+
+					// Can't split with ourselves if we're dragging the only visible element in
+					// a stack
+					MUIElement deParent = dragElement.getParent();
+					if (dragElement instanceof MStackElement && stack == deParent
+							&& ms.countRenderableChildren(deParent) == 1) {
+						return false;
+					}
+
+					return true;
 				});
 
 		if (stacks.size() > 0) {
diff --git a/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/dndaddon/SplitFeedbackOverlay.java b/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/dndaddon/SplitFeedbackOverlay.java
index a0330e3..27b7a2c 100644
--- a/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/dndaddon/SplitFeedbackOverlay.java
+++ b/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/dndaddon/SplitFeedbackOverlay.java
@@ -1,5 +1,5 @@
 /*******************************************************************************

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

+ * Copyright (c) 2013, 2018 IBM Corporation and others.

  * All rights reserved. This program and the accompanying materials

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

  * which accompanies this distribution, and is available at

@@ -29,7 +29,7 @@
 	private int curSide = 0;

 	private float ratio;

 

-	private List<Rectangle> rects = new ArrayList<Rectangle>();

+	private List<Rectangle> rects = new ArrayList<>();

 	private Rectangle outerRect;

 

 	Boolean isModified = null;

diff --git a/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/dndaddon/StackDropAgent.java b/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/dndaddon/StackDropAgent.java
index f321cf3..08c5247 100644
--- a/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/dndaddon/StackDropAgent.java
+++ b/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/dndaddon/StackDropAgent.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010, 2016 IBM Corporation and others.
+ * Copyright (c) 2010, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -129,7 +129,7 @@
 	private static ArrayList<Rectangle> getItemRects(CTabFolder dropCTF, List<CTabItem> visibleItems,
 			Rectangle tabArea) {
 		// for dropping, we consider visible tab only
-		ArrayList<Rectangle> itemRects = new ArrayList<Rectangle>();
+		ArrayList<Rectangle> itemRects = new ArrayList<>();
 		CTabItem item;
 		if (visibleItems.size() > 0) {
 			// First rect is from left to the center of the item
diff --git a/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/minmax/MinMaxAddon.java b/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/minmax/MinMaxAddon.java
index 0403d2f..a789d2b 100644
--- a/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/minmax/MinMaxAddon.java
+++ b/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/minmax/MinMaxAddon.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011, 2014, 2015, 2016 IBM Corporation and others.
+ * Copyright (c) 2011, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -46,6 +46,7 @@
 import org.eclipse.swt.custom.CTabFolder;
 import org.eclipse.swt.custom.CTabFolder2Adapter;
 import org.eclipse.swt.custom.CTabFolderEvent;
+import org.eclipse.swt.events.MouseAdapter;
 import org.eclipse.swt.events.MouseEvent;
 import org.eclipse.swt.events.MouseListener;
 import org.eclipse.swt.graphics.Rectangle;
@@ -127,11 +128,7 @@
 		}
 	};
 
-	private MouseListener CTFDblClickListener = new MouseListener() {
-		@Override
-		public void mouseUp(MouseEvent e) {
-		}
-
+	private MouseListener CTFDblClickListener = new MouseAdapter() {
 		@Override
 		public void mouseDown(MouseEvent e) {
 			// HACK! If this is an empty stack treat it as though it was the editor area
@@ -274,7 +271,7 @@
 				MTrimBar bar = modelService.getTrim((MTrimmedWindow) window, SideValue.TOP);
 
 				// gather up any minimized stacks for this perspective...
-				List<MToolControl> toRemove = new ArrayList<MToolControl>();
+				List<MToolControl> toRemove = new ArrayList<>();
 				for (MUIElement child : bar.getChildren()) {
 					String trimElementId = child.getElementId();
 					if (child instanceof MToolControl && trimElementId.contains(perspectiveId)) {
@@ -313,7 +310,7 @@
 
 		final MPerspective curPersp = ps.getSelectedElement();
 		if (curPersp != null) {
-			List<String> tags = new ArrayList<String>();
+			List<String> tags = new ArrayList<>();
 			tags.add(IPresentationEngine.MINIMIZED);
 
 			List<MUIElement> minimizedElements = modelService.findElements(curPersp, null,
@@ -348,12 +345,9 @@
 		}
 
 		final Shell winShell = (Shell) window.getWidget();
-		winShell.getDisplay().asyncExec(new Runnable() {
-			@Override
-			public void run() {
-				if (!winShell.isDisposed()) {
-					winShell.layout(true, true);
-				}
+		winShell.getDisplay().asyncExec(() -> {
+			if (!winShell.isDisposed()) {
+				winShell.layout(true, true);
 			}
 		});
 	}
@@ -657,7 +651,7 @@
 
 		adjustCTFButtons(element);
 
-		List<String> maximizeTag = new ArrayList<String>();
+		List<String> maximizeTag = new ArrayList<>();
 		maximizeTag.add(IPresentationEngine.MAXIMIZED);
 		List<MUIElement> curMax = modelService.findElements(window, null, MUIElement.class,
 				maximizeTag, EModelService.PRESENTATION);
@@ -725,7 +719,7 @@
 		MWindow win = MinMaxAddonUtil.getWindowFor(element);
 		MPerspective persp = modelService.getActivePerspective(win);
 
-		List<MUIElement> elementsToMinimize = new ArrayList<MUIElement>();
+		List<MUIElement> elementsToMinimize = new ArrayList<>();
 		int loc = modelService.getElementLocation(element);
 		if ((loc & EModelService.OUTSIDE_PERSPECTIVE) != 0) {
 			// Minimize all other global stacks
@@ -766,7 +760,7 @@
 					EModelService.PRESENTATION, false);
 			elementsToMinimize.addAll(partStacksToMinimize);
 			// Find any 'standalone' views *not* in a stack
-			List<String> standaloneTag = new ArrayList<String>();
+			List<String> standaloneTag = new ArrayList<>();
 			standaloneTag.add(IPresentationEngine.STANDALONE);
 			List<MPlaceholder> standaloneViews = modelService.findElements(persp == null ? win
 					: persp, null, MPlaceholder.class, standaloneTag, EModelService.PRESENTATION);
@@ -817,7 +811,7 @@
 	private <T extends MUIElement> List<T> findValidElementsToMinimize(
 			MUIElement elementToMaximize, MWindow currentWindow, MUIElement searchRoot, String id,
 			Class<T> clazz, int searchFlag, boolean allowSharedArea) {
-		List<T> elementsToMinimize = new ArrayList<T>();
+		List<T> elementsToMinimize = new ArrayList<>();
 		List<T> elements = modelService.findElements(searchRoot, id, clazz, null, searchFlag);
 		for (T element : elements) {
 			if (element == elementToMaximize || !element.isToBeRendered()) {
@@ -848,7 +842,7 @@
 	 */
 	private void restoreMaximizedElement(final MUIElement element, MWindow win) {
 		MPerspective elePersp = modelService.getPerspectiveFor(element);
-		List<String> maxTag = new ArrayList<String>();
+		List<String> maxTag = new ArrayList<>();
 		maxTag.add(MAXIMIZED);
 		List<MUIElement> curMax = modelService.findElements(win, null, MUIElement.class, maxTag);
 		if (curMax.size() > 0) {
@@ -911,9 +905,9 @@
 		MWindow win = MinMaxAddonUtil.getWindowFor(element);
 		MPerspective persp = modelService.getActivePerspective(win);
 
-		List<MUIElement> elementsToRestore = new ArrayList<MUIElement>();
+		List<MUIElement> elementsToRestore = new ArrayList<>();
 
-		List<String> minTag = new ArrayList<String>();
+		List<String> minTag = new ArrayList<>();
 		minTag.add(IPresentationEngine.MINIMIZED_BY_ZOOM);
 
 		// Restore any minimized stacks
diff --git a/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/minmax/MinMaxAddonUtil.java b/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/minmax/MinMaxAddonUtil.java
index 34b3de4..a752bfd 100644
--- a/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/minmax/MinMaxAddonUtil.java
+++ b/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/minmax/MinMaxAddonUtil.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2016 IBM Corporation and others.
+ * Copyright (c) 2016, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -114,7 +114,7 @@
 			List<MUIElement> curMax) {
 		if (element instanceof MPlaceholder
 				&& ((MPlaceholder) element).getRef().getTags().contains(MIN_MAXIMIZEABLE_CHILDREN_AREA_TAG)) {
-			Set<MUIElement> toRemove = new LinkedHashSet<MUIElement>();
+			Set<MUIElement> toRemove = new LinkedHashSet<>();
 			for (MUIElement maxElement : curMax) {
 				if (modelService.find(maxElement.getElementId(), element) != null) {
 					toRemove.add(maxElement);
@@ -185,14 +185,10 @@
 				final List<MPartStack> maximizedAreaChildren = minMaxAddon.modelService.findElements(area, null,
 						MPartStack.class,
 						maximizeTag);
-				minMaxAddon.executeWithIgnoredTagChanges(new Runnable() {
-
-					@Override
-					public void run() {
-						for (MPartStack partStack : maximizedAreaChildren) {
-							partStack.getTags().remove(IPresentationEngine.MAXIMIZED);
-							minMaxAddon.adjustCTFButtons(partStack);
-						}
+				minMaxAddon.executeWithIgnoredTagChanges(() -> {
+					for (MPartStack partStack : maximizedAreaChildren) {
+						partStack.getTags().remove(IPresentationEngine.MAXIMIZED);
+						minMaxAddon.adjustCTFButtons(partStack);
 					}
 				});
 			}
@@ -213,13 +209,8 @@
 			MArea area = getAreaFor((MPartStack) element);
 			if (area != null && area.getTags().contains(MIN_MAXIMIZEABLE_CHILDREN_AREA_TAG)) {
 				final MPlaceholder placeholder = area.getCurSharedRef();
-				minMaxAddon.executeWithIgnoredTagChanges(new Runnable() {
-
-					@Override
-					public void run() {
-						placeholder.getTags().add(IPresentationEngine.MAXIMIZED);
-					}
-				});
+				minMaxAddon
+						.executeWithIgnoredTagChanges(() -> placeholder.getTags().add(IPresentationEngine.MAXIMIZED));
 				minMaxAddon.adjustCTFButtons(placeholder);
 			}
 		}
@@ -269,7 +260,7 @@
 			}
 		}
 		if (foundRelevantArea) {
-			List<MUIElement> elementsToRemove = new ArrayList<MUIElement>();
+			List<MUIElement> elementsToRemove = new ArrayList<>();
 			for (MUIElement elementMUI : elementsToMinimize) {
 				List<Object> findElements = modelService.findElements(elementMUI, element.getElementId(),
 						null, null);
@@ -295,13 +286,8 @@
 			MArea area = getAreaFor((MPartStack) element);
 			if (area != null && area.getTags().contains(MIN_MAXIMIZEABLE_CHILDREN_AREA_TAG)) {
 				final MPlaceholder placeholder = area.getCurSharedRef();
-				minMaxAddon.executeWithIgnoredTagChanges(new Runnable() {
-
-					@Override
-					public void run() {
-						placeholder.getTags().remove(IPresentationEngine.MAXIMIZED);
-					}
-				});
+				minMaxAddon.executeWithIgnoredTagChanges(
+						() -> placeholder.getTags().remove(IPresentationEngine.MAXIMIZED));
 				minMaxAddon.adjustCTFButtons(placeholder);
 			}
 		}
diff --git a/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/minmax/TrimPaneLayout.java b/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/minmax/TrimPaneLayout.java
index 2c7119c..eba8398 100644
--- a/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/minmax/TrimPaneLayout.java
+++ b/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/minmax/TrimPaneLayout.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010, 2015 IBM Corporation and others.
+ * Copyright (c) 2010, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,9 +13,8 @@
 
 import org.eclipse.e4.ui.model.application.ui.menu.MToolControl;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.MouseAdapter;
 import org.eclipse.swt.events.MouseEvent;
-import org.eclipse.swt.events.MouseListener;
-import org.eclipse.swt.events.MouseMoveListener;
 import org.eclipse.swt.events.MouseTrackListener;
 import org.eclipse.swt.graphics.Point;
 import org.eclipse.swt.graphics.Rectangle;
@@ -117,23 +116,20 @@
 			return;
 		}
 
-		composite.addMouseMoveListener(new MouseMoveListener() {
-			@Override
-			public void mouseMove(MouseEvent e) {
-				Point p = e.display.getCursorLocation();
-				if (trackState == NOT_SIZING) {
-					setCursor(composite, new Point(e.x, e.y));
-				} else if (trackState == HORIZONTAL_SIZING) {
-					dragHorizontal(composite, p);
-				} else if (trackState == VERTICAL_SIZING) {
-					dragVertical(composite, p);
-				} else if (trackState == CORNER_SIZING) {
-					dragCorner(composite, p);
-				}
+		composite.addMouseMoveListener(e -> {
+			Point p = e.display.getCursorLocation();
+			if (trackState == NOT_SIZING) {
+				setCursor(composite, new Point(e.x, e.y));
+			} else if (trackState == HORIZONTAL_SIZING) {
+				dragHorizontal(composite, p);
+			} else if (trackState == VERTICAL_SIZING) {
+				dragVertical(composite, p);
+			} else if (trackState == CORNER_SIZING) {
+				dragCorner(composite, p);
 			}
 		});
 
-		composite.addMouseListener(new MouseListener() {
+		composite.addMouseListener(new MouseAdapter() {
 
 			@Override
 			public void mouseUp(MouseEvent e) {
@@ -166,27 +162,12 @@
 					composite.setCapture(true);
 				}
 			}
-
-			@Override
-			public void mouseDoubleClick(MouseEvent e) {
-			}
 		});
 
-		composite.addMouseTrackListener(new MouseTrackListener() {
-			@Override
-			public void mouseHover(MouseEvent e) {
-			}
-
-			@Override
-			public void mouseExit(MouseEvent e) {
-				Composite comp = (Composite) e.widget;
-				comp.setCursor(null);
-			}
-
-			@Override
-			public void mouseEnter(MouseEvent e) {
-			}
-		});
+		composite.addMouseTrackListener(MouseTrackListener.mouseExitAdapter(e -> {
+			Composite comp = (Composite) e.widget;
+			comp.setCursor(null);
+		}));
 
 		resizeInstalled = true;
 	}
diff --git a/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/minmax/TrimStack.java b/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/minmax/TrimStack.java
index 89ca6cc..22dd5fe 100644
--- a/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/minmax/TrimStack.java
+++ b/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/minmax/TrimStack.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010, 2016 IBM Corporation and others.
+ * Copyright (c) 2010, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -53,11 +53,9 @@
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.CTabFolder;
+import org.eclipse.swt.events.ControlAdapter;
 import org.eclipse.swt.events.ControlEvent;
 import org.eclipse.swt.events.ControlListener;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.events.SelectionListener;
 import org.eclipse.swt.graphics.Image;
@@ -65,7 +63,6 @@
 import org.eclipse.swt.graphics.Rectangle;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Event;
 import org.eclipse.swt.widgets.Listener;
 import org.eclipse.swt.widgets.Menu;
 import org.eclipse.swt.widgets.MenuItem;
@@ -121,31 +118,17 @@
 	/**
 	 * A map of created images from a part's icon URI path.
 	 */
-	private Map<String, Image> imageMap = new HashMap<String, Image>();
+	private Map<String, Image> imageMap = new HashMap<>();
 
-	ControlListener caResizeListener = new ControlListener() {
+	ControlListener caResizeListener = new ControlAdapter() {
 		@Override
 		public void controlResized(ControlEvent e) {
 			if (hostPane != null && hostPane.isVisible()) {
 				setPaneLocation();
 			}
 		}
-
-		@Override
-		public void controlMoved(ControlEvent e) {
-		}
 	};
 
-	// Listens to ESC and closes the active fast view
-	private Listener escapeListener = new Listener() {
-		@Override
-		public void handleEvent(Event event) {
-			if (event.character == SWT.ESC) {
-				showStack(false);
-				partService.requestActivation();
-			}
-		}
-	};
 
 	@Inject
 	EModelService modelService;
@@ -162,6 +145,14 @@
 	@Inject
 	protected IEventBroker eventBroker;
 
+	// Listens to ESC and closes the active fast view
+	private Listener escapeListener = event -> {
+		if (event.character == SWT.ESC) {
+			showStack(false);
+			partService.requestActivation();
+		}
+	};
+
 	@Inject
 	@Optional
 	private void subscribeTopicTagsChanged(
@@ -277,46 +268,38 @@
 	 * by handleTransientDataEvents() and described in the article at
 	 * http://wiki.eclipse.org/Eclipse4/RCP/Event_Model
 	 */
-	private EventHandler closeHandler = new EventHandler() {
-		@Override
-		public void handleEvent(org.osgi.service.event.Event event) {
-			if (!isShowing) {
-				return;
-			}
+	private EventHandler closeHandler = event -> {
+		if (!isShowing) {
+			return;
+		}
 
-			// The only time we don't close is if I've selected my tab.
-			MUIElement changedElement = (MUIElement) event.getProperty(UIEvents.EventTags.ELEMENT);
+		// The only time we don't close is if I've selected my tab.
+		MUIElement changedElement = (MUIElement) event.getProperty(UIEvents.EventTags.ELEMENT);
 
-			// Perspective changed, close the visible stacks
-			if (changedElement instanceof MPerspectiveStack) {
-				showStack(false);
-				return;
-			}
+		// Perspective changed, close the visible stacks
+		if (changedElement instanceof MPerspectiveStack) {
+			showStack(false);
+			return;
+		}
 
-			if (changedElement instanceof MCompositePart) {
-				MPart innerPart = getLeafPart(changedElement);
-				if (innerPart != null) {
-					fixToolItemSelection();
-					return;
-				}
-			}
-
-			if (changedElement == getLeafPart(minimizedElement)) {
+		if (changedElement instanceof MCompositePart) {
+			MPart innerPart = getLeafPart(changedElement);
+			if (innerPart != null) {
 				fixToolItemSelection();
 				return;
 			}
-
-			showStack(false);
 		}
+
+		if (changedElement == getLeafPart(minimizedElement)) {
+			fixToolItemSelection();
+			return;
+		}
+
+		showStack(false);
 	};
 
 	// Close any open stacks before shutting down
-	private EventHandler shutdownHandler = new EventHandler() {
-		@Override
-		public void handleEvent(org.osgi.service.event.Event event) {
-			showStack(false);
-		}
-	};
+	private EventHandler shutdownHandler = event -> showStack(false);
 
 	private void fixToolItemSelection() {
 		if (trimStackTB == null || trimStackTB.isDisposed()) {
@@ -386,43 +369,64 @@
 	 * by handleTransientDataEvents() and described in the article at
 	 * http://wiki.eclipse.org/Eclipse4/RCP/Event_Model
 	 */
-	private EventHandler openHandler = new EventHandler() {
-		@Override
-		public void handleEvent(org.osgi.service.event.Event event) {
-			if (isShowing) {
-				return;
-			}
+	private EventHandler openHandler = event -> {
+		if (isShowing) {
+			return;
+		}
 
-			MUIElement changedElement = (MUIElement) event.getProperty(UIEvents.EventTags.ELEMENT);
+		MUIElement changedElement = (MUIElement) event.getProperty(UIEvents.EventTags.ELEMENT);
 
-			// Open if shared area
-			if (getLeafPart(minimizedElement) == changedElement
-					&& !(minimizedElement instanceof MPerspectiveStack)) {
-				showStack(true);
-				return;
-			}
-
-			MUIElement selectedElement = null;
-
-			if (minimizedElement instanceof MPlaceholder) {
-				selectedElement = ((MPlaceholder) minimizedElement).getRef();
-			} else if (minimizedElement instanceof MPartStack) {
-				selectedElement = ((MPartStack) minimizedElement).getSelectedElement();
-			}
-
-			if (selectedElement == null) {
-				return;
-			}
-
-			if (selectedElement instanceof MPlaceholder) {
-				selectedElement = ((MPlaceholder) selectedElement).getRef();
-			}
-
-			if (changedElement != selectedElement) {
-				return;
-			}
-
+		// Open if shared area
+		if (getLeafPart(minimizedElement) == changedElement && !(minimizedElement instanceof MPerspectiveStack)) {
 			showStack(true);
+			return;
+		}
+
+		MUIElement selectedElement = null;
+
+		if (minimizedElement instanceof MPlaceholder) {
+			selectedElement = ((MPlaceholder) minimizedElement).getRef();
+		} else if (minimizedElement instanceof MPartStack) {
+			selectedElement = ((MPartStack) minimizedElement).getSelectedElement();
+		}
+
+		if (selectedElement == null) {
+			return;
+		}
+
+		if (selectedElement instanceof MPlaceholder) {
+			selectedElement = ((MPlaceholder) selectedElement).getRef();
+		}
+
+		if (changedElement != selectedElement) {
+			return;
+		}
+
+		showStack(true);
+	};
+
+	/**
+	 * This is the old way to subscribe to UIEvents. You should consider using the new way as shown
+	 * by handleTransientDataEvents() and described in the article at
+	 * http://wiki.eclipse.org/Eclipse4/RCP/Event_Model
+	 */
+	private EventHandler toBeRenderedHandler = event -> {
+		if (minimizedElement == null || trimStackTB == null) {
+			return;
+		}
+
+		MUIElement changedElement = (MUIElement) event.getProperty(UIEvents.EventTags.ELEMENT);
+
+		// if our stack is going away, so should we
+		if (changedElement == minimizedElement && !minimizedElement.isToBeRendered()) {
+			restoreStack();
+			return;
+		}
+
+		// if one of the kids changes state, re-scrape the CTF
+		MUIElement parentElement = changedElement.getParent();
+		if (parentElement == minimizedElement) {
+			trimStackTB.getDisplay().asyncExec(() -> updateTrimStackItems());
 		}
 	};
 
@@ -431,31 +435,16 @@
 	 * by handleTransientDataEvents() and described in the article at
 	 * http://wiki.eclipse.org/Eclipse4/RCP/Event_Model
 	 */
-	private EventHandler toBeRenderedHandler = new EventHandler() {
-		@Override
-		public void handleEvent(org.osgi.service.event.Event event) {
-			if (minimizedElement == null || trimStackTB == null) {
-				return;
-			}
+	private EventHandler childrenHandler = event -> {
+		if (minimizedElement == null || trimStackTB == null) {
+			return;
+		}
 
-			MUIElement changedElement = (MUIElement) event.getProperty(UIEvents.EventTags.ELEMENT);
+		Object changedObj = event.getProperty(UIEvents.EventTags.ELEMENT);
 
-			// if our stack is going away, so should we
-			if (changedElement == minimizedElement && !minimizedElement.isToBeRendered()) {
-				restoreStack();
-				return;
-			}
-
-			// if one of the kids changes state, re-scrape the CTF
-			MUIElement parentElement = changedElement.getParent();
-			if (parentElement == minimizedElement) {
-				trimStackTB.getDisplay().asyncExec(new Runnable() {
-					@Override
-					public void run() {
-						updateTrimStackItems();
-					}
-				});
-			}
+		// if a child has been added or removed, re-scape the CTF
+		if (changedObj == minimizedElement) {
+			trimStackTB.getDisplay().asyncExec(() -> updateTrimStackItems());
 		}
 	};
 
@@ -464,48 +453,14 @@
 	 * by handleTransientDataEvents() and described in the article at
 	 * http://wiki.eclipse.org/Eclipse4/RCP/Event_Model
 	 */
-	private EventHandler childrenHandler = new EventHandler() {
-		@Override
-		public void handleEvent(org.osgi.service.event.Event event) {
-			if (minimizedElement == null || trimStackTB == null) {
-				return;
-			}
-
-			Object changedObj = event.getProperty(UIEvents.EventTags.ELEMENT);
-
-			// if a child has been added or removed, re-scape the CTF
-			if (changedObj == minimizedElement) {
-				trimStackTB.getDisplay().asyncExec(new Runnable() {
-					@Override
-					public void run() {
-						updateTrimStackItems();
-					}
-				});
-			}
+	private EventHandler widgetHandler = event -> {
+		Object changedObj = event.getProperty(UIEvents.EventTags.ELEMENT);
+		if (changedObj != minimizedElement) {
+			return;
 		}
-	};
 
-	/**
-	 * This is the old way to subscribe to UIEvents. You should consider using the new way as shown
-	 * by handleTransientDataEvents() and described in the article at
-	 * http://wiki.eclipse.org/Eclipse4/RCP/Event_Model
-	 */
-	private EventHandler widgetHandler = new EventHandler() {
-		@Override
-		public void handleEvent(org.osgi.service.event.Event event) {
-			Object changedObj = event.getProperty(UIEvents.EventTags.ELEMENT);
-			if (changedObj != minimizedElement) {
-				return;
-			}
-
-			if (minimizedElement.getWidget() != null) {
-				trimStackTB.getDisplay().asyncExec(new Runnable() {
-					@Override
-					public void run() {
-						updateTrimStackItems();
-					}
-				});
-			}
+		if (minimizedElement.getWidget() != null) {
+			trimStackTB.getDisplay().asyncExec(() -> updateTrimStackItems());
 		}
 	};
 
@@ -612,46 +567,39 @@
 			 me.getTags().add(IPresentationEngine.DRAGGABLE);
 		}
 		trimStackTB = new ToolBar(parent, orientation | SWT.FLAT | SWT.WRAP);
-		trimStackTB.addDisposeListener(new DisposeListener() {
-			@Override
-			public void widgetDisposed(DisposeEvent e) {
-				showStack(false);
+		trimStackTB.addDisposeListener(e -> {
+			showStack(false);
 
-				trimStackTB = null;
-				trimStackMenu = null;
-			}
+			trimStackTB = null;
+			trimStackMenu = null;
 		});
 
-		trimStackTB.addListener(SWT.MenuDetect, new Listener() {
-			@Override
-			public void handleEvent(Event event) {
-				// Clear any existing menus
-				while (trimStackMenu.getItemCount() > 0) {
-					trimStackMenu.getItem(0).dispose();
-				}
+		trimStackTB.addListener(SWT.MenuDetect, event -> {
+			// Clear any existing menus
+			while (trimStackMenu.getItemCount() > 0) {
+				trimStackMenu.getItem(0).dispose();
+			}
 
-				// Only open the menu if a tool item is selected
-				Point point = trimStackTB.getDisplay().map(null, trimStackTB,
-						new Point(event.x, event.y));
-				ToolItem selectedToolItem = trimStackTB.getItem(point);
-				if (selectedToolItem == null) {
-					return;
-				}
+			// Only open the menu if a tool item is selected
+			Point point = trimStackTB.getDisplay().map(null, trimStackTB, new Point(event.x, event.y));
+			ToolItem selectedToolItem = trimStackTB.getItem(point);
+			if (selectedToolItem == null) {
+				return;
+			}
 
-				// Are we hovering over a valid tool item (vs restore button)
-				Object data = selectedToolItem.getData();
-				if (data instanceof MPart) {
-					// A part on a stack or editor area
-					createPartMenu((MPart) data);
-				} else if (data instanceof MPerspective) {
-					// A perspective in a perspective stack (for now we just support restore)
-					createEmtpyEditorAreaMenu();
-				} else if (isEditorStack()) {
-					// An empty editor area
-					createEmtpyEditorAreaMenu();
-				} else {
-					createUseOverlaysMenu();
-				}
+			// Are we hovering over a valid tool item (vs restore button)
+			Object data = selectedToolItem.getData();
+			if (data instanceof MPart) {
+				// A part on a stack or editor area
+				createPartMenu((MPart) data);
+			} else if (data instanceof MPerspective) {
+				// A perspective in a perspective stack (for now we just support restore)
+				createEmtpyEditorAreaMenu();
+			} else if (isEditorStack()) {
+				// An empty editor area
+				createEmtpyEditorAreaMenu();
+			} else {
+				createUseOverlaysMenu();
 			}
 		});
 
@@ -661,12 +609,8 @@
 		ToolItem restoreBtn = new ToolItem(trimStackTB, SWT.PUSH);
 		restoreBtn.setToolTipText(Messages.TrimStack_RestoreText);
 		restoreBtn.setImage(getRestoreImage());
-		restoreBtn.addSelectionListener(new SelectionAdapter() {
-			@Override
-			public void widgetSelected(SelectionEvent e) {
-				minimizedElement.getTags().remove(IPresentationEngine.MINIMIZED);
-			}
-		});
+		restoreBtn.addSelectionListener(SelectionListener
+				.widgetSelectedAdapter(e -> minimizedElement.getTags().remove(IPresentationEngine.MINIMIZED)));
 
 		updateTrimStackItems();
 	}
@@ -677,12 +621,8 @@
 	private void createEmtpyEditorAreaMenu() {
 		MenuItem restoreItem = new MenuItem(trimStackMenu, SWT.NONE);
 		restoreItem.setText(Messages.TrimStack_RestoreText);
-		restoreItem.addListener(SWT.Selection, new Listener() {
-			@Override
-			public void handleEvent(Event event) {
-				minimizedElement.getTags().remove(IPresentationEngine.MINIMIZED);
-			}
-		});
+		restoreItem.addListener(SWT.Selection,
+				event -> minimizedElement.getTags().remove(IPresentationEngine.MINIMIZED));
 	}
 
 	/**
@@ -692,13 +632,9 @@
 		MenuItem useOverlaysItem = new MenuItem(trimStackMenu, SWT.CHECK);
 		useOverlaysItem.setText(Messages.TrimStack_Show_In_Original_Location);
 		useOverlaysItem.setSelection(!useOverlays());
-		useOverlaysItem.addListener(SWT.Selection, new Listener() {
-			@Override
-			public void handleEvent(Event event) {
-				if (toolControl != null) {
-					toolControl.getPersistedState().put(USE_OVERLAYS_KEY,
-							Boolean.toString(!useOverlays()));
-				}
+		useOverlaysItem.addListener(SWT.Selection, event -> {
+			if (toolControl != null) {
+				toolControl.getPersistedState().put(USE_OVERLAYS_KEY, Boolean.toString(!useOverlays()));
 			}
 		});
 	}
@@ -720,46 +656,34 @@
 
 		MenuItem defaultItem = new MenuItem(orientationMenu, SWT.RADIO);
 		defaultItem.setText(Messages.TrimStack_DefaultOrientationItem);
-		defaultItem.addListener(SWT.Selection, new Listener() {
-			@Override
-			public void handleEvent(Event event) {
-				boolean doRefresh = minimizedElement.getTags().remove(
-						IPresentationEngine.ORIENTATION_HORIZONTAL);
-				doRefresh |= minimizedElement.getTags().remove(
-						IPresentationEngine.ORIENTATION_VERTICAL);
-				if (isShowing && doRefresh) {
-					setPaneLocation();
-				}
+		defaultItem.addListener(SWT.Selection, event -> {
+			boolean doRefresh = minimizedElement.getTags().remove(IPresentationEngine.ORIENTATION_HORIZONTAL);
+			doRefresh |= minimizedElement.getTags().remove(IPresentationEngine.ORIENTATION_VERTICAL);
+			if (isShowing && doRefresh) {
+				setPaneLocation();
 			}
 		});
 
 		MenuItem horizontalItem = new MenuItem(orientationMenu, SWT.RADIO);
 		horizontalItem.setText(Messages.TrimStack_Horizontal);
-		horizontalItem.addListener(SWT.Selection, new Listener() {
-			@Override
-			public void handleEvent(Event event) {
-				if (!minimizedElement.getTags()
-						.contains(IPresentationEngine.ORIENTATION_HORIZONTAL)) {
-					minimizedElement.getTags().remove(IPresentationEngine.ORIENTATION_VERTICAL);
-					minimizedElement.getTags().add(IPresentationEngine.ORIENTATION_HORIZONTAL);
-					if (isShowing) {
-						setPaneLocation();
-					}
+		horizontalItem.addListener(SWT.Selection, event -> {
+			if (!minimizedElement.getTags().contains(IPresentationEngine.ORIENTATION_HORIZONTAL)) {
+				minimizedElement.getTags().remove(IPresentationEngine.ORIENTATION_VERTICAL);
+				minimizedElement.getTags().add(IPresentationEngine.ORIENTATION_HORIZONTAL);
+				if (isShowing) {
+					setPaneLocation();
 				}
 			}
 		});
 
 		MenuItem verticalItem = new MenuItem(orientationMenu, SWT.RADIO);
 		verticalItem.setText(Messages.TrimStack_Vertical);
-		verticalItem.addListener(SWT.Selection, new Listener() {
-			@Override
-			public void handleEvent(Event event) {
-				if (!minimizedElement.getTags().contains(IPresentationEngine.ORIENTATION_VERTICAL)) {
-					minimizedElement.getTags().remove(IPresentationEngine.ORIENTATION_HORIZONTAL);
-					minimizedElement.getTags().add(IPresentationEngine.ORIENTATION_VERTICAL);
-					if (isShowing) {
-						setPaneLocation();
-					}
+		verticalItem.addListener(SWT.Selection, event -> {
+			if (!minimizedElement.getTags().contains(IPresentationEngine.ORIENTATION_VERTICAL)) {
+				minimizedElement.getTags().remove(IPresentationEngine.ORIENTATION_HORIZONTAL);
+				minimizedElement.getTags().add(IPresentationEngine.ORIENTATION_VERTICAL);
+				if (isShowing) {
+					setPaneLocation();
 				}
 			}
 		});
@@ -775,24 +699,16 @@
 
 		MenuItem restoreItem = new MenuItem(trimStackMenu, SWT.NONE);
 		restoreItem.setText(Messages.TrimStack_RestoreText);
-		restoreItem.addListener(SWT.Selection, new Listener() {
-			@Override
-			public void handleEvent(Event event) {
-				minimizedElement.getTags().remove(IPresentationEngine.MINIMIZED);
-				partService.activate(selectedPart);
-			}
+		restoreItem.addListener(SWT.Selection, event -> {
+			minimizedElement.getTags().remove(IPresentationEngine.MINIMIZED);
+			partService.activate(selectedPart);
 		});
 
 		// Do not allow the shared editor area to be closed
 		if (!isEditorStack()) {
 			MenuItem closeItem = new MenuItem(trimStackMenu, SWT.NONE);
 			closeItem.setText(Messages.TrimStack_CloseText);
-			closeItem.addListener(SWT.Selection, new Listener() {
-				@Override
-				public void handleEvent(Event event) {
-					partService.hidePart(selectedPart);
-				}
-			});
+			closeItem.addListener(SWT.Selection, event -> partService.hidePart(selectedPart));
 		}
 	}
 
@@ -1214,12 +1130,7 @@
 		hostPane = new Composite(trimStackTB.getShell(), SWT.NONE);
 		hostPane.setData(ShellActivationListener.DIALOG_IGNORE_KEY, Boolean.TRUE);
 
-		hostPane.addDisposeListener(new DisposeListener() {
-			@Override
-			public void widgetDisposed(DisposeEvent e) {
-				hostPane = null;
-			}
-		});
+		hostPane.addDisposeListener(e -> hostPane = null);
 
 		setHostSize();
 
diff --git a/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/minmax/TrimStackIdHelper.java b/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/minmax/TrimStackIdHelper.java
index 8557a1b..d12a42c 100644
--- a/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/minmax/TrimStackIdHelper.java
+++ b/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/minmax/TrimStackIdHelper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2015 EclipseSource Munich GmbH and others.
+ * Copyright (c) 2015, 2018 EclipseSource Munich GmbH and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -55,7 +55,7 @@
 	public static Map<TrimStackIdPart, String> parseTrimStackId(String trimStackId) {
 		int index = trimStackId.indexOf('(');
 		String stackId = trimStackId.substring(0, index);
-		Map<TrimStackIdPart, String> result = new LinkedHashMap<TrimStackIdHelper.TrimStackIdPart, String>();
+		Map<TrimStackIdPart, String> result = new LinkedHashMap<>();
 		result.put(TrimStackIdPart.ELEMENT_ID, stackId);
 		String suffix = trimStackId.substring(index);
 		if (ID_SUFFIX.equalsIgnoreCase(suffix)) {