diff --git a/java/java-tests/testData/refactoring/safeDelete/UsagesInScratch.java b/java/java-tests/testData/refactoring/safeDelete/UsagesInScratch.java new file mode 100644 index 000000000000..0e8772dfdda0 --- /dev/null +++ b/java/java-tests/testData/refactoring/safeDelete/UsagesInScratch.java @@ -0,0 +1,3 @@ +class Test { + public void name() {} +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/safeDelete/UsagesInScratch_after.java b/java/java-tests/testData/refactoring/safeDelete/UsagesInScratch_after.java new file mode 100644 index 000000000000..96d83e0c5031 --- /dev/null +++ b/java/java-tests/testData/refactoring/safeDelete/UsagesInScratch_after.java @@ -0,0 +1,2 @@ +class Test { +} \ No newline at end of file diff --git a/platform/lang-impl/src/com/intellij/refactoring/BaseRefactoringProcessor.java b/platform/lang-impl/src/com/intellij/refactoring/BaseRefactoringProcessor.java index 7e28661d2978..354493ace32b 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/BaseRefactoringProcessor.java +++ b/platform/lang-impl/src/com/intellij/refactoring/BaseRefactoringProcessor.java @@ -61,6 +61,7 @@ import com.intellij.usageView.UsageViewUtil; import com.intellij.usages.*; import com.intellij.usages.rules.PsiElementUsage; import com.intellij.util.Processor; +import com.intellij.util.ThrowableRunnable; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.HashSet; import com.intellij.util.containers.MultiMap; @@ -74,6 +75,7 @@ import java.util.*; public abstract class BaseRefactoringProcessor implements Runnable { private static final Logger LOG = Logger.getInstance("#com.intellij.refactoring.BaseRefactoringProcessor"); + private static boolean PREVIEW_IN_TESTS = true; @NotNull protected final Project myProject; @@ -226,8 +228,20 @@ public abstract class BaseRefactoringProcessor implements Runnable { } } + @TestOnly + public static void runWithDisabledPreview(ThrowableRunnable runnable) throws T { + PREVIEW_IN_TESTS = false; + try { + runnable.run(); + } + finally { + PREVIEW_IN_TESTS = true; + } + } + protected void previewRefactoring(@NotNull UsageInfo[] usages) { if (ApplicationManager.getApplication().isUnitTestMode()) { + if (!PREVIEW_IN_TESTS) throw new RuntimeException("Unexpected preview in tests: " + StringUtil.join(usages, info -> info.toString(), ", ")); ensureElementsWritable(usages, createUsageViewDescriptor(usages)); execute(usages); return; diff --git a/platform/lang-impl/src/com/intellij/refactoring/util/TextOccurrencesUtil.java b/platform/lang-impl/src/com/intellij/refactoring/util/TextOccurrencesUtil.java index 706eb2b29972..3c9ab3ebbd42 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/util/TextOccurrencesUtil.java +++ b/platform/lang-impl/src/com/intellij/refactoring/util/TextOccurrencesUtil.java @@ -76,7 +76,7 @@ public class TextOccurrencesUtil { @NotNull final PairProcessor processor) { PsiSearchHelper helper = PsiSearchHelper.SERVICE.getInstance(element.getProject()); SearchScope scope = helper.getUseScope(element); - scope = GlobalSearchScope.projectScope(element.getProject()).intersectWith(scope); + scope = scope.intersectWith(GlobalSearchScope.projectScope(element.getProject())); Processor commentOrLiteralProcessor = literal -> processTextIn(literal, stringToSearch, ignoreReferences, processor); return processStringLiteralsContainingIdentifier(stringToSearch, scope, helper, commentOrLiteralProcessor) && helper.processCommentsContainingIdentifier(stringToSearch, scope, commentOrLiteralProcessor);