Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
def0e3aa
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,发现更多精彩内容 >>
提交
def0e3aa
编写于
4月 22, 2018
作者:
C
Cyrus Najmabadi
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add VB impl.
上级
c4e637b2
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
105 addition
and
28 deletion
+105
-28
src/Compilers/VisualBasic/Portable/Compilation/VisualBasicCompilation.vb
...isualBasic/Portable/Compilation/VisualBasicCompilation.vb
+105
-28
未找到文件。
src/Compilers/VisualBasic/Portable/Compilation/VisualBasicCompilation.vb
浏览文件 @
def0e3aa
...
@@ -2724,7 +2724,19 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
...
@@ -2724,7 +2724,19 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Throw
New
ArgumentException
(
VBResources
.
NoNoneSearchCriteria
,
NameOf
(
filter
))
Throw
New
ArgumentException
(
VBResources
.
NoNoneSearchCriteria
,
NameOf
(
filter
))
End
If
End
If
Return
New
SymbolSearcher
(
Me
).
GetSymbolsWithName
(
predicate
,
filter
,
cancellationToken
)
Return
New
PredicateSymbolSearcher
(
Me
,
filter
,
predicate
,
cancellationToken
).
GetSymbolsWithName
()
End
Function
Friend
Overrides
Function
GetSymbolsWithName
(
name
As
String
,
Optional
filter
As
SymbolFilter
=
SymbolFilter
.
TypeAndMember
,
Optional
cancellationToken
As
CancellationToken
=
Nothing
)
As
IEnumerable
(
Of
ISymbol
)
If
name
Is
Nothing
Then
Throw
New
ArgumentNullException
(
NameOf
(
name
))
End
If
If
filter
=
SymbolFilter
.
None
Then
Throw
New
ArgumentException
(
VBResources
.
NoNoneSearchCriteria
,
NameOf
(
filter
))
End
If
Return
New
NameSymbolSearcher
(
Me
,
filter
,
name
,
cancellationToken
).
GetSymbolsWithName
()
End
Function
End
Function
Friend
Overrides
Function
IsUnreferencedAssemblyIdentityDiagnosticCode
(
code
As
Integer
)
As
Boolean
Friend
Overrides
Function
IsUnreferencedAssemblyIdentityDiagnosticCode
(
code
As
Integer
)
As
Boolean
...
@@ -2740,34 +2752,50 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
...
@@ -2740,34 +2752,50 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
#End Region
#End Region
Private
Class
SymbolSearcher
Private
MustInherit
Class
AbstractSymbolSearcher
Private
Shared
ReadOnly
s_cachePool
As
New
ObjectPool
(
Of
Dictionary
(
Of
Declaration
,
NamespaceOrTypeSymbol
))(
Function
()
New
Dictionary
(
Of
Declaration
,
NamespaceOrTypeSymbol
)())
Private
ReadOnly
_cache
As
Dictionary
(
Of
Declaration
,
NamespaceOrTypeSymbol
)
Private
ReadOnly
_cache
As
Dictionary
(
Of
Declaration
,
NamespaceOrTypeSymbol
)
Private
ReadOnly
_compilation
As
VisualBasicCompilation
Private
ReadOnly
_compilation
As
VisualBasicCompilation
Private
ReadOnly
_includeNamespace
As
Boolean
Private
ReadOnly
_includeType
As
Boolean
Private
ReadOnly
_includeMember
As
Boolean
Private
ReadOnly
_cancellationToken
As
CancellationToken
Public
Sub
New
(
compilation
As
VisualBasicCompilation
,
filter
As
SymbolFilter
,
cancellationToken
As
CancellationToken
)
_cache
=
s_cachePool
.
Allocate
()
_compilation
=
compilation
Public
Sub
New
(
compilation
As
VisualBasicCompilation
)
_includeNamespace
=
(
filter
And
SymbolFilter
.
Namespace
)
=
SymbolFilter
.
Namespace
Me
.
_cache
=
New
Dictionary
(
Of
Declaration
,
NamespaceOrTypeSymbol
)()
_includeType
=
(
filter
And
SymbolFilter
.
Type
)
=
SymbolFilter
.
Type
Me
.
_compilation
=
compilation
_includeMember
=
(
filter
And
SymbolFilter
.
Member
)
=
SymbolFilter
.
Member
_cancellationToken
=
cancellationToken
End
Sub
End
Sub
Public
Function
GetSymbolsWithName
(
predicate
As
Func
(
Of
String
,
Boolean
),
filter
As
SymbolFilter
,
cancellationToken
As
CancellationToken
)
As
IEnumerable
(
Of
ISymbol
)
Protected
MustOverride
Function
Matches
(
name
As
String
)
As
Boolean
Protected
MustOverride
Function
ShouldCheckTypeForMembers
(
typeDeclaration
As
MergedTypeDeclaration
)
As
Boolean
Public
Function
GetSymbolsWithName
()
As
IEnumerable
(
Of
ISymbol
)
Dim
result
=
New
HashSet
(
Of
ISymbol
)()
Dim
result
=
New
HashSet
(
Of
ISymbol
)()
Dim
spine
=
New
List
(
Of
MergedNamespaceOrTypeDeclaration
)
()
Dim
spine
=
ArrayBuilder
(
Of
MergedNamespaceOrTypeDeclaration
).
GetInstance
()
AppendSymbolsWithName
(
spine
,
_compilation
.
MergedRootDeclaration
,
predicate
,
filter
,
result
,
cancellationToken
)
AppendSymbolsWithName
(
spine
,
_compilation
.
MergedRootDeclaration
,
result
)
spine
.
Clear
()
_cache
.
Clear
()
s_cachePool
.
Free
(
_cache
)
Return
result
Return
result
End
Function
End
Function
Private
Sub
AppendSymbolsWithName
(
Private
Sub
AppendSymbolsWithName
(
spine
As
List
(
Of
MergedNamespaceOrTypeDeclaration
),
current
As
MergedNamespaceOrTypeDeclaration
,
predicate
As
Func
(
Of
String
,
Boolean
),
filter
As
SymbolFilter
,
[
set
]
As
HashSet
(
Of
ISymbol
),
cancellationToken
As
CancellationToken
)
spine
As
ArrayBuilder
(
Of
MergedNamespaceOrTypeDeclaration
),
current
As
MergedNamespaceOrTypeDeclaration
,
[
set
]
As
HashSet
(
Of
ISymbol
))
Dim
includeNamespace
=
(
filter
And
SymbolFilter
.
Namespace
)
=
SymbolFilter
.
Namespace
Dim
includeType
=
(
filter
And
SymbolFilter
.
Type
)
=
SymbolFilter
.
Type
Dim
includeMember
=
(
filter
And
SymbolFilter
.
Member
)
=
SymbolFilter
.
Member
If
current
.
Kind
=
DeclarationKind
.
Namespace
Then
If
current
.
Kind
=
DeclarationKind
.
Namespace
Then
If
includeNamespace
AndAlso
predicate
(
current
.
Name
)
Then
If
_includeNamespace
AndAlso
Matches
(
current
.
Name
)
Then
Dim
container
=
GetSpineSymbol
(
spine
)
Dim
container
=
GetSpineSymbol
(
spine
)
Dim
symbol
=
GetSymbol
(
container
,
current
)
Dim
symbol
=
GetSymbol
(
container
,
current
)
If
symbol
IsNot
Nothing
Then
If
symbol
IsNot
Nothing
Then
...
@@ -2775,7 +2803,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
...
@@ -2775,7 +2803,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
End
If
End
If
End
If
End
If
Else
Else
If
includeType
AndAlso
predicate
(
current
.
Name
)
Then
If
_includeType
AndAlso
Matches
(
current
.
Name
)
Then
Dim
container
=
GetSpineSymbol
(
spine
)
Dim
container
=
GetSpineSymbol
(
spine
)
Dim
symbol
=
GetSymbol
(
container
,
current
)
Dim
symbol
=
GetSymbol
(
container
,
current
)
If
symbol
IsNot
Nothing
Then
If
symbol
IsNot
Nothing
Then
...
@@ -2783,20 +2811,21 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
...
@@ -2783,20 +2811,21 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
End
If
End
If
End
If
End
If
If
includeMember
Then
If
_includeMember
Then
AppendMemberSymbolsWithName
(
spine
,
current
,
predicate
,
[
set
]
,
cancellationToken
)
Dim
typeDeclaration
=
DirectCast
(
current
,
MergedTypeDeclaration
)
If
ShouldCheckTypeForMembers
(
typeDeclaration
)
Then
AppendMemberSymbolsWithName
(
spine
,
typeDeclaration
,
[
set
]
)
End
If
End
If
End
If
End
If
End
If
spine
.
Add
(
current
)
spine
.
Add
(
current
)
For
Each
child
In
current
.
Children
.
OfType
(
Of
MergedNamespaceOrTypeDeclaration
)()
For
Each
child
In
current
.
Children
If
includeMember
OrElse
includeType
Then
Dim
mergedNamespaceOrType
=
TryCast
(
child
,
MergedNamespaceOrTypeDeclaration
)
AppendSymbolsWithName
(
spine
,
child
,
predicate
,
filter
,
[
set
]
,
cancellationToken
)
If
mergedNamespaceOrType
IsNot
Nothing
Then
Continue
For
If
_includeMember
OrElse
_includeType
OrElse
child
.
Kind
=
DeclarationKind
.
Namespace
Then
End
If
AppendSymbolsWithName
(
spine
,
mergedNamespaceOrType
,
[
set
]
)
End
If
If
child
.
Kind
=
DeclarationKind
.
Namespace
Then
AppendSymbolsWithName
(
spine
,
child
,
predicate
,
filter
,
[
set
]
,
cancellationToken
)
End
If
End
If
Next
Next
...
@@ -2804,14 +2833,14 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
...
@@ -2804,14 +2833,14 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
End
Sub
End
Sub
Private
Sub
AppendMemberSymbolsWithName
(
Private
Sub
AppendMemberSymbolsWithName
(
spine
As
List
(
Of
MergedNamespaceOrTypeDeclaration
),
current
As
MergedNamespaceOrTypeDeclaration
,
predicate
As
Func
(
Of
String
,
Boolean
),
[
set
]
As
HashSet
(
Of
ISymbol
),
cancellationToken
As
CancellationToken
)
spine
As
ArrayBuilder
(
Of
MergedNamespaceOrTypeDeclaration
),
current
As
MergedNamespaceOrTypeDeclaration
,
[
set
]
As
HashSet
(
Of
ISymbol
)
)
spine
.
Add
(
current
)
spine
.
Add
(
current
)
Dim
container
As
NamespaceOrTypeSymbol
=
Nothing
Dim
container
As
NamespaceOrTypeSymbol
=
Nothing
Dim
mergedType
=
DirectCast
(
current
,
MergedTypeDeclaration
)
Dim
mergedType
=
DirectCast
(
current
,
MergedTypeDeclaration
)
For
Each
name
In
mergedType
.
MemberNames
For
Each
name
In
mergedType
.
MemberNames
If
predicate
(
name
)
Then
If
Matches
(
name
)
Then
container
=
If
(
container
,
GetSpineSymbol
(
spine
))
container
=
If
(
container
,
GetSpineSymbol
(
spine
))
If
container
IsNot
Nothing
Then
If
container
IsNot
Nothing
Then
[
set
]
.
UnionWith
(
container
.
GetMembers
(
name
))
[
set
]
.
UnionWith
(
container
.
GetMembers
(
name
))
...
@@ -2822,7 +2851,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
...
@@ -2822,7 +2851,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
spine
.
RemoveAt
(
spine
.
Count
-
1
)
spine
.
RemoveAt
(
spine
.
Count
-
1
)
End
Sub
End
Sub
Private
Function
GetSpineSymbol
(
spine
As
List
(
Of
MergedNamespaceOrTypeDeclaration
))
As
NamespaceOrTypeSymbol
Private
Function
GetSpineSymbol
(
spine
As
ArrayBuilder
(
Of
MergedNamespaceOrTypeDeclaration
))
As
NamespaceOrTypeSymbol
If
spine
.
Count
=
0
Then
If
spine
.
Count
=
0
Then
Return
Nothing
Return
Nothing
End
If
End
If
...
@@ -2889,5 +2918,53 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
...
@@ -2889,5 +2918,53 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Next
Next
End
Sub
End
Sub
End
Class
End
Class
Private
Class
PredicateSymbolSearcher
Inherits
AbstractSymbolSearcher
Private
ReadOnly
_predicate
As
Func
(
Of
String
,
Boolean
)
Public
Sub
New
(
compilation
As
VisualBasicCompilation
,
filter
As
SymbolFilter
,
predicate
As
Func
(
Of
String
,
Boolean
),
cancellationToken
As
CancellationToken
)
MyBase
.
New
(
compilation
,
filter
,
cancellationToken
)
_predicate
=
predicate
End
Sub
Protected
Overrides
Function
ShouldCheckTypeForMembers
(
current
As
MergedTypeDeclaration
)
As
Boolean
Return
True
End
Function
Protected
Overrides
Function
Matches
(
name
As
String
)
As
Boolean
Return
_predicate
(
name
)
End
Function
End
Class
Private
Class
NameSymbolSearcher
Inherits
AbstractSymbolSearcher
Private
ReadOnly
_name
As
String
Public
Sub
New
(
compilation
As
VisualBasicCompilation
,
filter
As
SymbolFilter
,
name
As
String
,
cancellationToken
As
CancellationToken
)
MyBase
.
New
(
compilation
,
filter
,
cancellationToken
)
_name
=
name
End
Sub
Protected
Overrides
Function
ShouldCheckTypeForMembers
(
current
As
MergedTypeDeclaration
)
As
Boolean
For
Each
typeDecl
In
current
.
Declarations
If
typeDecl
.
MemberNames
.
Contains
(
_name
)
Then
Return
True
End
If
Next
Return
False
End
Function
Protected
Overrides
Function
Matches
(
name
As
String
)
As
Boolean
Return
IdentifierComparison
.
Equals
(
_name
,
name
)
End
Function
End
Class
End
Class
End
Class
End
Namespace
End
Namespace
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录