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 constructor(): R|test/Class|
|
||||||
|
|
||||||
public final companion object Companion : R|kotlin/Any| {
|
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 get(): R|kotlin/Int|
|
||||||
public set(value: R|kotlin/Int|): R|kotlin/Unit|
|
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|
|
@R|test/Ann|() private constructor(@R|test/Ann|() z: R|test/Z|): R|test/Sealed|
|
||||||
|
|
||||||
public final class Derived : 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 final val y: R|kotlin/String|
|
||||||
public get(): 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 final val x: R|kotlin/String|
|
||||||
public get(): 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 constructor(): R|test/Class|
|
||||||
|
|
||||||
public final companion object Companion : 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|
|
public get(): R|kotlin/Int|
|
||||||
|
|
||||||
private constructor(): R|test/Class.Companion|
|
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 abstract interface Trait : R|kotlin/Any| {
|
||||||
public final companion object Companion : 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|
|
public get(): R|kotlin/Int|
|
||||||
|
|
||||||
private constructor(): R|test/Trait.Companion|
|
private constructor(): R|test/Trait.Companion|
|
||||||
|
|||||||
+2
@@ -30,6 +30,8 @@ class JvmBinaryAnnotationDeserializer(
|
|||||||
kotlinBinaryClass: KotlinJvmBinaryClass,
|
kotlinBinaryClass: KotlinJvmBinaryClass,
|
||||||
byteContent: ByteArray?
|
byteContent: ByteArray?
|
||||||
) : AbstractAnnotationDeserializer(session) {
|
) : 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) {
|
private val annotationInfo by lazy(LazyThreadSafetyMode.PUBLICATION) {
|
||||||
session.loadMemberAnnotations(kotlinBinaryClass, byteContent)
|
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.NameResolver
|
||||||
import org.jetbrains.kotlin.metadata.deserialization.TypeTable
|
import org.jetbrains.kotlin.metadata.deserialization.TypeTable
|
||||||
import org.jetbrains.kotlin.protobuf.MessageLite
|
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.builtins.BuiltInSerializerProtocol
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
|
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.getClassId
|
import org.jetbrains.kotlin.serialization.deserialization.getClassId
|
||||||
|
|||||||
+4
-4
@@ -73,16 +73,19 @@ fun deserializeClassToSymbol(
|
|||||||
isInline = Flags.IS_INLINE_CLASS.get(classProto.flags)
|
isInline = Flags.IS_INLINE_CLASS.get(classProto.flags)
|
||||||
}
|
}
|
||||||
val isSealed = modality == Modality.SEALED
|
val isSealed = modality == Modality.SEALED
|
||||||
|
val annotationDeserializer = defaultAnnotationDeserializer ?: FirBuiltinAnnotationDeserializer(session)
|
||||||
val context =
|
val context =
|
||||||
parentContext?.childContext(
|
parentContext?.childContext(
|
||||||
classProto.typeParameterList,
|
classProto.typeParameterList,
|
||||||
nameResolver,
|
nameResolver,
|
||||||
TypeTable(classProto.typeTable),
|
TypeTable(classProto.typeTable),
|
||||||
classId.relativeClassName,
|
classId.relativeClassName,
|
||||||
|
containerSource,
|
||||||
|
annotationDeserializer,
|
||||||
status.isInner
|
status.isInner
|
||||||
) ?: FirDeserializationContext.createForClass(
|
) ?: FirDeserializationContext.createForClass(
|
||||||
classId, classProto, nameResolver, session,
|
classId, classProto, nameResolver, session,
|
||||||
defaultAnnotationDeserializer ?: FirBuiltinAnnotationDeserializer(session),
|
annotationDeserializer,
|
||||||
FirConstDeserializer(session, (containerSource as? KotlinJvmBinarySourceElement)?.binaryClass),
|
FirConstDeserializer(session, (containerSource as? KotlinJvmBinarySourceElement)?.binaryClass),
|
||||||
containerSource
|
containerSource
|
||||||
)
|
)
|
||||||
@@ -164,9 +167,6 @@ fun deserializeClassToSymbol(
|
|||||||
generateValueOfFunction(session, classId.packageFqName, classId.relativeClassName)
|
generateValueOfFunction(session, classId.packageFqName, classId.relativeClassName)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isSealed) {
|
|
||||||
|
|
||||||
}
|
|
||||||
addCloneForArrayIfNeeded(classId)
|
addCloneForArrayIfNeeded(classId)
|
||||||
addSerializableIfNeeded(classId)
|
addSerializableIfNeeded(classId)
|
||||||
}.also {
|
}.also {
|
||||||
|
|||||||
+2
-1
@@ -29,7 +29,6 @@ import org.jetbrains.kotlin.name.ClassId
|
|||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.protobuf.MessageLite
|
import org.jetbrains.kotlin.protobuf.MessageLite
|
||||||
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
|
||||||
|
|
||||||
@@ -55,6 +54,8 @@ class FirDeserializationContext(
|
|||||||
nameResolver: NameResolver = this.nameResolver,
|
nameResolver: NameResolver = this.nameResolver,
|
||||||
typeTable: TypeTable = this.typeTable,
|
typeTable: TypeTable = this.typeTable,
|
||||||
relativeClassName: FqName? = this.relativeClassName,
|
relativeClassName: FqName? = this.relativeClassName,
|
||||||
|
containerSource: DeserializedContainerSource? = this.containerSource,
|
||||||
|
annotationDeserializer: AbstractAnnotationDeserializer = this.annotationDeserializer,
|
||||||
capturesTypeParameters: Boolean = true
|
capturesTypeParameters: Boolean = true
|
||||||
): FirDeserializationContext = FirDeserializationContext(
|
): FirDeserializationContext = FirDeserializationContext(
|
||||||
nameResolver, typeTable, versionRequirementTable, session, packageFqName, relativeClassName,
|
nameResolver, typeTable, versionRequirementTable, session, packageFqName, relativeClassName,
|
||||||
|
|||||||
Reference in New Issue
Block a user