diff --git a/platform/lang-api/src/com/intellij/refactoring/RefactoringBundle.java b/platform/lang-api/src/com/intellij/refactoring/RefactoringBundle.java index 479471cf9e68..e1604d6db078 100644 --- a/platform/lang-api/src/com/intellij/refactoring/RefactoringBundle.java +++ b/platform/lang-api/src/com/intellij/refactoring/RefactoringBundle.java @@ -18,6 +18,7 @@ package com.intellij.refactoring; import com.intellij.CommonBundle; import org.jetbrains.annotations.NonNls; +import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.PropertyKey; import java.lang.ref.Reference; @@ -67,7 +68,7 @@ public class RefactoringBundle { return message("visibility.escalate"); } - public static String getCannotRefactorMessage(final String message) { + public static String getCannotRefactorMessage(@Nullable final String message) { return message("cannot.perform.refactoring") + (message == null ? "" : "\n" + message); } diff --git a/platform/lang-impl/src/com/intellij/refactoring/rename/PsiElementRenameHandler.java b/platform/lang-impl/src/com/intellij/refactoring/rename/PsiElementRenameHandler.java index 7a0f441be601..f0eac6e53640 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/rename/PsiElementRenameHandler.java +++ b/platform/lang-impl/src/com/intellij/refactoring/rename/PsiElementRenameHandler.java @@ -29,6 +29,7 @@ import com.intellij.openapi.extensions.ExtensionPointName; import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.DialogWrapper; +import com.intellij.openapi.ui.Messages; import com.intellij.openapi.util.Condition; import com.intellij.psi.*; import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil; @@ -80,6 +81,16 @@ public class PsiElementRenameHandler implements RenameHandler { if (element != null && !canRename(project, editor, element)) { return; } + + if (nameSuggestionContext != null && !PsiManager.getInstance(project).isInProject(nameSuggestionContext)) { + final String message = "Selected element is used from non-project files. These usages won't be renamed. Proceed anyway?"; + if (ApplicationManager.getApplication().isUnitTestMode()) throw new CommonRefactoringUtil.RefactoringErrorHintException(message); + if (Messages.showYesNoDialog(project, message, + RefactoringBundle.getCannotRefactorMessage(null), Messages.getWarningIcon()) != DialogWrapper.OK_EXIT_CODE) { + return; + } + } + FeatureUsageTracker.getInstance().triggerFeatureUsed("refactoring.rename"); rename(element, project, nameSuggestionContext, editor);