Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
c16d4b99
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,发现更多精彩内容 >>
提交
c16d4b99
编写于
2月 11, 2016
作者:
D
Dustin Campbell
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #8607 from DustinCampbell/fix-codemodel-race
Fix race in Code Model cache
上级
4fac0edf
9ceb90a8
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
11 addition
and
23 deletion
+11
-23
src/VisualStudio/Core/Impl/CodeModel/FileCodeModel.cs
src/VisualStudio/Core/Impl/CodeModel/FileCodeModel.cs
+7
-21
src/VisualStudio/Core/Impl/CodeModel/FileCodeModel_CodeGen.cs
...VisualStudio/Core/Impl/CodeModel/FileCodeModel_CodeGen.cs
+0
-2
src/VisualStudio/Core/Test/CodeModel/CSharp/CodeClassTests.vb
...VisualStudio/Core/Test/CodeModel/CSharp/CodeClassTests.vb
+2
-0
src/VisualStudio/Core/Test/CodeModel/VisualBasic/CodeClassTests.vb
...lStudio/Core/Test/CodeModel/VisualBasic/CodeClassTests.vb
+2
-0
未找到文件。
src/VisualStudio/Core/Impl/CodeModel/FileCodeModel.cs
浏览文件 @
c16d4b99
...
...
@@ -196,30 +196,16 @@ internal void UpdateCodeElementNodeKey(AbstractKeyedCodeElement keyedElement, Sy
internal
void
OnCodeElementCreated
(
SyntaxNodeKey
nodeKey
,
EnvDTE
.
CodeElement
element
)
{
_codeElementTable
.
Add
(
nodeKey
,
element
);
}
internal
void
OnBeforeCodeElementCreated
(
SyntaxNode
node
)
{
// It's conceivable that a consumer is creating a code element with the same node key as a "dead" element
// that hasn't been removed from the cache yet. For example, the element could have been "deleted" by
// simply replacing its text in the underlying buffer. To handle this situation, we test to see if the
// element is "dead" by checking whether it's underlying node is invalid (that is, it can't be found by
// its node key). If the element is "dead", we'll go ahead and remove it from the cache here to avoid a
// collision with the new element.
// If we're creating an element with the same node key as an element that's already in the table, just remove
// the old element. The old element will continue to function but the new element will replace it in the cache.
var
nodeKey
=
CodeModelService
.
TryGetNodeKey
(
node
);
EnvDTE
.
CodeElement
codeElement
;
if
(!
nodeKey
.
IsEmpty
&&
_codeElementTable
.
TryGetValue
(
nodeKey
,
out
codeElement
))
EnvDTE
.
CodeElement
oldElement
;
if
(
_codeElementTable
.
TryGetValue
(
nodeKey
,
out
oldElement
))
{
var
managedElement
=
ComAggregate
.
GetManagedObject
<
AbstractKeyedCodeElement
>(
codeElement
);
Debug
.
Assert
(
managedElement
!=
null
,
$"Could not get the underlying
{
nameof
(
AbstractKeyedCodeElement
)}
from
{
nameof
(
codeElement
)}
with
{
nameof
(
nodeKey
)}
:
{
nodeKey
}
"
);
if
(
managedElement
?.
IsValidNode
()
!=
true
)
{
_codeElementTable
.
Remove
(
nodeKey
);
}
_codeElementTable
.
Remove
(
nodeKey
);
}
_codeElementTable
.
Add
(
nodeKey
,
element
);
}
internal
void
OnCodeElementDeleted
(
SyntaxNodeKey
nodeKey
)
...
...
src/VisualStudio/Core/Impl/CodeModel/FileCodeModel_CodeGen.cs
浏览文件 @
c16d4b99
...
...
@@ -62,8 +62,6 @@ private SyntaxNode InsertMember(SyntaxNode containerNode, SyntaxNode memberNode,
var
resultNode
=
CodeModelService
.
InsertMember
(
document
,
IsBatchOpen
,
insertionIndex
,
containerNode
,
memberNode
,
CancellationToken
.
None
,
out
newDocument
);
OnBeforeCodeElementCreated
(
resultNode
);
return
Tuple
.
Create
(
resultNode
,
newDocument
);
});
}
...
...
src/VisualStudio/Core/Test/CodeModel/CSharp/CodeClassTests.vb
浏览文件 @
c16d4b99
...
...
@@ -3854,6 +3854,8 @@ class C$$
Assert
.
False
(
True
,
$
"Failed to add variable in loop iteration {i}!
Exception: {ex.Message}
Document text:
{initialDocument.GetTextAsync(CancellationToken.None).Result}"
)
...
...
src/VisualStudio/Core/Test/CodeModel/VisualBasic/CodeClassTests.vb
浏览文件 @
c16d4b99
...
...
@@ -3163,6 +3163,8 @@ End Class
Assert
.
False
(
True
,
$
"Failed to add variable in loop iteration {i}!
Exception: {ex.Message}
Document text:
{initialDocument.GetTextAsync(CancellationToken.None).Result}"
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录