KT IDE: use proper package symbol PSI to fix invalidated access exception

This commit is contained in:
Ilya Kirillov
2020-07-10 18:37:47 +03:00
parent 9f9ce6ba61
commit 50951fdfc3
@@ -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)
}
}
}
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)
}