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>2012-06-13 12:12:49 +0400
committerMike Krüger <mkrueger@xamarin.com>2012-06-13 12:14:44 +0400
commit83c58f371d0b3f36a780ca017cb00f9c6ad1bbba (patch)
tree3677162b6a68ebecf0f9571c6e67a3f3e4b58cb1
parent1b6ffb8235519a006d51afd98014ad20186cfd1b (diff)
Fixed 'Bug 5578 - Monodevelop 2.10.8.1 on Ubuntu 12.04 freezes'.
-rw-r--r--main/contrib/ICSharpCode.NRefactory.CSharp/Formatter/AstFormattingVisitor.cs21
-rw-r--r--main/src/addins/CSharpBinding/MonoDevelop.CSharp.Formatting/OnTheFlyFormatter.cs12
2 files changed, 29 insertions, 4 deletions
diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Formatter/AstFormattingVisitor.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Formatter/AstFormattingVisitor.cs
index 26ce5e4622..dd2dd81c97 100644
--- a/main/contrib/ICSharpCode.NRefactory.CSharp/Formatter/AstFormattingVisitor.cs
+++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Formatter/AstFormattingVisitor.cs
@@ -97,6 +97,11 @@ namespace ICSharpCode.NRefactory.CSharp
get;
set;
}
+
+ public DomRegion FormattingRegion {
+ get;
+ set;
+ }
public AstFormattingVisitor(CSharpFormattingOptions policy, IDocument document, TextEditorOptions options = null)
{
@@ -111,6 +116,22 @@ namespace ICSharpCode.NRefactory.CSharp
this.options = options ?? TextEditorOptions.Default;
curIndent = new Indent(this.options);
}
+
+ protected virtual void VisitChildren (AstNode node)
+ {
+ if (!FormattingRegion.IsEmpty) {
+ if (node.EndLocation < FormattingRegion.Begin || node.StartLocation > FormattingRegion.End)
+ return;
+ }
+
+ AstNode next;
+ for (var child = node.FirstChild; child != null; child = next) {
+ // Store next to allow the loop to continue
+ // if the visitor removes/replaces child.
+ next = child.NextSibling;
+ child.AcceptVisitor (this);
+ }
+ }
/// <summary>
/// Applies the changes to the input document.
diff --git a/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Formatting/OnTheFlyFormatter.cs b/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Formatting/OnTheFlyFormatter.cs
index 6c3a7770f4..3cc20d8112 100644
--- a/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Formatting/OnTheFlyFormatter.cs
+++ b/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Formatting/OnTheFlyFormatter.cs
@@ -121,7 +121,7 @@ namespace MonoDevelop.CSharp.Formatting
return sb.ToString ();
}
- static AstFormattingVisitor GetFormattingChanges (PolicyContainer policyParent, IEnumerable<string> mimeTypeChain, MonoDevelop.Ide.Gui.Document document, string input)
+ static AstFormattingVisitor GetFormattingChanges (PolicyContainer policyParent, IEnumerable<string> mimeTypeChain, MonoDevelop.Ide.Gui.Document document, string input, DomRegion formattingRegion)
{
using (var stubData = TextEditorData.CreateImmutable (input)) {
stubData.Document.FileName = document.FileName;
@@ -143,8 +143,10 @@ namespace MonoDevelop.CSharp.Formatting
var policy = policyParent.Get<CSharpFormattingPolicy> (mimeTypeChain);
var formattingVisitor = new AstFormattingVisitor (policy.CreateOptions (), stubData.Document, document.Editor.CreateNRefactoryTextEditorOptions ()) {
- HadErrors = hadErrors
+ HadErrors = hadErrors,
+ FormattingRegion = formattingRegion
};
+
compilationUnit.AcceptVisitor (formattingVisitor);
return formattingVisitor;
}
@@ -159,11 +161,13 @@ namespace MonoDevelop.CSharp.Formatting
return;
string text;
int formatStartOffset, formatLength, realTextDelta;
+ DomRegion formattingRegion = DomRegion.Empty;
if (exact) {
text = data.Editor.Text;
formatStartOffset = startOffset;
formatLength = endOffset - startOffset;
realTextDelta = 0;
+ formattingRegion = new DomRegion (data.Editor.OffsetToLocation (startOffset), data.Editor.OffsetToLocation (endOffset));
} else {
var seg = ext.typeSystemSegmentTree.GetMemberSegmentAt (startOffset - 1);
if (seg == null)
@@ -174,12 +178,12 @@ namespace MonoDevelop.CSharp.Formatting
// Build stub
text = BuildStub (data, seg, startOffset, endOffset, out formatStartOffset);
+
formatLength = endOffset - seg.Offset;
realTextDelta = seg.Offset - formatStartOffset;
}
-
// Get changes from formatting visitor
- var changes = GetFormattingChanges (policyParent, mimeTypeChain, data, text);
+ var changes = GetFormattingChanges (policyParent, mimeTypeChain, data, text, formattingRegion);
if (changes == null)
return;