From 4152fc765f0eb3b9f3e519ec5406127dc2bdb875 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20Kr=C3=BCger?= Date: Thu, 31 Jan 2013 10:37:31 +0100 Subject: [PATCH] Added unit test that shows an issue with dynamic resolve results & code completion. --- .../Completion/CSharpCompletionEngine.cs | 14 ++++---- .../CodeCompletion/ObjectInitializerTests.cs | 36 +++++++++++++++++++ 2 files changed, 43 insertions(+), 7 deletions(-) diff --git a/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs b/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs index e61c5fdc50..25c42125d6 100644 --- a/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs +++ b/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs @@ -295,17 +295,17 @@ namespace ICSharpCode.NRefactory.CSharp.Completion // case 3) return contextList.Result; } - var lookup = new MemberLookup(ctx.CurrentTypeDefinition, Compilation.MainAssembly); - bool isProtectedAllowed = ctx.CurrentTypeDefinition != null ? - ctx.CurrentTypeDefinition.IsDerivedFrom(initializerResult.Item1.Type.GetDefinition()) : + var initializerType = initializerResult.Item1.Type; + bool isProtectedAllowed = ctx.CurrentTypeDefinition != null && initializerType.GetDefinition() != null ? + ctx.CurrentTypeDefinition.IsDerivedFrom(initializerType.GetDefinition()) : false; - foreach (var m in initializerResult.Item1.Type.GetMembers (m => m.EntityType == EntityType.Field)) { + foreach (var m in initializerType.GetMembers (m => m.EntityType == EntityType.Field)) { if (lookup.IsAccessible (m, isProtectedAllowed)) contextList.AddMember(m); } - foreach (IProperty m in initializerResult.Item1.Type.GetMembers (m => m.EntityType == EntityType.Property)) { + foreach (IProperty m in initializerType.GetMembers (m => m.EntityType == EntityType.Property)) { if (m.CanSet && lookup.IsAccessible (m.Setter, isProtectedAllowed)) contextList.AddMember(m); } @@ -319,8 +319,8 @@ namespace ICSharpCode.NRefactory.CSharp.Completion // check if the object is a list, if not only provide object initalizers var list = typeof(System.Collections.IList).ToTypeReference().Resolve(Compilation); - if (initializerResult.Item1.Type.Kind != TypeKind.Array && list != null) { - var def = initializerResult.Item1.Type.GetDefinition(); + if (initializerType.Kind != TypeKind.Array && list != null) { + var def = initializerType.GetDefinition(); if (def != null && !def.IsDerivedFrom(list.GetDefinition())) return contextList.Result; } diff --git a/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/ObjectInitializerTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/ObjectInitializerTests.cs index 81acf52a76..59692a3873 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/ObjectInitializerTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/ObjectInitializerTests.cs @@ -645,6 +645,42 @@ class C : S Assert.IsNotNull(provider.Find("Bar"), "'Bar' not found."); } + + /// + /// Bug 9910 - Completion not working in object initializer + /// + [Ignore("FIX ME !")] + [Test] + public void TestBug9910() + { + var provider = CodeCompletionBugTests.CreateCtrlSpaceProvider( + @"class Test +{ + Test(int i) { } + Test(char c) { } + + static Test foo(dynamic d) + { + return new Test(d) { + $f$ + }; + } + + public static void Main(string [] args) + { + } + + int fld; + int fld2; +} + +"); + Assert.IsNotNull(provider.Find("fld"), "'fld' found."); + Assert.IsNotNull(provider.Find("fld2"), "'fld2' not found."); + } + + + } }