From 6d4a8250842fd44c554789da473dea290817e42d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20Kr=C3=BCger?= Date: Mon, 24 Oct 2011 11:20:31 +0200 Subject: [PATCH] Fixed some unit tests. --- .../Completion/CSharpCompletionEngine.cs | 26 +++++++++---------- .../CodeCompletion/CodeCompletionBugTests.cs | 8 ++++-- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs b/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs index eef45cff58..8d12014a5b 100644 --- a/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs +++ b/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs @@ -161,7 +161,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion return null; var methodGroup = invocationResult.Item1 as MethodGroupResolveResult; if (methodGroup != null) - return CreateParameterCompletion (methodGroup, invocationResult.Item2, invoke.Item2, 0); + return CreateParameterCompletion (methodGroup, invocationResult.Item2, invoke.Item2, 0, controlSpace); return null; case ',': int cpos2; @@ -183,7 +183,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion // check propose name, for context (but only in control space context) IType isAsType = null; var isAsExpression = GetExpressionAt (offset); - if (controlSpace && isAsExpression != null && isAsExpression.Item2 is VariableDeclarationStatement) { + if (controlSpace && isAsExpression != null && isAsExpression.Item2 is VariableDeclarationStatement && token != "new") { var parent = isAsExpression.Item2 as VariableDeclarationStatement; int offset1 = document.GetOffset (parent.Type.StartLocation); int offset2 = document.GetOffset (parent.Type.EndLocation); @@ -217,7 +217,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion AutoCompleteEmptyMatch = false; return proposeNameList.Result; } - // int tokenIndex = offset; // string token = GetPreviousToken (ref tokenIndex, false); // if (result.ExpressionContext == ExpressionContext.ObjectInitializer) { @@ -252,7 +251,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion return null; methodGroup = invocationResult.Item1 as MethodGroupResolveResult; if (methodGroup != null) - return CreateParameterCompletion (methodGroup, invocationResult.Item2, invoke.Item2, currentParameter); + return CreateParameterCompletion (methodGroup, invocationResult.Item2, invoke.Item2, currentParameter, controlSpace); return null; case "=": case "==": @@ -918,7 +917,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion DefaultCompletionString = GetShortType (hintType, GetState ()); wrapper.AddType (hintType, DefaultCompletionString); } - AddTypesAndNamespaces (wrapper, state, pred); + AddTypesAndNamespaces (wrapper, state, pred, m => false); AddKeywords (wrapper, primitiveTypesKeywords.Where (k => k != "void")); AutoCompleteEmptyMatch = true; return wrapper.Result; @@ -946,7 +945,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion return null; // don't add override completion for static members } } - foreach (var baseType in type.GetAllBaseTypeDefinitions (ctx)) { AddVirtuals (alreadyInserted, wrapper, type, modifiers, baseType, declarationBegin); addedVirtuals = true; @@ -963,7 +961,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion foreach (var m in curType.Methods.Where (m => !m.IsConstructor && !m.IsDestructor).Cast ().Concat (curType.Properties.Cast ())) { if (m.IsSynthetic || curType.Kind != TypeKind.Interface && !(m.IsVirtual || m.IsOverride || m.IsAbstract)) continue; - // filter out the "Finalize" methods, because finalizers should be done with destructors. if (m is IMethod && m.Name == "Finalize") continue; @@ -972,7 +969,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion string text = m.ReflectionName; //TODO:correct ? // check if the member is already implemented bool foundMember = type.Members.Any (cm => cm.ReflectionName /*amb.GetString (ctx, cm, OutputFlags.ClassBrowserEntries)*/ == text); - if (!foundMember && !alreadyInserted.ContainsKey (text)) { alreadyInserted [text] = true; data.CompletionCategory = col.GetCompletionCategory (curType); @@ -1172,7 +1168,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion return result; } - IEnumerable CreateParameterCompletion (MethodGroupResolveResult resolveResult, CSharpResolver state, AstNode invocation, int parameter) + IEnumerable CreateParameterCompletion (MethodGroupResolveResult resolveResult, CSharpResolver state, AstNode invocation, int parameter, bool controlSpace) { var result = new CompletionDataWrapper (this); var addedEnums = new HashSet (); @@ -1197,10 +1193,12 @@ namespace ICSharpCode.NRefactory.CSharp.Completion } } - if (addedEnums.Count + addedDelegates.Count == 0) - return Enumerable.Empty (); - AutoCompleteEmptyMatch = false; - AutoSelect = false; + if (!controlSpace) { + if (addedEnums.Count + addedDelegates.Count == 0) + return Enumerable.Empty (); + AutoCompleteEmptyMatch = false; + AutoSelect = false; + } AddContextCompletion (result, state, invocation); // resolver.AddAccessibleCodeCompletionData (ExpressionContext.MethodBody, cdc); @@ -1290,7 +1288,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion // Console.WriteLine ("type:" + type +"/"+type.GetType ()); // Console.WriteLine ("IS PROT ALLOWED:" + isProtectedAllowed); // Console.WriteLine (resolveResult); -// Console.WriteLine (currentMember.IsStatic); +// 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); diff --git a/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs index 6a9f7cff03..c55953fa82 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs @@ -3085,7 +3085,11 @@ public class Test "); Assert.IsNotNull (provider, "provider not found."); Assert.IsNull (provider.Find ("Foo"), "method 'Foo' found."); - provider = CreateCtrlSpaceProvider ( + } + + public void TestBug669285B () + { + var provider = CreateCtrlSpaceProvider ( @"static class Ext { public static void Foo (this T[] t) @@ -3322,7 +3326,7 @@ namespace Test } } }"); - Assert.IsNotNull (provider.Find ("Foo1"), "method 'Foo1' not found."); + Assert.IsNotNull (provider.Find ("Foo2"), "method 'Foo2' not found."); } ///