|
|
|
@ -778,11 +778,20 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver |
|
|
|
{ |
|
|
|
{ |
|
|
|
if (bestCandidate == null) |
|
|
|
if (bestCandidate == null) |
|
|
|
return arguments; |
|
|
|
return arguments; |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
return GetArgumentsWithConversions(null); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IList<ResolveResult> GetArgumentsWithConversions(ResolveResult targetResolveResult) |
|
|
|
|
|
|
|
{ |
|
|
|
var conversions = this.ArgumentConversions; |
|
|
|
var conversions = this.ArgumentConversions; |
|
|
|
ResolveResult[] args = new ResolveResult[arguments.Length]; |
|
|
|
ResolveResult[] args = new ResolveResult[arguments.Length]; |
|
|
|
for (int i = 0; i < args.Length; i++) { |
|
|
|
for (int i = 0; i < args.Length; i++) { |
|
|
|
|
|
|
|
var argument = arguments[i]; |
|
|
|
|
|
|
|
if (this.IsExtensionMethodInvocation && i == 0 && targetResolveResult != null) |
|
|
|
|
|
|
|
argument = targetResolveResult; |
|
|
|
if (conversions[i] == Conversion.IdentityConversion) { |
|
|
|
if (conversions[i] == Conversion.IdentityConversion) { |
|
|
|
args[i] = arguments[i]; |
|
|
|
args[i] = argument; |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
int parameterIndex = bestCandidate.ArgumentToParameterMap[i]; |
|
|
|
int parameterIndex = bestCandidate.ArgumentToParameterMap[i]; |
|
|
|
IType parameterType; |
|
|
|
IType parameterType; |
|
|
|
@ -792,9 +801,9 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver |
|
|
|
parameterType = SpecialType.UnknownType; |
|
|
|
parameterType = SpecialType.UnknownType; |
|
|
|
} |
|
|
|
} |
|
|
|
if (arguments[i].IsCompileTimeConstant && conversions[i] != Conversion.None) { |
|
|
|
if (arguments[i].IsCompileTimeConstant && conversions[i] != Conversion.None) { |
|
|
|
args[i] = new CSharpResolver(compilation).ResolveCast(parameterType, arguments[i]); |
|
|
|
args[i] = new CSharpResolver(compilation).ResolveCast(parameterType, argument); |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
args[i] = new ConversionResolveResult(parameterType, arguments[i], conversions[i]); |
|
|
|
args[i] = new ConversionResolveResult(parameterType, argument, conversions[i]); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
@ -839,9 +848,9 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver |
|
|
|
throw new InvalidOperationException(); |
|
|
|
throw new InvalidOperationException(); |
|
|
|
|
|
|
|
|
|
|
|
return new CSharpInvocationResolveResult( |
|
|
|
return new CSharpInvocationResolveResult( |
|
|
|
targetResolveResult, |
|
|
|
this.IsExtensionMethodInvocation ? new TypeResolveResult(member.DeclaringType) : targetResolveResult, |
|
|
|
member, |
|
|
|
member, |
|
|
|
GetArgumentsWithConversions(), |
|
|
|
GetArgumentsWithConversions(targetResolveResult), |
|
|
|
this.BestCandidateErrors, |
|
|
|
this.BestCandidateErrors, |
|
|
|
this.IsExtensionMethodInvocation, |
|
|
|
this.IsExtensionMethodInvocation, |
|
|
|
this.BestCandidateIsExpandedForm, |
|
|
|
this.BestCandidateIsExpandedForm, |
|
|
|
|