Browse Source

Fixed completion bug.

newNRvisualizers
Mike Krüger 14 years ago
parent
commit
193a153070
  1. 36
      ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs
  2. 2
      ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngineBase.cs
  3. 20
      ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs

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

@ -319,7 +319,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -319,7 +319,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
var isAsExpression = GetExpressionAt(offset);
if (controlSpace && isAsExpression != null && isAsExpression.Node is VariableDeclarationStatement && token != "new") {
var parent = isAsExpression.Node as VariableDeclarationStatement;
var proposeNameList = new CompletionDataWrapper (this);
var proposeNameList = new CompletionDataWrapper(this);
foreach (var possibleName in GenerateNameProposals (parent.Type)) {
if (possibleName.Length > 0) {
@ -386,7 +386,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -386,7 +386,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
return null;
}
if (resolveResult.Item1.Type.Kind == TypeKind.Enum) {
var wrapper = new CompletionDataWrapper (this);
var wrapper = new CompletionDataWrapper(this);
AddContextCompletion(wrapper, resolveResult.Item2, expressionOrVariableDeclaration.Node, expressionOrVariableDeclaration.Unit);
AddEnumMembers(wrapper, resolveResult.Item1.Type, resolveResult.Item2);
AutoCompleteEmptyMatch = false;
@ -443,7 +443,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -443,7 +443,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
return null;
}
var wrapper = new CompletionDataWrapper (this);
var wrapper = new CompletionDataWrapper(this);
if (currentType != null) {
// bool includeProtected = DomType.IncludeProtected (dom, typeFromDatabase, resolver.CallingType);
foreach (var method in currentType.Methods) {
@ -464,7 +464,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -464,7 +464,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
return null;
case ":":
if (currentMember == null) {
var wrapper = new CompletionDataWrapper (this);
var wrapper = new CompletionDataWrapper(this);
AddTypesAndNamespaces(wrapper, GetState(), null, t => currentType != null ? !currentType.ReflectionName.Equals(t.ReflectionName) : true);
return wrapper.Result;
}
@ -500,7 +500,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -500,7 +500,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
}
return DefaultControlSpaceItems();
}
var dataList = new CompletionDataWrapper (this);
var dataList = new CompletionDataWrapper(this);
AddKeywords(dataList, linqKeywords);
return dataList.Result;
}
@ -508,17 +508,15 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -508,17 +508,15 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
return HandleEnumContext();
}
var contextList = new CompletionDataWrapper (this);
var contextList = new CompletionDataWrapper(this);
var identifierStart = GetExpressionAtCursor();
if (identifierStart != null) {
if (identifierStart.Node is TypeParameterDeclaration) {
return null;
}
if (identifierStart.Node is MemberReferenceExpression) {
return HandleMemberReferenceCompletion(new ExpressionResult (((MemberReferenceExpression)identifierStart.Node).Target, identifierStart.Unit));
return HandleMemberReferenceCompletion(new ExpressionResult(((MemberReferenceExpression)identifierStart.Node).Target, identifierStart.Unit));
}
if (identifierStart.Node is Identifier) {
@ -682,7 +680,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -682,7 +680,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
if (evaluationExpr != null) {
resolveResult = ResolveExpression(evaluationExpr, identifierStart.Unit);
if (resolveResult != null && resolveResult.Item1.Type.Kind == TypeKind.Enum) {
var wrapper = new CompletionDataWrapper (this);
var wrapper = new CompletionDataWrapper(this);
AddContextCompletion(wrapper, resolveResult.Item2, evaluationExpr, identifierStart.Unit);
AddEnumMembers(wrapper, resolveResult.Item1.Type, resolveResult.Item2);
AutoCompleteEmptyMatch = false;
@ -1177,7 +1175,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -1177,7 +1175,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
if (currentType != null) {
return null;
}
var wrapper = new CompletionDataWrapper (this);
var wrapper = new CompletionDataWrapper(this);
AddTypesAndNamespaces(wrapper, GetState(), null, t => false);
return wrapper.Result;
case "case":
@ -1260,7 +1258,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -1260,7 +1258,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
}
}
}
var isAsWrapper = new CompletionDataWrapper (this);
var isAsWrapper = new CompletionDataWrapper(this);
var def = isAsType != null ? isAsType.GetDefinition() : null;
AddTypesAndNamespaces(isAsWrapper, GetState(), null, t => t.GetDefinition() == null || def == null || t.GetDefinition().IsDerivedFrom(def), m => false);
return isAsWrapper.Result;
@ -1372,7 +1370,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -1372,7 +1370,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
if (accessorContext != null) {
return accessorContext;
}
wrapper = new CompletionDataWrapper (this);
wrapper = new CompletionDataWrapper(this);
state = GetState();
if (currentType != null) {
AddTypesAndNamespaces(wrapper, state, null, null, m => false);
@ -1494,16 +1492,18 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -1494,16 +1492,18 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
}
return null;
case "yield":
var yieldDataList = new CompletionDataWrapper (this);
var yieldDataList = new CompletionDataWrapper(this);
DefaultCompletionString = "return";
yieldDataList.AddCustom("break");
yieldDataList.AddCustom("return");
return yieldDataList.Result;
case "in":
var inList = new CompletionDataWrapper (this);
var node = Unit.GetNodeAt(location);
var rr = ResolveExpression(node, Unit);
AddContextCompletion(inList, rr != null ? rr.Item2 : GetState(), node, Unit);
var inList = new CompletionDataWrapper(this);
var expr = GetExpressionAtCursor();
var rr = ResolveExpression(expr);
AddContextCompletion(inList, rr != null ? rr.Item2 : GetState(), expr.Node, Unit);
return inList.Result;
// case "where":
// CompletionDataList whereDataList = new CompletionDataList ();

2
ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngineBase.cs

@ -438,8 +438,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -438,8 +438,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
wrapper.Append(continuation);
AppendMissingClosingBrackets(wrapper, memberText, appendSemicolon);
wrapper.Append(afterContinuation);
Console.WriteLine("-------");
Console.WriteLine(wrapper);
if (closingBrackets > 0) {
wrapper.Append(new string ('}', closingBrackets));
}

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

@ -4811,5 +4811,25 @@ class A @@ -4811,5 +4811,25 @@ class A
Assert.IsNotNull (provider.Find ("WriteLine"), "'WriteLine' not found.");
}
/// <summary>
/// Bug 4017 - code completion in foreach does not work for local variables declared in the same block
/// </summary>
[Test()]
public void TestBug4017 ()
{
var provider = CreateProvider (
@"
class TestClass
{
void Foo()
{
string[] args = null;
$foreach(string arg in a$
}
}
");
Assert.IsNotNull (provider.Find ("args"), "'args' not found.");
}
}
}

Loading…
Cancel
Save