#RUBY-9955 don't insert call element if it isn't needed; replace duplicates with proper let name

This commit is contained in:
Dmitry.Krasilschikov
2016-07-12 16:49:16 +03:00
parent b7c079b643
commit 30f7c339b1
@@ -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<PsiElement> 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<Pair<SimpleMatch, PsiElement>> replacer,
@NotNull List<SimpleMatch> 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()) :