diff --git a/platform/lang-impl/src/com/intellij/openapi/fileEditor/impl/text/PsiAwareTextEditorImpl.java b/platform/lang-impl/src/com/intellij/openapi/fileEditor/impl/text/PsiAwareTextEditorImpl.java index 67be506566db..97f62e5156e1 100644 --- a/platform/lang-impl/src/com/intellij/openapi/fileEditor/impl/text/PsiAwareTextEditorImpl.java +++ b/platform/lang-impl/src/com/intellij/openapi/fileEditor/impl/text/PsiAwareTextEditorImpl.java @@ -41,6 +41,10 @@ public class PsiAwareTextEditorImpl extends TextEditorImpl { return new PsiAwareTextEditorComponent(project, file, this); } + public void initFolding() { + CodeFoldingManager.getInstance(myProject).buildInitialFoldings(getEditor()); + } + public BackgroundEditorHighlighter getBackgroundHighlighter() { if (myBackgroundHighlighter == null) { myBackgroundHighlighter = new TextEditorBackgroundHighlighter(myProject, getEditor()); @@ -58,7 +62,6 @@ public class PsiAwareTextEditorImpl extends TextEditorImpl { super(project, file, textEditor); myProject = project; myFile = file; - CodeFoldingManager.getInstance(project).buildInitialFoldings(getEditor()); } @Override diff --git a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorWindow.java b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorWindow.java index c0be49359949..898e93765db0 100644 --- a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorWindow.java +++ b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorWindow.java @@ -442,7 +442,7 @@ public class EditorWindow { */ // open only selected file in the new splitter instead of opening all tabs final VirtualFile file = selectedEditor.getFile(); - fileEditorManager.openFileImpl3(res, file, false, null); + fileEditorManager.openFileImpl3(res, file, false, null, true); res.setFilePinned (file, isFilePinned (file)); res.setSelectedEditor(selectedEditor, true); @@ -457,8 +457,8 @@ public class EditorWindow { splitter.setSecondComponent(res.myPanel); panel.revalidate(); final VirtualFile file = firstEC.getFile(); - fileEditorManager.openFileImpl3(this, file, true, null); - fileEditorManager.openFileImpl3(res, file, false, null); + fileEditorManager.openFileImpl3(this, file, true, null, true); + fileEditorManager.openFileImpl3(res, file, false, null, true); } } } diff --git a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorsSplitters.java b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorsSplitters.java index e86e6426f00f..54efde68dce3 100644 --- a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorsSplitters.java +++ b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorsSplitters.java @@ -22,9 +22,11 @@ import com.intellij.openapi.fileEditor.FileEditorProvider; import com.intellij.openapi.fileEditor.FileEditorState; import com.intellij.openapi.fileEditor.FileEditorStateLevel; import com.intellij.openapi.fileEditor.impl.text.FileDropHandler; +import com.intellij.openapi.fileEditor.impl.text.TextEditorImpl; import com.intellij.openapi.ui.Splitter; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.InvalidDataException; +import com.intellij.openapi.util.Pair; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.wm.FocusWatcher; import com.intellij.openapi.wm.IdeFocusManager; @@ -192,9 +194,9 @@ public final class EditorsSplitters extends JPanel { if (comp != null) { removeAll(); add(comp, BorderLayout.CENTER); - final EditorComposite lastSelected = getManager ().getLastSelected(); + final EditorComposite lastSelected = getManager().getLastSelected(); if(lastSelected != null) { - getManager().openFileImpl3(myCurrentWindow, lastSelected.getFile(), true, null); + getManager().openFileImpl3(myCurrentWindow, lastSelected.getFile(), true, null, true); //lastSelected.getComponent().requestFocus(); //ToolWindowManager.getInstance(getManager().myProject).activateEditorComponent(); } @@ -248,13 +250,14 @@ public final class EditorsSplitters extends JPanel { VirtualFile currentFile = null; for (final Element file : children) { final HistoryEntry entry = new HistoryEntry(getManager().getProject(), file.getChild(HistoryEntry.TAG)); - getManager().openFileImpl3(window, entry.myFile, false, entry); + boolean isCurrent = Boolean.valueOf(file.getAttributeValue("current")).booleanValue(); + getManager().openFileImpl3(window, entry.myFile, false, entry, isCurrent); if (getManager().isFileOpen(entry.myFile)) { window.setFilePinned(entry.myFile, Boolean.valueOf(file.getAttributeValue("pinned")).booleanValue()); if (Boolean.valueOf(file.getAttributeValue("current-in-tab")).booleanValue()) { currentFile = entry.myFile; } - if (Boolean.valueOf(file.getAttributeValue("current")).booleanValue()) { + if (isCurrent) { setCurrentWindow(window, false); } } diff --git a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileEditorManagerImpl.java b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileEditorManagerImpl.java index 62e88fcd6819..1334fb6d399d 100644 --- a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileEditorManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileEditorManagerImpl.java @@ -35,6 +35,7 @@ import com.intellij.openapi.fileEditor.*; import com.intellij.openapi.fileEditor.ex.FileEditorManagerEx; import com.intellij.openapi.fileEditor.ex.FileEditorProviderManager; import com.intellij.openapi.fileEditor.ex.IdeDocumentHistory; +import com.intellij.openapi.fileEditor.impl.text.TextEditorImpl; import com.intellij.openapi.fileEditor.impl.text.TextEditorProvider; import com.intellij.openapi.fileTypes.FileTypeEvent; import com.intellij.openapi.fileTypes.FileTypeListener; @@ -436,7 +437,7 @@ public class FileEditorManagerImpl extends FileEditorManagerEx implements Projec final Ref> resHolder = new Ref>(); CommandProcessor.getInstance().executeCommand(myProject, new Runnable() { public void run() { - resHolder.set(openFileImpl3(window, file, focusEditor, entry)); + resHolder.set(openFileImpl3(window, file, focusEditor, entry, true)); } }, "", null); return resHolder.get(); @@ -449,10 +450,13 @@ public class FileEditorManagerImpl extends FileEditorManagerEx implements Projec * invalid file become selected. That's why we do not require that * passed file is valid. * @param entry map between FileEditorProvider and FileEditorState. If this parameter - * is not null then it's used to restore state for the newly created + * @param current */ - @NotNull Pair openFileImpl3(final EditorWindow window, @NotNull final VirtualFile file, final boolean focusEditor, - final HistoryEntry entry) { + @NotNull Pair openFileImpl3(final EditorWindow window, + @NotNull final VirtualFile file, + final boolean focusEditor, + final HistoryEntry entry, + boolean current) { // Open file FileEditor[] editors; FileEditorProvider[] providers; @@ -494,6 +498,9 @@ public class FileEditorManagerImpl extends FileEditorManagerEx implements Projec LOG.assertTrue(provider != null); LOG.assertTrue(provider.accept(myProject, file)); final FileEditor editor = provider.createEditor(myProject, file); + if (current && editor instanceof TextEditorImpl) { + ((TextEditorImpl)editor).initFolding(); + } editors[i] = editor; LOG.assertTrue(editor != null); LOG.assertTrue(editor.isValid()); diff --git a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/MoveEditorToOppositeTabGroupAction.java b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/MoveEditorToOppositeTabGroupAction.java index 7fb8d390c836..3310dc26ed75 100644 --- a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/MoveEditorToOppositeTabGroupAction.java +++ b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/MoveEditorToOppositeTabGroupAction.java @@ -40,7 +40,7 @@ public class MoveEditorToOppositeTabGroupAction extends AnAction implements Dumb final EditorWindow[] siblings = window.findSiblings (); if (siblings != null && siblings.length == 1) { - ((FileEditorManagerImpl)FileEditorManagerEx.getInstanceEx(project)).openFileImpl3 (siblings [0], vFile, true, null); + ((FileEditorManagerImpl)FileEditorManagerEx.getInstanceEx(project)).openFileImpl3 (siblings [0], vFile, true, null, true); window.closeFile(vFile); } } diff --git a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/text/TextEditorImpl.java b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/text/TextEditorImpl.java index 87c00d3e1553..cdd7787bc50a 100644 --- a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/text/TextEditorImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/text/TextEditorImpl.java @@ -50,6 +50,8 @@ public class TextEditorImpl extends UserDataHolderBase implements TextEditor{ return new TextEditorComponent(project, file, this); } + public void initFolding() {} + public void dispose(){ myComponent.dispose(); }