Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
f516b8b7
R
roslyn
项目概览
lwm1986
/
roslyn
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
roslyn
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
f516b8b7
编写于
1月 24, 2019
作者:
M
Manish Vasani
提交者:
GitHub
1月 24, 2019
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #32710 from mavasani/Issue32490
Fix preview changes application for linked files
上级
511c06e0
c27ab1bb
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
56 addition
and
13 deletion
+56
-13
src/VisualStudio/Core/Def/Implementation/Preview/TopLevelChange.cs
...lStudio/Core/Def/Implementation/Preview/TopLevelChange.cs
+56
-13
未找到文件。
src/VisualStudio/Core/Def/Implementation/Preview/TopLevelChange.cs
浏览文件 @
f516b8b7
...
...
@@ -2,8 +2,10 @@
using
System
;
using
System.Collections.Generic
;
using
System.Diagnostics
;
using
System.Linq
;
using
Microsoft.CodeAnalysis
;
using
Microsoft.CodeAnalysis.Text
;
using
Microsoft.VisualStudio.ComponentModelHost
;
using
Microsoft.VisualStudio.LanguageServices.Implementation.Utilities
;
using
Microsoft.VisualStudio.Shell.Interop
;
...
...
@@ -72,28 +74,69 @@ public Solution GetUpdatedSolution(bool applyingChanges)
private
Solution
ApplyFileChanges
(
Solution
solution
,
IEnumerable
<
FileChange
>
fileChanges
,
bool
applyingChanges
)
{
foreach
(
FileChange
fileChange
in
fileChanges
)
foreach
(
var
fileChange
in
fileChanges
)
{
var
oldDocument
=
fileChange
.
GetOldDocument
();
var
updatedDocument
=
fileChange
.
GetUpdatedDocument
();
bool
isAdditionalDoc
=
fileChange
.
IsAdditionalDocumentChange
;
var
oldTextDocument
=
fileChange
.
GetOldDocument
();
var
updatedTextDocument
=
fileChange
.
GetUpdatedDocument
();
var
updatedDocumentTextOpt
=
updatedTextDocument
?.
GetTextAsync
().
Result
;
// Apply file change to document.
ApplyFileChangesCore
(
oldTextDocument
,
updatedTextDocument
?.
Id
,
updatedDocumentTextOpt
,
fileChange
.
CheckState
,
fileChange
.
IsAdditionalDocumentChange
);
// Now apply file change to linked documents.
if
(
oldTextDocument
is
Document
oldDocument
)
{
foreach
(
var
linkedDocumentId
in
oldDocument
.
GetLinkedDocumentIds
())
{
var
oldLinkedDocument
=
oldDocument
.
Project
.
Solution
.
GetDocument
(
linkedDocumentId
);
// Ensure that we account for document removal, i.e. updatedDocumentTextOpt == null.
var
newLinkedDocumentIdOpt
=
updatedDocumentTextOpt
!=
null
?
oldLinkedDocument
.
Id
:
null
;
ApplyFileChangesCore
(
oldLinkedDocument
,
newLinkedDocumentIdOpt
,
updatedDocumentTextOpt
,
fileChange
.
CheckState
,
fileChange
.
IsAdditionalDocumentChange
);
}
}
else
if
(
updatedTextDocument
is
Document
updatedDocument
)
{
foreach
(
var
newLinkedDocumentId
in
updatedDocument
.
GetLinkedDocumentIds
())
{
ApplyFileChangesCore
(
oldTextDocument
,
newLinkedDocumentId
,
updatedDocumentTextOpt
,
fileChange
.
CheckState
,
fileChange
.
IsAdditionalDocumentChange
);
}
}
}
return
solution
;
// Local functions.
void
ApplyFileChangesCore
(
TextDocument
oldDocument
,
DocumentId
updatedDocumentIdOpt
,
SourceText
updateDocumentTextOpt
,
__PREVIEWCHANGESITEMCHECKSTATE
checkState
,
bool
isAdditionalDoc
)
{
Debug
.
Assert
(
oldDocument
!=
null
||
updatedDocumentIdOpt
!=
null
);
Debug
.
Assert
((
updatedDocumentIdOpt
!=
null
)
==
(
updateDocumentTextOpt
!=
null
));
if
(
oldDocument
==
null
)
{
// Added document to new solution.
// If unchecked, then remove this added document from new solution.
if
(
applyingChanges
&&
fileChange
.
C
heckState
==
__PREVIEWCHANGESITEMCHECKSTATE
.
PCCS_Unchecked
)
if
(
applyingChanges
&&
c
heckState
==
__PREVIEWCHANGESITEMCHECKSTATE
.
PCCS_Unchecked
)
{
solution
=
isAdditionalDoc
?
solution
.
RemoveAdditionalDocument
(
updatedDocument
.
Id
)
:
solution
.
RemoveDocument
(
updatedDocument
.
Id
);
solution
.
RemoveAdditionalDocument
(
updatedDocument
IdOpt
)
:
solution
.
RemoveDocument
(
updatedDocument
IdOpt
);
}
}
else
if
(
updatedDocument
==
null
)
else
if
(
updatedDocument
IdOpt
==
null
)
{
// Removed document from old solution.
// If unchecked, then add back this removed document to new solution.
if
(
applyingChanges
&&
fileChange
.
C
heckState
==
__PREVIEWCHANGESITEMCHECKSTATE
.
PCCS_Unchecked
)
if
(
applyingChanges
&&
c
heckState
==
__PREVIEWCHANGESITEMCHECKSTATE
.
PCCS_Unchecked
)
{
var
oldText
=
oldDocument
.
GetTextAsync
().
Result
.
ToString
();
solution
=
isAdditionalDoc
?
...
...
@@ -103,14 +146,14 @@ private Solution ApplyFileChanges(Solution solution, IEnumerable<FileChange> fil
}
else
{
Debug
.
Assert
(
oldDocument
.
Id
==
updatedDocumentIdOpt
);
// Changed document.
solution
=
isAdditionalDoc
?
solution
.
WithAdditionalDocumentText
(
updatedDocument
.
Id
,
updatedDocument
.
GetTextAsync
().
Resul
t
)
:
solution
.
WithDocumentText
(
updatedDocument
.
Id
,
updatedDocument
.
GetTextAsync
().
Resul
t
);
solution
.
WithAdditionalDocumentText
(
updatedDocument
IdOpt
,
updateDocumentTextOp
t
)
:
solution
.
WithDocumentText
(
updatedDocument
IdOpt
,
updateDocumentTextOp
t
);
}
}
return
solution
;
}
private
Solution
ApplyReferenceChanges
(
Solution
solution
,
IEnumerable
<
ReferenceChange
>
referenceChanges
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录