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;
 		}