From 47d7d5adeaf13271902ced20dbeb4f00b3eaa5b1 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald <daniel@danielgrunwald.de> Date: Fri, 16 Mar 2012 15:38:59 +0100 Subject: [PATCH] Fix icsharpcode/NRefactory#29: NullReferenceException when using FindReferencedEntities navigator --- .../Resolver/OverloadResolution.cs | 9 ++++++--- .../Semantics/ConversionResolveResult.cs | 2 ++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/ICSharpCode.NRefactory.CSharp/Resolver/OverloadResolution.cs b/ICSharpCode.NRefactory.CSharp/Resolver/OverloadResolution.cs index c733f43060..a559e887f8 100644 --- a/ICSharpCode.NRefactory.CSharp/Resolver/OverloadResolution.cs +++ b/ICSharpCode.NRefactory.CSharp/Resolver/OverloadResolution.cs @@ -510,7 +510,10 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver // Test whether argument passing mode matches the parameter passing mode for (int i = 0; i < arguments.Length; i++) { int parameterIndex = candidate.ArgumentToParameterMap[i]; - if (parameterIndex < 0) continue; + if (parameterIndex < 0) { + candidate.ArgumentConversions[i] = Conversion.None; + continue; + } ByReferenceResolveResult brrr = arguments[i] as ByReferenceResolveResult; if (brrr != null) { @@ -528,7 +531,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver if (!(c == Conversion.IdentityConversion || c == Conversion.ImplicitReferenceConversion || c == Conversion.BoxingConversion)) candidate.AddError(OverloadResolutionErrors.ArgumentTypeMismatch); } else { - if (!c.IsValid) + if (!c.IsValid && parameterType.Kind != TypeKind.Unknown) candidate.AddError(OverloadResolutionErrors.ArgumentTypeMismatch); } } @@ -753,7 +756,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver if (bestCandidate != null && bestCandidate.ArgumentConversions != null) return bestCandidate.ArgumentConversions; else - return new Conversion[arguments.Length]; + return Enumerable.Repeat(Conversion.None, arguments.Length).ToList(); } } diff --git a/ICSharpCode.NRefactory/Semantics/ConversionResolveResult.cs b/ICSharpCode.NRefactory/Semantics/ConversionResolveResult.cs index 5e8df20d03..d015ddd3d4 100644 --- a/ICSharpCode.NRefactory/Semantics/ConversionResolveResult.cs +++ b/ICSharpCode.NRefactory/Semantics/ConversionResolveResult.cs @@ -32,6 +32,8 @@ namespace ICSharpCode.NRefactory.Semantics { if (input == null) throw new ArgumentNullException("input"); + if (conversion == null) + throw new ArgumentNullException("conversion"); this.Input = input; this.Conversion = conversion; }