FIR deserializer: load annotations on inner classes
This commit is contained in:
committed by
Dmitriy Novozhilov
parent
c588bc604d
commit
81345bcc26
+1
-1
@@ -7,7 +7,7 @@ public final class Class : R|kotlin/Any| {
|
||||
public constructor(): R|test/Class|
|
||||
|
||||
public final companion object Companion : R|kotlin/Any| {
|
||||
@FIELD:R|test/Anno|() public final var property: R|kotlin/Int|
|
||||
public final var property: R|kotlin/Int|
|
||||
public get(): R|kotlin/Int|
|
||||
public set(value: R|kotlin/Int|): R|kotlin/Unit|
|
||||
|
||||
|
||||
+1
-1
@@ -10,7 +10,7 @@ public sealed class Sealed : R|kotlin/Any| {
|
||||
@R|test/Ann|() private constructor(@R|test/Ann|() z: R|test/Z|): R|test/Sealed|
|
||||
|
||||
public final class Derived : R|test/Sealed| {
|
||||
public constructor(z: R|test/Z|): R|test/Sealed.Derived|
|
||||
@R|test/Ann|() public constructor(z: R|test/Z|): R|test/Sealed.Derived|
|
||||
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -13,7 +13,7 @@ public final class Outer : R|kotlin/Any| {
|
||||
public final val y: R|kotlin/String|
|
||||
public get(): R|kotlin/String|
|
||||
|
||||
public constructor(y: R|kotlin/String|): R|test/Outer.Inner|
|
||||
public constructor(@R|test/A|(s = String(inner)) y: R|kotlin/String|): R|test/Outer.Inner|
|
||||
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ public final class Outer : R|kotlin/Any| {
|
||||
public final val x: R|kotlin/String|
|
||||
public get(): R|kotlin/String|
|
||||
|
||||
public constructor(x: R|kotlin/String|): R|test/Outer.Nested|
|
||||
public constructor(@R|test/A|(s = String(nested)) x: R|kotlin/String|): R|test/Outer.Nested|
|
||||
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -7,7 +7,7 @@ public final class Class : R|kotlin/Any| {
|
||||
public constructor(): R|test/Class|
|
||||
|
||||
public final companion object Companion : R|kotlin/Any| {
|
||||
public final val property: R|kotlin/Int|
|
||||
@PROPERTY:R|test/Anno|() public final val property: R|kotlin/Int|
|
||||
public get(): R|kotlin/Int|
|
||||
|
||||
private constructor(): R|test/Class.Companion|
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@ public final annotation class Anno : R|kotlin/Annotation| {
|
||||
|
||||
public abstract interface Trait : R|kotlin/Any| {
|
||||
public final companion object Companion : R|kotlin/Any| {
|
||||
public final val property: R|kotlin/Int|
|
||||
@PROPERTY:R|test/Anno|() public final val property: R|kotlin/Int|
|
||||
public get(): R|kotlin/Int|
|
||||
|
||||
private constructor(): R|test/Trait.Companion|
|
||||
|
||||
+2
@@ -30,6 +30,8 @@ class JvmBinaryAnnotationDeserializer(
|
||||
kotlinBinaryClass: KotlinJvmBinaryClass,
|
||||
byteContent: ByteArray?
|
||||
) : AbstractAnnotationDeserializer(session) {
|
||||
// TODO: In order to properly load annotations on fields inside a companion object,
|
||||
// we need binary classes for both the companion class and the enclosing class.
|
||||
private val annotationInfo by lazy(LazyThreadSafetyMode.PUBLICATION) {
|
||||
session.loadMemberAnnotations(kotlinBinaryClass, byteContent)
|
||||
}
|
||||
|
||||
-1
@@ -32,7 +32,6 @@ import org.jetbrains.kotlin.metadata.deserialization.Flags
|
||||
import org.jetbrains.kotlin.metadata.deserialization.NameResolver
|
||||
import org.jetbrains.kotlin.metadata.deserialization.TypeTable
|
||||
import org.jetbrains.kotlin.protobuf.MessageLite
|
||||
import org.jetbrains.kotlin.serialization.deserialization.ProtoContainer
|
||||
import org.jetbrains.kotlin.serialization.deserialization.builtins.BuiltInSerializerProtocol
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
|
||||
import org.jetbrains.kotlin.serialization.deserialization.getClassId
|
||||
|
||||
+4
-4
@@ -73,16 +73,19 @@ fun deserializeClassToSymbol(
|
||||
isInline = Flags.IS_INLINE_CLASS.get(classProto.flags)
|
||||
}
|
||||
val isSealed = modality == Modality.SEALED
|
||||
val annotationDeserializer = defaultAnnotationDeserializer ?: FirBuiltinAnnotationDeserializer(session)
|
||||
val context =
|
||||
parentContext?.childContext(
|
||||
classProto.typeParameterList,
|
||||
nameResolver,
|
||||
TypeTable(classProto.typeTable),
|
||||
classId.relativeClassName,
|
||||
containerSource,
|
||||
annotationDeserializer,
|
||||
status.isInner
|
||||
) ?: FirDeserializationContext.createForClass(
|
||||
classId, classProto, nameResolver, session,
|
||||
defaultAnnotationDeserializer ?: FirBuiltinAnnotationDeserializer(session),
|
||||
annotationDeserializer,
|
||||
FirConstDeserializer(session, (containerSource as? KotlinJvmBinarySourceElement)?.binaryClass),
|
||||
containerSource
|
||||
)
|
||||
@@ -164,9 +167,6 @@ fun deserializeClassToSymbol(
|
||||
generateValueOfFunction(session, classId.packageFqName, classId.relativeClassName)
|
||||
}
|
||||
|
||||
if (isSealed) {
|
||||
|
||||
}
|
||||
addCloneForArrayIfNeeded(classId)
|
||||
addSerializableIfNeeded(classId)
|
||||
}.also {
|
||||
|
||||
+2
-1
@@ -29,7 +29,6 @@ import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.protobuf.MessageLite
|
||||
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
|
||||
|
||||
@@ -55,6 +54,8 @@ class FirDeserializationContext(
|
||||
nameResolver: NameResolver = this.nameResolver,
|
||||
typeTable: TypeTable = this.typeTable,
|
||||
relativeClassName: FqName? = this.relativeClassName,
|
||||
containerSource: DeserializedContainerSource? = this.containerSource,
|
||||
annotationDeserializer: AbstractAnnotationDeserializer = this.annotationDeserializer,
|
||||
capturesTypeParameters: Boolean = true
|
||||
): FirDeserializationContext = FirDeserializationContext(
|
||||
nameResolver, typeTable, versionRequirementTable, session, packageFqName, relativeClassName,
|
||||
|
||||
Reference in New Issue
Block a user