Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Krüger <mkrueger@xamarin.com>2011-10-26 13:42:56 +0400
committerMike Krüger <mkrueger@xamarin.com>2011-10-26 13:42:56 +0400
commit80015c77de170acdeae5a740c75d0ce8608c91e5 (patch)
tree548866faf850e7297ff762d279933f1cf2aa4dc1 /main/contrib
parent30d0829b4f1d0755dc5ad95aa31fc41275f3c559 (diff)
Fixed completion in try ... catch bodies.
Diffstat (limited to 'main/contrib')
-rw-r--r--main/contrib/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngineBase.cs26
1 files changed, 22 insertions, 4 deletions
diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngineBase.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngineBase.cs
index 156ab0bb61..9c80de254e 100644
--- a/main/contrib/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngineBase.cs
+++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngineBase.cs
@@ -90,6 +90,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
protected bool IsInsideString (int offset)
{
+
var loc = document.GetLocation (offset);
var expr = Unit.GetNodeAt<PrimitiveExpression> (loc.Line, loc.Column);
return expr != null && expr.Value is string;
@@ -99,7 +100,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
#region Basic parsing/resolving functions
protected void AppendMissingClosingBrackets (StringBuilder wrapper, string memberText, bool appendSemicolon)
{
- var bracketStack = new Stack<char> ();
+ var bracketStack = new Stack<Tuple<char, int>> ();
bool isInString = false, isInChar = false;
bool isInLineComment = false, isInBlockComment = false;
@@ -111,7 +112,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
case '[':
case '{':
if (!isInString && !isInChar && !isInLineComment && !isInBlockComment)
- bracketStack.Push (ch);
+ bracketStack.Push (Tuple.Create (ch, pos));
break;
case ')':
case ']':
@@ -152,7 +153,8 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
char lastBracket = '\0';
while (bracketStack.Count > 0) {
- switch (bracketStack.Pop ()) {
+ var t = bracketStack.Pop ();
+ switch (t.Item1) {
case '(':
wrapper.Append (')');
didAppendSemicolon = false;
@@ -169,12 +171,28 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
lastBracket = '>';
break;
case '{':
+ int o = t.Item2 - 1;
if (!didAppendSemicolon) {
didAppendSemicolon = true;
wrapper.Append (';');
}
- wrapper.Append ('}');
+ bool didAppendCatch = false;
+ while (o >= "try".Length) {
+ char ch = memberText[o];
+ Console.WriteLine (ch);
+
+ if (!char.IsWhiteSpace (ch)) {
+ if (ch == 'y' && memberText[o - 1] == 'r' && memberText[o - 2] == 't') {
+ wrapper.Append ("} catch {}");
+ didAppendCatch = true;
+ }
+ break;
+ }
+ o--;
+ }
+ if (!didAppendCatch)
+ wrapper.Append ('}');
break;
}
}