Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
a014a190
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,发现更多精彩内容 >>
提交
a014a190
编写于
5月 31, 2016
作者:
C
CyrusNajmabadi
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Switch to a struct with a cached hashcode.
上级
c6f714da
变更
35
隐藏空白更改
内联
并排
Showing
35 changed file
with
103 addition
and
137 deletion
+103
-137
src/EditorFeatures/CSharpTest/SymbolId/SymbolKeyTestBase.cs
src/EditorFeatures/CSharpTest/SymbolId/SymbolKeyTestBase.cs
+1
-1
src/EditorFeatures/Test2/NavigationBar/TestHelpers.vb
src/EditorFeatures/Test2/NavigationBar/TestHelpers.vb
+1
-1
src/EditorFeatures/VisualBasicTest/SymbolId/SymbolKeyTestBase.vb
...torFeatures/VisualBasicTest/SymbolId/SymbolKeyTestBase.vb
+1
-1
src/Features/Core/Portable/SignatureHelp/AbstractSignatureHelpProvider.SymbolKeySignatureHelpItem.cs
...stractSignatureHelpProvider.SymbolKeySignatureHelpItem.cs
+7
-7
src/Features/Core/Portable/SignatureHelp/AbstractSignatureHelpProvider.cs
...e/Portable/SignatureHelp/AbstractSignatureHelpProvider.cs
+2
-3
src/VisualStudio/Core/Def/Implementation/Progression/GraphBuilder.cs
...tudio/Core/Def/Implementation/Progression/GraphBuilder.cs
+3
-3
src/VisualStudio/Core/Def/Implementation/Progression/GraphNavigatorExtension.cs
...Def/Implementation/Progression/GraphNavigatorExtension.cs
+3
-3
src/VisualStudio/Core/Def/Implementation/Progression/GraphProvider.cs
...udio/Core/Def/Implementation/Progression/GraphProvider.cs
+1
-1
src/VisualStudio/Core/Def/Implementation/Progression/RoslynGraphProperties.cs
...e/Def/Implementation/Progression/RoslynGraphProperties.cs
+1
-1
src/Workspaces/Core/Portable/CodeGeneration/Symbols/CodeGenerationSymbol.cs
...e/Portable/CodeGeneration/Symbols/CodeGenerationSymbol.cs
+0
-5
src/Workspaces/Core/Portable/FindSymbols/FindReferences/DependentProjectsFinder.cs
...ble/FindSymbols/FindReferences/DependentProjectsFinder.cs
+2
-2
src/Workspaces/Core/Portable/SymbolId/SymbolKey.AliasSymbolKey.cs
...spaces/Core/Portable/SymbolId/SymbolKey.AliasSymbolKey.cs
+2
-2
src/Workspaces/Core/Portable/SymbolId/SymbolKey.ArrayTypeSymbolKey.cs
...es/Core/Portable/SymbolId/SymbolKey.ArrayTypeSymbolKey.cs
+2
-2
src/Workspaces/Core/Portable/SymbolId/SymbolKey.AssemblySymbolKey.cs
...ces/Core/Portable/SymbolId/SymbolKey.AssemblySymbolKey.cs
+6
-5
src/Workspaces/Core/Portable/SymbolId/SymbolKey.BodyLevelSymbolKey.cs
...es/Core/Portable/SymbolId/SymbolKey.BodyLevelSymbolKey.cs
+2
-2
src/Workspaces/Core/Portable/SymbolId/SymbolKey.ComparisonOptions.cs
...ces/Core/Portable/SymbolId/SymbolKey.ComparisonOptions.cs
+1
-1
src/Workspaces/Core/Portable/SymbolId/SymbolKey.DynamicTypeSymbolKey.cs
.../Core/Portable/SymbolId/SymbolKey.DynamicTypeSymbolKey.cs
+2
-2
src/Workspaces/Core/Portable/SymbolId/SymbolKey.ErrorTypeSymbolKey.cs
...es/Core/Portable/SymbolId/SymbolKey.ErrorTypeSymbolKey.cs
+2
-2
src/Workspaces/Core/Portable/SymbolId/SymbolKey.EventSymbolKey.cs
...spaces/Core/Portable/SymbolId/SymbolKey.EventSymbolKey.cs
+2
-2
src/Workspaces/Core/Portable/SymbolId/SymbolKey.FieldSymbolKey.cs
...spaces/Core/Portable/SymbolId/SymbolKey.FieldSymbolKey.cs
+2
-2
src/Workspaces/Core/Portable/SymbolId/SymbolKey.MethodSymbolKey.cs
...paces/Core/Portable/SymbolId/SymbolKey.MethodSymbolKey.cs
+6
-6
src/Workspaces/Core/Portable/SymbolId/SymbolKey.ModuleSymbolKey.cs
...paces/Core/Portable/SymbolId/SymbolKey.ModuleSymbolKey.cs
+2
-2
src/Workspaces/Core/Portable/SymbolId/SymbolKey.NamedTypeSymbolKey.cs
...es/Core/Portable/SymbolId/SymbolKey.NamedTypeSymbolKey.cs
+2
-2
src/Workspaces/Core/Portable/SymbolId/SymbolKey.NamespaceSymbolKey.cs
...es/Core/Portable/SymbolId/SymbolKey.NamespaceSymbolKey.cs
+2
-2
src/Workspaces/Core/Portable/SymbolId/SymbolKey.ParameterSymbolKey.cs
...es/Core/Portable/SymbolId/SymbolKey.ParameterSymbolKey.cs
+2
-2
src/Workspaces/Core/Portable/SymbolId/SymbolKey.PointerTypeSymbolKey.cs
.../Core/Portable/SymbolId/SymbolKey.PointerTypeSymbolKey.cs
+2
-2
src/Workspaces/Core/Portable/SymbolId/SymbolKey.PropertySymbolKey.cs
...ces/Core/Portable/SymbolId/SymbolKey.PropertySymbolKey.cs
+2
-2
src/Workspaces/Core/Portable/SymbolId/SymbolKey.SymbolKeyComparer.cs
...ces/Core/Portable/SymbolId/SymbolKey.SymbolKeyComparer.cs
+2
-17
src/Workspaces/Core/Portable/SymbolId/SymbolKey.SymbolKeyReader.cs
...paces/Core/Portable/SymbolId/SymbolKey.SymbolKeyReader.cs
+9
-21
src/Workspaces/Core/Portable/SymbolId/SymbolKey.SymbolKeyWriter.cs
...paces/Core/Portable/SymbolId/SymbolKey.SymbolKeyWriter.cs
+8
-8
src/Workspaces/Core/Portable/SymbolId/SymbolKey.TupleTypeSymbolKey.cs
...es/Core/Portable/SymbolId/SymbolKey.TupleTypeSymbolKey.cs
+2
-2
src/Workspaces/Core/Portable/SymbolId/SymbolKey.TypeParameterOrdinalSymbolKey.cs
...table/SymbolId/SymbolKey.TypeParameterOrdinalSymbolKey.cs
+2
-2
src/Workspaces/Core/Portable/SymbolId/SymbolKey.TypeParameterSymbolKey.cs
...ore/Portable/SymbolId/SymbolKey.TypeParameterSymbolKey.cs
+2
-2
src/Workspaces/Core/Portable/SymbolId/SymbolKey.cs
src/Workspaces/Core/Portable/SymbolId/SymbolKey.cs
+16
-18
src/Workspaces/Core/Portable/Workspaces.csproj
src/Workspaces/Core/Portable/Workspaces.csproj
+1
-1
未找到文件。
src/EditorFeatures/CSharpTest/SymbolId/SymbolKeyTestBase.cs
浏览文件 @
a014a190
...
...
@@ -80,7 +80,7 @@ internal static ISymbol ResolveSymbol(ISymbol originalSymbol, Compilation target
// Verify that serialization works.
var
serialized
=
sid
.
ToString
();
var
deserialized
=
SymbolKey
.
FromString
(
serialized
);
var
deserialized
=
new
SymbolKey
(
serialized
);
var
comparer
=
SymbolKey
.
GetComparer
(
ignoreCase
:
false
,
ignoreAssemblyKeys
:
false
);
Assert
.
True
(
comparer
.
Equals
(
sid
,
deserialized
));
...
...
src/EditorFeatures/Test2/NavigationBar/TestHelpers.vb
浏览文件 @
a014a190
...
...
@@ -154,7 +154,7 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.NavigationBar
Assert
.
Equal
(
expectedItem
.
Grayed
,
actualItem
.
Grayed
)
If
expectedItem
.
HasNavigationSymbolId
Then
Assert
.
True
(
DirectCast
(
actualItem
,
NavigationBarSymbolItem
).
NavigationSymbolId
IsNot
Nothing
)
'
Assert.True(DirectCast(actualItem, NavigationBarSymbolItem).NavigationSymbolId IsNot Nothing)
Assert
.
Equal
(
expectedItem
.
HasNavigationSymbolId
,
DirectCast
(
actualItem
,
NavigationBarSymbolItem
).
NavigationSymbolIndex
.
HasValue
)
Else
Assert
.
True
(
TypeOf
actualItem
IsNot
NavigationBarSymbolItem
)
...
...
src/EditorFeatures/VisualBasicTest/SymbolId/SymbolKeyTestBase.vb
浏览文件 @
a014a190
...
...
@@ -73,7 +73,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.UnitTests.SymbolId
' Verify that serialization works.
Dim
serialized
=
sid
.
ToString
()
Dim
deserialized
=
SymbolKey
.
FromString
(
serialized
)
Dim
deserialized
=
New
SymbolKey
(
serialized
)
Dim
comparer
=
SymbolKey
.
GetComparer
(
ignoreCase
:
=
False
,
ignoreAssemblyKeys
:
=
False
)
Assert
.
True
(
comparer
.
Equals
(
sid
,
deserialized
))
...
...
src/Features/Core/Portable/SignatureHelp/AbstractSignatureHelpProvider.SymbolKeySignatureHelpItem.cs
浏览文件 @
a014a190
...
...
@@ -10,7 +10,7 @@ internal abstract partial class AbstractSignatureHelpProvider
{
internal
class
SymbolKeySignatureHelpItem
:
SignatureHelpItem
,
IEquatable
<
SymbolKeySignatureHelpItem
>
{
public
SymbolKey
SymbolKey
{
get
;
}
public
SymbolKey
?
SymbolKey
{
get
;
}
public
SymbolKeySignatureHelpItem
(
ISymbol
symbol
,
...
...
@@ -22,7 +22,7 @@ internal class SymbolKeySignatureHelpItem : SignatureHelpItem, IEquatable<Symbol
IEnumerable
<
SignatureHelpParameter
>
parameters
,
IEnumerable
<
SymbolDisplayPart
>
descriptionParts
)
:
base
(
isVariadic
,
documentationFactory
,
prefixParts
,
separatorParts
,
suffixParts
,
parameters
,
descriptionParts
)
{
this
.
SymbolKey
=
symbol
==
null
?
null
:
symbol
.
GetSymbolKey
();
this
.
SymbolKey
=
symbol
?
.
GetSymbolKey
();
}
public
override
bool
Equals
(
object
obj
)
...
...
@@ -33,9 +33,9 @@ public override bool Equals(object obj)
public
bool
Equals
(
SymbolKeySignatureHelpItem
obj
)
{
return
ReferenceEquals
(
this
,
obj
)
||
(
obj
!=
null
&&
this
.
SymbolKey
!=
null
&&
SymbolKey
.
GetComparer
(
ignoreCase
:
false
,
ignoreAssemblyKeys
:
false
).
Equals
(
this
.
SymbolKey
,
obj
.
SymbolKey
));
(
obj
?.
SymbolKey
!=
null
&&
this
.
SymbolKey
!=
null
&&
CodeAnalysis
.
SymbolKey
.
GetComparer
(
ignoreCase
:
false
,
ignoreAssemblyKeys
:
false
).
Equals
(
this
.
SymbolKey
.
Value
,
obj
.
SymbolKey
.
Value
));
}
public
override
int
GetHashCode
()
...
...
@@ -45,8 +45,8 @@ public override int GetHashCode()
return
0
;
}
var
comparer
=
SymbolKey
.
GetComparer
(
ignoreCase
:
false
,
ignoreAssemblyKeys
:
false
);
return
comparer
.
GetHashCode
(
this
.
SymbolKey
);
var
comparer
=
CodeAnalysis
.
SymbolKey
.
GetComparer
(
ignoreCase
:
false
,
ignoreAssemblyKeys
:
false
);
return
comparer
.
GetHashCode
(
this
.
SymbolKey
.
Value
);
}
}
}
...
...
src/Features/Core/Portable/SignatureHelp/AbstractSignatureHelpProvider.cs
浏览文件 @
a014a190
...
...
@@ -192,8 +192,7 @@ where part.Symbol.IsNormalAnonymousType()
continue
;
}
var
expectedSymbol
=
symbolKey
.
Resolve
(
compilation
,
ignoreAssemblyKey
:
true
,
cancellationToken
:
cancellationToken
).
Symbol
;
var
expectedSymbol
=
symbolKey
.
Value
.
Resolve
(
compilation
,
ignoreAssemblyKey
:
true
,
cancellationToken
:
cancellationToken
).
Symbol
;
if
(
expectedSymbol
==
null
)
{
finalItems
.
Add
(
item
);
...
...
@@ -231,7 +230,7 @@ where part.Symbol.IsNormalAnonymousType()
if
(!
related
.
Item1
.
GetLanguageService
<
ISyntaxFactsService
>().
IsInInactiveRegion
(
syntaxTree
,
position
,
cancellationToken
))
{
var
relatedSemanticModel
=
await
related
.
Item1
.
GetSemanticModelForSpanAsync
(
new
TextSpan
(
position
,
0
),
cancellationToken
).
ConfigureAwait
(
false
);
var
symbolSet
=
related
.
Item2
.
Select
(
s
=>
((
SymbolKeySignatureHelpItem
)
s
).
SymbolKey
.
Resolve
(
relatedSemanticModel
.
Compilation
,
cancellationToken
:
cancellationToken
).
Symbol
)
var
symbolSet
=
related
.
Item2
.
Select
(
s
=>
((
SymbolKeySignatureHelpItem
)
s
).
SymbolKey
?
.
Resolve
(
relatedSemanticModel
.
Compilation
,
cancellationToken
:
cancellationToken
).
Symbol
)
.
WhereNotNull
()
.
ToSet
(
SymbolEquivalenceComparer
.
IgnoreAssembliesInstance
);
resultSets
.
Add
(
Tuple
.
Create
(
related
.
Item1
.
Project
.
Id
,
symbolSet
));
...
...
src/VisualStudio/Core/Def/Implementation/Progression/GraphBuilder.cs
浏览文件 @
a014a190
...
...
@@ -115,8 +115,8 @@ private async Task PopulateMapsForSymbolInputNodeAsync(GraphNode inputNode)
_nodeToContextProjectMap
.
Add
(
inputNode
,
project
);
var
compilation
=
await
project
.
GetCompilationAsync
(
_cancellationToken
).
ConfigureAwait
(
false
);
var
symbolId
=
inputNode
[
RoslynGraphProperties
.
SymbolId
]
as
SymbolKey
;
var
symbol
=
symbolId
.
Resolve
(
compilation
).
Symbol
;
var
symbolId
=
(
SymbolKey
?)
inputNode
[
RoslynGraphProperties
.
SymbolId
]
;
var
symbol
=
symbolId
.
Value
.
Resolve
(
compilation
).
Symbol
;
if
(
symbol
!=
null
)
{
_nodeToSymbolMap
.
Add
(
inputNode
,
symbol
);
...
...
@@ -205,7 +205,7 @@ public async Task<GraphNode> AddNodeForSymbolAsync(ISymbol symbol, Project conte
{
GraphNode
node
=
await
GetOrCreateNodeAsync
(
_graph
,
symbol
,
_solution
,
_cancellationToken
).
ConfigureAwait
(
false
);
node
[
RoslynGraphProperties
.
SymbolId
]
=
symbol
.
GetSymbolKey
();
node
[
RoslynGraphProperties
.
SymbolId
]
=
(
SymbolKey
?)
symbol
.
GetSymbolKey
();
node
[
RoslynGraphProperties
.
ContextProjectId
]
=
GetContextProjectId
(
contextProject
,
symbol
);
node
[
RoslynGraphProperties
.
ExplicitInterfaceImplementations
]
=
symbol
.
ExplicitInterfaceImplementations
().
Select
(
s
=>
s
.
GetSymbolKey
()).
ToList
();
node
[
RoslynGraphProperties
.
DeclaredAccessibility
]
=
symbol
.
DeclaredAccessibility
;
...
...
src/VisualStudio/Core/Def/Implementation/Progression/GraphNavigatorExtension.cs
浏览文件 @
a014a190
...
...
@@ -37,7 +37,7 @@ public void NavigateTo(GraphObject graphObject)
}
var
projectId
=
graphNode
.
GetValue
<
ProjectId
>(
RoslynGraphProperties
.
ContextProjectId
);
var
symbolId
=
graphNode
.
GetValue
<
SymbolKey
>(
RoslynGraphProperties
.
SymbolId
);
var
symbolId
=
graphNode
.
GetValue
<
SymbolKey
?
>(
RoslynGraphProperties
.
SymbolId
);
if
(
projectId
!=
null
)
{
...
...
@@ -81,7 +81,7 @@ public void NavigateTo(GraphObject graphObject)
}
}
private
void
NavigateOnForegroundThread
(
SourceLocation
sourceLocation
,
SymbolKey
symbolId
,
Project
project
,
Document
document
)
private
void
NavigateOnForegroundThread
(
SourceLocation
sourceLocation
,
SymbolKey
?
symbolId
,
Project
project
,
Document
document
)
{
AssertIsForeground
();
...
...
@@ -89,7 +89,7 @@ private void NavigateOnForegroundThread(SourceLocation sourceLocation, SymbolKey
if
(
symbolId
!=
null
)
{
var
symbolNavigationService
=
_workspace
.
Services
.
GetService
<
ISymbolNavigationService
>();
var
symbol
=
symbolId
.
Resolve
(
project
.
GetCompilationAsync
(
CancellationToken
.
None
).
WaitAndGetResult
(
CancellationToken
.
None
)).
Symbol
;
var
symbol
=
symbolId
.
Value
.
Resolve
(
project
.
GetCompilationAsync
(
CancellationToken
.
None
).
WaitAndGetResult
(
CancellationToken
.
None
)).
Symbol
;
// Do not allow third party navigation to types or constructors
if
(
symbol
!=
null
&&
...
...
src/VisualStudio/Core/Def/Implementation/Progression/GraphProvider.cs
浏览文件 @
a014a190
...
...
@@ -350,7 +350,7 @@ private bool IsAnyTypeKind(GraphNode node, params TypeKind[] typeKinds)
// TODO: The check here is to see if the SymbolId property exists on the node
// and if so, that's been created by us. However, eventually we'll want to extend
// this to other scenarios where C#\VB nodes that aren't created by us are passed in.
if
(
graphNode
.
GetValue
<
SymbolKey
>(
RoslynGraphProperties
.
SymbolId
)
==
null
)
if
(
graphNode
.
GetValue
<
SymbolKey
?
>(
RoslynGraphProperties
.
SymbolId
)
==
null
)
{
return
null
;
}
...
...
src/VisualStudio/Core/Def/Implementation/Progression/RoslynGraphProperties.cs
浏览文件 @
a014a190
...
...
@@ -99,7 +99,7 @@ static RoslynGraphProperties()
SymbolId
=
Schema
.
Properties
.
AddNewProperty
(
id
:
"SymbolId"
,
dataType
:
typeof
(
SymbolKey
),
dataType
:
typeof
(
SymbolKey
?
),
callback
:
()
=>
new
GraphMetadata
(
options
:
GraphMetadataOptions
.
Sharable
|
GraphMetadataOptions
.
Removable
));
ContextProjectId
=
Schema
.
Properties
.
AddNewProperty
(
...
...
src/Workspaces/Core/Portable/CodeGeneration/Symbols/CodeGenerationSymbol.cs
浏览文件 @
a014a190
...
...
@@ -273,11 +273,6 @@ public ImmutableArray<SymbolDisplayPart> ToMinimalDisplayParts(SemanticModel sem
throw
new
NotImplementedException
();
}
public
SymbolKey
GetSymbolId
()
{
return
null
;
}
public
virtual
string
MetadataName
{
get
...
...
src/Workspaces/Core/Portable/FindSymbols/FindReferences/DependentProjectsFinder.cs
浏览文件 @
a014a190
...
...
@@ -306,7 +306,7 @@ private static async Task AddNonSubmissionDependentProjectsAsync(IAssemblySymbol
var
internalsVisibleToMap
=
CreateInternalsVisibleToMap
(
sourceAssembly
);
SymbolKey
sourceAssemblySymbolKey
=
null
;
SymbolKey
?
sourceAssemblySymbolKey
=
null
;
// TODO(cyrusn): What about error tolerance situations. Do we maybe want to search
// transitive dependencies as well? Even if the code wouldn't compile, they may be
...
...
@@ -328,7 +328,7 @@ private static async Task AddNonSubmissionDependentProjectsAsync(IAssemblySymbol
if
(
sourceAssembly
.
Language
!=
targetAssembly
.
Language
)
{
sourceAssemblySymbolKey
=
sourceAssemblySymbolKey
??
sourceAssembly
.
GetSymbolKey
();
var
sourceAssemblyInTargetCompilation
=
sourceAssemblySymbolKey
.
Resolve
(
compilation
,
cancellationToken
:
cancellationToken
).
Symbol
as
IAssemblySymbol
;
var
sourceAssemblyInTargetCompilation
=
sourceAssemblySymbolKey
.
Value
.
Resolve
(
compilation
,
cancellationToken
:
cancellationToken
).
Symbol
as
IAssemblySymbol
;
if
(
sourceAssemblyInTargetCompilation
!=
null
)
{
...
...
src/Workspaces/Core/Portable/SymbolId/SymbolKey.AliasSymbolKey.cs
浏览文件 @
a014a190
...
...
@@ -5,11 +5,11 @@
namespace
Microsoft.CodeAnalysis
{
internal
partial
class
SymbolKey
internal
partial
struct
SymbolKey
{
private
static
class
AliasSymbolKey
{
public
static
void
Create
(
IAliasSymbol
symbol
,
Visito
r
visitor
)
public
static
void
Create
(
IAliasSymbol
symbol
,
SymbolKeyWrite
r
visitor
)
{
visitor
.
WriteString
(
symbol
.
Name
);
visitor
.
WriteSymbolKey
(
symbol
.
Target
);
...
...
src/Workspaces/Core/Portable/SymbolId/SymbolKey.ArrayTypeSymbolKey.cs
浏览文件 @
a014a190
...
...
@@ -5,11 +5,11 @@
namespace
Microsoft.CodeAnalysis
{
internal
partial
class
SymbolKey
internal
partial
struct
SymbolKey
{
private
static
class
ArrayTypeSymbolKey
{
public
static
void
Create
(
IArrayTypeSymbol
symbol
,
Visito
r
visitor
)
public
static
void
Create
(
IArrayTypeSymbol
symbol
,
SymbolKeyWrite
r
visitor
)
{
visitor
.
WriteSymbolKey
(
symbol
.
ElementType
);
visitor
.
WriteInteger
(
symbol
.
Rank
);
...
...
src/Workspaces/Core/Portable/SymbolId/SymbolKey.AssemblySymbolKey.cs
浏览文件 @
a014a190
...
...
@@ -5,11 +5,11 @@
namespace
Microsoft.CodeAnalysis
{
internal
partial
class
SymbolKey
internal
partial
struct
SymbolKey
{
private
static
class
AssemblySymbolKey
{
public
static
void
Create
(
IAssemblySymbol
symbol
,
Visito
r
visitor
)
public
static
void
Create
(
IAssemblySymbol
symbol
,
SymbolKeyWrite
r
visitor
)
{
// If the format of this ever changed, then it's necessary to fixup the
// SymbolKeyComparer.RemoveAssemblyKeys function.
...
...
@@ -19,9 +19,10 @@ public static void Create(IAssemblySymbol symbol, Visitor visitor)
public
static
int
GetHashCode
(
GetHashCodeReader
reader
)
{
var
value
=
reader
.
ReadString
();
// isCaseSensitive doesn't apply here as AssemblyIdentity is always case
// insensitive.
return
reader
.
Options
.
IgnoreAssemblyKey
?
1
:
value
;
// Hash all assembly keys to the same bucket. That way we're a uniform
// hash regardless if clients care about assembly IDs or not.
return
1
;
}
public
static
SymbolKeyResolution
Resolve
(
SymbolKeyReader
reader
)
...
...
src/Workspaces/Core/Portable/SymbolId/SymbolKey.BodyLevelSymbolKey.cs
浏览文件 @
a014a190
...
...
@@ -7,11 +7,11 @@
namespace
Microsoft.CodeAnalysis
{
internal
partial
class
SymbolKey
internal
partial
struct
SymbolKey
{
private
static
class
BodyLevelSymbolKey
{
public
static
void
Create
(
ISymbol
symbol
,
Visito
r
visitor
)
public
static
void
Create
(
ISymbol
symbol
,
SymbolKeyWrite
r
visitor
)
{
var
containingSymbol
=
symbol
.
ContainingSymbol
;
...
...
src/Workspaces/Core/Portable/SymbolId/SymbolKey.ComparisonOptions.cs
浏览文件 @
a014a190
...
...
@@ -4,7 +4,7 @@
namespace
Microsoft.CodeAnalysis
{
internal
partial
class
SymbolKey
internal
partial
struct
SymbolKey
{
private
struct
ComparisonOptions
{
...
...
src/Workspaces/Core/Portable/SymbolId/SymbolKey.DynamicTypeSymbolKey.cs
浏览文件 @
a014a190
...
...
@@ -2,13 +2,13 @@
namespace
Microsoft.CodeAnalysis
{
internal
partial
class
SymbolKey
internal
partial
struct
SymbolKey
{
private
static
class
DynamicTypeSymbolKey
{
private
static
readonly
object
instance
=
new
object
();
public
static
void
Create
(
Visito
r
visitor
)
public
static
void
Create
(
SymbolKeyWrite
r
visitor
)
{
}
...
...
src/Workspaces/Core/Portable/SymbolId/SymbolKey.ErrorTypeSymbolKey.cs
浏览文件 @
a014a190
...
...
@@ -7,11 +7,11 @@
namespace
Microsoft.CodeAnalysis
{
internal
partial
class
SymbolKey
internal
partial
struct
SymbolKey
{
private
static
class
ErrorTypeSymbolKey
{
public
static
void
Create
(
INamedTypeSymbol
symbol
,
Visito
r
visitor
)
public
static
void
Create
(
INamedTypeSymbol
symbol
,
SymbolKeyWrite
r
visitor
)
{
visitor
.
WriteString
(
symbol
.
Name
);
visitor
.
WriteSymbolKey
(
symbol
.
ContainingSymbol
as
INamespaceOrTypeSymbol
);
...
...
src/Workspaces/Core/Portable/SymbolId/SymbolKey.EventSymbolKey.cs
浏览文件 @
a014a190
...
...
@@ -5,11 +5,11 @@
namespace
Microsoft.CodeAnalysis
{
internal
partial
class
SymbolKey
internal
partial
struct
SymbolKey
{
private
static
class
EventSymbolKey
{
public
static
void
Create
(
IEventSymbol
symbol
,
Visito
r
visitor
)
public
static
void
Create
(
IEventSymbol
symbol
,
SymbolKeyWrite
r
visitor
)
{
visitor
.
WriteString
(
symbol
.
MetadataName
);
visitor
.
WriteSymbolKey
(
symbol
.
ContainingType
);
...
...
src/Workspaces/Core/Portable/SymbolId/SymbolKey.FieldSymbolKey.cs
浏览文件 @
a014a190
...
...
@@ -5,11 +5,11 @@
namespace
Microsoft.CodeAnalysis
{
internal
partial
class
SymbolKey
internal
partial
struct
SymbolKey
{
private
static
class
FieldSymbolKey
{
public
static
void
Create
(
IFieldSymbol
symbol
,
Visito
r
visitor
)
public
static
void
Create
(
IFieldSymbol
symbol
,
SymbolKeyWrite
r
visitor
)
{
visitor
.
WriteString
(
symbol
.
MetadataName
);
visitor
.
WriteSymbolKey
(
symbol
.
ContainingType
);
...
...
src/Workspaces/Core/Portable/SymbolId/SymbolKey.MethodSymbolKey.cs
浏览文件 @
a014a190
...
...
@@ -8,11 +8,11 @@
namespace
Microsoft.CodeAnalysis
{
internal
partial
class
SymbolKey
internal
partial
struct
SymbolKey
{
private
static
class
ReducedExtensionMethodSymbolKey
{
public
static
void
Create
(
IMethodSymbol
symbol
,
Visito
r
visitor
)
public
static
void
Create
(
IMethodSymbol
symbol
,
SymbolKeyWrite
r
visitor
)
{
Debug
.
Assert
(
symbol
.
Equals
(
symbol
.
ConstructedFrom
));
...
...
@@ -41,11 +41,11 @@ public static SymbolKeyResolution Resolve(SymbolKeyReader reader)
}
}
internal
partial
class
SymbolKey
internal
partial
struct
SymbolKey
{
private
static
class
ConstructedMethodSymbolKey
{
public
static
void
Create
(
IMethodSymbol
symbol
,
Visito
r
visitor
)
public
static
void
Create
(
IMethodSymbol
symbol
,
SymbolKeyWrite
r
visitor
)
{
visitor
.
WriteSymbolKey
(
symbol
.
ConstructedFrom
);
visitor
.
WriteSymbolKeyArray
(
symbol
.
TypeArguments
);
...
...
@@ -81,11 +81,11 @@ public static SymbolKeyResolution Resolve(SymbolKeyReader reader)
}
}
internal
partial
class
SymbolKey
internal
partial
struct
SymbolKey
{
private
static
class
MethodSymbolKey
{
public
static
void
Create
(
IMethodSymbol
symbol
,
Visito
r
visitor
)
public
static
void
Create
(
IMethodSymbol
symbol
,
SymbolKeyWrite
r
visitor
)
{
Debug
.
Assert
(
symbol
.
Equals
(
symbol
.
ConstructedFrom
));
...
...
src/Workspaces/Core/Portable/SymbolId/SymbolKey.ModuleSymbolKey.cs
浏览文件 @
a014a190
...
...
@@ -5,11 +5,11 @@
namespace
Microsoft.CodeAnalysis
{
internal
partial
class
SymbolKey
internal
partial
struct
SymbolKey
{
private
static
class
ModuleSymbolKey
{
public
static
void
Create
(
IModuleSymbol
symbol
,
Visito
r
visitor
)
public
static
void
Create
(
IModuleSymbol
symbol
,
SymbolKeyWrite
r
visitor
)
{
visitor
.
WriteSymbolKey
(
symbol
.
ContainingSymbol
);
}
...
...
src/Workspaces/Core/Portable/SymbolId/SymbolKey.NamedTypeSymbolKey.cs
浏览文件 @
a014a190
...
...
@@ -7,11 +7,11 @@
namespace
Microsoft.CodeAnalysis
{
internal
partial
class
SymbolKey
internal
partial
struct
SymbolKey
{
private
static
class
NamedTypeSymbolKey
{
public
static
void
Create
(
INamedTypeSymbol
symbol
,
Visito
r
visitor
)
public
static
void
Create
(
INamedTypeSymbol
symbol
,
SymbolKeyWrite
r
visitor
)
{
visitor
.
WriteString
(
symbol
.
MetadataName
);
visitor
.
WriteSymbolKey
(
symbol
.
ContainingSymbol
);
...
...
src/Workspaces/Core/Portable/SymbolId/SymbolKey.NamespaceSymbolKey.cs
浏览文件 @
a014a190
...
...
@@ -10,7 +10,7 @@
namespace
Microsoft.CodeAnalysis
{
internal
partial
class
SymbolKey
internal
partial
struct
SymbolKey
{
private
static
class
NamespaceSymbolKey
{
...
...
@@ -22,7 +22,7 @@ private static class NamespaceSymbolKey
// 4) The SymbolId for the containing namespace symbol if this is not a global
// namespace.
public
static
void
Create
(
INamespaceSymbol
symbol
,
Visito
r
visitor
)
public
static
void
Create
(
INamespaceSymbol
symbol
,
SymbolKeyWrite
r
visitor
)
{
visitor
.
WriteString
(
symbol
.
MetadataName
);
...
...
src/Workspaces/Core/Portable/SymbolId/SymbolKey.ParameterSymbolKey.cs
浏览文件 @
a014a190
...
...
@@ -6,11 +6,11 @@
namespace
Microsoft.CodeAnalysis
{
internal
partial
class
SymbolKey
internal
partial
struct
SymbolKey
{
private
static
class
ParameterSymbolKey
{
public
static
void
Create
(
IParameterSymbol
symbol
,
Visito
r
visitor
)
public
static
void
Create
(
IParameterSymbol
symbol
,
SymbolKeyWrite
r
visitor
)
{
visitor
.
WriteString
(
symbol
.
MetadataName
);
visitor
.
WriteSymbolKey
(
symbol
.
ContainingSymbol
);
...
...
src/Workspaces/Core/Portable/SymbolId/SymbolKey.PointerTypeSymbolKey.cs
浏览文件 @
a014a190
...
...
@@ -5,11 +5,11 @@
namespace
Microsoft.CodeAnalysis
{
internal
partial
class
SymbolKey
internal
partial
struct
SymbolKey
{
private
static
class
PointerTypeSymbolKey
{
public
static
void
Create
(
IPointerTypeSymbol
symbol
,
Visito
r
visitor
)
public
static
void
Create
(
IPointerTypeSymbol
symbol
,
SymbolKeyWrite
r
visitor
)
{
visitor
.
WriteSymbolKey
(
symbol
.
PointedAtType
);
}
...
...
src/Workspaces/Core/Portable/SymbolId/SymbolKey.PropertySymbolKey.cs
浏览文件 @
a014a190
...
...
@@ -5,11 +5,11 @@
namespace
Microsoft.CodeAnalysis
{
internal
partial
class
SymbolKey
internal
partial
struct
SymbolKey
{
private
static
class
PropertySymbolKey
{
public
static
void
Create
(
IPropertySymbol
symbol
,
Visito
r
visitor
)
public
static
void
Create
(
IPropertySymbol
symbol
,
SymbolKeyWrite
r
visitor
)
{
visitor
.
WriteString
(
symbol
.
MetadataName
);
visitor
.
WriteSymbolKey
(
symbol
.
ContainingSymbol
);
...
...
src/Workspaces/Core/Portable/SymbolId/SymbolKey.SymbolKeyComparer.cs
浏览文件 @
a014a190
...
...
@@ -8,7 +8,7 @@
namespace
Microsoft.CodeAnalysis
{
internal
partial
class
SymbolKey
internal
partial
struct
SymbolKey
{
private
class
SymbolKeyComparer
:
IEqualityComparer
<
SymbolKey
>
{
...
...
@@ -21,16 +21,6 @@ private SymbolKeyComparer(ComparisonOptions options)
public
bool
Equals
(
SymbolKey
x
,
SymbolKey
y
)
{
if
(
x
==
y
)
{
return
true
;
}
if
(
x
==
null
||
y
==
null
)
{
return
false
;
}
var
comparer
=
_options
.
IgnoreCase
?
StringComparer
.
OrdinalIgnoreCase
:
StringComparer
.
Ordinal
;
...
...
@@ -60,12 +50,7 @@ private string RemoveAssemblyKeys(string data)
public
int
GetHashCode
(
SymbolKey
obj
)
{
if
(
obj
==
null
)
{
return
0
;
}
return
SymbolKey
.
GetHashCode
(
obj
,
_options
);
return
obj
.
GetHashCode
();
}
public
static
IEqualityComparer
<
SymbolKey
>
GetComparer
(
bool
ignoreCase
,
bool
ignoreAssemblyKey
)
...
...
src/Workspaces/Core/Portable/SymbolId/SymbolKey.SymbolKeyReader.cs
浏览文件 @
a014a190
...
...
@@ -12,7 +12,7 @@
namespace
Microsoft.CodeAnalysis
{
internal
partial
class
SymbolKey
internal
partial
struct
SymbolKey
{
private
abstract
class
Reader
<
TStringResult
>
:
IDisposable
{
...
...
@@ -274,51 +274,39 @@ private class GetHashCodeReader : Reader<int, int>
private
static
readonly
ObjectPool
<
GetHashCodeReader
>
s_pool
=
new
ObjectPool
<
GetHashCodeReader
>(()
=>
new
GetHashCodeReader
());
public
ComparisonOptions
Options
{
get
;
private
set
;
}
private
GetHashCodeReader
()
{
}
public
static
GetHashCodeReader
GetReader
(
string
data
,
ComparisonOptions
options
)
public
static
GetHashCodeReader
GetReader
(
string
data
)
{
var
reader
=
s_pool
.
Allocate
();
reader
.
Initialize
(
data
,
options
);
reader
.
Initialize
(
data
);
return
reader
;
}
public
override
void
Dispose
()
{
base
.
Dispose
();
Options
=
default
(
ComparisonOptions
);
s_pool
.
Free
(
this
);
}
private
void
Initialize
(
string
data
,
ComparisonOptions
options
)
private
void
Initialize
(
string
data
)
{
base
.
Initialize
(
data
,
CancellationToken
.
None
);
Options
=
options
;
}
protected
override
int
CreateResultForString
(
int
start
,
int
end
,
bool
hasEmbeddedQuote
)
{
var
result
=
1
;
if
(
Options
.
IgnoreCase
)
{
for
(
var
i
=
start
;
i
<
end
;
i
++)
{
result
=
Hash
.
Combine
((
int
)
char
.
ToLower
(
Data
[
i
]),
result
);
}
}
else
// Note: we hash all strings to lowercase. It will mean more collisions, but
// it provides a uniform hashing strategy for all keys.
for
(
var
i
=
start
;
i
<
end
;
i
++)
{
for
(
var
i
=
start
;
i
<
end
;
i
++)
{
result
=
Hash
.
Combine
((
int
)
Data
[
i
],
result
);
}
result
=
Hash
.
Combine
((
int
)
char
.
ToLower
(
Data
[
i
]),
result
);
}
return
result
;
}
...
...
src/Workspaces/Core/Portable/SymbolId/SymbolKey.
Visito
r.cs
→
src/Workspaces/Core/Portable/SymbolId/SymbolKey.
SymbolKeyWrite
r.cs
浏览文件 @
a014a190
...
...
@@ -10,7 +10,7 @@
namespace
Microsoft.CodeAnalysis
{
internal
partial
class
SymbolKey
internal
partial
struct
SymbolKey
{
private
enum
SymbolKeyType
{
...
...
@@ -41,10 +41,10 @@ private enum SymbolKeyType
TypeParameterOrdinal
=
'@'
,
}
private
class
Visito
r
:
SymbolVisitor
<
object
>,
IDisposable
private
class
SymbolKeyWrite
r
:
SymbolVisitor
<
object
>,
IDisposable
{
private
static
readonly
ObjectPool
<
Visitor
>
s_visito
rPool
=
new
ObjectPool
<
Visitor
>(()
=>
new
Visito
r
());
private
static
readonly
ObjectPool
<
SymbolKeyWriter
>
s_write
rPool
=
new
ObjectPool
<
SymbolKeyWriter
>(()
=>
new
SymbolKeyWrite
r
());
private
readonly
Action
<
ISymbol
>
_writeSymbolKey
;
private
readonly
Action
<
string
>
_writeString
;
...
...
@@ -61,7 +61,7 @@ private class Visitor : SymbolVisitor<object>, IDisposable
internal
int
_nestingCount
;
private
int
_nextId
;
private
Visito
r
()
private
SymbolKeyWrite
r
()
{
_writeSymbolKey
=
WriteSymbolKey
;
_writeString
=
WriteString
;
...
...
@@ -79,12 +79,12 @@ public void Dispose()
_nextId
=
0
;
// Place us back in the pool for future use.
s_
visito
rPool
.
Free
(
this
);
s_
write
rPool
.
Free
(
this
);
}
public
static
Visitor
GetVisito
r
(
Compilation
compilation
,
CancellationToken
cancellationToken
)
public
static
SymbolKeyWriter
GetWrite
r
(
Compilation
compilation
,
CancellationToken
cancellationToken
)
{
var
visitor
=
s_
visito
rPool
.
Allocate
();
var
visitor
=
s_
write
rPool
.
Allocate
();
visitor
.
Initialize
(
compilation
,
cancellationToken
);
return
visitor
;
}
...
...
src/Workspaces/Core/Portable/SymbolId/SymbolKey.TupleTypeSymbolKey.cs
浏览文件 @
a014a190
...
...
@@ -6,11 +6,11 @@
namespace
Microsoft.CodeAnalysis
{
internal
partial
class
SymbolKey
internal
partial
struct
SymbolKey
{
private
static
class
TupleTypeSymbolKey
{
public
static
void
Create
(
INamedTypeSymbol
symbol
,
Visito
r
visitor
)
public
static
void
Create
(
INamedTypeSymbol
symbol
,
SymbolKeyWrite
r
visitor
)
{
Debug
.
Assert
(
symbol
.
IsTupleType
);
visitor
.
WriteSymbolKey
(
symbol
.
TupleUnderlyingType
);
...
...
src/Workspaces/Core/Portable/SymbolId/SymbolKey.TypeParameterOrdinalSymbolKey.cs
浏览文件 @
a014a190
...
...
@@ -4,11 +4,11 @@
namespace
Microsoft.CodeAnalysis
{
internal
partial
class
SymbolKey
internal
partial
struct
SymbolKey
{
private
static
class
TypeParameterOrdinalSymbolKey
{
public
static
void
Create
(
ITypeParameterSymbol
symbol
,
Visito
r
visitor
)
public
static
void
Create
(
ITypeParameterSymbol
symbol
,
SymbolKeyWrite
r
visitor
)
{
Debug
.
Assert
(
visitor
.
WritingSignature
);
Debug
.
Assert
(
symbol
.
TypeParameterKind
==
TypeParameterKind
.
Method
);
...
...
src/Workspaces/Core/Portable/SymbolId/SymbolKey.TypeParameterSymbolKey.cs
浏览文件 @
a014a190
...
...
@@ -5,11 +5,11 @@
namespace
Microsoft.CodeAnalysis
{
internal
partial
class
SymbolKey
internal
partial
struct
SymbolKey
{
private
static
class
TypeParameterSymbolKey
{
public
static
void
Create
(
ITypeParameterSymbol
symbol
,
Visito
r
visitor
)
public
static
void
Create
(
ITypeParameterSymbol
symbol
,
SymbolKeyWrite
r
visitor
)
{
visitor
.
WriteString
(
symbol
.
MetadataName
);
visitor
.
WriteSymbolKey
(
symbol
.
ContainingSymbol
);
...
...
src/Workspaces/Core/Portable/SymbolId/SymbolKey.cs
浏览文件 @
a014a190
...
...
@@ -76,25 +76,26 @@ namespace Microsoft.CodeAnalysis
/// </para>
/// </para>
/// </summary>
internal
partial
class
SymbolKey
internal
partial
struct
SymbolKey
{
private
readonly
static
Func
<
ITypeSymbol
,
bool
>
s_typeIsNull
=
t
=>
t
==
null
;
private
readonly
string
_symbolKeyData
;
private
readonly
int
_hashCode
;
p
rivate
SymbolKey
(
string
symbolKeyData
)
p
ublic
SymbolKey
(
string
symbolKeyData
)
{
if
(
symbolKeyData
==
null
)
{
throw
new
ArgumentNullException
();
}
_symbolKeyData
=
symbolKeyData
;
}
public
static
SymbolKey
FromString
(
string
data
)
{
return
new
SymbolKey
(
data
);
using
(
var
reader
=
GetHashCodeReader
.
GetReader
(
_symbolKeyData
))
{
_hashCode
=
reader
.
ReadFirstSymbolKey
();
}
}
public
static
IEqualityComparer
<
SymbolKey
>
GetComparer
(
bool
ignoreCase
,
bool
ignoreAssemblyKeys
)
...
...
@@ -109,14 +110,6 @@ public static IEqualityComparer<SymbolKey> GetComparer(bool ignoreCase, bool ign
return
reader
.
RemoveAssemblySymbolKeys
();
};
private
static
int
GetHashCode
(
SymbolKey
key
,
ComparisonOptions
options
)
{
using
(
var
reader
=
GetHashCodeReader
.
GetReader
(
key
.
_symbolKeyData
,
options
))
{
return
reader
.
ReadFirstSymbolKey
();
}
}
public
static
SymbolKeyResolution
Resolve
(
string
symbolKey
,
Compilation
compilation
,
bool
ignoreAssemblyKey
=
false
,
CancellationToken
cancellationToken
=
default
(
CancellationToken
))
...
...
@@ -136,10 +129,10 @@ public static string ToString(ISymbol symbol, CancellationToken cancellationToke
{
var
compilation
=
(
symbol
.
ContainingAssembly
as
ISourceAssemblySymbol
)?.
Compilation
;
using
(
var
visitor
=
Visitor
.
GetVisito
r
(
compilation
,
cancellationToken
))
using
(
var
writer
=
SymbolKeyWriter
.
GetWrite
r
(
compilation
,
cancellationToken
))
{
visito
r
.
WriteFirstSymbolKey
(
symbol
);
return
visito
r
.
CreateKey
();
write
r
.
WriteFirstSymbolKey
(
symbol
);
return
write
r
.
CreateKey
();
}
}
...
...
@@ -256,5 +249,10 @@ private static TSymbol GetFirstSymbol<TSymbol>(SymbolKeyResolution resolution)
return
true
;
}
public
override
int
GetHashCode
()
{
return
_hashCode
;
}
}
}
\ No newline at end of file
src/Workspaces/Core/Portable/Workspaces.csproj
浏览文件 @
a014a190
...
...
@@ -445,7 +445,7 @@
<Compile
Include=
"SymbolId\SymbolKey.FieldSymbolKey.cs"
/>
<Compile
Include=
"SymbolId\SymbolKey.DynamicTypeSymbolKey.cs"
/>
<Compile
Include=
"SymbolId\SymbolKey.ArrayTypeSymbolKey.cs"
/>
<Compile
Include=
"SymbolId\SymbolKey.
Visito
r.cs"
/>
<Compile
Include=
"SymbolId\SymbolKey.
SymbolKeyWrite
r.cs"
/>
<Compile
Include=
"SymbolId\SymbolKey.cs"
/>
<Compile
Include=
"SymbolSearch\ISymbolSearchService.cs"
/>
<Compile
Include=
"FindSymbols\SymbolTree\ISymbolTreeInfoCacheService.cs"
/>
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录