From 7e1dcc44069750dcdf0bf2c1a70b5f5a5f20719a Mon Sep 17 00:00:00 2001 From: Maxim Shafirov Date: Tue, 6 Dec 2011 13:43:05 +0400 Subject: [PATCH] [r=nik, davdeev] IDEA-78263, take II --- .../com/intellij/ide/bookmarks/Bookmark.java | 31 ++++++------------- .../ide/bookmarks/BookmarkManager.java | 20 +++++++----- 2 files changed, 22 insertions(+), 29 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/ide/bookmarks/Bookmark.java b/platform/lang-impl/src/com/intellij/ide/bookmarks/Bookmark.java index 0db8cc76f873..18594584c712 100644 --- a/platform/lang-impl/src/com/intellij/ide/bookmarks/Bookmark.java +++ b/platform/lang-impl/src/com/intellij/ide/bookmarks/Bookmark.java @@ -41,7 +41,6 @@ import com.intellij.psi.PsiDocumentManager; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiManager; import com.intellij.ui.LightColors; -import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -53,44 +52,28 @@ public class Bookmark { private final VirtualFile myFile; private final OpenFileDescriptor myTarget; - private RangeHighlighter myHighlighter; + private final RangeHighlighter myHighlighter; private final Project myProject; private String myDescription; private char myMnemonic = 0; public static final Font MNEMONIC_FONT = new Font("Monospaced", 0, 11); - private boolean myReleased = false; public Bookmark(Project project, VirtualFile file, String description) { this(project, file, -1, description); } - public Bookmark(Project project, VirtualFile file, final int line, String description) { + public Bookmark(Project project, VirtualFile file, int line, String description) { myFile = file; myProject = project; myDescription = description; if (line >= 0) { - final Document document = getDocument(); + Document document = getDocument(); if (document == null) { myHighlighter = null; } else { - initHighlighter(line, document); - } - } - else { - myHighlighter = null; - } - - myTarget = new OpenFileDescriptor(project, file, line, -1, true); - } - - private void initHighlighter(final int line, final Document document) { - UIUtil.invokeLaterIfNeeded(new Runnable() { - public void run() { - if (myReleased) return; - MarkupModelEx markup = (MarkupModelEx)DocumentMarkupModel.forDocument(document, myProject, true); myHighlighter = markup.addPersistentLineHighlighter(line, HighlighterLayer.ERROR + 1, null); @@ -102,7 +85,12 @@ public class Bookmark { myHighlighter.setErrorStripeTooltip(getBookmarkTooltip()); } } - }); + } + else { + myHighlighter = null; + } + + myTarget = new OpenFileDescriptor(project, file, line, -1, true); } public Document getDocument() { @@ -110,7 +98,6 @@ public class Bookmark { } public void release() { - myReleased = true; if (myHighlighter != null) { myHighlighter.dispose(); } diff --git a/platform/lang-impl/src/com/intellij/ide/bookmarks/BookmarkManager.java b/platform/lang-impl/src/com/intellij/ide/bookmarks/BookmarkManager.java index 650892ff0488..3e46735e892c 100644 --- a/platform/lang-impl/src/com/intellij/ide/bookmarks/BookmarkManager.java +++ b/platform/lang-impl/src/com/intellij/ide/bookmarks/BookmarkManager.java @@ -21,7 +21,9 @@ import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.EditorFactory; import com.intellij.openapi.editor.event.*; +import com.intellij.openapi.project.DumbAwareRunnable; import com.intellij.openapi.project.Project; +import com.intellij.openapi.startup.StartupManager; import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFileManager; @@ -191,14 +193,18 @@ public class BookmarkManager implements PersistentStateComponent, Proje } public void loadState(final Element state) { - BookmarksListener publisher = myBus.syncPublisher(BookmarksListener.TOPIC); - for (Bookmark bookmark : myBookmarks) { - bookmark.release(); - publisher.bookmarkRemoved(bookmark); - } - myBookmarks.clear(); + StartupManager.getInstance(myProject).runWhenProjectIsInitialized(new DumbAwareRunnable() { + public void run() { + BookmarksListener publisher = myBus.syncPublisher(BookmarksListener.TOPIC); + for (Bookmark bookmark : myBookmarks) { + bookmark.release(); + publisher.bookmarkRemoved(bookmark); + } + myBookmarks.clear(); - readExternal(state); + readExternal(state); + } + }); } private void readExternal(Element element) {