FIR: component for deserialized class configuration
do not add Serializable JVM interface to non-JVM classes
This commit is contained in:
+3
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.fir.resolve.scopes.wrapScopeWithJvmMapped
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.FirCompilerLazyDeclarationResolver
|
||||
import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider
|
||||
import org.jetbrains.kotlin.fir.session.registerCommonComponents
|
||||
import org.jetbrains.kotlin.fir.session.registerCommonJavaComponents
|
||||
import org.jetbrains.kotlin.fir.session.registerModuleData
|
||||
import org.jetbrains.kotlin.fir.symbols.FirLazyDeclarationResolver
|
||||
import java.util.concurrent.ConcurrentHashMap
|
||||
@@ -30,6 +31,7 @@ import org.jetbrains.kotlin.platform.TargetPlatform
|
||||
import org.jetbrains.kotlin.platform.isCommon
|
||||
import org.jetbrains.kotlin.platform.js.isJs
|
||||
import org.jetbrains.kotlin.platform.jvm.isJvm
|
||||
import org.jetbrains.kotlin.resolve.jvm.modules.JavaModuleResolver
|
||||
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformAnalyzerServices
|
||||
|
||||
@OptIn(PrivateSessionConstructor::class, SessionConfiguration::class)
|
||||
@@ -52,6 +54,7 @@ class LLFirBuiltinsSessionFactory(
|
||||
registerIdeComponents(project)
|
||||
register(FirLazyDeclarationResolver::class, FirCompilerLazyDeclarationResolver)
|
||||
registerCommonComponents(LanguageVersionSettingsImpl.DEFAULT/*TODO*/)
|
||||
registerCommonJavaComponents(JavaModuleResolver.getInstance(project))
|
||||
registerModuleData(moduleData)
|
||||
|
||||
val kotlinScopeProvider = FirKotlinScopeProvider(::wrapScopeWithJvmMapped)
|
||||
|
||||
@@ -17,6 +17,8 @@ import org.jetbrains.kotlin.fir.caches.FirCachesFactory
|
||||
import org.jetbrains.kotlin.fir.caches.FirThreadUnsafeCachesFactory
|
||||
import org.jetbrains.kotlin.fir.declarations.SealedClassInheritorsProvider
|
||||
import org.jetbrains.kotlin.fir.declarations.SealedClassInheritorsProviderImpl
|
||||
import org.jetbrains.kotlin.fir.deserialization.DeserializedClassConfigurator
|
||||
import org.jetbrains.kotlin.fir.deserialization.JvmDeserializedClassConfigurator
|
||||
import org.jetbrains.kotlin.fir.extensions.*
|
||||
import org.jetbrains.kotlin.fir.java.FirJavaVisibilityChecker
|
||||
import org.jetbrains.kotlin.fir.java.FirJvmDefaultModeComponent
|
||||
@@ -91,6 +93,7 @@ fun FirSession.registerCommonJavaComponents(javaModuleResolver: JavaModuleResolv
|
||||
)
|
||||
register(PlatformSupertypeUpdater::class, JvmSupertypeUpdater(this))
|
||||
register(PlatformSpecificOverridabilityRules::class, JavaOverridabilityRules(this))
|
||||
register(DeserializedClassConfigurator::class, JvmDeserializedClassConfigurator(this))
|
||||
}
|
||||
|
||||
// -------------------------- Resolve components --------------------------
|
||||
|
||||
+20
-2
@@ -32,7 +32,6 @@ import org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf
|
||||
import org.jetbrains.kotlin.name.*
|
||||
import org.jetbrains.kotlin.serialization.SerializerExtensionProtocol
|
||||
import org.jetbrains.kotlin.serialization.deserialization.ProtoEnumFlags
|
||||
import org.jetbrains.kotlin.serialization.deserialization.builtins.BuiltInSerializerProtocol
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
|
||||
import org.jetbrains.kotlin.serialization.deserialization.getName
|
||||
import org.jetbrains.kotlin.serialization.deserialization.loadValueClassRepresentation
|
||||
@@ -193,7 +192,9 @@ fun deserializeClassToSymbol(
|
||||
}
|
||||
|
||||
addCloneForArrayIfNeeded(classId, context.dispatchReceiver)
|
||||
addSerializableIfNeeded(classId)
|
||||
session.deserializedClassConfigurator?.run {
|
||||
configure(classId)
|
||||
}
|
||||
|
||||
declarations.sortWith(object : Comparator<FirDeclaration> {
|
||||
override fun compare(a: FirDeclaration, b: FirDeclaration): Int {
|
||||
@@ -234,6 +235,9 @@ fun deserializeClassToSymbol(
|
||||
classProto.getExtensionOrNull(JvmProtoBuf.classModuleName)?.let { idx ->
|
||||
moduleName = nameResolver.getString(idx)
|
||||
}
|
||||
session.deserializedClassConfigurator?.run {
|
||||
configure(classId)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -301,3 +305,17 @@ private fun FirRegularClassBuilder.addCloneForArrayIfNeeded(classId: ClassId, di
|
||||
dispatchReceiverType = dispatchReceiver!!
|
||||
}
|
||||
}
|
||||
|
||||
abstract class DeserializedClassConfigurator(val session: FirSession) : FirSessionComponent {
|
||||
open fun FirRegularClassBuilder.configure(classId: ClassId) {}
|
||||
|
||||
open fun FirRegularClass.configure(classId: ClassId) {}
|
||||
}
|
||||
|
||||
class JvmDeserializedClassConfigurator(session: FirSession): DeserializedClassConfigurator(session) {
|
||||
override fun FirRegularClassBuilder.configure(classId: ClassId) {
|
||||
addSerializableIfNeeded(classId)
|
||||
}
|
||||
}
|
||||
|
||||
val FirSession.deserializedClassConfigurator: DeserializedClassConfigurator? by FirSession.nullableSessionComponentAccessor()
|
||||
|
||||
Reference in New Issue
Block a user