From 1dd0a4229874866233f8e6e28717f1b67d1685d6 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Thu, 28 Mar 2019 14:24:05 +0300 Subject: [PATCH] New J2K: Escape name of declaration in convert data class --- .../kotlin/nj2k/postProcessing/ConvertDataClass.kt | 7 ++++--- .../nj2k/postProcessing/ConvertGettersAndSetters.kt | 5 ----- .../src/org/jetbrains/kotlin/nj2k/postProcessing/utils.kt | 8 ++++++++ 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/ConvertDataClass.kt b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/ConvertDataClass.kt index ce63531ea41..52fd3f57209 100644 --- a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/ConvertDataClass.kt +++ b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/ConvertDataClass.kt @@ -23,12 +23,13 @@ import org.jetbrains.kotlin.types.typeUtil.makeNotNullable class ConvertDataClass : NewJ2kPostProcessing { override val writeActionNeeded: Boolean = true - fun KtCallableDeclaration.rename(newName: String) { + private fun KtCallableDeclaration.rename(newName: String) { val factory = KtPsiFactory(this) + val escapedName = newName.escaped() ReferencesSearch.search(this, LocalSearchScope(containingKtFile)).forEach { - it.element.replace(factory.createExpression(newName)) + it.element.replace(factory.createExpression(escapedName)) } - setName(newName) + setName(escapedName) } private data class DataClassInfo( diff --git a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/ConvertGettersAndSetters.kt b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/ConvertGettersAndSetters.kt index 5593cb82ecb..36eb0bd6090 100644 --- a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/ConvertGettersAndSetters.kt +++ b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/ConvertGettersAndSetters.kt @@ -126,11 +126,6 @@ class ConvertGettersAndSetters : NewJ2kPostProcessing { ) } - private val keywords = KtTokens.KEYWORDS.types.map { (it as KtKeywordToken).value }.toSet() - - private fun String.escaped() = - if (this in keywords) "`$this`" - else this private fun KtFunction.getterName() = name?.takeIf { JvmAbi.isGetterName(it) } diff --git a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/utils.kt b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/utils.kt index b635922ee35..5d9f0e0882e 100644 --- a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/utils.kt +++ b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/utils.kt @@ -11,6 +11,8 @@ import org.jetbrains.kotlin.descriptors.CallableDescriptor import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.references.KtSimpleNameReference import org.jetbrains.kotlin.idea.references.mainReference +import org.jetbrains.kotlin.lexer.KtKeywordToken +import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType import org.jetbrains.kotlin.psi.psiUtil.isAncestor @@ -77,3 +79,9 @@ fun KtElement.hasUsagesOutsideOf(inElement: KtElement, outsideElements: List outsideElements.none { it.isAncestor(reference.element) } } + +fun String.escaped() = + if (this in keywords || '$' in this) "`$this`" + else this + +private val keywords = KtTokens.KEYWORDS.types.map { (it as KtKeywordToken).value }.toSet()