Skip to content

Commit a28aaf6

Browse files
author
Alexander Bothe
committed
[Editing] Use CancellationTokens for TypeReferenceFinder-timeouts.
1 parent 711f2cb commit a28aaf6

File tree

2 files changed

+18
-2
lines changed

2 files changed

+18
-2
lines changed

DParser2/Completion/CodeCompletion.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,21 @@ public static ISyntaxRegion FindCurrentCaretContext(IEditorData editor,
144144
return currentScope;
145145
}
146146

147+
public static void DoTimeoutableCompletionTask(ICompletionDataGenerator cdgen, ResolutionContext ctxt, Action ac, CancellationToken token)
148+
{
149+
if (token.IsCancellationRequested)
150+
return;
151+
152+
ctxt.CancelOperation = false;
153+
token.Register(() => {
154+
ctxt.CancelOperation = true;
155+
if (cdgen != null)
156+
cdgen.NotifyTimeout();
157+
});
158+
159+
ac();
160+
}
161+
147162
/// <param name="cdgen">Can be null.</param>
148163
/// <param name="ctxt"></param>
149164
/// <param name="ac"></param>

DParser2/Refactoring/TypeReferenceFinder.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
using D_Parser.Dom.Statements;
3333
using System;
3434
using D_Parser.Completion;
35+
using System.Threading;
3536

3637
namespace D_Parser.Refactoring
3738
{
@@ -64,7 +65,7 @@ protected TypeReferenceFinder (ResolutionContext ctxt, List<ISyntaxRegion> i) :
6465
this.invalidConditionalCodeRegions = i;
6566
}
6667

67-
public static Dictionary<int, Dictionary<ISyntaxRegion, byte>> Scan(IEditorData ed, List<ISyntaxRegion> invalidConditionalCodeRegions = null, int timeout = int.MinValue)
68+
public static Dictionary<int, Dictionary<ISyntaxRegion, byte>> Scan(IEditorData ed, CancellationToken cancelToken, List<ISyntaxRegion> invalidConditionalCodeRegions = null)
6869
{
6970
if (ed == null || ed.SyntaxTree == null)
7071
return new Dictionary<int, Dictionary<ISyntaxRegion,byte>>();
@@ -76,7 +77,7 @@ public static Dictionary<int, Dictionary<ISyntaxRegion, byte>> Scan(IEditorData
7677

7778
var typeRefFinder = new TypeReferenceFinder(ctxt, invalidConditionalCodeRegions);
7879

79-
CodeCompletion.DoTimeoutableCompletionTask(null, ctxt, () => ed.SyntaxTree.Accept(typeRefFinder), timeout);
80+
CodeCompletion.DoTimeoutableCompletionTask(null, ctxt, () => ed.SyntaxTree.Accept(typeRefFinder), cancelToken);
8081

8182
return typeRefFinder.Matches;
8283
}

0 commit comments

Comments
 (0)