From de2a2b359e79336c87f68223fdddef1138931932 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Fri, 19 Dec 2008 17:51:55 +0000 Subject: [PATCH] Suggest only namespaces after 'using'. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/3.0@3693 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Base/Test/CSharpExpressionFinderTests.cs | 20 +++++++++++++++++++ .../Project/Src/CSharp/ExpressionFinder.cs | 18 ++++++++++++++--- .../Project/Src/ExpressionContext.cs | 5 +---- 3 files changed, 36 insertions(+), 7 deletions(-) diff --git a/src/Main/Base/Test/CSharpExpressionFinderTests.cs b/src/Main/Base/Test/CSharpExpressionFinderTests.cs index 85420bf6ec..7b2ad92032 100644 --- a/src/Main/Base/Test/CSharpExpressionFinderTests.cs +++ b/src/Main/Base/Test/CSharpExpressionFinderTests.cs @@ -1127,6 +1127,26 @@ class Main { ef.FindFullExpression(program, i); } } + + [Test] + public void UsingNamespaceContext1() + { + const string program = @"using "; + + ExpressionResult result = ef.FindExpression(program, program.Length); + Assert.AreEqual(null, result.Expression); + Assert.AreEqual(ExpressionContext.Namespace, result.Context); + } + + [Test] + public void UsingNamespaceContext2() + { + const string program = @"using System"; + + ExpressionResult result = ef.FindExpression(program, program.Length); + Assert.AreEqual("System", result.Expression); + Assert.AreEqual(ExpressionContext.Namespace, result.Context); + } } } diff --git a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/CSharp/ExpressionFinder.cs b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/CSharp/ExpressionFinder.cs index 3424fe1f5b..edd315dda1 100644 --- a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/CSharp/ExpressionFinder.cs +++ b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/CSharp/ExpressionFinder.cs @@ -167,7 +167,11 @@ namespace ICSharpCode.SharpDevelop.Dom.CSharp /// /// After a keyword like "if","while","using" etc., but before the embedded statement. /// - StatementWithEmbeddedStatement + StatementWithEmbeddedStatement, + /// + /// After "using" in global context, but before "=" or ";". + /// + UsingNamespace } /// @@ -219,6 +223,8 @@ namespace ICSharpCode.SharpDevelop.Dom.CSharp } } else if (state == FrameState.Constraints) { SetContext(ExpressionContext.Constraints); + } else if (state == FrameState.UsingNamespace) { + SetContext(ExpressionContext.Namespace); } else { switch (type) { case FrameType.Global: @@ -533,12 +539,18 @@ namespace ICSharpCode.SharpDevelop.Dom.CSharp frame.state = FrameState.Normal; frame.ResetCurlyChildType(); } + } else if (frame.state == FrameState.UsingNamespace) { + if (token.kind != Tokens.Identifier && token.kind != Tokens.Dot && token.kind != Tokens.DoubleColon) { + frame.state = FrameState.Normal; + frame.SetDefaultContext(); + } } switch (token.kind) { case Tokens.Using: if (frame.type == FrameType.Global) { - frame.SetContext(ExpressionContext.Namespace); + frame.state = FrameState.UsingNamespace; + frame.SetDefaultContext(); break; } else { goto case Tokens.For; @@ -730,7 +742,7 @@ namespace ICSharpCode.SharpDevelop.Dom.CSharp || frame.type == FrameType.Statements || frame.type == FrameType.Global) { - if (!frame.context.IsObjectCreation) { + if (!frame.context.IsObjectCreation && frame.state != FrameState.UsingNamespace) { frame.SetContext(ExpressionContext.IdentifierExpected); } } diff --git a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ExpressionContext.cs b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ExpressionContext.cs index 63b4f02739..250771de81 100644 --- a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ExpressionContext.cs +++ b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ExpressionContext.cs @@ -226,10 +226,7 @@ namespace ICSharpCode.SharpDevelop.Dom public override string ToString() { - if (allowImportClasses) - return "[" + GetType().Name + " AllowImportClasses=true]"; - else - return "[" + GetType().Name + "]"; + return "[" + GetType().Name + " AllowImportClasses=" + allowImportClasses.ToString() + "]"; } } #endregion