Browse Source

Fixed bug in "new" completion.

newNRvisualizers
Mike Krüger 14 years ago
parent
commit
fa8e9a22e8
  1. 9
      ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs
  2. 25
      ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs

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

@ -436,7 +436,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -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 @@ -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;

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

@ -1496,10 +1496,33 @@ class A @@ -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.");
}
/// <summary>
/// Bug 2295 - [New Resolver] 'new' completion doesn't select the correct class name
/// </summary>
[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);
});
}
/// <summary>
/// Bug 473686 - Constants are not included in code completion
/// </summary>

Loading…
Cancel
Save