From 98ad3bacc4512627091360ce088ffaedd4d98105 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20Kr=C3=BCger?= Date: Mon, 24 Oct 2011 13:15:59 +0200 Subject: [PATCH] Fixed unit test. --- .../Completion/CSharpCompletionEngine.cs | 65 ++++++++++++------- .../Completion/CSharpCompletionEngineBase.cs | 3 +- 2 files changed, 45 insertions(+), 23 deletions(-) diff --git a/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs b/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs index 7ee024f9cd..8e6034d68a 100644 --- a/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs +++ b/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs @@ -1300,24 +1300,26 @@ namespace ICSharpCode.NRefactory.CSharp.Completion // Console.WriteLine ("IS PROT ALLOWED:" + isProtectedAllowed); // Console.WriteLine (resolveResult); // Console.WriteLine (currentMember != null ? currentMember.IsStatic : "currentMember == null"); - foreach (var member in type.GetMembers (ctx)) { - if (!lookup.IsAccessible (member, isProtectedAllowed)) { -// Console.WriteLine ("skip access: " + member.FullName); - continue; - } - if (resolvedNode is BaseReferenceExpression && member.IsAbstract) - continue; - - if (!includeStaticMembers && member.IsStatic && !(resolveResult is TypeResolveResult)) { -// Console.WriteLine ("skip static member: " + member.FullName); - continue; - } - if (!member.IsStatic && (resolveResult is TypeResolveResult)) { -// Console.WriteLine ("skip non static member: " + member.FullName); - continue; + if (resolvedNode.Annotation () == null) { //tags the created expression as part of an object create expression. + foreach (var member in type.GetMembers (ctx)) { + if (!lookup.IsAccessible (member, isProtectedAllowed)) { + // Console.WriteLine ("skip access: " + member.FullName); + continue; + } + if (resolvedNode is BaseReferenceExpression && member.IsAbstract) + continue; + + if (!includeStaticMembers && member.IsStatic && !(resolveResult is TypeResolveResult)) { + // Console.WriteLine ("skip static member: " + member.FullName); + continue; + } + if (!member.IsStatic && (resolveResult is TypeResolveResult)) { + // Console.WriteLine ("skip non static member: " + member.FullName); + continue; + } + // Console.WriteLine ("add : "+ member.FullName + " --- " + member.IsStatic); + result.AddMember (member); } -// Console.WriteLine ("add : "+ member.FullName + " --- " + member.IsStatic); - result.AddMember (member); } if (resolveResult is TypeResolveResult || includeStaticMembers) { @@ -1403,19 +1405,38 @@ namespace ICSharpCode.NRefactory.CSharp.Completion return null; } baseUnit = ParseStub ("a()"); - + Print (baseUnit); var memberLocation = currentMember != null ? currentMember.Region.Begin : currentType.Region.Begin; var mref = baseUnit.GetNodeAt (location); - Expression expr; + if (mref == null){ + var invoke = baseUnit.GetNodeAt (location); + if (invoke != null) + mref = invoke.Target as MemberReferenceExpression; + } + Expression expr = null; if (mref != null) { expr = mref.Target.Clone (); mref.Parent.ReplaceWith (expr); } else { - var tref = baseUnit.GetNodeAt (location); - var memberType = tref != null ? tref.Type as MemberType : null; + Expression tref = baseUnit.GetNodeAt (location); + var memberType = tref != null ? ((TypeReferenceExpression)tref).Type as MemberType : null; + if (memberType == null) { + memberType = baseUnit.GetNodeAt (location); + if (memberType != null) { + tref = baseUnit.GetNodeAt (location); + if (tref == null) + return null; + } + if (tref is ObjectCreateExpression) { + expr = new TypeReferenceExpression (memberType.Target.Clone ()); + expr.AddAnnotation (new ObjectCreateExpression ()); + } + } + if (memberType == null) return null; - expr = new TypeReferenceExpression (memberType.Target.Clone ()); + if (expr == null) + expr = new TypeReferenceExpression (memberType.Target.Clone ()); tref.ReplaceWith (expr); } diff --git a/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngineBase.cs b/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngineBase.cs index c57ba02753..62f4938634 100644 --- a/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngineBase.cs +++ b/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngineBase.cs @@ -345,7 +345,8 @@ namespace ICSharpCode.NRefactory.CSharp.Completion var result = visitor.GetResolveResult (resolveNode); return Tuple.Create (result, state); } - static void Print (AstNode node) + + protected static void Print (AstNode node) { var v = new CSharpOutputVisitor (Console.Out, new CSharpFormattingOptions ()); node.AcceptVisitor (v, null);