Synchronized IdeFirProvider.getOrBuild file, don't share RawFirBuilder
Before this commit RawFirBuilder was reused, that provoked a lot of synchronization problems
This commit is contained in:
+1
-2
@@ -9,7 +9,6 @@ import com.intellij.openapi.project.Project
|
||||
import com.intellij.psi.search.GlobalSearchScope
|
||||
import org.jetbrains.kotlin.analyzer.ModuleInfo
|
||||
import org.jetbrains.kotlin.fir.FirModuleBasedSession
|
||||
import org.jetbrains.kotlin.fir.builder.RawFirBuilder
|
||||
import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider
|
||||
import org.jetbrains.kotlin.fir.java.JavaSymbolProvider
|
||||
import org.jetbrains.kotlin.fir.resolve.FirProvider
|
||||
@@ -32,7 +31,7 @@ class FirIdeJavaModuleBasedSession(
|
||||
init {
|
||||
registerComponent(
|
||||
FirProvider::class,
|
||||
IdeFirProvider(project, scope, RawFirBuilder(this, stubMode = false), this)
|
||||
IdeFirProvider(project, scope, this)
|
||||
)
|
||||
registerComponent(
|
||||
FirSymbolProvider::class,
|
||||
|
||||
@@ -28,7 +28,6 @@ import org.jetbrains.kotlin.psi.KtFile
|
||||
class IdeFirProvider(
|
||||
val project: Project,
|
||||
val scope: GlobalSearchScope,
|
||||
val builder: RawFirBuilder,
|
||||
val session: FirSession
|
||||
) : FirProvider() {
|
||||
private val cacheProvider = FirProviderImpl(session)
|
||||
@@ -51,10 +50,13 @@ class IdeFirProvider(
|
||||
}
|
||||
|
||||
fun getOrBuildFile(ktFile: KtFile): FirFile {
|
||||
return files.getOrPut(ktFile) {
|
||||
val file = builder.buildFirFile(ktFile)
|
||||
cacheProvider.recordFile(file)
|
||||
file
|
||||
files[ktFile]?.let { return it }
|
||||
return synchronized(ktFile) {
|
||||
files.getOrPut(ktFile) {
|
||||
val file = RawFirBuilder(session, stubMode = false).buildFirFile(ktFile)
|
||||
cacheProvider.recordFile(file)
|
||||
file
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user