[kotlin] Backtick only uncommon package name parts

#KTIJ-30095

GitOrigin-RevId: 15c6498a403d35777158263e21e482502bee058e
This commit is contained in:
Vladimir Dolzhenko
2024-06-26 13:04:27 +00:00
committed by intellij-monorepo-bot
parent 2aff652d0a
commit ea06bf5246
5 changed files with 12 additions and 20 deletions
@@ -30,7 +30,6 @@ import org.jetbrains.kotlin.psi.KtPsiFactory
import org.jetbrains.kotlin.psi.KtUserType
import org.jetbrains.kotlin.psi.createExpressionByPattern
import org.jetbrains.kotlin.psi.psiUtil.getPrevSiblingIgnoringWhitespaceAndComments
import org.jetbrains.kotlin.psi.psiUtil.isIdentifier
import org.jetbrains.kotlin.psi.psiUtil.quoteIfNeeded
import java.lang.RuntimeException
@@ -91,7 +90,7 @@ object AddQualifiersUtil {
is KtCallableReferenceExpression -> addOrReplaceQualifier(psiFactory, parent, qualifier)
is KtCallExpression -> replaceExpressionWithDotQualifier(psiFactory, parent, qualifier)
is KtUserType -> addQualifierToType(psiFactory, parent, qualifier)
else -> replaceExpressionWithQualifier(psiFactory, referenceExpression, fqName)
else -> replaceExpressionWithQualifier(psiFactory, referenceExpression, qualifier, fqName)
}
}
if (referenceExpression.isPhysical) {
@@ -148,20 +147,13 @@ object AddQualifiersUtil {
private fun replaceExpressionWithQualifier(
psiFactory: KtPsiFactory,
referenceExpression: KtNameReferenceExpression,
packageQualifier: String,
fqName: FqName
): KtElement {
val fqNameUnsafe = fqName.toUnsafe()
val shortName = fqNameUnsafe.shortName().asString().quoteIfNeeded()
val parent = fqNameUnsafe.parent()
val parentQuotedIfNeeded =
if (parent.isRoot) {
""
} else {
val quotesAreNeeded = parent.pathSegments().any { !it.identifier.isIdentifier() }
val asString = parent.asString()
"${if (quotesAreNeeded) asString.quoteIfNeeded() else asString}."
}
val expressionWithQualifier = psiFactory.createExpression(parentQuotedIfNeeded + shortName)
val packageSeparator = ".".takeUnless { packageQualifier.isEmpty() } ?: ""
val expressionWithQualifier = psiFactory.createExpression(packageQualifier + packageSeparator + shortName)
return referenceExpression.replace(expressionWithQualifier) as KtElement
}
}
@@ -2,7 +2,7 @@
package foo.`b ar`
object Clazz {
val foo = 0
val zoo = 0
}
fun Clazz.foo() = <caret>Clazz.foo
fun Clazz.zoo() = <caret>Clazz.zoo
@@ -2,7 +2,7 @@
package foo.`b ar`
object Clazz {
val foo = 0
val zoo = 0
}
fun Clazz.foo() = `foo.b ar`.Clazz.foo
fun Clazz.zoo() = foo.`b ar`.Clazz.zoo
@@ -2,7 +2,7 @@
package foo.`b ar`
object `Cla zz` {
val foo = 0
val zoo = 0
}
fun `Cla zz`.foo() = <caret>`Cla zz`.foo
fun `Cla zz`.zoo() = <caret>`Cla zz`.zoo
@@ -2,7 +2,7 @@
package foo.`b ar`
object `Cla zz` {
val foo = 0
val zoo = 0
}
fun `Cla zz`.foo() = `foo.b ar`.`Cla zz`.foo
fun `Cla zz`.zoo() = foo.`b ar`.`Cla zz`.zoo