Fix toString() and reflectLambda() for lambdas with generic types in signatures
#KT-10771 Fixed
This commit is contained in:
+7
-14
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user