Bug 530966 - Add "Clear History" item to "Recent Documents" menu

Added a Clear History menu item to the dynamic Recent Documents menu.
When recent history is cleared, the "Clear History" menu is present, but
disabled.

Change-Id: I0fd5f3f9852a20e4e76f55aa4d214f421fbf39c0
Signed-off-by: Patrik Suzzi <psuzzi@itemis.com>
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ReopenEditorMenu.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ReopenEditorMenu.java
index 94220f0..7cf9734 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ReopenEditorMenu.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ReopenEditorMenu.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * Copyright (c) 2000, 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
@@ -12,6 +12,7 @@
 
 import static org.eclipse.swt.events.SelectionListener.widgetSelectedAdapter;
 
+import java.util.Arrays;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.SafeRunner;
@@ -209,6 +210,7 @@
 
         int n = Math.min(itemsToShow, historyItems.length);
         if (n <= 0) {
+			addClearHistory(menu, n);
             return;
         }
 
@@ -240,6 +242,18 @@
                 }
             });
         }
+
+		addClearHistory(menu, n);
+	}
+
+	private void addClearHistory(Menu menu, int nItems) {
+		new MenuItem(menu, SWT.SEPARATOR);
+		MenuItem miClear = new MenuItem(menu, SWT.PUSH);
+		miClear.setText(WorkbenchMessages.OpenRecentDocumentsClear_text);
+		miClear.addSelectionListener(widgetSelectedAdapter(e -> Arrays.stream(history.getItems()).forEach(item -> {
+			history.remove(item);
+		})));
+		miClear.setEnabled(nItems > 0);
     }
 
     /**
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchMessages.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchMessages.java
index c638a69..017be7b 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchMessages.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchMessages.java
@@ -114,6 +114,7 @@
 	public static String ImportResourcesAction_toolTip;
 
 	public static String OpenRecentDocuments_text;
+	public static String OpenRecentDocumentsClear_text;
 	public static String OpenRecent_errorTitle;
 	public static String OpenRecent_unableToOpen;
 	public static String Exit_text;
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/messages.properties b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/messages.properties
index 1550668..71cda71 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/messages.properties
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/messages.properties
@@ -70,6 +70,7 @@
 ExportResourcesAction_toolTip = Export
 ImportResourcesAction_text = &Import...
 ImportResourcesAction_toolTip = Import
+OpenRecentDocumentsClear_text = Clear History
 OpenRecentDocuments_text = Recent Files
 OpenRecent_errorTitle = Problems opening editor
 OpenRecent_unableToOpen = Unable to open ''{0}''.