AA: fix PSI finding for FIR callable fake overrides
This commit is contained in:
committed by
Space Team
parent
5bd9b282a0
commit
cba9f1c559
@@ -10,9 +10,12 @@ import org.jetbrains.kotlin.KtFakeSourceElement
|
|||||||
import org.jetbrains.kotlin.KtFakeSourceElementKind
|
import org.jetbrains.kotlin.KtFakeSourceElementKind
|
||||||
import org.jetbrains.kotlin.KtRealPsiSourceElement
|
import org.jetbrains.kotlin.KtRealPsiSourceElement
|
||||||
import org.jetbrains.kotlin.fir.FirElement
|
import org.jetbrains.kotlin.fir.FirElement
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||||
import org.jetbrains.kotlin.fir.psi
|
import org.jetbrains.kotlin.fir.psi
|
||||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.unwrapFakeOverridesOrDelegated
|
||||||
|
|
||||||
private val allowedFakeElementKinds = setOf(
|
private val allowedFakeElementKinds = setOf(
|
||||||
KtFakeSourceElementKind.FromUseSiteTarget,
|
KtFakeSourceElementKind.FromUseSiteTarget,
|
||||||
@@ -33,8 +36,13 @@ internal fun FirElement.getAllowedPsi() = when (val source = source) {
|
|||||||
fun FirElement.findPsi(): PsiElement? =
|
fun FirElement.findPsi(): PsiElement? =
|
||||||
getAllowedPsi()
|
getAllowedPsi()
|
||||||
|
|
||||||
fun FirBasedSymbol<*>.findPsi(): PsiElement? =
|
fun FirBasedSymbol<*>.findPsi(): PsiElement? {
|
||||||
fir.findPsi() ?: FirSyntheticFunctionInterfaceSourceProvider.findPsi(fir)
|
return if (this is FirCallableSymbol<*>) {
|
||||||
|
fir.unwrapFakeOverridesOrDelegated().findPsi()
|
||||||
|
} else {
|
||||||
|
fir.findPsi()
|
||||||
|
} ?: FirSyntheticFunctionInterfaceSourceProvider.findPsi(fir)
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Finds [PsiElement] which will be used as go-to referenced element for [KtPsiReference]
|
* Finds [PsiElement] which will be used as go-to referenced element for [KtPsiReference]
|
||||||
@@ -42,5 +50,9 @@ fun FirBasedSymbol<*>.findPsi(): PsiElement? =
|
|||||||
* Otherwise, behaves the same way as [findPsi] returns exact PSI declaration corresponding to passed [FirDeclaration]
|
* Otherwise, behaves the same way as [findPsi] returns exact PSI declaration corresponding to passed [FirDeclaration]
|
||||||
*/
|
*/
|
||||||
fun FirDeclaration.findReferencePsi(): PsiElement? {
|
fun FirDeclaration.findReferencePsi(): PsiElement? {
|
||||||
return psi ?: FirSyntheticFunctionInterfaceSourceProvider.findPsi(this)
|
return if (this is FirCallableDeclaration) {
|
||||||
}
|
unwrapFakeOverridesOrDelegated().psi
|
||||||
|
} else {
|
||||||
|
psi
|
||||||
|
} ?: FirSyntheticFunctionInterfaceSourceProvider.findPsi(this)
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user