Bug 394157 - [EditorMgmt] List of CTRL+F6 editors is no longer is "most
recently used" order

use MRU to fill in editor list
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/CycleEditorHandler.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/CycleEditorHandler.java
index 9db91a3..20108c7 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/CycleEditorHandler.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/CycleEditorHandler.java
@@ -11,12 +11,12 @@
 
 package org.eclipse.ui.internal;
 
+import java.util.List;
 import org.eclipse.core.commands.Command;
 import org.eclipse.core.commands.ParameterizedCommand;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Table;
 import org.eclipse.swt.widgets.TableItem;
-import org.eclipse.ui.IEditorReference;
 import org.eclipse.ui.IWorkbenchCommandConstants;
 import org.eclipse.ui.IWorkbenchPart;
 import org.eclipse.ui.commands.ICommandService;
@@ -35,18 +35,17 @@
 	 * @see org.eclipse.ui.internal.CycleBaseHandler#addItems(org.eclipse.swt.widgets.Table, org.eclipse.ui.internal.WorkbenchPage)
 	 */
 	protected void addItems(Table table, WorkbenchPage page) {
-		// TODO Auto-generated method stub
-		IEditorReference refs[] = page.getEditorReferences();
-		for (int i = 0; i < refs.length; i++) {
+		List<EditorReference> refs = page.getSortedEditorReferences();
+		for (EditorReference ref : refs) {
             TableItem item = null;
             item = new TableItem(table, SWT.NONE);
-            if (refs[i].isDirty()) {
-				item.setText("*" + refs[i].getTitle()); //$NON-NLS-1$
+			if (ref.isDirty()) {
+				item.setText("*" + ref.getTitle()); //$NON-NLS-1$
 			} else {
-				item.setText(refs[i].getTitle());
+				item.setText(ref.getTitle());
 			}
-            item.setImage(refs[i].getTitleImage());
-            item.setData(refs[i]);
+			item.setImage(ref.getTitleImage());
+			item.setData(ref);
         }
 	}
 
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java
index 2b813cb..41380c3 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java
@@ -978,7 +978,8 @@
 		return ref;
 	}
 
-	private List<EditorReference> getCurrentEditorReferences() {
+	private List<EditorReference> getOrderedEditorReferences() {
+
 		List<EditorReference> editorRefs = new ArrayList<EditorReference>();
 		List<MPart> visibleEditors = modelService.findElements(window,
 				CompatibilityEditor.MODEL_ELEMENT_ID, MPart.class, null);
@@ -994,6 +995,44 @@
 		return editorRefs;
 	}
 
+	List<EditorReference> getSortedEditorReferences() {
+		List<EditorReference> sortedReferences = new ArrayList<EditorReference>();
+		for (MPart part : activationList) {
+			for (EditorReference ref : editorReferences) {
+				if (ref.getModel() == part) {
+					sortedReferences.add(ref);
+					break;
+				}
+			}
+		}
+
+		for (EditorReference ref : editorReferences) {
+			if (!sortedReferences.contains(ref)) {
+				sortedReferences.add(ref);
+			}
+		}
+
+		MPerspective currentPerspective = getCurrentPerspective();
+		if (currentPerspective != null) {
+			List<MPart> placeholders = modelService.findElements(window,
+					CompatibilityEditor.MODEL_ELEMENT_ID, MPart.class, null,
+					EModelService.PRESENTATION);
+			List<EditorReference> visibleReferences = new ArrayList<EditorReference>();
+			for (EditorReference reference : sortedReferences) {
+				for (MPart placeholder : placeholders) {
+					if (reference.getModel() == placeholder && placeholder.isToBeRendered()) {
+						// only rendered placeholders are valid references
+						visibleReferences.add(reference);
+					}
+				}
+			}
+
+			return visibleReferences;
+		}
+
+		return sortedReferences;
+	}
+
 	public List<EditorReference> getInternalEditorReferences() {
 		return editorReferences;
 	}
@@ -2197,7 +2236,7 @@
 	 * java.lang.String, int)
 	 */
 	public IEditorReference[] findEditors(IEditorInput input, String editorId, int matchFlags) {
-		List<EditorReference> filteredReferences = getCurrentEditorReferences();
+		List<EditorReference> filteredReferences = getSortedEditorReferences();
 
 		switch (matchFlags) {
 		case MATCH_INPUT:
@@ -2283,7 +2322,7 @@
 	 * @see org.eclipse.ui.IWorkbenchPage#getEditorReferences()
 	 */
 	public IEditorReference[] getEditorReferences() {
-		List<EditorReference> references = getCurrentEditorReferences();
+		List<EditorReference> references = getOrderedEditorReferences();
 		return references.toArray(new IEditorReference[references.size()]);
 	}
 	
@@ -2305,7 +2344,7 @@
 
 		List<IWorkbenchPartReference> sortedReferences = new ArrayList<IWorkbenchPartReference>();
 		IViewReference[] viewReferences = getViewReferences();
-		List<EditorReference> editorReferences = getCurrentEditorReferences();
+		List<EditorReference> editorReferences = getSortedEditorReferences();
 
 		activationLoop: for (MPart part : activationList) {
 			if (views) {