From 1f3850da6ebdb9c1b97c263a45d3f9c954298a33 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 6 Apr 2016 18:01:56 +0300 Subject: [PATCH] Store outer class in ProtoContainer instead of only its kind --- ...tBinaryClassAnnotationAndConstantLoader.kt | 10 ++++++---- .../deserialization/ProtoContainer.kt | 3 +-- .../DeserializedClassDescriptor.kt | 5 +++-- .../stubBuilder/ClassClsStubBuilder.kt | 20 +++++++++++-------- .../stubBuilder/ClsStubBuilderContext.kt | 15 ++++++-------- 5 files changed, 28 insertions(+), 25 deletions(-) diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/AbstractBinaryClassAnnotationAndConstantLoader.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/AbstractBinaryClassAnnotationAndConstantLoader.kt index 0cd146afa78..b07959df560 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/AbstractBinaryClassAnnotationAndConstantLoader.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/AbstractBinaryClassAnnotationAndConstantLoader.kt @@ -215,10 +215,12 @@ abstract class AbstractBinaryClassAnnotationAndConstantLoader, @@ -58,9 +61,14 @@ private class ClassClsStubBuilder( private val source: SourceElement?, private val outerContext: ClsStubBuilderContext ) { - private val classKind = Flags.CLASS_KIND[classProto.flags] - private val c = outerContext.child(classProto.typeParameterList, classKind, classId.shortClassName, nameResolver, - TypeTable(classProto.typeTable)) + private val thisAsProtoContainer = ProtoContainer.Class( + classProto, nameResolver, TypeTable(classProto.typeTable), source, outerContext.protoContainer + ) + private val classKind = thisAsProtoContainer.kind + + private val c = outerContext.child( + classProto.typeParameterList, classId.shortClassName, nameResolver, thisAsProtoContainer.typeTable, thisAsProtoContainer + ) private val typeStubBuilder = TypeClsStubBuilder(c) private val supertypeIds = run { val supertypeIds = classProto.supertypes(c.typeTable).map { c.nameResolver.getClassId(it.className) } @@ -76,10 +84,6 @@ private class ClassClsStubBuilder( private val companionObjectName = if (classProto.hasCompanionObjectName()) c.nameResolver.getName(classProto.companionObjectName) else null - private val thisAsProtoContainer = ProtoContainer.Class( - classProto, c.nameResolver, c.typeTable, source, outerContext.classKind?.let { Deserialization.classKind(it) } - ) - private val classOrObjectStub = createClassOrObjectStubAndModifierListStub() fun build() { diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/ClsStubBuilderContext.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/ClsStubBuilderContext.kt index f4b8b8cc5ea..488d9678632 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/ClsStubBuilderContext.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/ClsStubBuilderContext.kt @@ -22,10 +22,7 @@ import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.serialization.ProtoBuf -import org.jetbrains.kotlin.serialization.deserialization.AnnotationAndConstantLoader -import org.jetbrains.kotlin.serialization.deserialization.ClassDataFinder -import org.jetbrains.kotlin.serialization.deserialization.NameResolver -import org.jetbrains.kotlin.serialization.deserialization.TypeTable +import org.jetbrains.kotlin.serialization.deserialization.* data class ClassIdWithTarget(val classId: ClassId, val target: AnnotationUseSiteTarget?) @@ -39,7 +36,7 @@ class ClsStubBuilderComponents( packageFqName: FqName, typeTable: TypeTable ): ClsStubBuilderContext { - return ClsStubBuilderContext(this, nameResolver, packageFqName, EmptyTypeParameters, typeTable, classKind = null) + return ClsStubBuilderContext(this, nameResolver, packageFqName, EmptyTypeParameters, typeTable, protoContainer = null) } } @@ -70,15 +67,15 @@ class ClsStubBuilderContext( val containerFqName: FqName, val typeParameters: TypeParameters, val typeTable: TypeTable, - val classKind: ProtoBuf.Class.Kind? + val protoContainer: ProtoContainer.Class? ) internal fun ClsStubBuilderContext.child( typeParameterList: List, - classKind: ProtoBuf.Class.Kind? = null, name: Name? = null, nameResolver: NameResolver = this.nameResolver, - typeTable: TypeTable = this.typeTable + typeTable: TypeTable = this.typeTable, + protoContainer: ProtoContainer.Class? = this.protoContainer ): ClsStubBuilderContext { return ClsStubBuilderContext( this.components, @@ -86,6 +83,6 @@ internal fun ClsStubBuilderContext.child( if (name != null) this.containerFqName.child(name) else this.containerFqName, this.typeParameters.child(nameResolver, typeParameterList), typeTable, - classKind + protoContainer ) }