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.PsiElement
import com.intellij.psi.PsiManager import com.intellij.psi.PsiManager
import com.intellij.psi.impl.file.PsiPackageImpl 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.ValidityTokenOwner
import org.jetbrains.kotlin.idea.frontend.api.ValidityToken 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.KtFirAnalysisSession
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached import org.jetbrains.kotlin.idea.frontend.api.fir.utils.cached
import org.jetbrains.kotlin.idea.frontend.api.symbols.* import org.jetbrains.kotlin.idea.frontend.api.symbols.*
import org.jetbrains.kotlin.idea.stubindex.PackageIndexUtil
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
class KtFirPackageSymbol( class KtFirPackageSymbol(
@@ -22,7 +24,7 @@ class KtFirPackageSymbol(
override val token: ValidityToken override val token: ValidityToken
) : KtPackageSymbol(), ValidityTokenOwner { ) : KtPackageSymbol(), ValidityTokenOwner {
override val psi: PsiElement? by cached { 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 override val origin: KtSymbolOrigin
@@ -33,3 +35,13 @@ class KtFirPackageSymbol(
session.firSymbolBuilder.createPackageSymbolIfOneExists(fqName) 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)
}