diff --git a/platform/testFramework/src/com/intellij/testFramework/LightPlatformCodeInsightTestCase.java b/platform/testFramework/src/com/intellij/testFramework/LightPlatformCodeInsightTestCase.java index 7ad3141db102..3edb127b33a7 100644 --- a/platform/testFramework/src/com/intellij/testFramework/LightPlatformCodeInsightTestCase.java +++ b/platform/testFramework/src/com/intellij/testFramework/LightPlatformCodeInsightTestCase.java @@ -141,6 +141,7 @@ public abstract class LightPlatformCodeInsightTestCase extends LightPlatformTest */ protected static void configureFromFileText(@NonNls final String fileName, @NonNls final String fileText) throws IOException { ApplicationManager.getApplication().runWriteAction(new Runnable() { + @Override public void run() { final Document fakeDocument = new DocumentImpl(fileText); @@ -332,6 +333,7 @@ public abstract class LightPlatformCodeInsightTestCase extends LightPlatformTest bringRealEditorBack(); PsiDocumentManager.getInstance(getProject()).commitAllDocuments(); ApplicationManager.getApplication().runWriteAction(new Runnable() { + @Override public void run() { final Document document = EditorFactory.getInstance().createDocument(fileText); @@ -574,10 +576,15 @@ public abstract class LightPlatformCodeInsightTestCase extends LightPlatformTest new CommentByLineCommentHandler().invoke(getProject(), getEditor(), getFile()); } - private static void doAction(@NotNull String actionId) { - EditorActionManager actionManager = EditorActionManager.getInstance(); - EditorActionHandler actionHandler = actionManager.getActionHandler(actionId); - actionHandler.execute(getEditor(), DataManager.getInstance().getDataContext()); + private static void doAction(@NotNull final String actionId) { + CommandProcessor.getInstance().executeCommand(getProject(), new Runnable() { + @Override + public void run() { + EditorActionManager actionManager = EditorActionManager.getInstance(); + EditorActionHandler actionHandler = actionManager.getActionHandler(actionId); + actionHandler.execute(getEditor(), DataManager.getInstance().getDataContext()); + } + }, "", null); } protected static DataContext getCurrentEditorDataContext() { diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/PreparedFragmentedContent.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/PreparedFragmentedContent.java index 9f1d666f9b17..b134fd61a55c 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/PreparedFragmentedContent.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/PreparedFragmentedContent.java @@ -15,6 +15,7 @@ */ package com.intellij.openapi.vcs.changes; +import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.diff.DiffContent; import com.intellij.openapi.diff.SimpleContent; import com.intellij.openapi.editor.Document; @@ -32,7 +33,6 @@ import com.intellij.openapi.vcs.ProjectLevelVcsManager; import com.intellij.openapi.vcs.VcsConfiguration; import com.intellij.openapi.vcs.history.VcsRevisionNumber; import com.intellij.openapi.vcs.impl.ContentRevisionCache; -import com.intellij.openapi.vcs.impl.ProjectLevelVcsManagerImpl; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.BeforeAfter; import com.intellij.util.Consumer; @@ -108,55 +108,60 @@ public class PreparedFragmentedContent { } private void fromFragmentedContent(final FragmentedContent fragmentedContent) { - myOneSide = fragmentedContent.isOneSide(); - myIsAddition = fragmentedContent.isAddition(); - List> expandedRanges = - expand(fragmentedContent.getRanges(), VcsConfiguration.getInstance(myProject).SHORT_DIFF_EXTRA_LINES, - fragmentedContent.getBefore(), fragmentedContent.getAfter()); - // add "artificial" empty lines + ApplicationManager.getApplication().runReadAction(new Runnable() { + @Override + public void run() { + myOneSide = fragmentedContent.isOneSide(); + myIsAddition = fragmentedContent.isAddition(); + List> expandedRanges = + expand(fragmentedContent.getRanges(), VcsConfiguration.getInstance(myProject).SHORT_DIFF_EXTRA_LINES, + fragmentedContent.getBefore(), fragmentedContent.getAfter()); + // add "artificial" empty lines - // line starts - BeforeAfter lines = new BeforeAfter(0,0); - for (BeforeAfter lineNumbers : expandedRanges) { - if (lines.getBefore() > 0 || lines.getAfter() > 0) { - oldConvertor.emptyLine(lines.getBefore()); - newConvertor.emptyLine(lines.getAfter()); - lines = new BeforeAfter(lines.getBefore() + 1, lines.getAfter() + 1); - sbOld.append('\n'); - sbNew.append('\n'); + // line starts + BeforeAfter lines = new BeforeAfter(0, 0); + for (BeforeAfter lineNumbers : expandedRanges) { + if (lines.getBefore() > 0 || lines.getAfter() > 0) { + oldConvertor.emptyLine(lines.getBefore()); + newConvertor.emptyLine(lines.getAfter()); + lines = new BeforeAfter(lines.getBefore() + 1, lines.getAfter() + 1); + sbOld.append('\n'); + sbNew.append('\n'); + } + + myLineRanges.add(lines); + oldConvertor.put(lines.getBefore(), lineNumbers.getBefore().getStartOffset()); + newConvertor.put(lines.getAfter(), lineNumbers.getAfter().getStartOffset()); + + final Document document = fragmentedContent.getBefore(); + if (sbOld.length() > 0) { + sbOld.append('\n'); + } + final TextRange beforeRange = new TextRange(document.getLineStartOffset(lineNumbers.getBefore().getStartOffset()), + document.getLineEndOffset(lineNumbers.getBefore().getEndOffset())); + myBeforeFragments.add(beforeRange); + sbOld.append(document.getText(beforeRange)); + + final Document document1 = fragmentedContent.getAfter(); + if (sbNew.length() > 0) { + sbNew.append('\n'); + } + final TextRange afterRange = new TextRange(document1.getLineStartOffset(lineNumbers.getAfter().getStartOffset()), + document1.getLineEndOffset(lineNumbers.getAfter().getEndOffset())); + myAfterFragments.add(afterRange); + sbNew.append(document1.getText(afterRange)); + + int before = lines.getBefore() + lineNumbers.getBefore().getEndOffset() - lineNumbers.getBefore().getStartOffset() + 1; + int after = lines.getAfter() + lineNumbers.getAfter().getEndOffset() - lineNumbers.getAfter().getStartOffset() + 1; + lines = new BeforeAfter(before, after); + } + myLineRanges.add(new BeforeAfter(lines.getBefore() == 0 ? 0 : lines.getBefore() - 1, + lines.getAfter() == 0 ? 0 : lines.getAfter() - 1)); + + setHighlighters(fragmentedContent.getBefore(), fragmentedContent.getAfter(), expandedRanges); + setTodoHighlighting(fragmentedContent.getBefore(), fragmentedContent.getAfter()); } - - myLineRanges.add(lines); - oldConvertor.put(lines.getBefore(), lineNumbers.getBefore().getStartOffset()); - newConvertor.put(lines.getAfter(), lineNumbers.getAfter().getStartOffset()); - - final Document document = fragmentedContent.getBefore(); - if (sbOld.length() > 0) { - sbOld.append('\n'); - } - final TextRange beforeRange = new TextRange(document.getLineStartOffset(lineNumbers.getBefore().getStartOffset()), - document.getLineEndOffset(lineNumbers.getBefore().getEndOffset())); - myBeforeFragments.add(beforeRange); - sbOld.append(document.getText(beforeRange)); - - final Document document1 = fragmentedContent.getAfter(); - if (sbNew.length() > 0) { - sbNew.append('\n'); - } - final TextRange afterRange = new TextRange(document1.getLineStartOffset(lineNumbers.getAfter().getStartOffset()), - document1.getLineEndOffset(lineNumbers.getAfter().getEndOffset())); - myAfterFragments.add(afterRange); - sbNew.append(document1.getText(afterRange)); - - int before = lines.getBefore() + lineNumbers.getBefore().getEndOffset() - lineNumbers.getBefore().getStartOffset() + 1; - int after = lines.getAfter() + lineNumbers.getAfter().getEndOffset() - lineNumbers.getAfter().getStartOffset() + 1; - lines = new BeforeAfter(before, after); - } - myLineRanges.add(new BeforeAfter(lines.getBefore() == 0 ? 0 : lines.getBefore() - 1, - lines.getAfter() == 0 ? 0 : lines.getAfter() - 1)); - - setHighlighters(fragmentedContent.getBefore(), fragmentedContent.getAfter(), expandedRanges); - setTodoHighlighting(fragmentedContent.getBefore(), fragmentedContent.getAfter()); + }); } public LineNumberConvertor getOldConvertor() { @@ -249,8 +254,8 @@ public class PreparedFragmentedContent { myBeforeTodoRanges = beforeTodoRanges; } - public List> expand(List> myRanges, final int lines, final Document oldDocument, - final Document document) { + public static List> expand(List> myRanges, final int lines, final Document oldDocument, + final Document document) { if (myRanges == null || myRanges.isEmpty()) return Collections.emptyList(); if (lines == -1) { final List> shiftedRanges = new ArrayList>(1); @@ -286,12 +291,12 @@ public class PreparedFragmentedContent { return zippedRanges; } - private boolean neighbourOrIntersect(final TextRange a, final TextRange b) { + private static boolean neighbourOrIntersect(final TextRange a, final TextRange b) { return a.getEndOffset() + 1 == b.getStartOffset() || a.intersects(b); } - private TextRange expandRange(final TextRange range, final int shift, final int size) { - return new TextRange(Math.max(0, (range.getStartOffset() - shift)), Math.max(0, Math.min(size - 1, range.getEndOffset() + shift))); + private static TextRange expandRange(final TextRange range, final int shift, final int size) { + return new TextRange(Math.max(0, range.getStartOffset() - shift), Math.max(0, Math.min(size - 1, range.getEndOffset() + shift))); } private void setHighlighters(final Document oldDocument, final Document document,