Fix toString() and reflectLambda() for lambdas with generic types in signatures

#KT-10771 Fixed
This commit is contained in:
Alexander Udalov
2016-06-08 19:32:11 +03:00
parent dc2972d99e
commit 59342000ae
6 changed files with 74 additions and 17 deletions
@@ -563,21 +563,14 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo
configuration.newOwner, configuration.original, configuration.kind, configuration.name, resultAnnotations,
getSourceToUseForCopy(configuration.preserveSourceElement, configuration.original, configuration.sourceElement));
List<TypeParameterDescriptor> substitutedTypeParameters;
final TypeSubstitutor substitutor;
List<TypeParameterDescriptor> unsubstitutedTypeParameters =
configuration.newTypeParameters == null ? getTypeParameters() : configuration.newTypeParameters;
if (configuration.newTypeParameters == null) {
List<TypeParameterDescriptor> originalTypeParameters = getTypeParameters();
substitutedTypeParameters = new ArrayList<TypeParameterDescriptor>(originalTypeParameters.size());
substitutor = DescriptorSubstitutor.substituteTypeParameters(
originalTypeParameters, configuration.substitution, substitutedDescriptor, substitutedTypeParameters
);
}
else {
// They should be already substituted
substitutedTypeParameters = configuration.newTypeParameters;
substitutor = configuration.substitution.buildSubstitutor();
}
List<TypeParameterDescriptor> substitutedTypeParameters =
new ArrayList<TypeParameterDescriptor>(unsubstitutedTypeParameters.size());
final TypeSubstitutor substitutor = DescriptorSubstitutor.substituteTypeParameters(
unsubstitutedTypeParameters, configuration.substitution, substitutedDescriptor, substitutedTypeParameters
);
KotlinType substitutedReceiverParameterType = null;
if (configuration.newExtensionReceiverParameterType != null) {
@@ -45,8 +45,8 @@ fun <R> Function<R>.reflect(): KFunction<R>? {
val proto = ProtoBuf.Function.parseFrom(input, JvmProtoBufUtil.EXTENSION_REGISTRY)
val moduleData = javaClass.getOrCreateModule()
val context = DeserializationContext(
moduleData.deserialization, nameResolver, moduleData.module,
typeTable = TypeTable(proto.typeTable), containerSource = null, parentTypeDeserializer = null, typeParameters = listOf()
moduleData.deserialization, nameResolver, moduleData.module, TypeTable(proto.typeTable),
containerSource = null, parentTypeDeserializer = null, typeParameters = proto.typeParameterList
)
val descriptor = MemberDeserializer(context).loadFunction(proto)
@Suppress("UNCHECKED_CAST")