[r=nik, davdeev] IDEA-78263, take II

This commit is contained in:
Maxim Shafirov
2011-12-06 13:45:13 +04:00
parent fdaccd2594
commit 7e1dcc4406
2 changed files with 22 additions and 29 deletions
@@ -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();
}
@@ -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<Element>, 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) {