[AA] extract source psi from delegated wrapper when exists

This commit is contained in:
Anna Kozlova
2023-01-16 14:15:27 +01:00
committed by Space Team
parent f172c50f27
commit 07525fef51
@@ -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? {