Introduce reference shortening mode
This commit is contained in:
@@ -151,7 +151,7 @@ public class MoveKotlinFileHandler : MoveFileHandler() {
|
|||||||
usageInfos?.forEach { usage ->
|
usageInfos?.forEach { usage ->
|
||||||
when (usage) {
|
when (usage) {
|
||||||
is MoveRenameKotlinUsageInfo -> {
|
is MoveRenameKotlinUsageInfo -> {
|
||||||
usage.jetReference.bindToFqName(usage.newFqName, false)
|
usage.jetReference.bindToFqName(usage.newFqName)
|
||||||
}
|
}
|
||||||
is MoveRenameJavaUsageInfo -> {
|
is MoveRenameJavaUsageInfo -> {
|
||||||
val lightElements = usage.jetDeclaration.toLightElements()
|
val lightElements = usage.jetDeclaration.toLightElements()
|
||||||
@@ -176,6 +176,6 @@ public class MoveKotlinFileHandler : MoveFileHandler() {
|
|||||||
file.updateInternalReferencesOnPackageNameChange(packageNameInfo)
|
file.updateInternalReferencesOnPackageNameChange(packageNameInfo)
|
||||||
|
|
||||||
val packageRef = file.getPackageDirective()?.getLastReferenceExpression()?.getReference() as? JetSimpleNameReference
|
val packageRef = file.getPackageDirective()?.getLastReferenceExpression()?.getReference() as? JetSimpleNameReference
|
||||||
packageRef?.bindToFqName(packageNameInfo.newPackageName, true)
|
packageRef?.bindToFqName(packageNameInfo.newPackageName)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -26,11 +26,12 @@ import org.jetbrains.jet.plugin.references.JetSimpleNameReference
|
|||||||
import org.jetbrains.jet.lang.resolve.name.FqName
|
import org.jetbrains.jet.lang.resolve.name.FqName
|
||||||
import org.jetbrains.jet.lang.psi.JetFile
|
import org.jetbrains.jet.lang.psi.JetFile
|
||||||
import org.jetbrains.jet.lang.psi.JetElement
|
import org.jetbrains.jet.lang.psi.JetElement
|
||||||
|
import org.jetbrains.jet.plugin.references.JetSimpleNameReference.ShorteningMode
|
||||||
|
|
||||||
public class PackageNameInfo(val oldPackageName: FqName, val newPackageName: FqName)
|
public class PackageNameInfo(val oldPackageName: FqName, val newPackageName: FqName)
|
||||||
|
|
||||||
public fun JetElement.updateInternalReferencesOnPackageNameChange(
|
public fun JetElement.updateInternalReferencesOnPackageNameChange(
|
||||||
packageNameInfo: PackageNameInfo, forceImmediateBinding: Boolean = false
|
packageNameInfo: PackageNameInfo, shorteningMode: ShorteningMode = ShorteningMode.DELAYED_SHORTENING
|
||||||
) {
|
) {
|
||||||
val file = getContainingFile() as? JetFile
|
val file = getContainingFile() as? JetFile
|
||||||
if (file == null) return
|
if (file == null) return
|
||||||
@@ -53,7 +54,7 @@ public fun JetElement.updateInternalReferencesOnPackageNameChange(
|
|||||||
packageNameInfo.newPackageName -> {
|
packageNameInfo.newPackageName -> {
|
||||||
val fqName = DescriptorUtils.getFqName(descriptor)
|
val fqName = DescriptorUtils.getFqName(descriptor)
|
||||||
if (fqName.isSafe()) {
|
if (fqName.isSafe()) {
|
||||||
(refExpr.getReference() as? JetSimpleNameReference)?.bindToFqName(fqName.toSafe(), forceImmediateBinding)
|
(refExpr.getReference() as? JetSimpleNameReference)?.bindToFqName(fqName.toSafe(), shorteningMode)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,23 +48,29 @@ public class JetSimpleNameReference(
|
|||||||
return expression.getReferencedNameElement().replace(element)
|
return expression.getReferencedNameElement().replace(element)
|
||||||
}
|
}
|
||||||
|
|
||||||
// By default reference binding is delayed
|
public enum class ShorteningMode {
|
||||||
override fun bindToElement(element: PsiElement): PsiElement = bindToElement(element, false)
|
NO_SHORTENING
|
||||||
|
DELAYED_SHORTENING
|
||||||
public fun bindToElement(element: PsiElement, bindImmediately: Boolean): PsiElement {
|
FORCED_SHORTENING
|
||||||
return element.getFqName()?.let { fqName -> bindToFqName(fqName, bindImmediately) } ?: expression
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public fun bindToFqName(fqName: FqName, forceImmediateBinding: Boolean): PsiElement {
|
// By default reference binding is delayed
|
||||||
|
override fun bindToElement(element: PsiElement): PsiElement {
|
||||||
|
return element.getFqName()?.let { fqName -> bindToFqName(fqName) } ?: expression
|
||||||
|
}
|
||||||
|
|
||||||
|
public fun bindToFqName(fqName: FqName, shorteningMode: ShorteningMode = ShorteningMode.DELAYED_SHORTENING): PsiElement {
|
||||||
if (fqName.isRoot()) return expression
|
if (fqName.isRoot()) return expression
|
||||||
|
|
||||||
val newExpression = expression.changeQualifiedName(fqName).getQualifiedElementSelector() as JetSimpleNameExpression
|
val newExpression = expression.changeQualifiedName(fqName).getQualifiedElementSelector() as JetSimpleNameExpression
|
||||||
val newQualifiedElement = newExpression.getOutermostNonInterleavingQualifiedElement()
|
val newQualifiedElement = newExpression.getOutermostNonInterleavingQualifiedElement()
|
||||||
|
|
||||||
|
if (shorteningMode == ShorteningMode.NO_SHORTENING) return newExpression
|
||||||
|
|
||||||
val needToShorten =
|
val needToShorten =
|
||||||
PsiTreeUtil.getParentOfType(expression, javaClass<JetImportDirective>(), javaClass<JetPackageDirective>()) == null
|
PsiTreeUtil.getParentOfType(expression, javaClass<JetImportDirective>(), javaClass<JetPackageDirective>()) == null
|
||||||
if (needToShorten) {
|
if (needToShorten) {
|
||||||
if (forceImmediateBinding) {
|
if (shorteningMode == ShorteningMode.FORCED_SHORTENING) {
|
||||||
ShortenReferences.process(newQualifiedElement)
|
ShortenReferences.process(newQualifiedElement)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|||||||
Reference in New Issue
Block a user