From c18ded1c749373f76ed6fbdf86a3d2634d7923c0 Mon Sep 17 00:00:00 2001 From: Dmitry Avdeev Date: Tue, 30 Apr 2013 13:40:21 +0400 Subject: [PATCH] navigation to class fixed if file not opened (IDEADEV-41617 re-fixed): added test for editor selection --- .../fileEditor/impl/EditorHistoryManager.java | 28 +++++++++---------- .../fileEditor/NewDocumentHistoryTest.java | 14 ++++++++++ 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorHistoryManager.java b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorHistoryManager.java index d3a77a64b758..3cb15477253a 100644 --- a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorHistoryManager.java +++ b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorHistoryManager.java @@ -33,6 +33,7 @@ import com.intellij.openapi.util.Pair; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFileManager; import com.intellij.util.ArrayUtil; +import com.intellij.util.messages.MessageBusConnection; import org.jdom.Element; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -51,30 +52,21 @@ public final class EditorHistoryManager extends AbstractProjectComponent impleme /** * State corresponding to the most recent file is the last */ - private final ArrayList myEntriesList; + private final ArrayList myEntriesList = new ArrayList(); /** Invoked by reflection */ - EditorHistoryManager(final Project project, FileEditorManager fileEditorManager, final UISettings uiSettings){ + EditorHistoryManager(final Project project, final UISettings uiSettings){ super(project); - myEntriesList = new ArrayList(); - MyEditorManagerListener editorManagerListener = new MyEditorManagerListener(); - - /** - * Updates history length - */ - final MyUISettingsListener myUISettingsListener = new MyUISettingsListener(); - - fileEditorManager.addFileEditorManagerListener(editorManagerListener, project); - project.getMessageBus().connect().subscribe(FileEditorManagerListener.Before.FILE_EDITOR_MANAGER, new MyEditorManagerBeforeListener()); - - uiSettings.addUISettingsListener(myUISettingsListener, project); + uiSettings.addUISettingsListener(new MyUISettingsListener(), project); } public void projectOpened(){ + + connectToManager(); StartupManager.getInstance(myProject).registerPostStartupActivity( new DumbAwareRunnable(){ public void run(){ - // myElement may be null if node that correspondes to this manager does not exist + // myElement may be null if node that corresponds to this manager does not exist if (myElement != null){ final List children = myElement.getChildren(HistoryEntry.TAG); myElement = null; @@ -100,6 +92,12 @@ public final class EditorHistoryManager extends AbstractProjectComponent impleme ); } + public void connectToManager() { + MessageBusConnection connection = myProject.getMessageBus().connect(); + connection.subscribe(FileEditorManagerListener.Before.FILE_EDITOR_MANAGER, new MyEditorManagerBeforeListener()); + connection.subscribe(FileEditorManagerListener.FILE_EDITOR_MANAGER, new MyEditorManagerListener()); + } + @NotNull public String getComponentName(){ diff --git a/platform/platform-tests/testSrc/com/intellij/openapi/fileEditor/NewDocumentHistoryTest.java b/platform/platform-tests/testSrc/com/intellij/openapi/fileEditor/NewDocumentHistoryTest.java index 1156c41114d8..cf983053a26c 100644 --- a/platform/platform-tests/testSrc/com/intellij/openapi/fileEditor/NewDocumentHistoryTest.java +++ b/platform/platform-tests/testSrc/com/intellij/openapi/fileEditor/NewDocumentHistoryTest.java @@ -1,7 +1,9 @@ package com.intellij.openapi.fileEditor; +import com.intellij.codeInsight.navigation.NavigationUtil; import com.intellij.openapi.components.impl.ComponentManagerImpl; import com.intellij.openapi.fileEditor.ex.IdeDocumentHistory; +import com.intellij.openapi.fileEditor.impl.EditorHistoryManager; import com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl; import com.intellij.openapi.fileEditor.impl.IdeDocumentHistoryImpl; import com.intellij.openapi.vfs.LocalFileSystem; @@ -35,6 +37,17 @@ public class NewDocumentHistoryTest extends PlatformLangTestCase { assertEquals("mockEditor", myManager.getSelectedEditor(file).getName()); } + public void testSelectFileOnNavigation() throws Exception { + VirtualFile file1 = getFile("/src/1.txt"); + myManager.openFile(file1, true); + VirtualFile file2 = getFile("/src/2.txt"); + myManager.openFile(file2, true); + NavigationUtil.activateFileWithPsiElement(getPsiManager().findFile(file1)); + VirtualFile[] files = myManager.getSelectedFiles(); + assertEquals(1, files.length); + assertEquals("1.txt", files[0].getName()); + } + protected VirtualFile getFile(String path) { return LocalFileSystem.getInstance().refreshAndFindFileByPath( PlatformTestUtil.getCommunityPath().replace(File.separatorChar, '/') + "/platform/platform-tests/testData/fileEditorManager" + path); @@ -45,5 +58,6 @@ public class NewDocumentHistoryTest extends PlatformLangTestCase { myManager = new FileEditorManagerImpl(getProject(), DockManager.getInstance(getProject())); ((ComponentManagerImpl)getProject()).registerComponentInstance(FileEditorManager.class, myManager); ((IdeDocumentHistoryImpl)IdeDocumentHistory.getInstance(getProject())).projectOpened(); + EditorHistoryManager.getInstance(getProject()).connectToManager(); } }