Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
755c02a3
V
vscode
项目概览
xxadev
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
755c02a3
编写于
11月 06, 2018
作者:
D
Dirk Baeumer
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fixes #62655: mainThreadTask should use unique keys for task provider registration
上级
9074cf81
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
29 addition
and
21 deletion
+29
-21
src/vs/workbench/api/electron-browser/mainThreadTask.ts
src/vs/workbench/api/electron-browser/mainThreadTask.ts
+15
-13
src/vs/workbench/parts/tasks/common/taskService.ts
src/vs/workbench/parts/tasks/common/taskService.ts
+2
-2
src/vs/workbench/parts/tasks/electron-browser/task.contribution.ts
...rkbench/parts/tasks/electron-browser/task.contribution.ts
+12
-6
未找到文件。
src/vs/workbench/api/electron-browser/mainThreadTask.ts
浏览文件 @
755c02a3
...
...
@@ -11,6 +11,7 @@ import * as Objects from 'vs/base/common/objects';
import
*
as
Types
from
'
vs/base/common/types
'
;
import
*
as
Platform
from
'
vs/base/common/platform
'
;
import
{
IStringDictionary
}
from
'
vs/base/common/collections
'
;
import
{
IDisposable
}
from
'
vs/base/common/lifecycle
'
;
import
{
IWorkspaceContextService
,
IWorkspaceFolder
}
from
'
vs/platform/workspace/common/workspace
'
;
...
...
@@ -19,9 +20,11 @@ import {
PresentationOptions
,
CommandOptions
,
CommandConfiguration
,
RuntimeType
,
CustomTask
,
TaskScope
,
TaskSource
,
TaskSourceKind
,
ExtensionTaskSource
,
RevealKind
,
PanelKind
}
from
'
vs/workbench/parts/tasks/common/tasks
'
;
import
{
TaskDefinition
}
from
'
vs/workbench/parts/tasks/node/tasks
'
;
import
{
ITaskService
,
TaskFilter
}
from
'
vs/workbench/parts/tasks/common/taskService
'
;
import
{
ResolveSet
,
ResolvedVariables
}
from
'
vs/workbench/parts/tasks/common/taskSystem
'
;
import
{
ITaskService
,
TaskFilter
,
ITaskProvider
}
from
'
vs/workbench/parts/tasks/common/taskService
'
;
import
{
TaskDefinition
}
from
'
vs/workbench/parts/tasks/node/tasks
'
;
import
{
extHostNamedCustomer
}
from
'
vs/workbench/api/electron-browser/extHostCustomers
'
;
import
{
ExtHostContext
,
MainThreadTaskShape
,
ExtHostTaskShape
,
MainContext
,
IExtHostContext
}
from
'
vs/workbench/api/node/extHost.protocol
'
;
...
...
@@ -29,7 +32,6 @@ import {
TaskDefinitionDTO
,
TaskExecutionDTO
,
ProcessExecutionOptionsDTO
,
TaskPresentationOptionsDTO
,
ProcessExecutionDTO
,
ShellExecutionDTO
,
ShellExecutionOptionsDTO
,
TaskDTO
,
TaskSourceDTO
,
TaskHandleDTO
,
TaskFilterDTO
,
TaskProcessStartedDTO
,
TaskProcessEndedDTO
,
TaskSystemInfoDTO
}
from
'
vs/workbench/api/shared/tasks
'
;
import
{
ResolveSet
,
ResolvedVariables
}
from
'
vs/workbench/parts/tasks/common/taskSystem
'
;
namespace
TaskExecutionDTO
{
export
function
from
(
value
:
TaskExecution
):
TaskExecutionDTO
{
...
...
@@ -362,7 +364,7 @@ export class MainThreadTask implements MainThreadTaskShape {
private
_extHostContext
:
IExtHostContext
;
private
_proxy
:
ExtHostTaskShape
;
private
_
activeHandles
:
{
[
handle
:
number
]:
boolean
;
}
;
private
_
providers
:
Map
<
number
,
{
disposable
:
IDisposable
,
provider
:
ITaskProvider
}
>
;
constructor
(
extHostContext
:
IExtHostContext
,
...
...
@@ -370,7 +372,7 @@ export class MainThreadTask implements MainThreadTaskShape {
@
IWorkspaceContextService
private
readonly
_workspaceContextServer
:
IWorkspaceContextService
)
{
this
.
_proxy
=
extHostContext
.
getProxy
(
ExtHostContext
.
ExtHostTask
);
this
.
_
activeHandles
=
Object
.
create
(
null
);
this
.
_
providers
=
new
Map
(
);
this
.
_taskService
.
onDidStateChange
((
event
:
TaskEvent
)
=>
{
let
task
=
event
.
__task
;
if
(
event
.
kind
===
TaskEventKind
.
Start
)
{
...
...
@@ -386,14 +388,14 @@ export class MainThreadTask implements MainThreadTaskShape {
}
public
dispose
():
void
{
Object
.
keys
(
this
.
_activeHandles
).
forEach
((
handl
e
)
=>
{
this
.
_taskService
.
unregisterTaskProvider
(
parseInt
(
handle
,
10
)
);
this
.
_providers
.
forEach
((
valu
e
)
=>
{
value
.
disposable
.
dispose
(
);
});
this
.
_
activeHandles
=
Object
.
create
(
null
);
this
.
_
providers
.
clear
(
);
}
public
$registerTaskProvider
(
handle
:
number
):
Thenable
<
void
>
{
this
.
_taskService
.
registerTaskProvider
(
handle
,
{
let
provider
:
ITaskProvider
=
{
provideTasks
:
(
validTypes
:
IStringDictionary
<
boolean
>
)
=>
{
return
Promise
.
resolve
(
this
.
_proxy
.
$provideTasks
(
handle
,
validTypes
)).
then
((
value
)
=>
{
let
tasks
:
Task
[]
=
[];
...
...
@@ -417,14 +419,14 @@ export class MainThreadTask implements MainThreadTaskShape {
return
value
;
});
}
});
this
.
_activeHandles
[
handle
]
=
true
;
};
let
disposable
=
this
.
_taskService
.
registerTaskProvider
(
provider
);
this
.
_providers
.
set
(
handle
,
{
disposable
,
provider
});
return
Promise
.
resolve
(
undefined
);
}
public
$unregisterTaskProvider
(
handle
:
number
):
Thenable
<
void
>
{
this
.
_taskService
.
unregisterTaskProvider
(
handle
);
delete
this
.
_activeHandles
[
handle
];
this
.
_providers
.
delete
(
handle
);
return
Promise
.
resolve
(
undefined
);
}
...
...
src/vs/workbench/parts/tasks/common/taskService.ts
浏览文件 @
755c02a3
...
...
@@ -8,6 +8,7 @@ import { Action } from 'vs/base/common/actions';
import
{
Event
}
from
'
vs/base/common/event
'
;
import
{
LinkedMap
}
from
'
vs/base/common/map
'
;
import
{
createDecorator
}
from
'
vs/platform/instantiation/common/instantiation
'
;
import
{
IDisposable
}
from
'
vs/base/common/lifecycle
'
;
import
{
IWorkspaceFolder
}
from
'
vs/platform/workspace/common/workspace
'
;
import
{
Task
,
ContributedTask
,
CustomTask
,
TaskSet
,
TaskSorter
,
TaskEvent
,
TaskIdentifier
}
from
'
vs/workbench/parts/tasks/common/tasks
'
;
...
...
@@ -66,8 +67,7 @@ export interface ITaskService {
customize
(
task
:
ContributedTask
|
CustomTask
,
properties
?:
{},
openConfig
?:
boolean
):
TPromise
<
void
>
;
openConfig
(
task
:
CustomTask
):
TPromise
<
void
>
;
registerTaskProvider
(
handle
:
number
,
taskProvider
:
ITaskProvider
):
void
;
unregisterTaskProvider
(
handle
:
number
):
boolean
;
registerTaskProvider
(
taskProvider
:
ITaskProvider
):
IDisposable
;
registerTaskSystem
(
scheme
:
string
,
taskSystemInfo
:
TaskSystemInfo
):
void
;
}
src/vs/workbench/parts/tasks/electron-browser/task.contribution.ts
浏览文件 @
755c02a3
...
...
@@ -444,6 +444,8 @@ class TaskService extends Disposable implements ITaskService {
public
static
OutputChannelId
:
string
=
'
tasks
'
;
public
static
OutputChannelLabel
:
string
=
nls
.
localize
(
'
tasks
'
,
"
Tasks
"
);
private
static
nextHandle
:
number
=
0
;
private
_configHasErrors
:
boolean
;
private
_schemaVersion
:
JsonSchemaVersion
;
private
_executionEngine
:
ExecutionEngine
;
...
...
@@ -675,15 +677,19 @@ class TaskService extends Disposable implements ITaskService {
}
}
public
registerTaskProvider
(
handle
:
number
,
provider
:
ITaskProvider
):
void
{
public
registerTaskProvider
(
provider
:
ITaskProvider
):
IDisposable
{
if
(
!
provider
)
{
return
;
return
{
dispose
:
()
=>
{
}
};
}
let
handle
=
TaskService
.
nextHandle
++
;
this
.
_providers
.
set
(
handle
,
provider
);
}
public
unregisterTaskProvider
(
handle
:
number
):
boolean
{
return
this
.
_providers
.
delete
(
handle
);
return
{
dispose
:
()
=>
{
this
.
_providers
.
delete
(
handle
);
}
};
}
public
registerTaskSystem
(
key
:
string
,
info
:
TaskSystemInfo
):
void
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录