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 { @@ -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);
}
}
}

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

@ -167,7 +167,11 @@ namespace ICSharpCode.SharpDevelop.Dom.CSharp @@ -167,7 +167,11 @@ namespace ICSharpCode.SharpDevelop.Dom.CSharp
/// <summary>
/// After a keyword like "if","while","using" etc., but before the embedded statement.
/// </summary>
StatementWithEmbeddedStatement
StatementWithEmbeddedStatement,
/// <summary>
/// After "using" in global context, but before "=" or ";".
/// </summary>
UsingNamespace
}
/// <summary>
@ -219,6 +223,8 @@ namespace ICSharpCode.SharpDevelop.Dom.CSharp @@ -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 @@ -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 @@ -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);
}
}

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

@ -226,10 +226,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -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

Loading…
Cancel
Save