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
path: root/main/src
diff options
context:
space:
mode:
authorMike Krüger <mkrueger@xamarin.com>2018-02-28 11:06:57 +0300
committerGitHub <noreply@github.com>2018-02-28 11:06:57 +0300
commite8f5e1e12447c0077b3cb5c519696ec80c037572 (patch)
tree5ccb5104d32a2421b0960d1b065e59e5f58f6b44 /main/src
parentf9cab250471197d167a66eb95e29880dc0755789 (diff)
parent66ff29871cc591bcc0b1cd1f86fde977fb98a884 (diff)
Merge pull request #3980 from mono/master-issue3978
Master issue3978
Diffstat (limited to 'main/src')
-rw-r--r--main/src/core/MonoDevelop.Core/MonoDevelop.Core/StringBuilderCache.cs12
-rw-r--r--main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Text/TextFormatter.cs4
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Editor.Extension/LineSeparatorTextEditorExtension.cs8
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Editor/Projection/ProjectedDocumentContext.cs8
4 files changed, 19 insertions, 13 deletions
diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Core/StringBuilderCache.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Core/StringBuilderCache.cs
index 8c01bb2310..b2957ed843 100644
--- a/main/src/core/MonoDevelop.Core/MonoDevelop.Core/StringBuilderCache.cs
+++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Core/StringBuilderCache.cs
@@ -33,19 +33,25 @@ namespace MonoDevelop.Core
/// </summary>
public static class StringBuilderCache
{
- public static StringBuilder Allocate ()
+ const int Threshold = 4096;
+
+ public static StringBuilder Allocate ()
{
- return SharedPools.Default<StringBuilder> ().Allocate ();
+ var result = SharedPools.Default<StringBuilder> ().Allocate ();
+ result.Clear ();
+ return result;
}
public static StringBuilder Allocate (string text)
{
- return SharedPools.Default<StringBuilder> ().Allocate ().Append (text);
+ return Allocate ().Append (text);
}
public static void Free (StringBuilder sb)
{
sb.Clear ();
+ if (sb.Capacity > Threshold)
+ sb.Capacity = Threshold;
SharedPools.Default<StringBuilder> ().Free (sb);
}
diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Text/TextFormatter.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Text/TextFormatter.cs
index 95af55600a..bae1958b4b 100644
--- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Text/TextFormatter.cs
+++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Text/TextFormatter.cs
@@ -347,14 +347,14 @@ namespace MonoDevelop.Projects.Text
StringBuilder sb = StringBuilderCache.Allocate ();
indentColumnWidth = AddIndentString (sb, indentString);
sb.Append (new string (' ', paragraphStartMargin));
- paragFormattedIndentString = StringBuilderCache.ReturnAndFree (sb);
+ paragFormattedIndentString = sb.ToString ();
paragIndentColumnWidth = indentColumnWidth + paragraphStartMargin;
if (LeftMargin > 0) {
sb.Append (' ', LeftMargin);
indentColumnWidth += LeftMargin;
}
- formattedIndentString = sb.ToString ();
+ formattedIndentString = StringBuilderCache.ReturnAndFree (sb);
if (paragraphStart)
curCol = paragIndentColumnWidth;
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Editor.Extension/LineSeparatorTextEditorExtension.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Editor.Extension/LineSeparatorTextEditorExtension.cs
index 9cef24e485..7ca68ce5b4 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Editor.Extension/LineSeparatorTextEditorExtension.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Editor.Extension/LineSeparatorTextEditorExtension.cs
@@ -31,6 +31,7 @@ using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.Host;
using Microsoft.CodeAnalysis.Text;
using Microsoft.CodeAnalysis.Editor;
+using MonoDevelop.Core;
namespace MonoDevelop.Ide.Editor.Extension
{
@@ -92,16 +93,13 @@ namespace MonoDevelop.Ide.Editor.Extension
var separators = await lineSeparatorService.GetLineSeparatorsAsync (DocumentContext.AnalysisDocument, new TextSpan (0, Editor.Length), token);
if (token.IsCancellationRequested)
return;
- var newMarkers = new List<ITextLineMarker> ();
+ RemoveMarkers ();
foreach (var s in separators) {
var line = Editor.GetLineByOffset (s.Start);
var marker = Editor.TextMarkerFactory.CreateLineSeparatorMarker (Editor);
Editor.AddMarker (line, marker);
- newMarkers.Add (marker);
+ markers.Add (marker);
}
-
- RemoveMarkers ();
- markers = newMarkers;
}
void RemoveMarkers ()
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Editor/Projection/ProjectedDocumentContext.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Editor/Projection/ProjectedDocumentContext.cs
index b2fa634440..441f46cedc 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Editor/Projection/ProjectedDocumentContext.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Editor/Projection/ProjectedDocumentContext.cs
@@ -30,6 +30,7 @@ using MonoDevelop.Core.Text;
using MonoDevelop.Ide.Gui;
using MonoDevelop.Ide.TypeSystem;
using System.Threading.Tasks;
+using MonoDevelop.Core;
namespace MonoDevelop.Ide.Editor.Projection
{
@@ -101,7 +102,7 @@ namespace MonoDevelop.Ide.Editor.Projection
ReparseDocumentInternal ();
}
- Task ReparseDocumentInternal ()
+ async Task ReparseDocumentInternal ()
{
var options = new ParseOptions {
FileName = projectedEditor.FileName,
@@ -110,8 +111,9 @@ namespace MonoDevelop.Ide.Editor.Projection
RoslynDocument = projectedDocument,
OldParsedDocument = parsedDocument
};
- return TypeSystemService.ParseFile (options, projectedEditor.MimeType).ContinueWith (t => {
- parsedDocument = t.Result;
+ var result = await TypeSystemService.ParseFile (options, projectedEditor.MimeType).ConfigureAwait (false);
+ await Runtime.RunInMainThread (delegate {
+ parsedDocument = result;
base.OnDocumentParsed (EventArgs.Empty);
});
}