Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/xamarin/NRefactory.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Krüger <mkrueger@xamarin.com>2014-06-03 10:54:44 +0400
committerMike Krüger <mkrueger@xamarin.com>2014-06-03 10:54:44 +0400
commite5958a86edd21df81256ea44b090a3f1c6e420cf (patch)
tree4814b4c2f98bb470b70401c6559e296e6fd72b78
parent37368afca38bdb241999b11723837a13f796ddbd (diff)
Fixed another completion bug case.
-rw-r--r--ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs6
-rw-r--r--ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/ObjectInitializerTests.cs26
2 files changed, 30 insertions, 2 deletions
diff --git a/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs b/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs
index 9bfc8a41..613d1326 100644
--- a/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs
+++ b/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs
@@ -350,6 +350,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
}
var lookup = new MemberLookup(ctx.CurrentTypeDefinition, Compilation.MainAssembly);
var list = typeof(System.Collections.IList).ToTypeReference().Resolve(Compilation);
+ var list1 = typeof(System.Collections.Generic.IList<>).ToTypeReference().Resolve(Compilation);
bool isProtectedAllowed = ctx.CurrentTypeDefinition != null && initializerType.GetDefinition() != null ?
ctx.CurrentTypeDefinition.IsDerivedFrom(initializerType.GetDefinition()) :
false;
@@ -366,7 +367,8 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
foreach (IProperty m in initializerType.GetMembers (m => m.SymbolKind == SymbolKind.Property)) {
if (m.CanSet && lookup.IsAccessible(m.Setter, isProtectedAllowed) ||
- m.CanGet && lookup.IsAccessible(m.Getter, isProtectedAllowed) && m.ReturnType.GetDefinition() != null && m.ReturnType.GetDefinition().IsDerivedFrom(list.GetDefinition())) {
+ m.CanGet && lookup.IsAccessible(m.Getter, isProtectedAllowed) && m.ReturnType.GetDefinition() != null &&
+ (m.ReturnType.GetDefinition().IsDerivedFrom(list.GetDefinition()) || m.ReturnType.GetDefinition().IsDerivedFrom(list1.GetDefinition()))) {
var data = contextList.AddMember(m);
if (data != null)
data.DisplayFlags |= DisplayFlags.NamedArgument;
@@ -383,7 +385,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
// check if the object is a list, if not only provide object initalizers
if (initializerType.Kind != TypeKind.Array && list != null) {
var def = initializerType.GetDefinition();
- if (def != null && !def.IsDerivedFrom(list.GetDefinition()))
+ if (def != null && !def.IsDerivedFrom(list.GetDefinition()) && !def.IsDerivedFrom(list1.GetDefinition()))
return contextList.Result;
}
diff --git a/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/ObjectInitializerTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/ObjectInitializerTests.cs
index f3994bc0..dc3dd08e 100644
--- a/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/ObjectInitializerTests.cs
+++ b/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/ObjectInitializerTests.cs
@@ -794,6 +794,32 @@ class Test
Assert.IsNotNull(provider.Find("Children"), "'Children' not found.");
});
}
+
+ [Test]
+ public void TestBug19908_Case2()
+ {
+ CodeCompletionBugTests.CombinedProviderTest(
+ @"using System.Collections.Generic;
+
+class Foo
+{
+ public IList<int> Children { get {} }
+}
+
+class Test
+{
+ public static void Main(string [] args)
+ {
+ var dict = new Foo {
+ $c$
+ }
+ }
+}
+",
+ provider => {
+ Assert.IsNotNull(provider.Find("Children"), "'Children' not found.");
+ });
+ }
}
}