Bug 558671 - Extract OpenAndLinkWithEditorHelper from QuickFixPage

Extracted class ShowMarkers to be provided with E3 handler with
`Consumer<StructuredViewer> showMarkers` parameter

Change-Id: I52747ce88bee7886740308e60f5adda05e9109f0
Signed-off-by: Alexander Fedorov <alexander.fedorov@arsysop.ru>
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/QuickFixHandler.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/QuickFixHandler.java
index 96e9a14..99477c2 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/QuickFixHandler.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/QuickFixHandler.java
@@ -32,6 +32,7 @@
 import org.eclipse.jface.dialogs.ProgressMonitorDialog;
 import org.eclipse.jface.operation.IRunnableContext;
 import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.viewers.StructuredViewer;
 import org.eclipse.jface.wizard.IWizard;
 import org.eclipse.jface.wizard.Wizard;
 import org.eclipse.jface.wizard.WizardDialog;
@@ -146,8 +147,9 @@
 			String description = NLS.bind(
 					MarkerMessages.MarkerResolutionDialog_Description,
 					markerDescription);
+			Consumer<StructuredViewer> showMarkers = v -> new ShowMarkers(v, view.getSite());
 			Consumer<Throwable> reporter = t -> StatusManager.getManager().handle(StatusUtil.newError(t));
-			Wizard wizard = new QuickFixWizard(description, selectedMarkers, resolutionsMap, view.getSite(), reporter);
+			Wizard wizard = new QuickFixWizard(description, selectedMarkers, resolutionsMap, showMarkers, reporter);
 			wizard.setWindowTitle(MarkerMessages.resolveMarkerAction_dialogTitle);
 			WizardDialog dialog = new QuickFixWizardDialog(view.getSite().getShell(), wizard);
 			dialog.open();
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/QuickFixPage.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/QuickFixPage.java
index 628cbe5..70017c5 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/QuickFixPage.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/QuickFixPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2019 IBM Corporation and others.
+ * Copyright (c) 2007, 2020 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -10,7 +10,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
- *     Alexander Fedorov <alexander.fedorov@arsysop.ru> - Bug 558623, Bug 558673
+ *     Alexander Fedorov <alexander.fedorov@arsysop.ru> - ongoing support
  *******************************************************************************/
 
 package org.eclipse.ui.internal.views.markers;
@@ -18,8 +18,8 @@
 import java.util.Collection;
 import java.util.Map;
 import java.util.Optional;
+import java.util.function.Consumer;
 
-import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IMarker;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.dialogs.IDialogConstants;
@@ -27,12 +27,12 @@
 import org.eclipse.jface.viewers.CheckboxTableViewer;
 import org.eclipse.jface.viewers.ColumnWeightData;
 import org.eclipse.jface.viewers.ILabelProviderListener;
-import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredContentProvider;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.ITableLabelProvider;
 import org.eclipse.jface.viewers.LabelProvider;
 import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.StructuredViewer;
 import org.eclipse.jface.viewers.TableLayout;
 import org.eclipse.jface.viewers.TableViewer;
 import org.eclipse.jface.viewers.Viewer;
@@ -56,11 +56,7 @@
 import org.eclipse.ui.IMarkerResolution;
 import org.eclipse.ui.IMarkerResolution2;
 import org.eclipse.ui.IMarkerResolutionRelevance;
-import org.eclipse.ui.IWorkbenchPartSite;
-import org.eclipse.ui.OpenAndLinkWithEditorHelper;
-import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.ide.IDE;
 import org.eclipse.ui.internal.IWorkbenchHelpContextIds;
 import org.eclipse.ui.views.markers.internal.MarkerMessages;
 import org.eclipse.ui.views.markers.internal.Util;
@@ -77,25 +73,25 @@
 
 	private TableViewer resolutionsList;
 	private CheckboxTableViewer markersTable;
-	private IWorkbenchPartSite site;
 	private IMarker[] selectedMarkers;
+	private final Consumer<StructuredViewer> showMarkers;
 
 
 	/**
 	 * Create a new instance of the receiver.
 	 *
 	 * @param problemDescription the description of the problem being fixed
-	 * @param selectedMarkers the selected markers
-	 * @param resolutions {@link Map} with key of {@link IMarkerResolution} and value of
-	 *            {@link Collection} of {@link IMarker}
-	 * @param site The IWorkbenchPartSite to show markers
+	 * @param selectedMarkers    the selected markers
+	 * @param resolutions        {@link Map} with key of {@link IMarkerResolution}
+	 *                           and value of {@link Collection} of {@link IMarker}
+	 * @param showMarkers        the consumer to show markers
 	 */
 	public QuickFixPage(String problemDescription, IMarker[] selectedMarkers, Map<IMarkerResolution, Collection<IMarker>> resolutions,
-			IWorkbenchPartSite site) {
+			Consumer<StructuredViewer> showMarkers) {
 		super(problemDescription);
 		this.selectedMarkers= selectedMarkers;
 		this.resolutions = resolutions;
-		this.site = site;
+		this.showMarkers = showMarkers;
 		setTitle(MarkerMessages.resolveMarkerAction_dialogTitle);
 		setMessage(problemDescription);
 	}
@@ -367,36 +363,7 @@
 			}
 
 		});
-
-		new OpenAndLinkWithEditorHelper(markersTable) {
-
-			{ setLinkWithEditor(false); }
-
-			@Override
-			protected void activate(ISelection selection) {
-				open(selection, true);
-			}
-
-			/** Not supported*/
-			@Override
-			protected void linkToEditor(ISelection selection) {
-			}
-
-			@Override
-			protected void open(ISelection selection, boolean activate) {
-				if (selection.isEmpty())
-					return;
-				IMarker marker = (IMarker) ((IStructuredSelection) selection)
-						.getFirstElement();
-				if (marker != null && marker.getResource() instanceof IFile) {
-					try {
-						IDE.openEditor(site.getPage(), marker, activate);
-					} catch (PartInitException e) {
-						MarkerSupportInternalUtilities.showViewError(e);
-					}
-				}
-			}
-		};
+		showMarkers.accept(markersTable);
 		markersTable.setInput(this);
 	}
 
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/QuickFixWizard.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/QuickFixWizard.java
index 550d2cd..31baf7e 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/QuickFixWizard.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/QuickFixWizard.java
@@ -26,10 +26,10 @@
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.e4.ui.internal.workspace.markers.Translation;
 import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.viewers.StructuredViewer;
 import org.eclipse.jface.wizard.Wizard;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.ui.IMarkerResolution;
-import org.eclipse.ui.IWorkbenchPartSite;
 import org.eclipse.ui.internal.ide.IDEInternalWorkbenchImages;
 import org.eclipse.ui.views.markers.WorkbenchMarkerResolution;
 import org.eclipse.ui.views.markers.internal.MarkerMessages;
@@ -45,7 +45,7 @@
 	private IMarker[] selectedMarkers;
 	private Map<IMarkerResolution, Collection<IMarker>> resolutionMap;
 	private String description;
-	private IWorkbenchPartSite partSite;
+	private final Consumer<StructuredViewer> showMarkers;
 	private final Consumer<Throwable> reporter;
 	private QuickFixPage quickFixPage;
 
@@ -56,18 +56,18 @@
 	 * @param selectedMarkers the markers that were selected
 	 * @param resolutions     Map key {@link IMarkerResolution} value
 	 *                        {@link IMarker} []
-	 * @param site            the {@link IWorkbenchPartSite} to open the markers in
+	 * @param showMarkers     the consumer to show markers
 	 * @param reporter        used to report failures during
 	 *                        {@link Wizard#performFinish()} call
 	 */
 	public QuickFixWizard(String description, IMarker[] selectedMarkers,
-			Map<IMarkerResolution, Collection<IMarker>> resolutions, IWorkbenchPartSite site,
+			Map<IMarkerResolution, Collection<IMarker>> resolutions, Consumer<StructuredViewer> showMarkers,
 			Consumer<Throwable> reporter) {
 		Objects.requireNonNull(reporter);
 		this.selectedMarkers= selectedMarkers;
 		this.resolutionMap = resolutions;
 		this.description = description;
-		this.partSite = site;
+		this.showMarkers = showMarkers;
 		this.reporter = reporter;
 		setDefaultPageImageDescriptor(IDEInternalWorkbenchImages
 				.getImageDescriptor(IDEInternalWorkbenchImages.IMG_DLGBAN_QUICKFIX_DLG));
@@ -76,7 +76,7 @@
 
 	@Override
 	public void addPages() {
-		quickFixPage = new QuickFixPage(description, selectedMarkers, resolutionMap, partSite);
+		quickFixPage = new QuickFixPage(description, selectedMarkers, resolutionMap, showMarkers);
 		addPage(quickFixPage);
 	}
 
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ShowMarkers.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ShowMarkers.java
new file mode 100644
index 0000000..4716bf4
--- /dev/null
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ShowMarkers.java
@@ -0,0 +1,70 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2020 IBM Corporation and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Alexander Fedorov <alexander.fedorov@arsysop.ru> - ongoing support
+ *******************************************************************************/
+package org.eclipse.ui.internal.views.markers;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.ui.IWorkbenchPartSite;
+import org.eclipse.ui.OpenAndLinkWithEditorHelper;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.ide.IDE;
+
+/**
+ * @since 3.4
+ *
+ */
+final class ShowMarkers extends OpenAndLinkWithEditorHelper {
+
+	private final IWorkbenchPartSite partSite;
+
+	/**
+	 * @param viewer
+	 */
+	ShowMarkers(StructuredViewer viewer, IWorkbenchPartSite partSite) {
+		super(viewer);
+		this.partSite = partSite;
+		setLinkWithEditor(false);
+	}
+
+	@Override
+	protected void activate(ISelection selection) {
+		open(selection, true);
+	}
+
+	/** Not supported*/
+	@Override
+	protected void linkToEditor(ISelection selection) {
+	}
+
+	@Override
+	protected void open(ISelection selection, boolean activate) {
+		IStructuredSelection structured = (IStructuredSelection) selection;
+		Object first = structured.getFirstElement();
+		if (!(first instanceof IMarker)) {
+			return;
+		}
+		IMarker marker = (IMarker) first;
+		if (marker.getResource() instanceof IFile) {
+			try {
+				IDE.openEditor(partSite.getPage(), marker, activate);
+			} catch (PartInitException e) {
+				MarkerSupportInternalUtilities.showViewError(e);
+			}
+		}
+	}
+}
\ No newline at end of file