Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
5aa4266a
V
vscode
项目概览
掘金者说
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
5aa4266a
编写于
9月 27, 2018
作者:
J
Johannes Rieken
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
💄
上级
e199e99b
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
17 addition
and
28 deletion
+17
-28
src/vs/platform/instantiation/common/instantiationService.ts
src/vs/platform/instantiation/common/instantiationService.ts
+17
-28
未找到文件。
src/vs/platform/instantiation/common/instantiationService.ts
浏览文件 @
5aa4266a
...
...
@@ -51,62 +51,51 @@ export class InstantiationService implements IInstantiationService {
}
}
createInstance
(
param
:
any
,
...
rest
:
any
[]):
any
{
if
(
param
instanceof
SyncDescriptor
)
{
// sync
return
this
.
_createInstance
(
param
,
rest
);
createInstance
(
ctorOrDescriptor
:
any
|
SyncDescriptor
<
any
>
,
...
rest
:
any
[]):
any
{
if
(
ctorOrDescriptor
instanceof
SyncDescriptor
)
{
return
this
.
_createInstance
(
ctorOrDescriptor
.
ctor
,
ctorOrDescriptor
.
staticArguments
.
concat
(
rest
));
}
else
{
// sync, just ctor
return
this
.
_createInstance
(
new
SyncDescriptor
(
param
),
rest
);
return
this
.
_createInstance
(
ctorOrDescriptor
,
rest
);
}
}
private
_createInstance
<
T
>
(
desc
:
SyncDescriptor
<
T
>
,
args
:
any
[]):
T
{
// arguments given by createInstance-call and/or the descriptor
let
staticArgs
=
desc
.
staticArguments
.
concat
(
args
);
private
_createInstance
<
T
>
(
ctor
:
any
,
args
:
any
[]
=
[]):
T
{
// arguments defined by service decorators
let
serviceDependencies
=
_util
.
getServiceDependencies
(
desc
.
ctor
).
sort
((
a
,
b
)
=>
a
.
index
-
b
.
index
);
let
serviceDependencies
=
_util
.
getServiceDependencies
(
ctor
).
sort
((
a
,
b
)
=>
a
.
index
-
b
.
index
);
let
serviceArgs
:
any
[]
=
[];
for
(
const
dependency
of
serviceDependencies
)
{
let
service
=
this
.
_getOrCreateServiceInstance
(
dependency
.
id
);
if
(
!
service
&&
this
.
_strict
&&
!
dependency
.
optional
)
{
throw
new
Error
(
`[createInstance]
${
desc
.
ctor
.
name
}
depends on UNKNOWN service
${
dependency
.
id
}
.`
);
throw
new
Error
(
`[createInstance]
${
ctor
.
name
}
depends on UNKNOWN service
${
dependency
.
id
}
.`
);
}
serviceArgs
.
push
(
service
);
}
let
firstServiceArgPos
=
serviceDependencies
.
length
>
0
?
serviceDependencies
[
0
].
index
:
staticA
rgs
.
length
;
let
firstServiceArgPos
=
serviceDependencies
.
length
>
0
?
serviceDependencies
[
0
].
index
:
a
rgs
.
length
;
// check for argument mismatches, adjust static args if needed
if
(
staticA
rgs
.
length
!==
firstServiceArgPos
)
{
console
.
warn
(
`[createInstance] First service dependency of
${
desc
.
ctor
.
name
}
at position
${
firstServiceArgPos
+
1
}
conflicts with
${
staticA
rgs
.
length
}
static arguments`
);
if
(
a
rgs
.
length
!==
firstServiceArgPos
)
{
console
.
warn
(
`[createInstance] First service dependency of
${
ctor
.
name
}
at position
${
firstServiceArgPos
+
1
}
conflicts with
${
a
rgs
.
length
}
static arguments`
);
let
delta
=
firstServiceArgPos
-
staticA
rgs
.
length
;
let
delta
=
firstServiceArgPos
-
a
rgs
.
length
;
if
(
delta
>
0
)
{
staticArgs
=
staticA
rgs
.
concat
(
new
Array
(
delta
));
args
=
a
rgs
.
concat
(
new
Array
(
delta
));
}
else
{
staticArgs
=
staticA
rgs
.
slice
(
0
,
firstServiceArgPos
);
args
=
a
rgs
.
slice
(
0
,
firstServiceArgPos
);
}
}
// // check for missing args
// for (let i = 0; i < serviceArgs.length; i++) {
// if (!serviceArgs[i]) {
// console.warn(`${
desc.
ctor.name} MISSES service dependency ${serviceDependencies[i].id}`, new Error().stack);
// console.warn(`${ctor.name} MISSES service dependency ${serviceDependencies[i].id}`, new Error().stack);
// }
// }
// now create the instance
const
argArray
=
[
desc
.
ctor
];
argArray
.
push
(...
staticArgs
);
argArray
.
push
(...
serviceArgs
);
return
<
T
>
create
.
apply
(
null
,
argArray
);
return
<
T
>
create
.
apply
(
null
,
[
ctor
].
concat
(
args
,
serviceArgs
));
}
private
_setServiceInstance
<
T
>
(
id
:
ServiceIdentifier
<
T
>
,
instance
:
T
):
void
{
...
...
@@ -190,7 +179,7 @@ export class InstantiationService implements IInstantiationService {
for
(
let
root
of
roots
)
{
// create instance and overwrite the service collections
const
instance
=
this
.
_createInstance
(
root
.
data
.
desc
,
[]
);
const
instance
=
this
.
_createInstance
(
root
.
data
.
desc
.
ctor
,
root
.
data
.
desc
.
staticArguments
);
this
.
_setServiceInstance
(
root
.
data
.
id
,
instance
);
graph
.
removeNode
(
root
.
data
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录