Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
ded0bc5c
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,发现更多精彩内容 >>
未验证
提交
ded0bc5c
编写于
7月 28, 2020
作者:
M
msftbot[bot]
提交者:
GitHub
7月 28, 2020
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #46372 from dotnet/merges/release/dev16.8-preview1-to-master
Merge release/dev16.8-preview1 to master
上级
b88705ef
e449c553
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
56 addition
and
14 deletion
+56
-14
src/Workspaces/Core/Portable/SymbolKey/SymbolKey.ErrorTypeSymbolKey.cs
...s/Core/Portable/SymbolKey/SymbolKey.ErrorTypeSymbolKey.cs
+10
-14
src/Workspaces/CoreTest/SymbolKeyTests.cs
src/Workspaces/CoreTest/SymbolKeyTests.cs
+46
-0
未找到文件。
src/Workspaces/Core/Portable/SymbolKey/SymbolKey.ErrorTypeSymbolKey.cs
浏览文件 @
ded0bc5c
...
...
@@ -30,8 +30,11 @@ public static void Create(INamedTypeSymbol symbol, SymbolKeyWriter visitor)
break
;
}
var
isConstructed
=
!
symbol
.
Equals
(
symbol
.
ConstructedFrom
);
visitor
.
WriteInteger
(
symbol
.
Arity
);
if
(!
symbol
.
Equals
(
symbol
.
ConstructedFrom
))
visitor
.
WriteBoolean
(
isConstructed
);
if
(
isConstructed
)
{
visitor
.
WriteSymbolKeyArray
(
symbol
.
TypeArguments
);
}
...
...
@@ -63,6 +66,7 @@ public static SymbolKeyResolution Resolve(SymbolKeyReader reader, out string fai
var
containingSymbolResolution
=
ResolveContainer
(
reader
,
out
var
containingSymbolFailureReason
);
var
arity
=
reader
.
ReadInteger
();
var
isConstructed
=
reader
.
ReadBoolean
();
using
var
typeArguments
=
reader
.
ReadSymbolKeyArray
<
ITypeSymbol
>(
out
var
typeArgumentsFailureReason
);
...
...
@@ -86,19 +90,17 @@ public static SymbolKeyResolution Resolve(SymbolKeyReader reader, out string fai
using
var
result
=
PooledArrayBuilder
<
INamedTypeSymbol
>.
GetInstance
();
var
typeArgumentsArray
=
arity
>
0
?
typeArguments
.
Builder
.
ToArray
()
:
null
;
var
typeArgumentsArray
=
isConstructed
?
typeArguments
.
Builder
.
ToArray
()
:
null
;
foreach
(
var
container
in
containingSymbolResolution
.
OfType
<
INamespaceOrTypeSymbol
>())
{
result
.
AddIfNotNull
(
Construct
(
reader
,
container
,
name
,
arity
,
typeArgumentsArray
));
var
originalType
=
reader
.
Compilation
.
CreateErrorTypeSymbol
(
container
,
name
,
arity
);
var
errorType
=
isConstructed
?
originalType
.
Construct
(
typeArgumentsArray
)
:
originalType
;
result
.
AddIfNotNull
(
errorType
);
}
// Always ensure at least one error type was created.
if
(
result
.
Count
==
0
)
{
result
.
AddIfNotNull
(
Construct
(
reader
,
container
:
null
,
name
,
arity
,
typeArgumentsArray
));
}
result
.
AddIfNotNull
(
reader
.
Compilation
.
CreateErrorTypeSymbol
(
container
:
null
,
name
,
arity
));
return
CreateResolution
(
result
,
$"(
{
nameof
(
ErrorTypeSymbolKey
)}
failed)"
,
out
failureReason
);
}
...
...
@@ -131,12 +133,6 @@ private static SymbolKeyResolution ResolveContainer(SymbolKeyReader reader, out
throw
ExceptionUtilities
.
UnexpectedValue
(
type
);
}
private
static
INamedTypeSymbol
Construct
(
SymbolKeyReader
reader
,
INamespaceOrTypeSymbol
container
,
string
name
,
int
arity
,
ITypeSymbol
[]
typeArguments
)
{
var
result
=
reader
.
Compilation
.
CreateErrorTypeSymbol
(
container
,
name
,
arity
);
return
typeArguments
!=
null
?
result
.
Construct
(
typeArguments
)
:
result
;
}
}
}
}
src/Workspaces/CoreTest/SymbolKeyTests.cs
浏览文件 @
ded0bc5c
...
...
@@ -1016,6 +1016,52 @@ class C
TestRoundTrip
(
fields
,
comp
);
}
[
Fact
]
public
void
TestGenericErrorType
()
{
var
source1
=
@"
public class C
{
public Goo<X> G() { }
}"
;
// We don't add metadata to the second compilation, so even `System.Collections.IEnumerable` will be an
// error type.
var
compilation1
=
GetCompilation
(
source1
,
LanguageNames
.
CSharp
,
"File1.cs"
);
var
tree
=
compilation1
.
SyntaxTrees
.
Single
();
var
root
=
tree
.
GetRoot
();
var
node
=
root
.
DescendantNodes
().
OfType
<
CSharp
.
Syntax
.
GenericNameSyntax
>().
Single
();
var
semanticModel
=
compilation1
.
GetSemanticModel
(
tree
);
var
symbol
=
semanticModel
.
GetTypeInfo
(
node
).
Type
;
{
// Ensure we don't crash getting these symbol keys.
var
id
=
SymbolKey
.
CreateString
(
symbol
);
Assert
.
NotNull
(
id
);
// Validate that if the client does ask to resolve locations that we
// do not crash if those locations cannot be found.
var
found
=
SymbolKey
.
ResolveString
(
id
,
compilation1
).
GetAnySymbol
();
Assert
.
NotNull
(
found
);
Assert
.
Equal
(
symbol
.
Name
,
found
.
Name
);
Assert
.
Equal
(
symbol
.
Kind
,
found
.
Kind
);
}
{
// Ensure we don't crash getting these symbol keys.
var
id
=
SymbolKey
.
CreateString
(
symbol
.
OriginalDefinition
);
Assert
.
NotNull
(
id
);
var
found
=
SymbolKey
.
ResolveString
(
id
,
compilation1
).
GetAnySymbol
();
Assert
.
NotNull
(
found
);
Assert
.
Equal
(
symbol
.
Name
,
found
.
Name
);
Assert
.
Equal
(
symbol
.
Kind
,
found
.
Kind
);
}
}
private
static
void
TestRoundTrip
(
IEnumerable
<
ISymbol
>
symbols
,
Compilation
compilation
,
Func
<
ISymbol
,
object
>
fnId
=
null
)
{
foreach
(
var
symbol
in
symbols
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录