From 691de677b332a143e3fd0d694bfc9b28f3bc3fa2 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Tue, 24 May 2016 15:30:02 +0300 Subject: [PATCH] Rename: Quote non-identifier names in Kotlin references #KT-9156 Fixed --- ChangeLog.md | 5 +++++ .../kotlin/idea/references/KtSimpleNameReference.kt | 3 ++- .../rename/renameJavaMethodToKtKeyword/after/JFoo.java | 5 +++++ .../rename/renameJavaMethodToKtKeyword/after/test.kt | 3 +++ .../rename/renameJavaMethodToKtKeyword/before/JFoo.java | 5 +++++ .../rename/renameJavaMethodToKtKeyword/before/test.kt | 3 +++ .../renameJavaMethodToKtKeyword.test | 5 +++++ .../kotlin/idea/refactoring/rename/RenameTestGenerated.java | 6 ++++++ 8 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 idea/testData/refactoring/rename/renameJavaMethodToKtKeyword/after/JFoo.java create mode 100644 idea/testData/refactoring/rename/renameJavaMethodToKtKeyword/after/test.kt create mode 100644 idea/testData/refactoring/rename/renameJavaMethodToKtKeyword/before/JFoo.java create mode 100644 idea/testData/refactoring/rename/renameJavaMethodToKtKeyword/before/test.kt create mode 100644 idea/testData/refactoring/rename/renameJavaMethodToKtKeyword/renameJavaMethodToKtKeyword.test diff --git a/ChangeLog.md b/ChangeLog.md index 0cfebe0f49b..b12ae3f5aed 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -169,6 +169,11 @@ - [`KT-11574`](https://youtrack.jetbrains.com/issue/KT-11574) Support predefined Java positions for language injection - [`KT-11472`](https://youtrack.jetbrains.com/issue/KT-11472) Add comment or @Language annotation after "Inject language or reference" intention automatically +#### Refactorings + +###### Issues fixed +- [`KT-9156`](https://youtrack.jetbrains.com/issue/KT-9156) Quote non-identifier names in Kotlin references + #### Java to Kotlin converter ###### New features diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/KtSimpleNameReference.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/KtSimpleNameReference.kt index db8388b4ac5..2b07be21b3e 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/KtSimpleNameReference.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/KtSimpleNameReference.kt @@ -27,6 +27,7 @@ import org.jetbrains.kotlin.idea.codeInsight.shorten.addToShorteningWaitSet import org.jetbrains.kotlin.idea.intentions.OperatorToFunctionIntention import org.jetbrains.kotlin.idea.refactoring.fqName.getKotlinFqName import org.jetbrains.kotlin.idea.core.ShortenReferences +import org.jetbrains.kotlin.idea.core.quoteIfNeeded import org.jetbrains.kotlin.lexer.KtToken import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.load.java.descriptors.JavaPropertyDescriptor @@ -114,7 +115,7 @@ class KtSimpleNameReference(expression: KtSimpleNameExpression) : KtSimpleRefere val element = Extensions.getArea(expression.project).getExtensionPoint(SimpleNameReferenceExtension.EP_NAME).extensions .asSequence() .map { it.handleElementRename(this, psiFactory, newElementName) } - .firstOrNull { it != null } ?: psiFactory.createNameIdentifier(newElementName) + .firstOrNull { it != null } ?: psiFactory.createNameIdentifier(newElementName.quoteIfNeeded()) val nameElement = expression.getReferencedNameElement() diff --git a/idea/testData/refactoring/rename/renameJavaMethodToKtKeyword/after/JFoo.java b/idea/testData/refactoring/rename/renameJavaMethodToKtKeyword/after/JFoo.java new file mode 100644 index 00000000000..2d998ea4c14 --- /dev/null +++ b/idea/testData/refactoring/rename/renameJavaMethodToKtKeyword/after/JFoo.java @@ -0,0 +1,5 @@ +public class JFoo { + public void fun() { + + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/renameJavaMethodToKtKeyword/after/test.kt b/idea/testData/refactoring/rename/renameJavaMethodToKtKeyword/after/test.kt new file mode 100644 index 00000000000..b5d31b81e42 --- /dev/null +++ b/idea/testData/refactoring/rename/renameJavaMethodToKtKeyword/after/test.kt @@ -0,0 +1,3 @@ +fun test(foo: JFoo) { + foo.`fun`() +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/renameJavaMethodToKtKeyword/before/JFoo.java b/idea/testData/refactoring/rename/renameJavaMethodToKtKeyword/before/JFoo.java new file mode 100644 index 00000000000..486478ed265 --- /dev/null +++ b/idea/testData/refactoring/rename/renameJavaMethodToKtKeyword/before/JFoo.java @@ -0,0 +1,5 @@ +public class JFoo { + public void /*rename*/foo() { + + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/renameJavaMethodToKtKeyword/before/test.kt b/idea/testData/refactoring/rename/renameJavaMethodToKtKeyword/before/test.kt new file mode 100644 index 00000000000..c7cd0ce0428 --- /dev/null +++ b/idea/testData/refactoring/rename/renameJavaMethodToKtKeyword/before/test.kt @@ -0,0 +1,3 @@ +fun test(foo: JFoo) { + foo.foo() +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/renameJavaMethodToKtKeyword/renameJavaMethodToKtKeyword.test b/idea/testData/refactoring/rename/renameJavaMethodToKtKeyword/renameJavaMethodToKtKeyword.test new file mode 100644 index 00000000000..3129262a5f9 --- /dev/null +++ b/idea/testData/refactoring/rename/renameJavaMethodToKtKeyword/renameJavaMethodToKtKeyword.test @@ -0,0 +1,5 @@ +{ + "type": "MARKED_ELEMENT", + "mainFile": "JFoo.java", + "newName": "fun" +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/RenameTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/RenameTestGenerated.java index f658e0b33ce..e19dd023d07 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/RenameTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/RenameTestGenerated.java @@ -215,6 +215,12 @@ public class RenameTestGenerated extends AbstractRenameTest { doTest(fileName); } + @TestMetadata("renameJavaMethodToKtKeyword/renameJavaMethodToKtKeyword.test") + public void testRenameJavaMethodToKtKeyword_RenameJavaMethodToKtKeyword() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/rename/renameJavaMethodToKtKeyword/renameJavaMethodToKtKeyword.test"); + doTest(fileName); + } + @TestMetadata("renameJavaSyntheticIsPropertyByGetterRef/renameJavaSyntheticIsPropertyByGetterRef.test") public void testRenameJavaSyntheticIsPropertyByGetterRef_RenameJavaSyntheticIsPropertyByGetterRef() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/rename/renameJavaSyntheticIsPropertyByGetterRef/renameJavaSyntheticIsPropertyByGetterRef.test");