diff --git a/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodHandler.java b/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodHandler.java index da8468228b67..ae2aec793470 100644 --- a/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodHandler.java +++ b/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodHandler.java @@ -20,7 +20,6 @@ import com.intellij.codeInsight.highlighting.HighlightManager; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.actionSystem.LangDataKeys; import com.intellij.openapi.actionSystem.PlatformDataKeys; -import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.command.CommandProcessor; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.Editor; @@ -136,16 +135,12 @@ public class ExtractMethodHandler implements RefactoringActionHandler { public void run() { PostprocessReformattingAspect.getInstance(project).postponeFormattingInside(new Runnable() { public void run() { - ApplicationManager.getApplication().runWriteAction(new Runnable() { - public void run() { - try { - processor.doRefactoring(); - } - catch (IncorrectOperationException e) { - LOG.error(e); - } - } - }); + try { + processor.doRefactoring(); + } + catch (IncorrectOperationException e) { + LOG.error(e); + } DuplicatesImpl.processDuplicates(processor, project, editor); } }); @@ -230,4 +225,4 @@ public class ExtractMethodHandler implements RefactoringActionHandler { final OpenFileDescriptor fileDescriptor = new OpenFileDescriptor(project, virtualFile); return FileEditorManager.getInstance(project).openTextEditor(fileDescriptor, false); } -} \ No newline at end of file +} diff --git a/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodProcessor.java b/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodProcessor.java index 1dddf700b55b..ffc2a8ed265d 100644 --- a/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodProcessor.java @@ -34,6 +34,7 @@ import com.intellij.openapi.editor.ScrollType; import com.intellij.openapi.editor.colors.EditorColors; import com.intellij.openapi.editor.colors.EditorColorsManager; import com.intellij.openapi.editor.markup.TextAttributes; +import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.Pair; @@ -542,15 +543,29 @@ public class ExtractMethodProcessor implements MatchProvider { LogicalPosition pos = new LogicalPosition(0, 0); myEditor.getCaretModel().moveToLogicalPosition(pos); - SearchScope processConflictsScope = myMethodVisibility.equals(PsiModifier.PRIVATE) ? + final SearchScope processConflictsScope = myMethodVisibility.equals(PsiModifier.PRIVATE) ? new LocalSearchScope(myTargetClass) : GlobalSearchScope.projectScope(myProject); - final Map overloadsResolveMap = - ExtractMethodUtil.encodeOverloadTargets(myTargetClass, processConflictsScope, myMethodName, myCodeFragmentMember); - - doExtract(); - ExtractMethodUtil.decodeOverloadTargets(overloadsResolveMap, myExtractedMethod, myCodeFragmentMember); + final Map overloadsResolveMap = new HashMap(); + final Runnable collectOverloads = new Runnable() { + public void run() { + overloadsResolveMap.putAll(ExtractMethodUtil.encodeOverloadTargets(myTargetClass, processConflictsScope, myMethodName, myCodeFragmentMember)); + } + }; + final Runnable extract = new Runnable() { + public void run() { + doExtract(); + ExtractMethodUtil.decodeOverloadTargets(overloadsResolveMap, myExtractedMethod, myCodeFragmentMember); + } + }; + if (ApplicationManager.getApplication().isWriteAccessAllowed()) { + collectOverloads.run(); + extract.run(); + } else { + if (!ProgressManager.getInstance().runProcessWithProgressSynchronously(collectOverloads, "Collect overloads...", true, myProject)) return; + ApplicationManager.getApplication().runWriteAction(extract); + } LogicalPosition pos1 = new LogicalPosition(line, col); myEditor.getCaretModel().moveToLogicalPosition(pos1);