[AA] extract source psi from delegated wrapper when exists
This commit is contained in:
+5
-4
@@ -9,13 +9,13 @@ import com.intellij.openapi.project.Project
|
|||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import com.intellij.psi.search.GlobalSearchScope
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.KtDeclarationAndFirDeclarationEqualityChecker
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.KtDeclarationAndFirDeclarationEqualityChecker
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.LLFirModuleData
|
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.llFirModuleData
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.llFirModuleData
|
||||||
import org.jetbrains.kotlin.analysis.project.structure.KtBuiltinsModule
|
import org.jetbrains.kotlin.analysis.project.structure.KtBuiltinsModule
|
||||||
import org.jetbrains.kotlin.analysis.providers.createDeclarationProvider
|
import org.jetbrains.kotlin.analysis.providers.createDeclarationProvider
|
||||||
import org.jetbrains.kotlin.fir.FirElement
|
import org.jetbrains.kotlin.fir.FirElement
|
||||||
import org.jetbrains.kotlin.fir.containingClassLookupTag
|
import org.jetbrains.kotlin.fir.containingClassLookupTag
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
|
import org.jetbrains.kotlin.fir.scopes.impl.delegatedWrapperData
|
||||||
import org.jetbrains.kotlin.fir.unwrapFakeOverrides
|
import org.jetbrains.kotlin.fir.unwrapFakeOverrides
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
@@ -44,16 +44,17 @@ internal object FirDeserializedDeclarationSourceProvider {
|
|||||||
function: FirSimpleFunction,
|
function: FirSimpleFunction,
|
||||||
project: Project
|
project: Project
|
||||||
): PsiElement? {
|
): PsiElement? {
|
||||||
|
val baseFunction = function.delegatedWrapperData?.wrapped ?: function
|
||||||
val candidates = if (function.isTopLevel) {
|
val candidates = if (function.isTopLevel) {
|
||||||
project.createDeclarationProvider(function.scope(project)).getTopLevelFunctions(function.symbol.callableId)
|
project.createDeclarationProvider(function.scope(project)).getTopLevelFunctions(function.symbol.callableId)
|
||||||
.filter(KtNamedFunction::isCompiled)
|
.filter(KtNamedFunction::isCompiled)
|
||||||
} else {
|
} else {
|
||||||
function.containingKtClass(project)?.body?.functions
|
baseFunction.containingKtClass(project)?.body?.functions
|
||||||
?.filter { it.name == function.name.asString() && it.isCompiled() }
|
?.filter { it.name == baseFunction.name.asString() && it.isCompiled() }
|
||||||
.orEmpty()
|
.orEmpty()
|
||||||
}
|
}
|
||||||
|
|
||||||
return function.unwrapFakeOverrides().chooseCorrespondingPsi(candidates)
|
return baseFunction.unwrapFakeOverrides().chooseCorrespondingPsi(candidates)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun provideSourceForProperty(property: FirProperty, project: Project): PsiElement? {
|
private fun provideSourceForProperty(property: FirProperty, project: Project): PsiElement? {
|
||||||
|
|||||||
Reference in New Issue
Block a user