diff --git a/core/serialization/src/org/jetbrains/jet/descriptors/serialization/MemberDeserializer.java b/core/serialization/src/org/jetbrains/jet/descriptors/serialization/MemberDeserializer.java index 9a24c7a24c1..d10518c8ca0 100644 --- a/core/serialization/src/org/jetbrains/jet/descriptors/serialization/MemberDeserializer.java +++ b/core/serialization/src/org/jetbrains/jet/descriptors/serialization/MemberDeserializer.java @@ -221,16 +221,13 @@ public class MemberDeserializer { } @NotNull - public List typeParameters( - @NotNull List protos, - @NotNull TypeDeserializer typeDeserializer - ) { + public List typeParameters(@NotNull List protos) { List result = new ArrayList(protos.size()); for (int i = 0; i < protos.size(); i++) { TypeParameter proto = protos.get(i); DeserializedTypeParameterDescriptor descriptor = new DeserializedTypeParameterDescriptor( getComponents().getStorageManager(), - typeDeserializer, + context.getTypeDeserializer(), proto, context.getContainingDeclaration(), context.getNameResolver().getName(proto.getName()), diff --git a/core/serialization/src/org/jetbrains/jet/descriptors/serialization/context/context.kt b/core/serialization/src/org/jetbrains/jet/descriptors/serialization/context/context.kt index 42a0912e934..d32b08f4bbc 100644 --- a/core/serialization/src/org/jetbrains/jet/descriptors/serialization/context/context.kt +++ b/core/serialization/src/org/jetbrains/jet/descriptors/serialization/context/context.kt @@ -67,12 +67,8 @@ public open class DeserializationContext( classDeserializer: ClassDeserializer, public val nameResolver: NameResolver ) : DeserializationGlobalContext(components, classDeserializer) { - fun withTypes(containingDeclaration: DeclarationDescriptor): DeserializationContextWithTypes { - val typeDeserializer = TypeDeserializer(this, null, "Deserializer for ${containingDeclaration.getName()}") - return withTypes(containingDeclaration, typeDeserializer) - } - - fun withTypes(containingDeclaration: DeclarationDescriptor, typeDeserializer: TypeDeserializer): DeserializationContextWithTypes { + fun withTypes(containingDeclaration: DeclarationDescriptor, parent: TypeDeserializer? = null): DeserializationContextWithTypes { + val typeDeserializer = TypeDeserializer(this, parent, "Deserializer for ${containingDeclaration.getName()}") return DeserializationContextWithTypes(components, classDeserializer, nameResolver, containingDeclaration, typeDeserializer) } } @@ -88,13 +84,12 @@ class DeserializationContextWithTypes( val memberDeserializer: MemberDeserializer = MemberDeserializer(this) fun childContext(descriptor: DeclarationDescriptor, typeParameterProtos: List): DeserializationContextWithTypes { - val childTypeDeserializer = TypeDeserializer(this, typeDeserializer, "Child deserializer for ${descriptor.getName()}") - val childContext = withTypes(descriptor, childTypeDeserializer) + val child = this.withTypes(descriptor, parent = this.typeDeserializer) - for (typeParameter in childContext.memberDeserializer.typeParameters(typeParameterProtos, childTypeDeserializer)) { - childTypeDeserializer.addTypeParameter(typeParameter) + for (typeParameter in child.memberDeserializer.typeParameters(typeParameterProtos)) { + child.typeDeserializer.addTypeParameter(typeParameter) } - return childContext + return child } }