diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/inline/KotlinInlineFunctionProcessor.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/inline/KotlinInlineFunctionProcessor.kt index e6262585d85..69e778349a7 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/inline/KotlinInlineFunctionProcessor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/inline/KotlinInlineFunctionProcessor.kt @@ -22,6 +22,7 @@ import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.search.searches.ReferencesSearch import com.intellij.refactoring.BaseRefactoringProcessor import com.intellij.refactoring.RefactoringBundle +import com.intellij.refactoring.util.CommonRefactoringUtil import com.intellij.usageView.UsageInfo import com.intellij.usageView.UsageViewBundle import com.intellij.usageView.UsageViewDescriptor @@ -48,18 +49,34 @@ class KotlinInlineFunctionProcessor( if (inlineThisOnly && reference != null) return arrayOf(UsageInfo(reference)) val usages = runReadAction { val searchScope = KotlinSourceFilterScope.projectSources(GlobalSearchScope.projectScope(myProject), myProject) - ReferencesSearch.search(function, searchScope).filterIsInstance() + ReferencesSearch.search(function, searchScope) } return usages.map(::UsageInfo).toTypedArray() } override fun performRefactoring(usages: Array) { + val simpleNameUsages = usages.mapNotNull { it.element as? KtSimpleNameExpression } replacementStrategy.replaceUsages( - usages.mapNotNull { it.element as? KtSimpleNameExpression }, + simpleNameUsages, function, myProject, commandName, - { if (deleteAfter) function.delete() } + { + if (deleteAfter) { + if (usages.size == simpleNameUsages.size) { + function.delete() + } + else { + CommonRefactoringUtil.showErrorHint( + function.project, + null, + "Cannot inline ${usages.size - simpleNameUsages.size}/${usages.size} usages", + "Inline Function", + null + ) + } + } + } ) }