Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
2eb7b9d4
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,发现更多精彩内容 >>
提交
2eb7b9d4
编写于
5月 11, 2016
作者:
B
Benjamin Pasero
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
validate stacks model on load
上级
6e403a38
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
51 addition
and
7 deletion
+51
-7
src/vs/workbench/common/editor/editorStacksModel.ts
src/vs/workbench/common/editor/editorStacksModel.ts
+51
-7
未找到文件。
src/vs/workbench/common/editor/editorStacksModel.ts
浏览文件 @
2eb7b9d4
...
...
@@ -514,6 +514,7 @@ export class EditorGroup implements IEditorGroup {
// from mru, active and preview if any.
let
serializableEditors
:
EditorInput
[]
=
[];
let
serializedEditors
:
ISerializedEditorInput
[]
=
[];
let
serializablePreviewIndex
:
number
;
this
.
editors
.
forEach
(
e
=>
{
let
factory
=
registry
.
getEditorInputFactory
(
e
.
getId
());
if
(
factory
)
{
...
...
@@ -521,17 +522,21 @@ export class EditorGroup implements IEditorGroup {
if
(
typeof
value
===
'
string
'
)
{
serializedEditors
.
push
({
id
:
e
.
getId
(),
value
});
serializableEditors
.
push
(
e
);
if
(
this
.
preview
===
e
)
{
serializablePreviewIndex
=
serializableEditors
.
length
-
1
;
}
}
}
});
const
serializableMru
=
this
.
mru
.
filter
(
e
=>
serializableEditors
.
indexOf
(
e
)
>=
0
).
map
(
e
=>
serializableEditors
.
indexOf
(
e
)
);
const
serializableMru
=
this
.
mru
.
map
(
e
=>
serializableEditors
.
indexOf
(
e
)).
filter
(
i
=>
i
>=
0
);
return
{
label
:
this
.
label
,
editors
:
serializedEditors
,
mru
:
serializableMru
,
preview
:
serializable
Editors
.
indexOf
(
this
.
preview
)
,
preview
:
serializable
PreviewIndex
,
};
}
...
...
@@ -679,9 +684,9 @@ export class EditorStacksModel implements IEditorStacksModel {
this
.
ensureLoaded
();
if
(
group
.
label
!==
label
)
{
group
.
label
=
label
;
this
.
fireEvent
(
this
.
_onGroupRenamed
,
group
);
}
group
.
label
=
label
;
this
.
fireEvent
(
this
.
_onGroupRenamed
,
group
);
}
}
public
closeGroup
(
group
:
EditorGroup
):
void
{
...
...
@@ -774,7 +779,6 @@ export class EditorStacksModel implements IEditorStacksModel {
let
activeIsEmptyGroup
=
false
;
let
serializedGroups
=
this
.
_groups
.
map
(
g
=>
g
.
serialize
());
let
serializableActiveIndex
=
activeIndex
;
// Exclude now empty groups (can happen if an editor cannot be serialized)
let
serializedNonEmptyGroups
:
ISerializedEditorGroup
[]
=
[];
...
...
@@ -794,11 +798,12 @@ export class EditorStacksModel implements IEditorStacksModel {
serializedGroups
=
serializedNonEmptyGroups
;
// Determine serializable active index
let
serializableActiveIndex
;
if
(
activeIsEmptyGroup
&&
serializedGroups
.
length
>
0
)
{
serializableActiveIndex
=
0
;
// just make first group active if active is empty and we have other groups to pick from
}
else
if
(
activeIsEmptyGroup
)
{
serializableActiveIndex
=
void
0
;
// there are no groups to make active
}
else
{
}
else
if
(
activeIndex
>=
0
)
{
serializableActiveIndex
=
activeIndex
;
// active group is not empty and can be serialized
}
...
...
@@ -827,12 +832,51 @@ export class EditorStacksModel implements IEditorStacksModel {
if
(
modelRaw
)
{
const
serialized
:
ISerializedEditorStacksModel
=
JSON
.
parse
(
modelRaw
);
// TODO@stacks remove this once stacks are stable; prevent bad stored state
const
invalidId
=
this
.
validate
(
serialized
);
if
(
invalidId
)
{
console
.
warn
(
'
Ignoring invalid stacks model
'
,
serialized
,
invalidId
);
return
;
}
this
.
_groups
=
serialized
.
groups
.
map
(
s
=>
this
.
doCreateGroup
(
s
));
this
.
_activeGroup
=
this
.
_groups
[
serialized
.
active
];
this
.
_groups
.
forEach
(
g
=>
this
.
groupToIdentifier
[
g
.
id
]
=
g
);
}
}
private
validate
(
serialized
:
ISerializedEditorStacksModel
):
number
{
if
(
!
serialized
.
groups
.
length
&&
typeof
serialized
.
active
===
'
number
'
)
{
return
1
;
// Invalid active (we have no groups, but an active one)
}
if
(
serialized
.
groups
.
length
&&
!
serialized
.
groups
[
serialized
.
active
])
{
return
2
;
// Invalid active (we cannot find the active one in group)
}
if
(
serialized
.
groups
.
length
>
3
)
{
return
3
;
// Too many groups
}
if
(
serialized
.
groups
.
some
(
g
=>
!
g
.
editors
.
length
))
{
return
4
;
// Some empty groups
}
if
(
serialized
.
groups
.
some
(
g
=>
g
.
editors
.
length
!==
g
.
mru
.
length
))
{
return
5
;
// MRU out of sync with editors
}
if
(
serialized
.
groups
.
some
(
g
=>
typeof
g
.
preview
===
'
number
'
&&
!
g
.
editors
[
g
.
preview
]))
{
return
6
;
// Invalid preview editor
}
if
(
serialized
.
groups
.
some
(
g
=>
!
g
.
label
))
{
return
7
;
// Group without label
}
return
0
;
}
private
doCreateGroup
(
arg1
:
string
|
ISerializedEditorGroup
):
EditorGroup
{
const
group
=
this
.
instantiationService
.
createInstance
(
EditorGroup
,
arg1
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录