FIR: get rid of lateinit var in FirBuiltinSymbolProvider for thread safety
This commit is contained in:
committed by
teamcityserver
parent
863156679d
commit
ba2315430b
+26
-17
@@ -9,7 +9,6 @@ import org.jetbrains.kotlin.builtins.StandardNames
|
|||||||
import org.jetbrains.kotlin.builtins.functions.FunctionClassKind
|
import org.jetbrains.kotlin.builtins.functions.FunctionClassKind
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.fir.*
|
import org.jetbrains.kotlin.fir.*
|
||||||
import org.jetbrains.kotlin.fir.caches.createCacheWithPostCompute
|
|
||||||
import org.jetbrains.kotlin.fir.caches.firCachesFactory
|
import org.jetbrains.kotlin.fir.caches.firCachesFactory
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.builder.buildRegularClass
|
import org.jetbrains.kotlin.fir.declarations.builder.buildRegularClass
|
||||||
@@ -39,7 +38,6 @@ import org.jetbrains.kotlin.serialization.deserialization.builtins.BuiltInSerial
|
|||||||
import org.jetbrains.kotlin.serialization.deserialization.getName
|
import org.jetbrains.kotlin.serialization.deserialization.getName
|
||||||
import org.jetbrains.kotlin.types.Variance
|
import org.jetbrains.kotlin.types.Variance
|
||||||
import org.jetbrains.kotlin.util.OperatorNameConventions
|
import org.jetbrains.kotlin.util.OperatorNameConventions
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.getOrPut
|
|
||||||
import java.io.InputStream
|
import java.io.InputStream
|
||||||
|
|
||||||
//TODO make thread safe
|
//TODO make thread safe
|
||||||
@@ -257,23 +255,11 @@ open class FirBuiltinSymbolProvider(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private inner class BuiltInsPackageFragment(stream: InputStream, val fqName: FqName) {
|
private inner class BuiltInsPackageFragment(stream: InputStream, val fqName: FqName) {
|
||||||
lateinit var version: BuiltInsBinaryVersion
|
|
||||||
|
|
||||||
val packageProto: ProtoBuf.PackageFragment = run {
|
private val binaryVersionAndPackageFragment = BinaryVersionAndPackageFragment.createFromStream(stream)
|
||||||
|
|
||||||
version = BuiltInsBinaryVersion.readFrom(stream)
|
val version: BuiltInsBinaryVersion get() = binaryVersionAndPackageFragment.version
|
||||||
|
val packageProto: ProtoBuf.PackageFragment get() = binaryVersionAndPackageFragment.packageFragment
|
||||||
if (!version.isCompatible()) {
|
|
||||||
// TODO: report a proper diagnostic
|
|
||||||
throw UnsupportedOperationException(
|
|
||||||
"Kotlin built-in definition format version is not supported: " +
|
|
||||||
"expected ${BuiltInsBinaryVersion.INSTANCE}, actual $version. " +
|
|
||||||
"Please update Kotlin",
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
ProtoBuf.PackageFragment.parseFrom(stream, BuiltInSerializerProtocol.extensionRegistry)
|
|
||||||
}
|
|
||||||
|
|
||||||
private val nameResolver = NameResolverImpl(packageProto.strings, packageProto.qualifiedNames)
|
private val nameResolver = NameResolverImpl(packageProto.strings, packageProto.qualifiedNames)
|
||||||
|
|
||||||
@@ -327,3 +313,26 @@ open class FirBuiltinSymbolProvider(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private data class BinaryVersionAndPackageFragment(
|
||||||
|
val version: BuiltInsBinaryVersion,
|
||||||
|
val packageFragment: ProtoBuf.PackageFragment,
|
||||||
|
) {
|
||||||
|
companion object {
|
||||||
|
fun createFromStream(stream: InputStream): BinaryVersionAndPackageFragment {
|
||||||
|
val version = BuiltInsBinaryVersion.readFrom(stream)
|
||||||
|
|
||||||
|
if (!version.isCompatible()) {
|
||||||
|
// TODO: report a proper diagnostic
|
||||||
|
throw UnsupportedOperationException(
|
||||||
|
"Kotlin built-in definition format version is not supported: " +
|
||||||
|
"expected ${BuiltInsBinaryVersion.INSTANCE}, actual $version. " +
|
||||||
|
"Please update Kotlin",
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
val packageFragment = ProtoBuf.PackageFragment.parseFrom(stream, BuiltInSerializerProtocol.extensionRegistry)
|
||||||
|
return BinaryVersionAndPackageFragment(version, packageFragment)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user