From 093878bd065251f3b571c00d58e304e7bf1b4c14 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Wed, 29 Apr 2015 19:11:31 +0200 Subject: [PATCH] correctly implement JetSimpleNameReference.getTextRange() so that it doesn't include the @ character for references in labels #KT-7560 Fixed --- .../kotlin/idea/references/JetSimpleNameReference.kt | 6 +++++- .../refactoring/rename/inplace/LabelFromFunction.kt | 5 +++++ .../refactoring/rename/inplace/LabelFromFunction.kt.after | 5 +++++ .../jetbrains/kotlin/idea/refactoring/InplaceRenameTest.kt | 4 ++++ 4 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 idea/testData/refactoring/rename/inplace/LabelFromFunction.kt create mode 100644 idea/testData/refactoring/rename/inplace/LabelFromFunction.kt.after diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/JetSimpleNameReference.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/JetSimpleNameReference.kt index 915bd10b3d1..e4893a9056b 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/JetSimpleNameReference.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/JetSimpleNameReference.kt @@ -61,7 +61,11 @@ public class JetSimpleNameReference( return super.isReferenceTo(element) } - override fun getRangeInElement(): TextRange = TextRange(0, getElement().getTextLength()) + override fun getRangeInElement(): TextRange { + val element = getElement().getReferencedNameElement() + val startOffset = getElement().getTextRange().getStartOffset() + return element.getTextRange().shiftRight(-startOffset) + } override fun canRename(): Boolean { if (expression.getParentOfTypeAndBranch(strict = true){ getOperationReference() } != null) return false diff --git a/idea/testData/refactoring/rename/inplace/LabelFromFunction.kt b/idea/testData/refactoring/rename/inplace/LabelFromFunction.kt new file mode 100644 index 00000000000..b29035e36ea --- /dev/null +++ b/idea/testData/refactoring/rename/inplace/LabelFromFunction.kt @@ -0,0 +1,5 @@ +fun xyzzy(): Any { + fun bar(): Int { + return@bar 1 + } +} diff --git a/idea/testData/refactoring/rename/inplace/LabelFromFunction.kt.after b/idea/testData/refactoring/rename/inplace/LabelFromFunction.kt.after new file mode 100644 index 00000000000..9a0785dd411 --- /dev/null +++ b/idea/testData/refactoring/rename/inplace/LabelFromFunction.kt.after @@ -0,0 +1,5 @@ +fun xyzzy(): Any { + fun foo(): Int { + return@foo 1 + } +} diff --git a/idea/tests/org/jetbrains/kotlin/idea/refactoring/InplaceRenameTest.kt b/idea/tests/org/jetbrains/kotlin/idea/refactoring/InplaceRenameTest.kt index c8047dba87b..9720ad252db 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/InplaceRenameTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/InplaceRenameTest.kt @@ -124,6 +124,10 @@ public class InplaceRenameTest : LightPlatformCodeInsightTestCase() { doTestInplaceRename(null) } + public fun testLabelFromFunction() { + doTestInplaceRename("foo") + } + private fun doTestInplaceRename(newName: String?) { configureByFile(getTestName(false) + ".kt") val element = TargetElementUtilBase.findTargetElement(