KT IDE: use proper package symbol PSI to fix invalidated access exception
This commit is contained in:
+14
-2
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user