diff --git a/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs b/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs index c0a7b1a71a..67eb1ca400 100644 --- a/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs +++ b/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs @@ -454,6 +454,9 @@ namespace ICSharpCode.NRefactory.CSharp.Completion token = GetPreviousToken (ref tokenIndex, false); if (token == "class" || token == "interface" || token == "struct" || token == "enum" || token == "namespace") // after these always follows a name return null; + var keywordresult = HandleKeywordCompletion (tokenIndex, token); + if (keywordresult != null) + return keywordresult; int prevTokenIndex = tokenIndex; var prevToken2 = GetPreviousToken (ref prevTokenIndex, false); if (prevToken2 == "delegate") // after these always follows a name @@ -464,6 +467,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion return HandleKeywordCompletion (tokenIndex, token); } } + if (identifierStart == null) { var accCtx = HandleAccessorContext (); if (accCtx != null) @@ -1067,7 +1071,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion } } var isAsWrapper = new CompletionDataWrapper (this); - AddTypesAndNamespaces (isAsWrapper, GetState (), null, t => isAsType == null || t.GetDefinition ().IsDerivedFrom (isAsType.GetDefinition ())); + AddTypesAndNamespaces (isAsWrapper, GetState (), null, t => isAsType == null || t.GetDefinition ().IsDerivedFrom (isAsType.GetDefinition ()), m => false); return isAsWrapper.Result; // { // CompletionDataList completionList = new ProjectDomCompletionDataList (); @@ -1174,9 +1178,11 @@ namespace ICSharpCode.NRefactory.CSharp.Completion return accessorContext; wrapper = new CompletionDataWrapper (this); state = GetState (); - AddTypesAndNamespaces (wrapper, state, null, null, m => false); + if (currentType != null) { + AddTypesAndNamespaces (wrapper, state, null, null, m => false); + AddKeywords (wrapper, primitiveTypesKeywords); + } AddKeywords (wrapper, typeLevelKeywords); - AddKeywords (wrapper, primitiveTypesKeywords); return wrapper.Result; case "new": int j = offset - 4; diff --git a/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/KeywordTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/KeywordTests.cs index a4c19ee939..0eff521090 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/KeywordTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/KeywordTests.cs @@ -34,6 +34,15 @@ namespace ICSharpCode.NRefactory.CSharp.CodeCompletion [TestFixture()] public class KeywordTests : TestBase { + [Test()] + public void TestTooManyOptions () + { + var provider = CodeCompletionBugTests.CreateProvider (@"$public S$"); + Assert.IsNotNull (provider, "provider == null"); + Assert.IsNotNull (provider.Find ("class"), "keyword 'class' not found."); + Assert.IsNull (provider.Find ("System"), "'System' found."); + } + [Test()] public void CaseKeywordTest () {