Browse Source

[Completion] Fixed enum completion in binary operator expressions.

newNRvisualizers
Mike Krüger 14 years ago
parent
commit
a1e4b07da6
  1. 9
      ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs
  2. 23
      ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionAccessibleTests.cs

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

@ -1118,6 +1118,15 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -1118,6 +1118,15 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
rr = ResolveExpression(node, unit);
}
if (node is Expression) {
var astResolver = new CSharpAstResolver(GetState(), xp.Unit, CSharpParsedFile);
foreach (var type in CreateFieldAction.GetValidTypes(astResolver, (Expression)node)) {
if (type.Kind == TypeKind.Enum) {
AddEnumMembers(wrapper, type, rr.Item2);
}
}
}
if (node is Identifier && node.Parent is ForeachStatement) {
var foreachStmt = (ForeachStatement)node.Parent;
foreach (var possibleName in GenerateNameProposals (foreachStmt.VariableType)) {

23
ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionAccessibleTests.cs

@ -1177,7 +1177,28 @@ class TestClass @@ -1177,7 +1177,28 @@ class TestClass
Assert.IsNotNull (provider.Find ("InnerEnumTest.TestEnum.B"), "enum 'InnerEnumTest.TestEnum.B' not found.");
Assert.IsNotNull (provider.Find ("InnerEnumTest.TestEnum.C"), "enum 'InnerEnumTest.TestEnum.C' not found.");
}
[Test()]
public void TestEnumInBinaryOperatorExpression ()
{
CompletionDataList provider = CodeCompletionBugTests.CreateCtrlSpaceProvider (
@"
[Flags]
public enum TestEnum { A, B, C}
class TestClass
{
public void Foo ()
{
$TestEnum test = TestEnum.A | $
}
}");
Assert.IsNotNull (provider, "provider not found.");
Assert.IsNotNull (provider.Find ("TestEnum"), "enum 'TestEnum' not found.");
Assert.IsNotNull (provider.Find ("TestEnum.A"), "enum 'TestEnum.A' not found.");
Assert.IsNotNull (provider.Find ("TestEnum.B"), "enum 'TestEnum.B' not found.");
Assert.IsNotNull (provider.Find ("TestEnum.C"), "enum 'TestEnum.C' not found.");
}
[Test()]
public void TestPrimimitiveTypeCompletionString ()

Loading…
Cancel
Save