[mcs] Use same result bucket for extension method lookup in all types of using expression
[mono.git] / mcs / mcs / namespace.cs
index 970e2ca024ef6b6270953f4c8fe816ba14cd7596..f5ca0a818a4480e5080a67945f414dca21fd4a2e 100644 (file)
@@ -503,7 +503,7 @@ namespace Mono.CSharp {
                                }
                        }
 
-                       cached_types.Remove (tc.Basename);
+                       cached_types.Remove (tc.MemberName.Basename);
                }
 
                public void SetBuiltinType (BuiltinTypeSpec pts)
@@ -804,9 +804,8 @@ namespace Mono.CSharp {
 
                public override void AddTypeContainer (TypeContainer tc)
                {
-                       string name = tc.Basename;
-
                        var mn = tc.MemberName;
+                       var name = mn.Basename;
                        while (mn.Left != null) {
                                mn = mn.Left;
                                name = mn.Name;
@@ -952,22 +951,18 @@ namespace Mono.CSharp {
                                                candidates.AddRange (a);
                                }
 
-                               if (candidates != null)
-                                       return new ExtensionMethodCandidates (invocationContext, candidates, this, position);
-                       }
-
-                       // LAMESPEC: TODO no spec about priority over normal extension methods yet
-                       if (types_using_table != null) {
-                               foreach (var t in types_using_table) {
+                               if (types_using_table != null) {
+                                       foreach (var t in types_using_table) {
 
-                                       var res = t.MemberCache.FindExtensionMethods (invocationContext, name, arity);
-                                       if (res == null)
-                                               continue;
+                                               var res = t.MemberCache.FindExtensionMethods (invocationContext, name, arity);
+                                               if (res == null)
+                                                       continue;
 
-                                       if (candidates == null)
-                                               candidates = res;
-                                       else
-                                               candidates.AddRange (res);
+                                               if (candidates == null)
+                                                       candidates = res;
+                                               else
+                                                       candidates.AddRange (res);
+                                       }
                                }
 
                                if (candidates != null)