From 76636e154fc06af7cbf7146c86b4290edec4dbe9 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Thu, 19 Jul 2007 08:34:12 +0000 Subject: [PATCH] C# expression finder: Fix "if (a > b) {}". git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@2617 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Base/Test/CSharpExpressionFinderTests.cs | 16 ++++++++++++---- .../Project/Src/CSharp/ExpressionFinder.cs | 5 ++++- .../Project/Src/ExpressionContext.cs | 4 ++-- .../Src/NRefactoryResolver/NRefactoryResolver.cs | 2 +- 4 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/Main/Base/Test/CSharpExpressionFinderTests.cs b/src/Main/Base/Test/CSharpExpressionFinderTests.cs index b1a27cd360..1deff272eb 100644 --- a/src/Main/Base/Test/CSharpExpressionFinderTests.cs +++ b/src/Main/Base/Test/CSharpExpressionFinderTests.cs @@ -78,13 +78,13 @@ class Main { [Test] public void Simple() { - FindFull(document, "mple += 1", "simple", ExpressionContext.StatementStart); + FindFull(document, "mple += 1", "simple", ExpressionContext.MethodBody); } [Test] public void SimpleBeginningOfExpression() { - FindFull(document, "simple += 1", "simple", ExpressionContext.StatementStart); + FindFull(document, "simple += 1", "simple", ExpressionContext.MethodBody); } [Test] @@ -165,6 +165,8 @@ class Main { } else if (boolVar) { + } else if (arg > b) { + } List a = new } @@ -212,13 +214,19 @@ class Main { [Test] public void ConditionInIfStatement() { - FindFull(program3, "oolVar)", "boolVar", ExpressionContext.StatementStart); + FindFull(program3, "oolVar)", "boolVar", ExpressionContext.MethodBody); } [Test] public void IdentifierFollowedByLessThan() { - FindFull(program3, "rg < b", "arg", ExpressionContext.StatementStart); + FindFull(program3, "rg < b", "arg", ExpressionContext.MethodBody); + } + + [Test] + public void IdentifierFollowedByGreaterThan() + { + FindFull(program3, "rg > b", "arg", ExpressionContext.MethodBody); } } } 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 379a130594..57cf78f33b 100644 --- a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/CSharp/ExpressionFinder.cs +++ b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/CSharp/ExpressionFinder.cs @@ -147,7 +147,7 @@ namespace ICSharpCode.SharpDevelop.Dom.CSharp } break; case FrameType.Statements: - SetContext(ExpressionContext.StatementStart); + SetContext(ExpressionContext.MethodBody); break; case FrameType.ParameterList: SetContext(ExpressionContext.ParameterType); @@ -302,6 +302,9 @@ namespace ICSharpCode.SharpDevelop.Dom.CSharp if (frame.parent != null && frame.bracketType == '<') { frame.type = FrameType.Popped; frame = frame.parent; + } else { + frame.lastExpressionStart = Location.Empty; + frame.SetDefaultContext(); } break; case Tokens.Dot: diff --git a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ExpressionContext.cs b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ExpressionContext.cs index 9981143f62..5ebf983001 100644 --- a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ExpressionContext.cs +++ b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ExpressionContext.cs @@ -88,9 +88,9 @@ namespace ICSharpCode.SharpDevelop.Dom /// event EventHandler NameChanged { *expr* } public static ExpressionContext EventDeclaration = new DefaultExpressionContext("EventDeclaration"); - /// The context is the start of a new statement. + /// The context is the body of a method. /// void Main () { *expr* } - public static ExpressionContext StatementStart = new DefaultExpressionContext("StatementStart"); + public static ExpressionContext MethodBody = new DefaultExpressionContext("MethodBody"); /// The context is the body of a type declaration. diff --git a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/NRefactoryResolver/NRefactoryResolver.cs b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/NRefactoryResolver/NRefactoryResolver.cs index 8e98e4516e..26b5f8192c 100644 --- a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/NRefactoryResolver/NRefactoryResolver.cs +++ b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/NRefactoryResolver/NRefactoryResolver.cs @@ -1101,7 +1101,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver AddCSharpKeywords(result, NR.Parser.CSharp.Tokens.InterfaceLevel); AddCSharpPrimitiveTypes(result); CtrlSpaceInternal(result, fileContent); - } else if (context == ExpressionContext.StatementStart) { + } else if (context == ExpressionContext.MethodBody) { result.Add("var"); AddCSharpKeywords(result, NR.Parser.CSharp.Tokens.StatementStart); AddCSharpPrimitiveTypes(result);