Browse Source

Fix OutOfRangeException in CallBuilder.CanInferTypeArgumentsFromArguments

pull/2134/head
Siegfried Pammer 5 years ago
parent
commit
6d06abae1f
  1. 12
      ICSharpCode.Decompiler/CSharp/CallBuilder.cs

12
ICSharpCode.Decompiler/CSharp/CallBuilder.cs

@ -1006,8 +1006,16 @@ namespace ICSharpCode.Decompiler.CSharp @@ -1006,8 +1006,16 @@ namespace ICSharpCode.Decompiler.CSharp
return true;
// always use unspecialized member, otherwise type inference fails
method = (IMethod)method.MemberDefinition;
var parametersInArgumentOrder = argumentList.ArgumentToParameterMap == null ? method.Parameters : argumentList.ArgumentToParameterMap.SelectReadOnlyArray(index => method.Parameters[index]);
typeInference.InferTypeArguments(method.TypeParameters, argumentList.Arguments.SelectReadOnlyArray(a => a.ResolveResult), parametersInArgumentOrder.SelectReadOnlyArray(p => p.Type),
IReadOnlyList<IType> paramTypesInArgumentOrder;
if (argumentList.ArgumentToParameterMap == null)
paramTypesInArgumentOrder = method.Parameters.SelectReadOnlyArray(p => p.Type);
else
paramTypesInArgumentOrder = argumentList.ArgumentToParameterMap
.SelectReadOnlyArray(
index => index >= 0 ? method.Parameters[index].Type : SpecialType.UnknownType
);
typeInference.InferTypeArguments(method.TypeParameters,
argumentList.Arguments.SelectReadOnlyArray(a => a.ResolveResult), paramTypesInArgumentOrder,
out bool success);
return success;
}

Loading…
Cancel
Save