mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[r=nik, davdeev] IDEA-78263, take II
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user