Browse Source

[Completion] Fixed bug in anonymous type creation.

pull/32/merge
Mike Krüger 13 years ago
parent
commit
176a3a0540
  1. 6
      ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs
  2. 40
      ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/ObjectInitializerTests.cs

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

@ -728,7 +728,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
return HandleKeywordCompletion(tokenIndex, token); return HandleKeywordCompletion(tokenIndex, token);
} }
} }
if (identifierStart == null) { if (identifierStart == null) {
var accCtx = HandleAccessorContext(); var accCtx = HandleAccessorContext();
if (accCtx != null) { if (accCtx != null) {
@ -744,6 +743,10 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
AutoSelect = false; AutoSelect = false;
} }
// new { b$ }
if (n is IdentifierExpression && n.Parent is AnonymousTypeCreateExpression)
return null;
// Handle foreach (type name _ // Handle foreach (type name _
if (n is IdentifierExpression) { if (n is IdentifierExpression) {
var prev = n.GetPrevNode() as ForeachStatement; var prev = n.GetPrevNode() as ForeachStatement;
@ -755,7 +758,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
return null; return null;
} }
} }
// Handle object/enumerable initialzer expressions: "new O () { P$" // Handle object/enumerable initialzer expressions: "new O () { P$"
if (n is IdentifierExpression && n.Parent is ArrayInitializerExpression && !(n.Parent.Parent is ArrayCreateExpression)) { if (n is IdentifierExpression && n.Parent is ArrayInitializerExpression && !(n.Parent.Parent is ArrayCreateExpression)) {
var result = HandleObjectInitializer(identifierStart.Unit, n); var result = HandleObjectInitializer(identifierStart.Unit, n);

40
ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/ObjectInitializerTests.cs

@ -704,9 +704,49 @@ class C : S
Assert.IsNull(provider.Find("MinValue"), "'MinValue' found."); Assert.IsNull(provider.Find("MinValue"), "'MinValue' found.");
} }
[Test]
public void TestAnonymousTypes()
{
CodeCompletionBugTests.CombinedProviderTest(
@"class Test
{
public static void Main(string [] args)
{
var mm = new {
$b$
};
}
}
", provider => {
Assert.IsTrue(provider == null || provider.Count == 0);
});
}
[Test]
public void TestAnonymousTypesCase2()
{
CodeCompletionBugTests.CombinedProviderTest(
@"class Test
{
public static void Main(string [] args)
{
var mm = new {
$bar = a$
};
} }
}
", provider => {
Assert.IsNotNull(provider.Find("args"), "'args' not found.");
});
} }
}
}

Loading…
Cancel
Save