From 91f450d834ce2f33e605a15f50799e87e29d4632 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Wed, 28 Oct 2009 22:25:34 +0300 Subject: [PATCH] don't require write access for console view updates --- .../intellij/execution/impl/ConsoleViewImpl.java | 69 ++++++++-------------- .../openapi/editor/impl/EditorFactoryImpl.java | 7 +++ 2 files changed, 32 insertions(+), 44 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/execution/impl/ConsoleViewImpl.java b/platform/lang-impl/src/com/intellij/execution/impl/ConsoleViewImpl.java index 665873fb19..8b315495d6 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/ConsoleViewImpl.java +++ b/platform/lang-impl/src/com/intellij/execution/impl/ConsoleViewImpl.java @@ -46,6 +46,7 @@ import com.intellij.openapi.editor.ex.MarkupModelEx; import com.intellij.openapi.editor.highlighter.EditorHighlighter; import com.intellij.openapi.editor.highlighter.HighlighterClient; import com.intellij.openapi.editor.highlighter.HighlighterIterator; +import com.intellij.openapi.editor.impl.EditorFactoryImpl; import com.intellij.openapi.editor.markup.HighlighterLayer; import com.intellij.openapi.editor.markup.HighlighterTargetArea; import com.intellij.openapi.editor.markup.RangeHighlighter; @@ -274,15 +275,11 @@ public final class ConsoleViewImpl extends JPanel implements ConsoleView, Observ myEditor.getMarkupModel().removeAllHighlighters(); document = myEditor.getDocument(); } - ApplicationManager.getApplication().runWriteAction(new DocumentRunnable(document, myProject) { + CommandProcessor.getInstance().executeCommand(myProject, new Runnable() { public void run() { - CommandProcessor.getInstance().executeCommand(myProject, new Runnable() { - public void run() { - document.deleteString(0, document.getTextLength()); - } - }, null, DocCommandGroupId.noneGroupId(document)); + document.deleteString(0, document.getTextLength()); } - }); + }, null, DocCommandGroupId.noneGroupId(document)); } public void scrollTo(final int offset) { @@ -462,18 +459,14 @@ public final class ConsoleViewImpl extends JPanel implements ConsoleView, Observ final int oldLineCount = document.getLineCount(); final boolean isAtEndOfDocument = myEditor.getCaretModel().getOffset() == document.getTextLength(); boolean cycleUsed = USE_CYCLIC_BUFFER && document.getTextLength() + text.length() > CYCLIC_BUFFER_SIZE; - ApplicationManager.getApplication().runWriteAction(new DocumentRunnable(document, myProject) { + CommandProcessor.getInstance().executeCommand(myProject, new Runnable() { public void run() { - CommandProcessor.getInstance().executeCommand(myProject, new Runnable() { - public void run() { - document.insertString(document.getTextLength(), text); - synchronized (LOCK) { - fireChange(); - } - } - }, null, DocCommandGroupId.noneGroupId(document)); + document.insertString(document.getTextLength(), text); + synchronized (LOCK) { + fireChange(); + } } - }); + }, null, DocCommandGroupId.noneGroupId(document)); myPsiDisposedCheck.performCheck(); final int newLineCount = document.getLineCount(); if (cycleUsed) { @@ -568,8 +561,8 @@ public final class ConsoleViewImpl extends JPanel implements ConsoleView, Observ } private Editor doCreateEditor() { - final EditorFactory editorFactory = EditorFactory.getInstance(); - final Document editorDocument = editorFactory.createDocument(""); + final EditorFactoryImpl editorFactory = (EditorFactoryImpl) EditorFactory.getInstance(); + final Document editorDocument = editorFactory.createDocument(true); editorDocument.addDocumentListener(new DocumentListener() { public void beforeDocumentChange(DocumentEvent event) { } @@ -1284,13 +1277,9 @@ public final class ConsoleViewImpl extends JPanel implements ConsoleView, Observ consoleView.myContentSize += charCountToAdd; } - ApplicationManager.getApplication().runWriteAction(new Runnable() { - public void run() { - document.insertString(startOffset, s); - editor.getCaretModel().moveToOffset(startOffset + s.length()); - editor.getScrollingModel().scrollToCaret(ScrollType.RELATIVE); - } - }); + document.insertString(startOffset, s); + editor.getCaretModel().moveToOffset(startOffset + s.length()); + editor.getScrollingModel().scrollToCaret(ScrollType.RELATIVE); } /** @@ -1346,14 +1335,10 @@ public final class ConsoleViewImpl extends JPanel implements ConsoleView, Observ consoleView.myContentSize += charCountToReplace; } - ApplicationManager.getApplication().runWriteAction(new Runnable() { - public void run() { - document.replaceString(startOffset, endOffset, s); - editor.getCaretModel().moveToOffset(startOffset + s.length()); - editor.getScrollingModel().scrollToCaret(ScrollType.RELATIVE); - editor.getSelectionModel().removeSelection(); - } - }); + document.replaceString(startOffset, endOffset, s); + editor.getCaretModel().moveToOffset(startOffset + s.length()); + editor.getScrollingModel().scrollToCaret(ScrollType.RELATIVE); + editor.getSelectionModel().removeSelection(); } /** @@ -1395,18 +1380,14 @@ public final class ConsoleViewImpl extends JPanel implements ConsoleView, Observ consoleView.myContentSize -= charCountToDelete; } - ApplicationManager.getApplication().runWriteAction(new Runnable() { - public void run() { - document.deleteString(startOffset, endOffset); - editor.getCaretModel().moveToOffset(startOffset); - editor.getScrollingModel().scrollToCaret(ScrollType.RELATIVE); - editor.getSelectionModel().removeSelection(); - } - }); + document.deleteString(startOffset, endOffset); + editor.getCaretModel().moveToOffset(startOffset); + editor.getScrollingModel().scrollToCaret(ScrollType.RELATIVE); + editor.getSelectionModel().removeSelection(); } //util methods for add, replace, delete methods - private int getStartOffset(int offset, TokenInfo info) { + private static int getStartOffset(int offset, TokenInfo info) { int startOffset; if (offset >= info.startOffset && offset < info.endOffset) { startOffset = offset; @@ -1418,7 +1399,7 @@ public final class ConsoleViewImpl extends JPanel implements ConsoleView, Observ return startOffset; } - private int getEndOffset(int offset, TokenInfo info) { + private static int getEndOffset(int offset, TokenInfo info) { int endOffset; if (offset > info.endOffset) { endOffset = info.endOffset; diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorFactoryImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorFactoryImpl.java index 36289b2211..9c93d7cd93 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorFactoryImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorFactoryImpl.java @@ -113,6 +113,13 @@ public class EditorFactoryImpl extends EditorFactory { return document; } + @NotNull + public Document createDocument(boolean allowUpdatesWithoutWriteAction) { + DocumentImpl document = new DocumentImpl(allowUpdatesWithoutWriteAction); + myEditorEventMulticaster.registerDocument(document); + return document; + } + public void refreshAllEditors() { for (Editor editor : myEditors) { ((EditorEx)editor).reinitSettings(); -- 2.11.4.GIT