diff --git a/platform/lang-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodHelper.java b/platform/lang-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodHelper.java index ccfbe6ccce4b..e2937666a4a4 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodHelper.java +++ b/platform/lang-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodHelper.java @@ -42,6 +42,7 @@ import com.intellij.refactoring.RefactoringBundle; import com.intellij.ui.ReplacePromptDialog; import com.intellij.util.Consumer; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.*; @@ -49,7 +50,7 @@ import java.util.*; * @author Dennis.Ushakov */ public class ExtractMethodHelper { - public static void processDuplicates(@NotNull final PsiElement callElement, + public static void processDuplicates(@Nullable final PsiElement callElement, @NotNull final PsiElement generatedMethod, @NotNull final List scope, @NotNull final SimpleDuplicatesFinder finder, @@ -60,7 +61,7 @@ public class ExtractMethodHelper { replaceDuplicates(callElement, editor, replacer, finder.findDuplicates(scope, generatedMethod)); return; } - final Project project = callElement.getProject(); + final Project project = generatedMethod.getProject(); ProgressManager.getInstance().run(new Task.Backgroundable(project, RefactoringBundle.message("searching.for.duplicates"), true) { public void run(@NotNull ProgressIndicator indicator) { if (myProject == null || myProject.isDisposed()) return; @@ -115,7 +116,7 @@ public class ExtractMethodHelper { * @param duplicates discovered duplicates of extracted code fragment * @see #collectDuplicates(SimpleDuplicatesFinder, List, PsiElement) */ - public static void replaceDuplicates(@NotNull PsiElement callElement, + public static void replaceDuplicates(@Nullable PsiElement callElement, @NotNull Editor editor, @NotNull Consumer> replacer, @NotNull List duplicates) { @@ -124,7 +125,12 @@ public class ExtractMethodHelper { .message("0.has.detected.1.code.fragments.in.this.file.that.can.be.replaced.with.a.call.to.extracted.method", ApplicationNamesInfo.getInstance().getProductName(), duplicates.size()); final boolean isUnittest = ApplicationManager.getApplication().isUnitTestMode(); - final Project project = callElement.getProject(); + final Project project = callElement != null ? callElement.getProject() : editor.getProject(); + if (project == null) { + Messages.showErrorDialog(editor.getComponent(), "Cannot find project."); + return; + } + final int exitCode = !isUnittest ? Messages.showYesNoDialog(project, message, RefactoringBundle.message("refactoring.extract.method.dialog.title"), Messages.getInformationIcon()) :