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