Browse Source

Suggest only namespaces after 'using'.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/3.0@3693 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 17 years ago
parent
commit
de2a2b359e
  1. 20
      src/Main/Base/Test/CSharpExpressionFinderTests.cs
  2. 18
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/CSharp/ExpressionFinder.cs
  3. 5
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ExpressionContext.cs

20
src/Main/Base/Test/CSharpExpressionFinderTests.cs

@ -1127,6 +1127,26 @@ class Main {
ef.FindFullExpression(program, i); 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);
}
} }
} }

18
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/CSharp/ExpressionFinder.cs

@ -167,7 +167,11 @@ namespace ICSharpCode.SharpDevelop.Dom.CSharp
/// <summary> /// <summary>
/// After a keyword like "if","while","using" etc., but before the embedded statement. /// After a keyword like "if","while","using" etc., but before the embedded statement.
/// </summary> /// </summary>
StatementWithEmbeddedStatement StatementWithEmbeddedStatement,
/// <summary>
/// After "using" in global context, but before "=" or ";".
/// </summary>
UsingNamespace
} }
/// <summary> /// <summary>
@ -219,6 +223,8 @@ namespace ICSharpCode.SharpDevelop.Dom.CSharp
} }
} else if (state == FrameState.Constraints) { } else if (state == FrameState.Constraints) {
SetContext(ExpressionContext.Constraints); SetContext(ExpressionContext.Constraints);
} else if (state == FrameState.UsingNamespace) {
SetContext(ExpressionContext.Namespace);
} else { } else {
switch (type) { switch (type) {
case FrameType.Global: case FrameType.Global:
@ -533,12 +539,18 @@ namespace ICSharpCode.SharpDevelop.Dom.CSharp
frame.state = FrameState.Normal; frame.state = FrameState.Normal;
frame.ResetCurlyChildType(); 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) { switch (token.kind) {
case Tokens.Using: case Tokens.Using:
if (frame.type == FrameType.Global) { if (frame.type == FrameType.Global) {
frame.SetContext(ExpressionContext.Namespace); frame.state = FrameState.UsingNamespace;
frame.SetDefaultContext();
break; break;
} else { } else {
goto case Tokens.For; goto case Tokens.For;
@ -730,7 +742,7 @@ namespace ICSharpCode.SharpDevelop.Dom.CSharp
|| frame.type == FrameType.Statements || frame.type == FrameType.Statements
|| frame.type == FrameType.Global) || frame.type == FrameType.Global)
{ {
if (!frame.context.IsObjectCreation) { if (!frame.context.IsObjectCreation && frame.state != FrameState.UsingNamespace) {
frame.SetContext(ExpressionContext.IdentifierExpected); frame.SetContext(ExpressionContext.IdentifierExpected);
} }
} }

5
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ExpressionContext.cs

@ -226,10 +226,7 @@ namespace ICSharpCode.SharpDevelop.Dom
public override string ToString() public override string ToString()
{ {
if (allowImportClasses) return "[" + GetType().Name + " AllowImportClasses=" + allowImportClasses.ToString() + "]";
return "[" + GetType().Name + " AllowImportClasses=true]";
else
return "[" + GetType().Name + "]";
} }
} }
#endregion #endregion

Loading…
Cancel
Save