From f5730d5729c0a576c5290143e588b7b7ef1d5acf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20Kr=C3=BCger?= Date: Mon, 31 Oct 2011 09:43:09 +0100 Subject: [PATCH] * CSharpCompletionEngine.cs: Fixed some bugs in global/type context. * KeywordTests.cs: * CodeCompletionBugTests.cs: Fixed some bugs in global/type context --- .../Completion/CSharpCompletionEngine.cs | 14 ++--- .../CodeCompletion/CodeCompletionBugTests.cs | 20 +++++++ .../CSharp/CodeCompletion/KeywordTests.cs | 52 +++++++++++++++++++ 3 files changed, 80 insertions(+), 6 deletions(-) diff --git a/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs b/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs index fdce3045cf..e218de90fd 100644 --- a/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs +++ b/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs @@ -370,7 +370,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion AddKeywords (dataList, linqKeywords); return dataList.Result; } - if (!(char.IsLetter (completionChar) || completionChar == '_') && (identifierStart == null || !(identifierStart.Item2 is ArrayInitializerExpression))) return controlSpace ? DefaultControlSpaceItems () : null; char prevCh = offset > 2 ? document.GetCharAt (offset - 2) : '\0'; @@ -388,12 +387,13 @@ namespace ICSharpCode.NRefactory.CSharp.Completion if (!char.IsLetterOrDigit (last) && last != '_') return null; } - if (identifierStart == null) - return null; - + var contextList = new CompletionDataWrapper (this); + if (identifierStart == null) { + AddContextCompletion (contextList, GetState (), null); + return contextList.Result; + } CSharpResolver csResolver; AstNode n = identifierStart.Item2; - var contextList = new CompletionDataWrapper (this); if (n is ArrayInitializerExpression) { var initalizerResult = ResolveExpression (identifierStart.Item1, n.Parent, identifierStart.Item3); if (initalizerResult != null) { @@ -554,6 +554,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion void AddContextCompletion (CompletionDataWrapper wrapper, CSharpResolver state, AstNode node) { + Console.WriteLine ("!!!!"); if (state == null) return; foreach (var variable in state.LocalVariables) { @@ -586,6 +587,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion } else if (state.CurrentTypeDefinition != null) { AddKeywords (wrapper, typeLevelKeywords); } else { + Console.WriteLine ("3"); AddKeywords (wrapper, globalLevelKeywords); } @@ -866,7 +868,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion case "static": wrapper = new CompletionDataWrapper (this); var state = GetState (); - AddTypesAndNamespaces (wrapper, state, null, m => false); + AddTypesAndNamespaces (wrapper, state, null, null, m => false); AddKeywords (wrapper, typeLevelKeywords); AddKeywords (wrapper, primitiveTypesKeywords); return wrapper.Result; diff --git a/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs index 8daa2f2fd3..e07ddfe545 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs @@ -3596,6 +3596,26 @@ public class Test Assert.IsNotNull (provider.Find ("C"), "class 'C' not found."); } + /// + /// Bug 1744 - [New Resolver] Issues while typing a property + /// + [Test()] + public void Test1744 () + { + var provider = CreateProvider ( +@" +public class Test +{ + $public $ +} + +"); + Assert.IsNotNull (provider, "provider not found."); + Assert.IsNotNull (provider.Find ("void"), "class 'void' not found."); + Assert.IsNotNull (provider.Find ("Test"), "class 'Test' not found."); + Assert.IsNotNull (provider.Find ("System"), "namespace 'System' not found."); + } + [Test()] public void TestCompletionInTryCatch () { diff --git a/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/KeywordTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/KeywordTests.cs index b041fc7cb4..e82aa307c3 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/KeywordTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/KeywordTests.cs @@ -86,7 +86,59 @@ void Test (string t) Assert.IsNotNull (provider.Find ("case"), "keyword 'case' not found."); } + [Test()] + public void ModifierKeywordTest () + { + var provider = CodeCompletionBugTests.CreateProvider ( +@" +$p$ +"); + Assert.IsNotNull (provider, "provider == null"); + Assert.IsNotNull (provider.Find ("public"), "keyword 'public' not found."); + Assert.IsNotNull (provider.Find ("namespace"), "keyword 'namespace' not found."); + } + + [Test()] + public void ModifierKeywordTestCtrlSpace () + { + var provider = CodeCompletionBugTests.CreateCtrlSpaceProvider ( +@" +$p$ +"); + Assert.IsNotNull (provider, "provider == null"); + Assert.IsNotNull (provider.Find ("public"), "keyword 'public' not found."); + Assert.IsNotNull (provider.Find ("namespace"), "keyword 'namespace' not found."); + } + + [Test()] + public void ModifierKeywordTestCase2 () + { + var provider = CodeCompletionBugTests.CreateProvider ( +@" +class Test +{ + $p$ +} +"); + Assert.IsNotNull (provider, "provider == null"); + Assert.IsNotNull (provider.Find ("public"), "keyword 'public' not found."); + Assert.IsNull (provider.Find ("namespace"), "keyword 'namespace' found."); + } + [Test()] + public void ModifierKeywordTestCase2CrtlSpace () + { + var provider = CodeCompletionBugTests.CreateCtrlSpaceProvider ( +@" +class Test +{ + $p$ +} +"); + Assert.IsNotNull (provider, "provider == null"); + Assert.IsNotNull (provider.Find ("public"), "keyword 'public' not found."); + Assert.IsNull (provider.Find ("namespace"), "keyword 'namespace' found."); + } } }