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.resolve.transformers.FirCompilerLazyDeclarationResolver
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider
|
import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider
|
||||||
import org.jetbrains.kotlin.fir.session.registerCommonComponents
|
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.session.registerModuleData
|
||||||
import org.jetbrains.kotlin.fir.symbols.FirLazyDeclarationResolver
|
import org.jetbrains.kotlin.fir.symbols.FirLazyDeclarationResolver
|
||||||
import java.util.concurrent.ConcurrentHashMap
|
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.isCommon
|
||||||
import org.jetbrains.kotlin.platform.js.isJs
|
import org.jetbrains.kotlin.platform.js.isJs
|
||||||
import org.jetbrains.kotlin.platform.jvm.isJvm
|
import org.jetbrains.kotlin.platform.jvm.isJvm
|
||||||
|
import org.jetbrains.kotlin.resolve.jvm.modules.JavaModuleResolver
|
||||||
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformAnalyzerServices
|
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformAnalyzerServices
|
||||||
|
|
||||||
@OptIn(PrivateSessionConstructor::class, SessionConfiguration::class)
|
@OptIn(PrivateSessionConstructor::class, SessionConfiguration::class)
|
||||||
@@ -52,6 +54,7 @@ class LLFirBuiltinsSessionFactory(
|
|||||||
registerIdeComponents(project)
|
registerIdeComponents(project)
|
||||||
register(FirLazyDeclarationResolver::class, FirCompilerLazyDeclarationResolver)
|
register(FirLazyDeclarationResolver::class, FirCompilerLazyDeclarationResolver)
|
||||||
registerCommonComponents(LanguageVersionSettingsImpl.DEFAULT/*TODO*/)
|
registerCommonComponents(LanguageVersionSettingsImpl.DEFAULT/*TODO*/)
|
||||||
|
registerCommonJavaComponents(JavaModuleResolver.getInstance(project))
|
||||||
registerModuleData(moduleData)
|
registerModuleData(moduleData)
|
||||||
|
|
||||||
val kotlinScopeProvider = FirKotlinScopeProvider(::wrapScopeWithJvmMapped)
|
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.caches.FirThreadUnsafeCachesFactory
|
||||||
import org.jetbrains.kotlin.fir.declarations.SealedClassInheritorsProvider
|
import org.jetbrains.kotlin.fir.declarations.SealedClassInheritorsProvider
|
||||||
import org.jetbrains.kotlin.fir.declarations.SealedClassInheritorsProviderImpl
|
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.extensions.*
|
||||||
import org.jetbrains.kotlin.fir.java.FirJavaVisibilityChecker
|
import org.jetbrains.kotlin.fir.java.FirJavaVisibilityChecker
|
||||||
import org.jetbrains.kotlin.fir.java.FirJvmDefaultModeComponent
|
import org.jetbrains.kotlin.fir.java.FirJvmDefaultModeComponent
|
||||||
@@ -91,6 +93,7 @@ fun FirSession.registerCommonJavaComponents(javaModuleResolver: JavaModuleResolv
|
|||||||
)
|
)
|
||||||
register(PlatformSupertypeUpdater::class, JvmSupertypeUpdater(this))
|
register(PlatformSupertypeUpdater::class, JvmSupertypeUpdater(this))
|
||||||
register(PlatformSpecificOverridabilityRules::class, JavaOverridabilityRules(this))
|
register(PlatformSpecificOverridabilityRules::class, JavaOverridabilityRules(this))
|
||||||
|
register(DeserializedClassConfigurator::class, JvmDeserializedClassConfigurator(this))
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------- Resolve components --------------------------
|
// -------------------------- Resolve components --------------------------
|
||||||
|
|||||||
+20
-2
@@ -32,7 +32,6 @@ import org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf
|
|||||||
import org.jetbrains.kotlin.name.*
|
import org.jetbrains.kotlin.name.*
|
||||||
import org.jetbrains.kotlin.serialization.SerializerExtensionProtocol
|
import org.jetbrains.kotlin.serialization.SerializerExtensionProtocol
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.ProtoEnumFlags
|
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.descriptors.DeserializedContainerSource
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.getName
|
import org.jetbrains.kotlin.serialization.deserialization.getName
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.loadValueClassRepresentation
|
import org.jetbrains.kotlin.serialization.deserialization.loadValueClassRepresentation
|
||||||
@@ -193,7 +192,9 @@ fun deserializeClassToSymbol(
|
|||||||
}
|
}
|
||||||
|
|
||||||
addCloneForArrayIfNeeded(classId, context.dispatchReceiver)
|
addCloneForArrayIfNeeded(classId, context.dispatchReceiver)
|
||||||
addSerializableIfNeeded(classId)
|
session.deserializedClassConfigurator?.run {
|
||||||
|
configure(classId)
|
||||||
|
}
|
||||||
|
|
||||||
declarations.sortWith(object : Comparator<FirDeclaration> {
|
declarations.sortWith(object : Comparator<FirDeclaration> {
|
||||||
override fun compare(a: FirDeclaration, b: FirDeclaration): Int {
|
override fun compare(a: FirDeclaration, b: FirDeclaration): Int {
|
||||||
@@ -234,6 +235,9 @@ fun deserializeClassToSymbol(
|
|||||||
classProto.getExtensionOrNull(JvmProtoBuf.classModuleName)?.let { idx ->
|
classProto.getExtensionOrNull(JvmProtoBuf.classModuleName)?.let { idx ->
|
||||||
moduleName = nameResolver.getString(idx)
|
moduleName = nameResolver.getString(idx)
|
||||||
}
|
}
|
||||||
|
session.deserializedClassConfigurator?.run {
|
||||||
|
configure(classId)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -301,3 +305,17 @@ private fun FirRegularClassBuilder.addCloneForArrayIfNeeded(classId: ClassId, di
|
|||||||
dispatchReceiverType = dispatchReceiver!!
|
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