diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/inline/KotlinInlineValHandler.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/inline/KotlinInlineValHandler.kt index b77afb3b620..2bd3efbc9d9 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/inline/KotlinInlineValHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/inline/KotlinInlineValHandler.kt @@ -71,6 +71,11 @@ class KotlinInlineValHandler : InlineActionHandler() { (it.element as? KtExpression)?.getQualifiedExpressionForSelectorOrThis() } + if (referenceExpressions.isEmpty()) { + val kind = if (declaration.isLocal) "Variable" else "Property" + return showErrorHint(project, editor, "$kind '$name' is never used") + } + val assignments = Sets.newHashSet() referenceExpressions.forEach { expression -> val parent = expression.parent @@ -120,6 +125,8 @@ class KotlinInlineValHandler : InlineActionHandler() { assignments.forEach { it.delete() } declaration.delete() + if (inlinedExpressions.isEmpty()) return@executeWriteCommand + typeArgumentsForCall?.let { addTypeArguments(it, inlinedExpressions) } parametersForFunctionLiteral?.let { addFunctionLiteralParameterTypes(it, inlinedExpressions) } diff --git a/idea/testData/refactoring/inline/noUsages.kt b/idea/testData/refactoring/inline/noUsages.kt new file mode 100644 index 00000000000..5bb578664fa --- /dev/null +++ b/idea/testData/refactoring/inline/noUsages.kt @@ -0,0 +1,4 @@ +// ERROR: Variable 'a' is never used +fun foo() { + val a = 1 + 2 +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/refactoring/inline/InlineTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/refactoring/inline/InlineTestGenerated.java index d311e2c1554..b1a79139d1e 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/inline/InlineTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/inline/InlineTestGenerated.java @@ -83,6 +83,12 @@ public class InlineTestGenerated extends AbstractInlineTest { doTest(fileName); } + @TestMetadata("noUsages.kt") + public void testNoUsages() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/inline/noUsages.kt"); + doTest(fileName); + } + @TestMetadata("Parameter.kt") public void testParameter() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/inline/Parameter.kt");