From 9e7c9be52b672075b536b1e33f73ba1396fd6c16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20Kr=C3=BCger?= Date: Tue, 22 May 2012 09:47:08 +0200 Subject: [PATCH] [Completion] Fixed enum completion bug. --- .../Completion/CSharpCompletionEngine.cs | 18 ++++++++---------- .../CodeCompletionAccessibleTests.cs | 8 ++++---- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs b/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs index 68f7b3d9b3..402d313904 100644 --- a/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs +++ b/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs @@ -640,7 +640,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion // May happen in variable names return controlSpace ? DefaultControlSpaceItems(identifierStart) : null; } - if (identifierStart.Node is VariableInitializer && location <= ((VariableInitializer)identifierStart.Node).NameToken.EndLocation) { return controlSpace ? HandleAccessorContext() ?? DefaultControlSpaceItems(identifierStart) : null; } @@ -1118,15 +1117,6 @@ 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)) { @@ -1290,6 +1280,14 @@ namespace ICSharpCode.NRefactory.CSharp.Completion } } + if (node is Expression) { + var astResolver = new CSharpAstResolver(state, unit, CSharpParsedFile); + foreach (var type in CreateFieldAction.GetValidTypes(astResolver, (Expression)node)) { + if (type.Kind == TypeKind.Enum) { + AddEnumMembers(wrapper, type, state); + } + } + } } static bool IsInSwitchContext(AstNode node) diff --git a/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionAccessibleTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionAccessibleTests.cs index eb3b25ebec..409112a298 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionAccessibleTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionAccessibleTests.cs @@ -1181,7 +1181,7 @@ class TestClass [Test()] public void TestEnumInBinaryOperatorExpression () { - CompletionDataList provider = CodeCompletionBugTests.CreateCtrlSpaceProvider ( + CodeCompletionBugTests.CombinedProviderTest ( @" [Flags] public enum TestEnum { A, B, C} @@ -1190,14 +1190,14 @@ class TestClass { public void Foo () { - $TestEnum test = TestEnum.A | $ + $TestEnum test = TestEnum.A | T$ } -}"); - Assert.IsNotNull (provider, "provider not found."); +}", provider => { 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()]