Browse Source

RunProject command: compile project before running it.

C# syntax highlighting: add contextual keywords introduced in C# 3.0.
C# parser: support "from T x in e" syntax in query expressions.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@2677 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 19 years ago
parent
commit
9afa0e7ebe
  1. 13
      src/Libraries/ICSharpCode.TextEditor/Project/Resources/CSharp-Mode.xshd
  2. 7
      src/Libraries/NRefactory/Project/Src/Parser/CSharp/CSharpParser.cs
  3. 10
      src/Libraries/NRefactory/Project/Src/Parser/CSharp/Parser.cs
  4. 2
      src/Libraries/NRefactory/Project/Src/Parser/CSharp/cs.ATG
  5. 37
      src/Libraries/NRefactory/Test/Parser/Expressions/QueryExpressionTests.cs
  6. 48
      src/Libraries/NRefactory/Test/Parser/TypeLevel/MethodDeclarationTests.cs
  7. 8
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/ProjectNodeCommands.cs

13
src/Libraries/ICSharpCode.TextEditor/Project/Resources/CSharp-Mode.xshd

@ -126,6 +126,19 @@ @@ -126,6 +126,19 @@
<Key word = "partial" />
<Key word = "global" />
<Key word = "where" />
<Key word = "select" />
<Key word = "group" />
<Key word = "by" />
<Key word = "into" />
<Key word = "from" />
<Key word = "ascending" />
<Key word = "descending" />
<Key word = "orderby" />
<Key word = "let" />
<Key word = "join" />
<Key word = "on" />
<Key word = "equals" />
<Key word = "var" />
</KeyWords>
<KeyWords name = "ExceptionHandlingStatements" bold="true" italic="false" color="Teal">

7
src/Libraries/NRefactory/Project/Src/Parser/CSharp/CSharpParser.cs

@ -567,7 +567,12 @@ namespace ICSharpCode.NRefactory.Parser.CSharp @@ -567,7 +567,12 @@ namespace ICSharpCode.NRefactory.Parser.CSharp
bool StartOfQueryExpression()
{
return la.kind == Tokens.From && IsIdentifierToken(Peek(1));
if (la.kind == Tokens.From) {
Token p = Peek(1);
if (IsIdentifierToken(p) || Tokens.TypeKW[p.kind])
return true;
}
return false;
}
static bool IsIdentifierToken(Token tk)

10
src/Libraries/NRefactory/Project/Src/Parser/CSharp/Parser.cs

@ -5579,6 +5579,16 @@ QueryExpressionFromOrJoinClause fjc) { @@ -5579,6 +5579,16 @@ QueryExpressionFromOrJoinClause fjc) {
#line 2306 "cs.ATG"
fjc.Type = null;
if (
#line 2307 "cs.ATG"
IsLocalVarDecl()) {
Type(
#line 2307 "cs.ATG"
out type);
#line 2307 "cs.ATG"
fjc.Type = type;
}
Identifier();
#line 2308 "cs.ATG"

2
src/Libraries/NRefactory/Project/Src/Parser/CSharp/cs.ATG

@ -2304,7 +2304,7 @@ QueryExpressionFromOrJoinClause<QueryExpressionFromOrJoinClause fjc> @@ -2304,7 +2304,7 @@ QueryExpressionFromOrJoinClause<QueryExpressionFromOrJoinClause fjc>
(. TypeReference type; Expression expr; .)
=
(. fjc.Type = null; .)
/*[ Type<out type> (. fjc.Type = type; .) ]*/
[ IF (IsLocalVarDecl()) Type<out type> (. fjc.Type = type; .) ]
Identifier (. fjc.Identifier = t.val; .)
"in"
Expr<out expr> (. fjc.InExpression = expr; .)

37
src/Libraries/NRefactory/Test/Parser/Expressions/QueryExpressionTests.cs

@ -31,6 +31,43 @@ namespace ICSharpCode.NRefactory.Tests.Ast @@ -31,6 +31,43 @@ namespace ICSharpCode.NRefactory.Tests.Ast
Assert.IsInstanceOfType(typeof(QueryExpressionSelectClause), qe.SelectOrGroupClause);
}
[Test]
public void ExpressionWithType1()
{
QueryExpression qe = ParseUtilCSharp.ParseExpression<QueryExpression>(
"from Customer c in customers select c"
);
Assert.AreEqual("c", qe.FromClause.Identifier);
Assert.AreEqual("Customer", qe.FromClause.Type.ToString());
Assert.AreEqual("customers", ((IdentifierExpression)qe.FromClause.InExpression).Identifier);
Assert.IsInstanceOfType(typeof(QueryExpressionSelectClause), qe.SelectOrGroupClause);
}
[Test]
public void ExpressionWithType2()
{
QueryExpression qe = ParseUtilCSharp.ParseExpression<QueryExpression>(
"from int c in customers select c"
);
Assert.AreEqual("c", qe.FromClause.Identifier);
Assert.AreEqual("System.Int32", qe.FromClause.Type.SystemType);
Assert.AreEqual("customers", ((IdentifierExpression)qe.FromClause.InExpression).Identifier);
Assert.IsInstanceOfType(typeof(QueryExpressionSelectClause), qe.SelectOrGroupClause);
}
[Test]
public void ExpressionWithType3()
{
QueryExpression qe = ParseUtilCSharp.ParseExpression<QueryExpression>(
"from S<int[]>? c in customers select c"
);
Assert.AreEqual("c", qe.FromClause.Identifier);
Assert.AreEqual("System.Nullable<S<int[]>>", qe.FromClause.Type.ToString());
Assert.AreEqual("customers", ((IdentifierExpression)qe.FromClause.InExpression).Identifier);
Assert.IsInstanceOfType(typeof(QueryExpressionSelectClause), qe.SelectOrGroupClause);
}
[Test]
public void MultipleGenerators()
{

48
src/Libraries/NRefactory/Test/Parser/TypeLevel/MethodDeclarationTests.cs

@ -24,6 +24,40 @@ namespace ICSharpCode.NRefactory.Tests.Ast @@ -24,6 +24,40 @@ namespace ICSharpCode.NRefactory.Tests.Ast
Assert.IsFalse(md.IsExtensionMethod);
}
[Test]
public void CSharpAbstractMethodDeclarationTest()
{
MethodDeclaration md = ParseUtilCSharp.ParseTypeMember<MethodDeclaration>("abstract void MyMethod();");
Assert.AreEqual("void", md.TypeReference.Type);
Assert.AreEqual(0, md.Parameters.Count);
Assert.IsFalse(md.IsExtensionMethod);
Assert.IsTrue(md.Body.IsNull);
Assert.AreEqual(Modifiers.Abstract, md.Modifier);
}
[Test]
public void CSharpDefiningPartialMethodDeclarationTest()
{
MethodDeclaration md = ParseUtilCSharp.ParseTypeMember<MethodDeclaration>("partial void MyMethod();");
Assert.AreEqual("void", md.TypeReference.Type);
Assert.AreEqual(0, md.Parameters.Count);
Assert.IsFalse(md.IsExtensionMethod);
Assert.IsTrue(md.Body.IsNull);
Assert.AreEqual(Modifiers.Partial, md.Modifier);
}
[Test]
public void CSharpImplementingPartialMethodDeclarationTest()
{
MethodDeclaration md = ParseUtilCSharp.ParseTypeMember<MethodDeclaration>("partial void MyMethod() { }");
Assert.AreEqual("void", md.TypeReference.Type);
Assert.AreEqual(0, md.Parameters.Count);
Assert.IsFalse(md.IsExtensionMethod);
Assert.IsFalse(md.Body.IsNull);
Assert.AreEqual(Modifiers.Partial, md.Modifier);
}
[Test]
public void CSharpSimpleMethodRegionTest()
{
@ -148,6 +182,20 @@ namespace ICSharpCode.NRefactory.Tests.Ast @@ -148,6 +182,20 @@ namespace ICSharpCode.NRefactory.Tests.Ast
Assert.AreEqual("ISomeInterface", md.Templates[0].Bases[0].Type);
}
[Test]
public void CSharpShadowingMethodInInterface()
{
const string program = @"interface MyInterface : IDisposable {
new void Dispose();
}
";
TypeDeclaration td = ParseUtilCSharp.ParseGlobal<TypeDeclaration>(program);
MethodDeclaration md = (MethodDeclaration)td.Children[0];
Assert.AreEqual("void", md.TypeReference.Type);
Assert.AreEqual(0, md.Parameters.Count);
Assert.AreEqual(Modifiers.New, md.Modifier);
}
[Test]
public void CSharpMethodImplementingInterfaceTest()
{

8
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/ProjectNodeCommands.cs

@ -36,7 +36,13 @@ namespace ICSharpCode.SharpDevelop.Project.Commands @@ -36,7 +36,13 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
return;
}
if (node.Project.IsStartable) {
node.Project.Start(true);
BuildProject build = new BuildProject(node.Project);
build.BuildComplete += delegate {
if (build.LastBuildResults.ErrorCount == 0) {
node.Project.Start(true);
}
};
build.Run();
} else {
MessageService.ShowError("${res:BackendBindings.ExecutionManager.CantExecuteDLLError}");
}

Loading…
Cancel
Save