summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Gridin <dmitry.gridin@jetbrains.com>2020-08-12 13:50:10 +0700
committerkotlin-ide-monorepo-bot <kotlin-ide-monorepo-bot-no-reply@jetbrains.com>2020-08-12 08:05:18 +0000
commit50bf9f560ce6d3c15d2a4a7b96520cd2c38cbe81 (patch)
tree8889059d7ec4af7922128f3f56c830ce7e3add32
parent7279c6ba393b5c5c688b36e54b3e8ec70adc518b (diff)
downloadintellij-kotlin-50bf9f560ce6d3c15d2a4a7b96520cd2c38cbe81.tar.gz
[inline] show "is never used" if "keep declaration" is selected
#KT-40909 #KT-41022 Fixed GitOrigin-RevId: 507707b2ec34c713998d5b13e2d21ab754de38b0
-rw-r--r--idea/src/org/jetbrains/kotlin/idea/refactoring/inline/AbstractKotlinInlineDeclarationProcessor.kt35
-rw-r--r--idea/src/org/jetbrains/kotlin/idea/refactoring/inline/KotlinInlinePropertyProcessor.kt10
-rw-r--r--idea/test/org/jetbrains/kotlin/idea/refactoring/inline/InlineTestGenerated.java5
-rw-r--r--idea/testData/refactoring/inline/function/withoutUsage.kt3
-rw-r--r--idea/testData/refactoring/inline/function/withoutUsage.kt.after1
-rw-r--r--idea/testData/refactoring/inline/inlineVariableOrProperty/noUsages.kt1
-rw-r--r--idea/testData/refactoring/inline/inlineVariableOrProperty/noUsages.kt.after2
7 files changed, 39 insertions, 18 deletions
diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/inline/AbstractKotlinInlineDeclarationProcessor.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/inline/AbstractKotlinInlineDeclarationProcessor.kt
index a27a6cf4a049..b0928e1a55fd 100644
--- a/idea/src/org/jetbrains/kotlin/idea/refactoring/inline/AbstractKotlinInlineDeclarationProcessor.kt
+++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/inline/AbstractKotlinInlineDeclarationProcessor.kt
@@ -27,10 +27,12 @@ import com.intellij.refactoring.BaseRefactoringProcessor
import com.intellij.refactoring.OverrideMethodsProcessor
import com.intellij.refactoring.RefactoringBundle
import com.intellij.refactoring.inline.GenericInlineHandler
+import com.intellij.refactoring.util.CommonRefactoringUtil
import com.intellij.usageView.UsageInfo
import com.intellij.usageView.UsageViewBundle
import com.intellij.usageView.UsageViewDescriptor
import com.intellij.util.containers.MultiMap
+import org.jetbrains.annotations.Nls
import org.jetbrains.kotlin.asJava.unwrapped
import org.jetbrains.kotlin.idea.KotlinBundle
import org.jetbrains.kotlin.idea.KotlinLanguage
@@ -61,9 +63,11 @@ abstract class AbstractKotlinInlineDeclarationProcessor<TDeclaration : KtNamedDe
KotlinBundle.message("text.local.variable")
else
KotlinBundle.message("text.local.property")
+ is KtTypeAlias -> KotlinBundle.message("text.type.alias")
else -> KotlinBundle.message("text.declaration")
}
+ @Nls
private val commandName = KotlinBundle.message(
"text.inlining.0.1",
kind,
@@ -97,12 +101,12 @@ abstract class AbstractKotlinInlineDeclarationProcessor<TDeclaration : KtNamedDe
return usages.toArray(UsageInfo.EMPTY_ARRAY)
}
- open fun additionalPreprocessUsages(usages: Array<out UsageInfo>, conflicts: MultiMap<PsiElement, String>): Boolean = true
+ open fun additionalPreprocessUsages(usages: Array<out UsageInfo>, conflicts: MultiMap<PsiElement, String>) = Unit
final override fun preprocessUsages(refUsages: Ref<Array<UsageInfo>>): Boolean {
val usagesInfo = refUsages.get()
val conflicts = MultiMap<PsiElement, String>()
- if (!additionalPreprocessUsages(usagesInfo, conflicts)) return false
+ additionalPreprocessUsages(usagesInfo, conflicts)
if (deleteAfter) {
for (superDeclaration in findSuperMethodsNoWrapping(declaration)) {
@@ -123,7 +127,27 @@ abstract class AbstractKotlinInlineDeclarationProcessor<TDeclaration : KtNamedDe
return showConflicts(conflicts, usagesInfo)
}
+ private fun postActions() {
+ if (deleteAfter) {
+ declaration.deleteWithCompanion()
+ postDeleteAction()
+ }
+
+ postAction()
+ }
+
override fun performRefactoring(usages: Array<out UsageInfo>) {
+ if (usages.isEmpty()) {
+ if (!deleteAfter) {
+ val message = KotlinBundle.message("0.1.is.never.used", kind.capitalize(), declaration.name.toString())
+ CommonRefactoringUtil.showErrorHint(myProject, editor, message, commandName, null)
+ } else {
+ postActions()
+ }
+
+ return
+ }
+
val replacementStrategy = createReplacementStrategy() ?: return
val (kotlinReferenceUsages, nonKotlinReferenceUsages) = usages.partition { it !is OverrideUsageInfo && it.element is KtReferenceExpression }
@@ -144,12 +168,7 @@ abstract class AbstractKotlinInlineDeclarationProcessor<TDeclaration : KtNamedDe
myProject,
commandName
) {
- if (deleteAfter) {
- declaration.deleteWithCompanion()
- postDeleteAction()
- }
-
- postAction()
+ postActions()
}
}
diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/inline/KotlinInlinePropertyProcessor.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/inline/KotlinInlinePropertyProcessor.kt
index 9e17514a8fa2..e55ed2f55ff7 100644
--- a/idea/src/org/jetbrains/kotlin/idea/refactoring/inline/KotlinInlinePropertyProcessor.kt
+++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/inline/KotlinInlinePropertyProcessor.kt
@@ -61,13 +61,7 @@ class KotlinInlinePropertyProcessor(
statementToDelete?.delete()
}
- override fun additionalPreprocessUsages(usages: Array<out UsageInfo>, conflicts: MultiMap<PsiElement, String>): Boolean {
- if (usages.isEmpty()) {
- val message = KotlinBundle.message("0.1.is.never.used", kind.capitalize(), declaration.name.toString())
- KotlinInlinePropertyHandler.showErrorHint(myProject, editor, message)
- return false
- }
-
+ override fun additionalPreprocessUsages(usages: Array<out UsageInfo>, conflicts: MultiMap<PsiElement, String>) {
val initializer by lazy { extractInitialization(declaration).initializerOrNull?.assignment?.left }
for (usage in usages) {
val expression = usage.element?.writeOrReadWriteExpression ?: continue
@@ -75,8 +69,6 @@ class KotlinInlinePropertyProcessor(
conflicts.putValue(expression, KotlinBundle.message("unsupported.usage.0", expression.parent.text))
}
}
-
- return true
}
class Initializer(val value: KtExpression, val assignment: KtBinaryExpression?)
diff --git a/idea/test/org/jetbrains/kotlin/idea/refactoring/inline/InlineTestGenerated.java b/idea/test/org/jetbrains/kotlin/idea/refactoring/inline/InlineTestGenerated.java
index 4a3fd3da920f..b75a810f7472 100644
--- a/idea/test/org/jetbrains/kotlin/idea/refactoring/inline/InlineTestGenerated.java
+++ b/idea/test/org/jetbrains/kotlin/idea/refactoring/inline/InlineTestGenerated.java
@@ -239,6 +239,11 @@ public class InlineTestGenerated extends AbstractInlineTest {
runTest("testData/refactoring/inline/function/UnitReturnType4.kt");
}
+ @TestMetadata("withoutUsage.kt")
+ public void testWithoutUsage() throws Exception {
+ runTest("testData/refactoring/inline/function/withoutUsage.kt");
+ }
+
@RunWith(JUnit3RunnerWithInners.class)
@TestMetadata("testData/refactoring/inline/function/expressionBody")
public static class ExpressionBody extends AbstractInlineTest {
diff --git a/idea/testData/refactoring/inline/function/withoutUsage.kt b/idea/testData/refactoring/inline/function/withoutUsage.kt
new file mode 100644
index 000000000000..eec228c4f8d0
--- /dev/null
+++ b/idea/testData/refactoring/inline/function/withoutUsage.kt
@@ -0,0 +1,3 @@
+fun <caret>a() {
+
+}
diff --git a/idea/testData/refactoring/inline/function/withoutUsage.kt.after b/idea/testData/refactoring/inline/function/withoutUsage.kt.after
new file mode 100644
index 000000000000..8b137891791f
--- /dev/null
+++ b/idea/testData/refactoring/inline/function/withoutUsage.kt.after
@@ -0,0 +1 @@
+
diff --git a/idea/testData/refactoring/inline/inlineVariableOrProperty/noUsages.kt b/idea/testData/refactoring/inline/inlineVariableOrProperty/noUsages.kt
index ae00ff298beb..4b7aea1df445 100644
--- a/idea/testData/refactoring/inline/inlineVariableOrProperty/noUsages.kt
+++ b/idea/testData/refactoring/inline/inlineVariableOrProperty/noUsages.kt
@@ -1,4 +1,3 @@
-// ERROR: Local variable 'a' is never used
fun foo() {
val <caret>a = 1 + 2
} \ No newline at end of file
diff --git a/idea/testData/refactoring/inline/inlineVariableOrProperty/noUsages.kt.after b/idea/testData/refactoring/inline/inlineVariableOrProperty/noUsages.kt.after
new file mode 100644
index 000000000000..661f3c98cd71
--- /dev/null
+++ b/idea/testData/refactoring/inline/inlineVariableOrProperty/noUsages.kt.after
@@ -0,0 +1,2 @@
+fun foo() {
+}