Browse Source

Fixed some unit tests.

newNRvisualizers
Mike Krüger 14 years ago
parent
commit
6d4a825084
  1. 26
      ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs
  2. 8
      ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs

26
ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs

@ -161,7 +161,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
return null; return null;
var methodGroup = invocationResult.Item1 as MethodGroupResolveResult; var methodGroup = invocationResult.Item1 as MethodGroupResolveResult;
if (methodGroup != null) if (methodGroup != null)
return CreateParameterCompletion (methodGroup, invocationResult.Item2, invoke.Item2, 0); return CreateParameterCompletion (methodGroup, invocationResult.Item2, invoke.Item2, 0, controlSpace);
return null; return null;
case ',': case ',':
int cpos2; int cpos2;
@ -183,7 +183,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
// check propose name, for context <variable name> <ctrl+space> (but only in control space context) // check propose name, for context <variable name> <ctrl+space> (but only in control space context)
IType isAsType = null; IType isAsType = null;
var isAsExpression = GetExpressionAt (offset); 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; var parent = isAsExpression.Item2 as VariableDeclarationStatement;
int offset1 = document.GetOffset (parent.Type.StartLocation); int offset1 = document.GetOffset (parent.Type.StartLocation);
int offset2 = document.GetOffset (parent.Type.EndLocation); int offset2 = document.GetOffset (parent.Type.EndLocation);
@ -217,7 +217,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
AutoCompleteEmptyMatch = false; AutoCompleteEmptyMatch = false;
return proposeNameList.Result; return proposeNameList.Result;
} }
// int tokenIndex = offset; // int tokenIndex = offset;
// string token = GetPreviousToken (ref tokenIndex, false); // string token = GetPreviousToken (ref tokenIndex, false);
// if (result.ExpressionContext == ExpressionContext.ObjectInitializer) { // if (result.ExpressionContext == ExpressionContext.ObjectInitializer) {
@ -252,7 +251,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
return null; return null;
methodGroup = invocationResult.Item1 as MethodGroupResolveResult; methodGroup = invocationResult.Item1 as MethodGroupResolveResult;
if (methodGroup != null) if (methodGroup != null)
return CreateParameterCompletion (methodGroup, invocationResult.Item2, invoke.Item2, currentParameter); return CreateParameterCompletion (methodGroup, invocationResult.Item2, invoke.Item2, currentParameter, controlSpace);
return null; return null;
case "=": case "=":
case "==": case "==":
@ -918,7 +917,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
DefaultCompletionString = GetShortType (hintType, GetState ()); DefaultCompletionString = GetShortType (hintType, GetState ());
wrapper.AddType (hintType, DefaultCompletionString); wrapper.AddType (hintType, DefaultCompletionString);
} }
AddTypesAndNamespaces (wrapper, state, pred); AddTypesAndNamespaces (wrapper, state, pred, m => false);
AddKeywords (wrapper, primitiveTypesKeywords.Where (k => k != "void")); AddKeywords (wrapper, primitiveTypesKeywords.Where (k => k != "void"));
AutoCompleteEmptyMatch = true; AutoCompleteEmptyMatch = true;
return wrapper.Result; return wrapper.Result;
@ -946,7 +945,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
return null; // don't add override completion for static members return null; // don't add override completion for static members
} }
} }
foreach (var baseType in type.GetAllBaseTypeDefinitions (ctx)) { foreach (var baseType in type.GetAllBaseTypeDefinitions (ctx)) {
AddVirtuals (alreadyInserted, wrapper, type, modifiers, baseType, declarationBegin); AddVirtuals (alreadyInserted, wrapper, type, modifiers, baseType, declarationBegin);
addedVirtuals = true; addedVirtuals = true;
@ -963,7 +961,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
foreach (var m in curType.Methods.Where (m => !m.IsConstructor && !m.IsDestructor).Cast<IMember> ().Concat (curType.Properties.Cast<IMember> ())) { foreach (var m in curType.Methods.Where (m => !m.IsConstructor && !m.IsDestructor).Cast<IMember> ().Concat (curType.Properties.Cast<IMember> ())) {
if (m.IsSynthetic || curType.Kind != TypeKind.Interface && !(m.IsVirtual || m.IsOverride || m.IsAbstract)) if (m.IsSynthetic || curType.Kind != TypeKind.Interface && !(m.IsVirtual || m.IsOverride || m.IsAbstract))
continue; continue;
// filter out the "Finalize" methods, because finalizers should be done with destructors. // filter out the "Finalize" methods, because finalizers should be done with destructors.
if (m is IMethod && m.Name == "Finalize") if (m is IMethod && m.Name == "Finalize")
continue; continue;
@ -972,7 +969,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
string text = m.ReflectionName; //TODO:correct ? string text = m.ReflectionName; //TODO:correct ?
// check if the member is already implemented // check if the member is already implemented
bool foundMember = type.Members.Any (cm => cm.ReflectionName /*amb.GetString (ctx, cm, OutputFlags.ClassBrowserEntries)*/ == text); bool foundMember = type.Members.Any (cm => cm.ReflectionName /*amb.GetString (ctx, cm, OutputFlags.ClassBrowserEntries)*/ == text);
if (!foundMember && !alreadyInserted.ContainsKey (text)) { if (!foundMember && !alreadyInserted.ContainsKey (text)) {
alreadyInserted [text] = true; alreadyInserted [text] = true;
data.CompletionCategory = col.GetCompletionCategory (curType); data.CompletionCategory = col.GetCompletionCategory (curType);
@ -1172,7 +1168,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
return result; return result;
} }
IEnumerable<ICompletionData> CreateParameterCompletion (MethodGroupResolveResult resolveResult, CSharpResolver state, AstNode invocation, int parameter) IEnumerable<ICompletionData> CreateParameterCompletion (MethodGroupResolveResult resolveResult, CSharpResolver state, AstNode invocation, int parameter, bool controlSpace)
{ {
var result = new CompletionDataWrapper (this); var result = new CompletionDataWrapper (this);
var addedEnums = new HashSet<string> (); var addedEnums = new HashSet<string> ();
@ -1197,10 +1193,12 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
} }
} }
if (addedEnums.Count + addedDelegates.Count == 0) if (!controlSpace) {
return Enumerable.Empty<ICompletionData> (); if (addedEnums.Count + addedDelegates.Count == 0)
AutoCompleteEmptyMatch = false; return Enumerable.Empty<ICompletionData> ();
AutoSelect = false; AutoCompleteEmptyMatch = false;
AutoSelect = false;
}
AddContextCompletion (result, state, invocation); AddContextCompletion (result, state, invocation);
// resolver.AddAccessibleCodeCompletionData (ExpressionContext.MethodBody, cdc); // resolver.AddAccessibleCodeCompletionData (ExpressionContext.MethodBody, cdc);
@ -1290,7 +1288,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
// Console.WriteLine ("type:" + type +"/"+type.GetType ()); // Console.WriteLine ("type:" + type +"/"+type.GetType ());
// Console.WriteLine ("IS PROT ALLOWED:" + isProtectedAllowed); // Console.WriteLine ("IS PROT ALLOWED:" + isProtectedAllowed);
// Console.WriteLine (resolveResult); // Console.WriteLine (resolveResult);
// Console.WriteLine (currentMember.IsStatic); // Console.WriteLine (currentMember != null ? currentMember.IsStatic : "currentMember == null");
foreach (var member in type.GetMembers (ctx)) { foreach (var member in type.GetMembers (ctx)) {
if (!lookup.IsAccessible (member, isProtectedAllowed)) { if (!lookup.IsAccessible (member, isProtectedAllowed)) {
// Console.WriteLine ("skip access: " + member.FullName); // Console.WriteLine ("skip access: " + member.FullName);

8
ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs

@ -3085,7 +3085,11 @@ public class Test<T>
"); ");
Assert.IsNotNull (provider, "provider not found."); Assert.IsNotNull (provider, "provider not found.");
Assert.IsNull (provider.Find ("Foo"), "method 'Foo' found."); Assert.IsNull (provider.Find ("Foo"), "method 'Foo' found.");
provider = CreateCtrlSpaceProvider ( }
public void TestBug669285B ()
{
var provider = CreateCtrlSpaceProvider (
@"static class Ext @"static class Ext
{ {
public static void Foo<T> (this T[] t) public static void Foo<T> (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.");
} }
/// <summary> /// <summary>

Loading…
Cancel
Save