diff options
author | Mike Krüger <mkrueger@xamarin.com> | 2011-10-26 13:42:56 +0400 |
---|---|---|
committer | Mike Krüger <mkrueger@xamarin.com> | 2011-10-26 13:42:56 +0400 |
commit | 80015c77de170acdeae5a740c75d0ce8608c91e5 (patch) | |
tree | 548866faf850e7297ff762d279933f1cf2aa4dc1 /main/contrib | |
parent | 30d0829b4f1d0755dc5ad95aa31fc41275f3c559 (diff) |
Fixed completion in try ... catch bodies.
Diffstat (limited to 'main/contrib')
-rw-r--r-- | main/contrib/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngineBase.cs | 26 |
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; } } |