Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
807b4e8f
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,发现更多精彩内容 >>
未验证
提交
807b4e8f
编写于
3月 27, 2020
作者:
M
msftbot[bot]
提交者:
GitHub
3月 27, 2020
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #42825 from CyrusNajmabadi/stackOverflow
Fix stack overflow in symbol equivalence
上级
92028304
6bba1980
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
19 addition
and
26 deletion
+19
-26
src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Utilities/SymbolEquivalenceComparer.EquivalenceVisitor.cs
...Utilities/SymbolEquivalenceComparer.EquivalenceVisitor.cs
+8
-11
src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Utilities/SymbolEquivalenceComparer.cs
...ions/Compiler/Core/Utilities/SymbolEquivalenceComparer.cs
+11
-15
未找到文件。
src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Utilities/SymbolEquivalenceComparer.EquivalenceVisitor.cs
浏览文件 @
807b4e8f
...
...
@@ -46,18 +46,15 @@ public bool AreEquivalent(ISymbol x, ISymbol y, Dictionary<INamedTypeSymbol, INa
}
#endif
// https://github.com/dotnet/roslyn/issues/39643 This is a temporary workaround sufficient to get existing tests passing.
// This component should be modified to properly deal with differences caused by nullability.
if
(
x
is
ITypeSymbol
xType
&&
y
is
ITypeSymbol
yType
&&
xType
.
IsDefinition
!=
yType
.
IsDefinition
)
if
(
x
is
ITypeSymbol
xType
&&
y
is
ITypeSymbol
yType
)
{
if
(
x
.
IsDefinition
)
{
y
=
yType
.
WithNullableAnnotationFrom
(
xType
);
}
else
{
x
=
xType
.
WithNullableAnnotationFrom
(
yType
);
}
// Nullability is not considered a distinguishing factor between symbols in this component. Strip
// nullability from these symbols. This also ensures we can do reference-equality checks later as
// stripping nullability returns the underlying symbol and does not produce new symbols with the
// updated nullability value.
x
=
xType
.
WithNullableAnnotation
(
xType
.
IsValueType
?
NullableAnnotation
.
NotAnnotated
:
NullableAnnotation
.
None
);
y
=
yType
.
WithNullableAnnotation
(
yType
.
IsValueType
?
NullableAnnotation
.
NotAnnotated
:
NullableAnnotation
.
None
);
}
if
(
ReferenceEquals
(
x
,
y
))
...
...
src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Utilities/SymbolEquivalenceComparer.cs
浏览文件 @
807b4e8f
...
...
@@ -12,21 +12,17 @@ namespace Microsoft.CodeAnalysis.Shared.Utilities
/// Provides a way to test two symbols for equivalence. While there are ways to ask for
/// different sorts of equivalence, the following must hold for two symbols to be considered
/// equivalent.
///
/// 1) The kinds of the two symbols must match.
///
/// 2) The names of the two symbols must match.
///
/// 3) The arity of the two symbols must match.
///
/// 4) If the symbols are methods or parameterized properties, then the signatures of the two
/// symbols must match.
///
/// 5) Both symbols must be definitions or must be instantiations. If they are instantiations,
/// then they must be instantiated in the same manner.
///
/// 6) The containing symbols of the two symbols must be equivalent.
///
/// <list type="number">
/// <item>The kinds of the two symbols must match.</item>
/// <item>The names of the two symbols must match.</item>
/// <item>The arity of the two symbols must match.</item>
/// <item>If the symbols are methods or parameterized properties, then the signatures of the two
/// symbols must match.</item>
/// <item>Both symbols must be definitions or must be instantiations. If they are instantiations,
/// then they must be instantiated in the same manner.</item>
/// <item>The containing symbols of the two symbols must be equivalent.</item>
/// <item>Nullability of symbols is not involved in the comparison.</item>
/// </list>
/// Note: equivalence does not concern itself with whole symbols. Two types are considered
/// equivalent if the above hold, even if one type has different members than the other. Note:
/// type parameters, and signature parameters are not considered 'children' when comparing
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录