From 7befa599aaba9c77f548683705c4f399e3226ba2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20Kr=C3=BCger?= Date: Thu, 12 Jan 2012 16:36:11 +0100 Subject: [PATCH] Fixed for context completion. --- .../Completion/CSharpCompletionEngine.cs | 6 ++++- .../CodeCompletion/CodeCompletionBugTests.cs | 23 +++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs b/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs index 8ec5eded77..74fab83f42 100644 --- a/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs +++ b/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs @@ -426,6 +426,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion var contextList = new CompletionDataWrapper (this); var identifierStart = GetExpressionAtCursor (); + if (identifierStart != null && identifierStart.Item2 is TypeParameterDeclaration) return null; @@ -1957,7 +1958,10 @@ namespace ICSharpCode.NRefactory.CSharp.Completion } if (expr == null) { - var forStmt = tmpUnit.GetNodeAt (location.Line, location.Column - 3); + var block = tmpUnit.GetNodeAt (location); + var node = block != null ? block.Statements.LastOrDefault () : null; + + var forStmt = node != null ? node.PrevSibling as ForStatement : null; if (forStmt != null && forStmt.EmbeddedStatement.IsNull) { expr = forStmt; var id = new IdentifierExpression ("stub"); diff --git a/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs index 5086177dff..6b51846911 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs @@ -1632,6 +1632,29 @@ class A }); } + /// + /// Bug 2788 - Locals do not show up inside the 'for' statement context + /// + [Test()] + public void TestBug2788 () + { + CombinedProviderTest ( +@" +class A +{ + public void Test() + { + + var foo = new byte[100]; + $for (int i = 0; i < f$ + } +} +", provider => { + Assert.IsNotNull (provider.Find ("foo"), "'foo' not found."); + Assert.IsNotNull (provider.Find ("i"), "'i' not found."); + }); + } + [Test()] public void TestNewInConstructor () {