Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
d6aed247
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,发现更多精彩内容 >>
提交
d6aed247
编写于
6月 16, 2017
作者:
C
CyrusNajmabadi
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Break out code for index building into its own service.
上级
55c8d481
变更
5
展开全部
隐藏空白更改
内联
并排
Showing
5 changed file
with
1952 addition
and
1936 deletion
+1952
-1936
src/Workspaces/CSharp/Portable/LanguageServices/CSharpSyntaxFactsService.cs
...arp/Portable/LanguageServices/CSharpSyntaxFactsService.cs
+927
-925
src/Workspaces/Core/Portable/FindSymbols/SyntaxTree/SyntaxTreeIndex_Create.cs
...Portable/FindSymbols/SyntaxTree/SyntaxTreeIndex_Create.cs
+9
-1
src/Workspaces/Core/Portable/LanguageServices/SyntaxFactsService/AbstractSyntaxFactsService.cs
...Services/SyntaxFactsService/AbstractSyntaxFactsService.cs
+51
-45
src/Workspaces/Core/Portable/LanguageServices/SyntaxFactsService/ISyntaxFactsService.cs
...anguageServices/SyntaxFactsService/ISyntaxFactsService.cs
+0
-3
src/Workspaces/VisualBasic/Portable/LanguageServices/VisualBasicSyntaxFactsService.vb
...ortable/LanguageServices/VisualBasicSyntaxFactsService.vb
+965
-962
未找到文件。
src/Workspaces/CSharp/Portable/LanguageServices/CSharpSyntaxFactsService.cs
浏览文件 @
d6aed247
此差异已折叠。
点击以展开。
src/Workspaces/Core/Portable/FindSymbols/SyntaxTree/SyntaxTreeIndex_Create.cs
浏览文件 @
d6aed247
...
...
@@ -5,6 +5,7 @@
using
System.Threading
;
using
System.Threading.Tasks
;
using
Microsoft.CodeAnalysis.ErrorReporting
;
using
Microsoft.CodeAnalysis.Host
;
using
Microsoft.CodeAnalysis.LanguageServices
;
using
Microsoft.CodeAnalysis.Shared.Extensions
;
using
Microsoft.CodeAnalysis.Shared.Utilities
;
...
...
@@ -12,6 +13,11 @@
namespace
Microsoft.CodeAnalysis.FindSymbols
{
internal
interface
IDeclaredSymbolInfoFactoryService
:
ILanguageService
{
bool
TryGetDeclaredSymbolInfo
(
Project
project
,
SyntaxNode
node
,
out
DeclaredSymbolInfo
declaredSymbolInfo
);
}
internal
sealed
partial
class
SyntaxTreeIndex
{
// The probability of getting a false positive when calling ContainsIdentifier.
...
...
@@ -28,6 +34,7 @@ internal sealed partial class SyntaxTreeIndex
{
var
project
=
document
.
Project
;
var
syntaxFacts
=
document
.
GetLanguageService
<
ISyntaxFactsService
>();
var
infoFactory
=
document
.
GetLanguageService
<
IDeclaredSymbolInfoFactoryService
>();
var
ignoreCase
=
syntaxFacts
!=
null
&&
!
syntaxFacts
.
IsCaseSensitive
;
var
isCaseSensitive
=
!
ignoreCase
;
...
...
@@ -68,6 +75,7 @@ internal sealed partial class SyntaxTreeIndex
containsQueryExpression
=
containsQueryExpression
||
syntaxFacts
.
IsQueryExpression
(
node
);
containsElementAccess
=
containsElementAccess
||
syntaxFacts
.
IsElementAccessExpression
(
node
);
containsIndexerMemberCref
=
containsIndexerMemberCref
||
syntaxFacts
.
IsIndexerMemberCRef
(
node
);
// We've received a number of error reports where DeclaredSymbolInfo.GetSymbolAsync() will
// crash because the document's syntax root doesn't contain the span of the node returned
// by TryGetDeclaredSymbolInfo(). There are two possibilities for this crash:
...
...
@@ -78,7 +86,7 @@ internal sealed partial class SyntaxTreeIndex
// the future then we know the problem lies in (2). If, however, the problem is really in
// TryGetDeclaredSymbolInfo, then this will at least prevent us from returning bad spans
// and will prevent the crash from occurring.
if
(
syntaxFacts
.
TryGetDeclaredSymbolInfo
(
project
,
node
,
out
var
declaredSymbolInfo
))
if
(
infoFactory
.
TryGetDeclaredSymbolInfo
(
project
,
node
,
out
var
declaredSymbolInfo
))
{
if
(
root
.
FullSpan
.
Contains
(
declaredSymbolInfo
.
Span
))
{
...
...
src/Workspaces/Core/Portable/LanguageServices/SyntaxFactsService/AbstractSyntaxFactsService.cs
浏览文件 @
d6aed247
...
...
@@ -2,19 +2,20 @@
using
System
;
using
System.Collections.Generic
;
using
Microsoft.CodeAnalysis.Shared.Extensions
;
using
System.Collections.Immutable
;
using
System.Diagnostics
;
using
System.Linq
;
using
System.Text
;
using
System.Threading
;
using
Microsoft.CodeAnalysis.FindSymbols
;
using
Microsoft.CodeAnalysis.Shared.Extensions
;
using
Microsoft.CodeAnalysis.Shared.Utilities
;
using
Microsoft.CodeAnalysis.Text
;
using
Roslyn.Utilities
;
using
System.Text
;
namespace
Microsoft.CodeAnalysis.LanguageServices
{
internal
abstract
class
Abstract
SyntaxFacts
Service
internal
abstract
class
Abstract
DeclaredSymbolInfoFactoryService
:
IDeclaredSymbolInfoFactory
Service
{
private
readonly
static
ObjectPool
<
List
<
Dictionary
<
string
,
string
>>>
s_aliasMapListPool
=
new
ObjectPool
<
List
<
Dictionary
<
string
,
string
>>>(()
=>
new
List
<
Dictionary
<
string
,
string
>>());
...
...
@@ -27,6 +28,53 @@ internal abstract class AbstractSyntaxFactsService
private
readonly
static
ObjectPool
<
Dictionary
<
string
,
string
>>
s_aliasMapPool
=
new
ObjectPool
<
Dictionary
<
string
,
string
>>(()
=>
new
Dictionary
<
string
,
string
>(
StringComparer
.
OrdinalIgnoreCase
));
protected
static
List
<
Dictionary
<
string
,
string
>>
AllocateAliasMapList
()
=>
s_aliasMapListPool
.
Allocate
();
protected
static
void
FreeAliasMapList
(
List
<
Dictionary
<
string
,
string
>>
list
)
{
if
(
list
!=
null
)
{
foreach
(
var
aliasMap
in
list
)
{
FreeAliasMap
(
aliasMap
);
}
s_aliasMapListPool
.
ClearAndFree
(
list
);
}
}
protected
static
void
FreeAliasMap
(
Dictionary
<
string
,
string
>
aliasMap
)
{
if
(
aliasMap
!=
null
)
{
s_aliasMapPool
.
ClearAndFree
(
aliasMap
);
}
}
protected
static
Dictionary
<
string
,
string
>
AllocateAliasMap
()
=>
s_aliasMapPool
.
Allocate
();
protected
static
void
AppendTokens
(
SyntaxNode
node
,
StringBuilder
builder
)
{
foreach
(
var
child
in
node
.
ChildNodesAndTokens
())
{
if
(
child
.
IsToken
)
{
builder
.
Append
(
child
.
AsToken
().
Text
);
}
else
{
AppendTokens
(
child
.
AsNode
(),
builder
);
}
}
}
public
abstract
bool
TryGetDeclaredSymbolInfo
(
Project
project
,
SyntaxNode
node
,
out
DeclaredSymbolInfo
declaredSymbolInfo
);
}
internal
abstract
class
AbstractSyntaxFactsService
{
private
readonly
static
ObjectPool
<
Stack
<(
SyntaxNodeOrToken
nodeOrToken
,
bool
leading
,
bool
trailing
)>>
s_stackPool
=
new
ObjectPool
<
Stack
<(
SyntaxNodeOrToken
nodeOrToken
,
bool
leading
,
bool
trailing
)>>(()
=>
new
Stack
<(
SyntaxNodeOrToken
nodeOrToken
,
bool
leading
,
bool
trailing
)>());
...
...
@@ -77,33 +125,6 @@ protected AbstractSyntaxFactsService()
public
abstract
bool
IsShebangDirectiveTrivia
(
SyntaxTrivia
trivia
);
public
abstract
bool
IsPreprocessorDirective
(
SyntaxTrivia
trivia
);
protected
static
List
<
Dictionary
<
string
,
string
>>
AllocateAliasMapList
()
=>
s_aliasMapListPool
.
Allocate
();
protected
static
void
FreeAliasMapList
(
List
<
Dictionary
<
string
,
string
>>
list
)
{
if
(
list
!=
null
)
{
foreach
(
var
aliasMap
in
list
)
{
FreeAliasMap
(
aliasMap
);
}
s_aliasMapListPool
.
ClearAndFree
(
list
);
}
}
protected
static
void
FreeAliasMap
(
Dictionary
<
string
,
string
>
aliasMap
)
{
if
(
aliasMap
!=
null
)
{
s_aliasMapPool
.
ClearAndFree
(
aliasMap
);
}
}
protected
static
Dictionary
<
string
,
string
>
AllocateAliasMap
()
=>
s_aliasMapPool
.
Allocate
();
public
bool
IsOnSingleLine
(
SyntaxNode
node
,
bool
fullSpan
)
{
// Use an actual Stack so we can write out deeply recursive structures without overflowing.
...
...
@@ -392,20 +413,5 @@ public string GetBannerText(SyntaxNode documentationCommentTriviaSyntax, Cancell
=>
DocumentationCommentService
.
GetBannerText
(
documentationCommentTriviaSyntax
,
cancellationToken
);
protected
abstract
IDocumentationCommentService
DocumentationCommentService
{
get
;
}
protected
static
void
AppendTokens
(
SyntaxNode
node
,
StringBuilder
builder
)
{
foreach
(
var
child
in
node
.
ChildNodesAndTokens
())
{
if
(
child
.
IsToken
)
{
builder
.
Append
(
child
.
AsToken
().
Text
);
}
else
{
AppendTokens
(
child
.
AsNode
(),
builder
);
}
}
}
}
}
\ No newline at end of file
src/Workspaces/Core/Portable/LanguageServices/SyntaxFactsService/ISyntaxFactsService.cs
浏览文件 @
d6aed247
...
...
@@ -4,7 +4,6 @@
using
System.Collections.Generic
;
using
System.Collections.Immutable
;
using
System.Threading
;
using
Microsoft.CodeAnalysis.FindSymbols
;
using
Microsoft.CodeAnalysis.Host
;
using
Microsoft.CodeAnalysis.Text
;
...
...
@@ -224,8 +223,6 @@ internal interface ISyntaxFactsService : ILanguageService
bool
AreEquivalent
(
SyntaxToken
token1
,
SyntaxToken
token2
);
bool
AreEquivalent
(
SyntaxNode
node1
,
SyntaxNode
node2
);
bool
TryGetDeclaredSymbolInfo
(
Project
project
,
SyntaxNode
node
,
out
DeclaredSymbolInfo
declaredSymbolInfo
);
string
GetDisplayName
(
SyntaxNode
node
,
DisplayNameOptions
options
,
string
rootNamespace
=
null
);
SyntaxNode
GetContainingTypeDeclaration
(
SyntaxNode
root
,
int
position
);
...
...
src/Workspaces/VisualBasic/Portable/LanguageServices/VisualBasicSyntaxFactsService.vb
浏览文件 @
d6aed247
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录