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
///