diff --git a/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs b/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs index 4fae8e828c..ddc0b3abc0 100644 --- a/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs +++ b/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs @@ -436,7 +436,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion int prevTokenIndex = tokenIndex; var prevToken2 = GetPreviousToken (ref prevTokenIndex, false); if (identifierStart == null && !string.IsNullOrEmpty (token) && !(IsInsideComment (tokenIndex) || IsInsideString (tokenIndex)) && (prevToken2 == ";" || prevToken2 == "{" || prevToken2 == "}")) { - Console.WriteLine ("!"); char last = token [token.Length - 1]; if (char.IsLetterOrDigit (last) || last == '_' || token == ">") { return HandleKeywordCompletion (tokenIndex, token); @@ -983,6 +982,14 @@ namespace ICSharpCode.NRefactory.CSharp.Completion newParentNode = newParentNode.Parent; } + if (newParentNode is AssignmentExpression) { + var assign = (AssignmentExpression)newParentNode; + var resolved = ResolveExpression (expressionOrVariableDeclaration.Item1, assign.Left, expressionOrVariableDeclaration.Item3); + if (resolved != null) { + hintType = resolved.Item1.Type; + } + } + if (newParentNode is VariableDeclarationStatement) { var varDecl = (VariableDeclarationStatement)newParentNode; hintTypeAst = varDecl.Type; diff --git a/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs index ccf906a4b0..265bbbe18c 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs @@ -1496,10 +1496,33 @@ class A } "); Assert.IsNotNull (provider, "provider not found."); - + Assert.IsNotNull (provider.Find ("A"), "class 'A' not found."); + Assert.AreEqual ("A", provider.DefaultCompletionString); Assert.IsNull (provider.Find ("B"), "class 'B' found, but shouldn'tj."); } + /// + /// Bug 2295 - [New Resolver] 'new' completion doesn't select the correct class name + /// + [Test()] + public void TestBug2295 () + { + CombinedProviderTest ( +@" +class A +{ + public void Test() + { + A a; + $a = new $ + } +} +", provider => { + Assert.IsNotNull (provider.Find ("A"), "class 'A' not found."); + Assert.AreEqual ("A", provider.DefaultCompletionString); + }); + } + /// /// Bug 473686 - Constants are not included in code completion ///