KtSimpleNameReference: cleanup code
This commit is contained in:
+21
-17
@@ -92,7 +92,7 @@ class KtSimpleNameReference(expression: KtSimpleNameExpression) : KtSimpleRefere
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun canRename(): Boolean {
|
override fun canRename(): Boolean {
|
||||||
if (expression.getParentOfTypeAndBranch<KtWhenConditionInRange>(strict = true){ operationReference } != null) return false
|
if (expression.getParentOfTypeAndBranch<KtWhenConditionInRange>(strict = true) { operationReference } != null) return false
|
||||||
|
|
||||||
val elementType = expression.getReferencedNameElementType()
|
val elementType = expression.getReferencedNameElementType()
|
||||||
if (elementType == KtTokens.PLUSPLUS || elementType == KtTokens.MINUSMINUS) return false
|
if (elementType == KtTokens.PLUSPLUS || elementType == KtTokens.MINUSMINUS) return false
|
||||||
@@ -104,8 +104,7 @@ class KtSimpleNameReference(expression: KtSimpleNameExpression) : KtSimpleRefere
|
|||||||
if (!canRename()) throw IncorrectOperationException()
|
if (!canRename()) throw IncorrectOperationException()
|
||||||
|
|
||||||
if (newElementName.unquote() == "") {
|
if (newElementName.unquote() == "") {
|
||||||
val qualifiedElement = expression.getQualifiedElement()
|
return when (val qualifiedElement = expression.getQualifiedElement()) {
|
||||||
return when (qualifiedElement) {
|
|
||||||
is KtQualifiedExpression -> {
|
is KtQualifiedExpression -> {
|
||||||
expression.replace(qualifiedElement.receiverExpression)
|
expression.replace(qualifiedElement.receiverExpression)
|
||||||
qualifiedElement.replaced(qualifiedElement.selectorExpression!!)
|
qualifiedElement.replaced(qualifiedElement.selectorExpression!!)
|
||||||
@@ -127,9 +126,9 @@ class KtSimpleNameReference(expression: KtSimpleNameExpression) : KtSimpleRefere
|
|||||||
|
|
||||||
val psiFactory = KtPsiFactory(expression)
|
val psiFactory = KtPsiFactory(expression)
|
||||||
val element = Extensions.getArea(expression.project).getExtensionPoint(SimpleNameReferenceExtension.EP_NAME).extensions
|
val element = Extensions.getArea(expression.project).getExtensionPoint(SimpleNameReferenceExtension.EP_NAME).extensions
|
||||||
.asSequence()
|
.asSequence()
|
||||||
.map { it.handleElementRename(this, psiFactory, newElementName) }
|
.map { it.handleElementRename(this, psiFactory, newElementName) }
|
||||||
.firstOrNull { it != null } ?: psiFactory.createNameIdentifier(newElementName.quoteIfNeeded())
|
.firstOrNull { it != null } ?: psiFactory.createNameIdentifier(newElementName.quoteIfNeeded())
|
||||||
|
|
||||||
val nameElement = expression.getReferencedNameElement()
|
val nameElement = expression.getReferencedNameElement()
|
||||||
|
|
||||||
@@ -145,8 +144,7 @@ class KtSimpleNameReference(expression: KtSimpleNameExpression) : KtSimpleRefere
|
|||||||
|
|
||||||
if (element.node.elementType == KtTokens.IDENTIFIER) {
|
if (element.node.elementType == KtTokens.IDENTIFIER) {
|
||||||
nameElement.astReplace(element)
|
nameElement.astReplace(element)
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
nameElement.replace(element)
|
nameElement.replace(element)
|
||||||
}
|
}
|
||||||
return expression
|
return expression
|
||||||
@@ -160,12 +158,16 @@ class KtSimpleNameReference(expression: KtSimpleNameExpression) : KtSimpleRefere
|
|||||||
|
|
||||||
// By default reference binding is delayed
|
// By default reference binding is delayed
|
||||||
override fun bindToElement(element: PsiElement): PsiElement =
|
override fun bindToElement(element: PsiElement): PsiElement =
|
||||||
bindToElement(element, ShorteningMode.DELAYED_SHORTENING)
|
bindToElement(element, ShorteningMode.DELAYED_SHORTENING)
|
||||||
|
|
||||||
fun bindToElement(element: PsiElement, shorteningMode: ShorteningMode): PsiElement =
|
fun bindToElement(element: PsiElement, shorteningMode: ShorteningMode): PsiElement =
|
||||||
element.getKotlinFqName()?.let { fqName -> bindToFqName(fqName, shorteningMode, element) } ?: expression
|
element.getKotlinFqName()?.let { fqName -> bindToFqName(fqName, shorteningMode, element) } ?: expression
|
||||||
|
|
||||||
fun bindToFqName(fqName: FqName, shorteningMode: ShorteningMode = ShorteningMode.DELAYED_SHORTENING, targetElement: PsiElement? = null): PsiElement {
|
fun bindToFqName(
|
||||||
|
fqName: FqName,
|
||||||
|
shorteningMode: ShorteningMode = ShorteningMode.DELAYED_SHORTENING,
|
||||||
|
targetElement: PsiElement? = null
|
||||||
|
): PsiElement {
|
||||||
val expression = expression
|
val expression = expression
|
||||||
if (fqName.isRoot) return expression
|
if (fqName.isRoot) return expression
|
||||||
|
|
||||||
@@ -197,7 +199,10 @@ class KtSimpleNameReference(expression: KtSimpleNameExpression) : KtSimpleRefere
|
|||||||
* Result is either the same as original element, or [[KtQualifiedExpression]], or [[KtUserType]]
|
* Result is either the same as original element, or [[KtQualifiedExpression]], or [[KtUserType]]
|
||||||
* Note that FqName may not be empty
|
* Note that FqName may not be empty
|
||||||
*/
|
*/
|
||||||
private fun KtNameReferenceExpression.changeQualifiedName(fqName: FqName, targetElement: PsiElement? = null): KtNameReferenceExpression {
|
private fun KtNameReferenceExpression.changeQualifiedName(
|
||||||
|
fqName: FqName,
|
||||||
|
targetElement: PsiElement? = null
|
||||||
|
): KtNameReferenceExpression {
|
||||||
assert(!fqName.isRoot) { "Can't set empty FqName for element $this" }
|
assert(!fqName.isRoot) { "Can't set empty FqName for element $this" }
|
||||||
|
|
||||||
val shortName = fqName.shortName().asString()
|
val shortName = fqName.shortName().asString()
|
||||||
@@ -255,8 +260,8 @@ class KtSimpleNameReference(expression: KtSimpleNameExpression) : KtSimpleRefere
|
|||||||
} as KtElement
|
} as KtElement
|
||||||
|
|
||||||
val selector = (newElement as? KtCallableReferenceExpression)?.callableReference
|
val selector = (newElement as? KtCallableReferenceExpression)?.callableReference
|
||||||
?: newElement.getQualifiedElementSelector()
|
?: newElement.getQualifiedElementSelector()
|
||||||
?: error("No selector for $newElement")
|
?: error("No selector for $newElement")
|
||||||
return selector as KtNameReferenceExpression
|
return selector as KtNameReferenceExpression
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -270,14 +275,13 @@ class KtSimpleNameReference(expression: KtSimpleNameExpression) : KtSimpleRefere
|
|||||||
val tokenType = element.operationSignTokenType
|
val tokenType = element.operationSignTokenType
|
||||||
if (tokenType != null) {
|
if (tokenType != null) {
|
||||||
val name = OperatorConventions.getNameForOperationSymbol(
|
val name = OperatorConventions.getNameForOperationSymbol(
|
||||||
tokenType, element.parent is KtUnaryExpression, element.parent is KtBinaryExpression
|
tokenType, element.parent is KtUnaryExpression, element.parent is KtBinaryExpression
|
||||||
) ?: return emptyList()
|
) ?: return emptyList()
|
||||||
val counterpart = OperatorConventions.ASSIGNMENT_OPERATION_COUNTERPARTS[tokenType]
|
val counterpart = OperatorConventions.ASSIGNMENT_OPERATION_COUNTERPARTS[tokenType]
|
||||||
return if (counterpart != null) {
|
return if (counterpart != null) {
|
||||||
val counterpartName = OperatorConventions.getNameForOperationSymbol(counterpart, false, true)!!
|
val counterpartName = OperatorConventions.getNameForOperationSymbol(counterpart, false, true)!!
|
||||||
listOf(name, counterpartName)
|
listOf(name, counterpartName)
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
listOf(name)
|
listOf(name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user