FIR IDE: Move KDoc Reference & mainReference to frontend-independent module
This commit is contained in:
@@ -9,6 +9,7 @@ import com.intellij.openapi.util.TextRange
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
|
||||
import org.jetbrains.kotlin.idea.references.KDocReference
|
||||
import org.jetbrains.kotlin.idea.references.KtDescriptorsBasedReference
|
||||
import org.jetbrains.kotlin.idea.references.KtMultiReference
|
||||
import org.jetbrains.kotlin.kdoc.psi.impl.KDocLink
|
||||
@@ -18,8 +19,7 @@ import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
||||
|
||||
//TODO move to frontend-independent module
|
||||
class KDocReference(element: KDocName) : KtMultiReference<KDocName>(element), KtDescriptorsBasedReference {
|
||||
class KDocReferenceDescriptorsImpl(element: KDocName) : KDocReference(element), KtDescriptorsBasedReference {
|
||||
override fun isReferenceTo(element: PsiElement): Boolean =
|
||||
super<KtDescriptorsBasedReference>.isReferenceTo(element)
|
||||
|
||||
@@ -39,20 +39,10 @@ class KDocReference(element: KDocName) : KtMultiReference<KDocName>(element), Kt
|
||||
)
|
||||
}
|
||||
|
||||
override fun getRangeInElement(): TextRange = element.getNameTextRange()
|
||||
|
||||
override fun canRename(): Boolean = true
|
||||
|
||||
override fun resolve(): PsiElement? = multiResolve(false).firstOrNull()?.element
|
||||
|
||||
override fun handleElementRename(newElementName: String): PsiElement? {
|
||||
val textRange = element.getNameTextRange()
|
||||
val newText = textRange.replace(element.text, newElementName)
|
||||
val newLink = KDocElementFactory(element.project).createNameFromText(newText)
|
||||
return element.replace(newLink)
|
||||
}
|
||||
|
||||
override fun getCanonicalText(): String = element.getNameText()
|
||||
|
||||
override val resolvesByNames: Collection<Name> get() = listOf(Name.identifier(element.getNameText()))
|
||||
}
|
||||
|
||||
+2
-2
@@ -5,7 +5,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.idea.references
|
||||
|
||||
import org.jetbrains.kotlin.idea.kdoc.KDocReference
|
||||
import org.jetbrains.kotlin.idea.kdoc.KDocReferenceDescriptorsImpl
|
||||
import org.jetbrains.kotlin.lexer.KtTokens
|
||||
import org.jetbrains.kotlin.psi.KtImportDirective
|
||||
import org.jetbrains.kotlin.psi.KtNameReferenceExpression
|
||||
@@ -51,7 +51,7 @@ class KotlinReferenceContributor : KotlinReferenceProviderContributor {
|
||||
|
||||
registerProvider(factory = ::KtDestructuringDeclarationReferenceDescriptorsImpl)
|
||||
|
||||
registerProvider(factory = ::KDocReference)
|
||||
registerProvider(factory = ::KDocReferenceDescriptorsImpl)
|
||||
|
||||
registerProvider(KotlinDefaultAnnotationMethodImplicitReferenceProvider)
|
||||
}
|
||||
|
||||
@@ -17,7 +17,6 @@ import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall
|
||||
import org.jetbrains.kotlin.idea.imports.canBeReferencedViaImport
|
||||
import org.jetbrains.kotlin.idea.imports.importableFqName
|
||||
import org.jetbrains.kotlin.idea.intentions.OperatorToFunctionIntention
|
||||
import org.jetbrains.kotlin.idea.kdoc.KDocReference
|
||||
import org.jetbrains.kotlin.idea.stubindex.KotlinFullClassNameIndex
|
||||
import org.jetbrains.kotlin.idea.stubindex.KotlinFunctionShortNameIndex
|
||||
import org.jetbrains.kotlin.idea.stubindex.KotlinPropertyShortNameIndex
|
||||
@@ -221,22 +220,6 @@ fun AbstractKtReference<out KtExpression>.renameImplicitConventionalCall(newName
|
||||
return newExpression
|
||||
}
|
||||
|
||||
val KtSimpleNameExpression.mainReference: KtSimpleNameReferenceDescriptorsImpl
|
||||
get() = references.firstIsInstance()
|
||||
|
||||
val KtReferenceExpression.mainReference: KtDescriptorsBasedReference
|
||||
get() = if (this is KtSimpleNameExpression) mainReference else references.firstIsInstance<KtDescriptorsBasedReference>()
|
||||
|
||||
val KDocName.mainReference: KDocReference
|
||||
get() = references.firstIsInstance()
|
||||
|
||||
val KtElement.mainReference: KtDescriptorsBasedReference?
|
||||
get() = when (this) {
|
||||
is KtReferenceExpression -> mainReference
|
||||
is KDocName -> mainReference
|
||||
else -> references.firstIsInstanceOrNull<KtDescriptorsBasedReference>()
|
||||
}
|
||||
|
||||
fun KtElement.resolveMainReferenceToDescriptors(): Collection<DeclarationDescriptor> {
|
||||
val bindingContext = analyze(BodyResolveMode.PARTIAL)
|
||||
return mainReference?.resolveToDescriptors(bindingContext) ?: emptyList()
|
||||
|
||||
Reference in New Issue
Block a user