From 50951fdfc375c62644eef026c2f7b4f59a2e94ec Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Fri, 10 Jul 2020 18:37:47 +0300 Subject: [PATCH] KT IDE: use proper package symbol PSI to fix invalidated access exception --- .../api/fir/symbols/KtFirPackageSymbol.kt | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirPackageSymbol.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirPackageSymbol.kt index d48145d5ab5..c660e62aebc 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirPackageSymbol.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/symbols/KtFirPackageSymbol.kt @@ -9,11 +9,13 @@ import com.intellij.openapi.project.Project import com.intellij.psi.PsiElement import com.intellij.psi.PsiManager import com.intellij.psi.impl.file.PsiPackageImpl +import com.intellij.psi.search.GlobalSearchScope import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner import org.jetbrains.kotlin.idea.frontend.api.ValidityToken import org.jetbrains.kotlin.idea.frontend.api.fir.KtFirAnalysisSession import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached import org.jetbrains.kotlin.idea.frontend.api.symbols.* +import org.jetbrains.kotlin.idea.stubindex.PackageIndexUtil import org.jetbrains.kotlin.name.FqName class KtFirPackageSymbol( @@ -22,7 +24,7 @@ class KtFirPackageSymbol( override val token: ValidityToken ) : KtPackageSymbol(), ValidityTokenOwner { override val psi: PsiElement? by cached { - PsiPackageImpl(PsiManager.getInstance(project), fqName.asString().replace('/', '.')) + KtPackage(PsiManager.getInstance(project), fqName, GlobalSearchScope.allScope(project)/*TODO*/) } override val origin: KtSymbolOrigin @@ -32,4 +34,14 @@ class KtFirPackageSymbol( check(session is KtFirAnalysisSession) session.firSymbolBuilder.createPackageSymbolIfOneExists(fqName) } -} \ No newline at end of file +} + +class KtPackage( + manager: PsiManager, + private val fqName: FqName, + private val scope: GlobalSearchScope +) : PsiPackageImpl(manager, fqName.asString().replace('/', '.')) { + override fun copy() = KtPackage(manager, fqName, scope) + + override fun isValid(): Boolean = PackageIndexUtil.packageExists(fqName, scope, project) +}