New J2K: Escape name of declaration in convert data class

This commit is contained in:
Ilya Kirillov
2019-03-28 14:24:05 +03:00
committed by Ilya Kirillov
parent b411e8e18e
commit 1dd0a42298
3 changed files with 12 additions and 8 deletions
@@ -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(
@@ -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) }
@@ -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<KtE
ReferencesSearch.search(this, LocalSearchScope(inElement)).any { reference ->
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()