Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
8f062669
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,发现更多精彩内容 >>
提交
8f062669
编写于
11月 25, 2016
作者:
D
Dustin Campbell
提交者:
GitHub
11月 25, 2016
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #15531 from vslsnap/merge-dev15-rc2-into-master-20161125-160026
Merge dev15-rc2 into master
上级
9f7c4e85
9d132134
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
146 addition
and
54 deletion
+146
-54
src/VisualStudio/CSharp/Impl/CodeModel/CSharpCodeModelService.NodeLocator.cs
...harp/Impl/CodeModel/CSharpCodeModelService.NodeLocator.cs
+43
-0
src/VisualStudio/CSharp/Impl/CodeModel/CSharpCodeModelService.cs
...ualStudio/CSharp/Impl/CodeModel/CSharpCodeModelService.cs
+9
-0
src/VisualStudio/Core/Impl/CodeModel/AbstractCodeModelService.cs
...ualStudio/Core/Impl/CodeModel/AbstractCodeModelService.cs
+2
-0
src/VisualStudio/Core/Impl/CodeModel/ICodeModelService.cs
src/VisualStudio/Core/Impl/CodeModel/ICodeModelService.cs
+2
-0
src/VisualStudio/Core/Impl/CodeModel/InternalElements/CodeAccessorFunction.cs
...e/Impl/CodeModel/InternalElements/CodeAccessorFunction.cs
+14
-50
src/VisualStudio/Core/Impl/CodeModel/InternalElements/CodeProperty.cs
...udio/Core/Impl/CodeModel/InternalElements/CodeProperty.cs
+6
-4
src/VisualStudio/Core/Test/CodeModel/CSharp/CodePropertyTests.vb
...ualStudio/Core/Test/CodeModel/CSharp/CodePropertyTests.vb
+62
-0
src/VisualStudio/VisualBasic/Impl/CodeModel/VisualBasicCodeModelService.vb
...VisualBasic/Impl/CodeModel/VisualBasicCodeModelService.vb
+8
-0
未找到文件。
src/VisualStudio/CSharp/Impl/CodeModel/CSharpCodeModelService.NodeLocator.cs
浏览文件 @
8f062669
...
...
@@ -37,6 +37,8 @@ protected override EnvDTE.vsCMPart DefaultPart
{
switch
(
node
.
Kind
())
{
case
SyntaxKind
.
ArrowExpressionClause
:
return
GetStartPoint
(
text
,
(
ArrowExpressionClauseSyntax
)
node
,
part
);
case
SyntaxKind
.
Attribute
:
return
GetStartPoint
(
text
,
(
AttributeSyntax
)
node
,
part
);
case
SyntaxKind
.
AttributeArgument
:
...
...
@@ -83,6 +85,8 @@ protected override EnvDTE.vsCMPart DefaultPart
{
switch
(
node
.
Kind
())
{
case
SyntaxKind
.
ArrowExpressionClause
:
return
GetEndPoint
(
text
,
(
ArrowExpressionClauseSyntax
)
node
,
part
);
case
SyntaxKind
.
Attribute
:
return
GetEndPoint
(
text
,
(
AttributeSyntax
)
node
,
part
);
case
SyntaxKind
.
AttributeArgument
:
...
...
@@ -211,6 +215,27 @@ private VirtualTreePoint GetBodyEndPoint(SourceText text, SyntaxToken closeBrace
:
new
VirtualTreePoint
(
closeBrace
.
SyntaxTree
,
text
,
closeBrace
.
SpanStart
);
}
private
VirtualTreePoint
GetStartPoint
(
SourceText
text
,
ArrowExpressionClauseSyntax
node
,
EnvDTE
.
vsCMPart
part
)
{
int
startPosition
;
switch
(
part
)
{
case
EnvDTE
.
vsCMPart
.
vsCMPartWhole
:
startPosition
=
node
.
SpanStart
;
break
;
case
EnvDTE
.
vsCMPart
.
vsCMPartBody
:
startPosition
=
node
.
Expression
.
SpanStart
;
break
;
default
:
throw
Exceptions
.
ThrowENotImpl
();
}
return
new
VirtualTreePoint
(
node
.
SyntaxTree
,
text
,
startPosition
);
}
private
VirtualTreePoint
GetStartPoint
(
SourceText
text
,
AttributeSyntax
node
,
EnvDTE
.
vsCMPart
part
)
{
int
startPosition
;
...
...
@@ -759,6 +784,24 @@ private VirtualTreePoint GetStartPoint(SourceText text, ParameterSyntax node, En
return
new
VirtualTreePoint
(
node
.
SyntaxTree
,
text
,
startPosition
);
}
private
VirtualTreePoint
GetEndPoint
(
SourceText
text
,
ArrowExpressionClauseSyntax
node
,
EnvDTE
.
vsCMPart
part
)
{
int
endPosition
;
switch
(
part
)
{
case
EnvDTE
.
vsCMPart
.
vsCMPartWhole
:
case
EnvDTE
.
vsCMPart
.
vsCMPartBody
:
endPosition
=
node
.
Span
.
End
;
break
;
default
:
throw
Exceptions
.
ThrowENotImpl
();
}
return
new
VirtualTreePoint
(
node
.
SyntaxTree
,
text
,
endPosition
);
}
private
VirtualTreePoint
GetEndPoint
(
SourceText
text
,
AttributeSyntax
node
,
EnvDTE
.
vsCMPart
part
)
{
int
endPosition
;
...
...
src/VisualStudio/CSharp/Impl/CodeModel/CSharpCodeModelService.cs
浏览文件 @
8f062669
...
...
@@ -1477,6 +1477,15 @@ public override IEnumerable<SyntaxNode> GetParameterNodes(SyntaxNode parentNode)
return
SpecializedCollections
.
EmptyEnumerable
<
ParameterSyntax
>();
}
public
override
bool
IsExpressionBodiedProperty
(
SyntaxNode
node
)
=>
(
node
as
PropertyDeclarationSyntax
)?.
ExpressionBody
!=
null
;
public
override
bool
TryGetAutoPropertyExpressionBody
(
SyntaxNode
parentNode
,
out
SyntaxNode
accessorNode
)
{
accessorNode
=
(
parentNode
as
PropertyDeclarationSyntax
)?.
ExpressionBody
;
return
accessorNode
!=
null
;
}
public
override
bool
IsAccessorNode
(
SyntaxNode
node
)
{
switch
(
node
.
Kind
())
...
...
src/VisualStudio/Core/Impl/CodeModel/AbstractCodeModelService.cs
浏览文件 @
8f062669
...
...
@@ -663,10 +663,12 @@ protected bool TryGetElementFromSource(CodeModelState state, Project project, IT
return
false
;
}
public
abstract
bool
IsExpressionBodiedProperty
(
SyntaxNode
node
);
public
abstract
bool
IsAccessorNode
(
SyntaxNode
node
);
public
abstract
MethodKind
GetAccessorKind
(
SyntaxNode
node
);
public
abstract
bool
TryGetAccessorNode
(
SyntaxNode
parentNode
,
MethodKind
kind
,
out
SyntaxNode
accessorNode
);
public
abstract
bool
TryGetAutoPropertyExpressionBody
(
SyntaxNode
parentNode
,
out
SyntaxNode
accessorNode
);
public
abstract
bool
TryGetParameterNode
(
SyntaxNode
parentNode
,
string
name
,
out
SyntaxNode
parameterNode
);
public
abstract
bool
TryGetImportNode
(
SyntaxNode
parentNode
,
string
dottedName
,
out
SyntaxNode
importNode
);
public
abstract
bool
TryGetOptionNode
(
SyntaxNode
parentNode
,
string
name
,
int
ordinal
,
out
SyntaxNode
optionNode
);
...
...
src/VisualStudio/Core/Impl/CodeModel/ICodeModelService.cs
浏览文件 @
8f062669
...
...
@@ -146,10 +146,12 @@ internal interface ICodeModelService : ICodeModelNavigationPointService
SyntaxNode
SetAccess
(
SyntaxNode
node
,
EnvDTE
.
vsCMAccess
access
);
EnvDTE
.
vsCMElement
GetElementKind
(
SyntaxNode
node
);
bool
IsExpressionBodiedProperty
(
SyntaxNode
node
);
bool
IsAccessorNode
(
SyntaxNode
node
);
MethodKind
GetAccessorKind
(
SyntaxNode
node
);
bool
TryGetAccessorNode
(
SyntaxNode
parentNode
,
MethodKind
kind
,
out
SyntaxNode
accessorNode
);
bool
TryGetAutoPropertyExpressionBody
(
SyntaxNode
parentNode
,
out
SyntaxNode
expressionBody
);
bool
TryGetParameterNode
(
SyntaxNode
parentNode
,
string
name
,
out
SyntaxNode
parameterNode
);
bool
TryGetImportNode
(
SyntaxNode
parentNode
,
string
dottedName
,
out
SyntaxNode
importNode
);
bool
TryGetOptionNode
(
SyntaxNode
parentNode
,
string
name
,
int
ordinal
,
out
SyntaxNode
optionNode
);
...
...
src/VisualStudio/Core/Impl/CodeModel/InternalElements/CodeAccessorFunction.cs
浏览文件 @
8f062669
...
...
@@ -35,15 +35,10 @@ private CodeAccessorFunction(CodeModelState state, AbstractCodeMember parent, Me
_kind
=
kind
;
}
private
AbstractCodeMember
ParentMember
{
get
{
return
_parentHandle
.
Value
;
}
}
private
AbstractCodeMember
ParentMember
=>
_parentHandle
.
Value
;
private
bool
IsPropertyAccessor
()
{
return
_kind
==
MethodKind
.
PropertyGet
||
_kind
==
MethodKind
.
PropertySet
;
}
=>
_kind
==
MethodKind
.
PropertyGet
||
_kind
==
MethodKind
.
PropertySet
;
internal
override
bool
TryLookupNode
(
out
SyntaxNode
node
)
{
...
...
@@ -55,52 +50,29 @@ internal override bool TryLookupNode(out SyntaxNode node)
return
false
;
}
if
(!
CodeModelService
.
TryGetAccessorNode
(
parentNode
,
_kind
,
out
var
accessorNode
))
{
return
false
;
}
node
=
accessorNode
;
return
node
!=
null
;
return
CodeModelService
.
TryGetAutoPropertyExpressionBody
(
parentNode
,
out
node
)
||
CodeModelService
.
TryGetAccessorNode
(
parentNode
,
_kind
,
out
node
);
}
public
override
EnvDTE
.
vsCMElement
Kind
{
get
{
return
EnvDTE
.
vsCMElement
.
vsCMElementFunction
;
}
}
=>
EnvDTE
.
vsCMElement
.
vsCMElementFunction
;
public
override
object
Parent
{
get
{
return
_parentHandle
.
Value
;
}
}
public
override
object
Parent
=>
_parentHandle
.
Value
;
public
override
EnvDTE
.
CodeElements
Children
{
get
{
return
EmptyCollection
.
Create
(
this
.
State
,
this
);
}
}
=>
EmptyCollection
.
Create
(
this
.
State
,
this
);
protected
override
string
GetName
()
{
return
this
.
ParentMember
.
Name
;
}
=>
this
.
ParentMember
.
Name
;
protected
override
void
SetName
(
string
value
)
{
this
.
ParentMember
.
Name
=
value
;
}
=>
this
.
ParentMember
.
Name
=
value
;
protected
override
string
GetFullName
()
{
return
this
.
ParentMember
.
FullName
;
}
=>
this
.
ParentMember
.
FullName
;
public
EnvDTE
.
CodeElements
Attributes
{
get
{
return
AttributeCollection
.
Create
(
this
.
State
,
this
);
}
}
=>
AttributeCollection
.
Create
(
this
.
State
,
this
);
public
EnvDTE
.
vsCMAccess
Access
{
...
...
@@ -211,10 +183,7 @@ public EnvDTE80.vsCMOverrideKind OverrideKind
}
}
public
bool
IsOverloaded
{
get
{
return
false
;
}
}
public
bool
IsOverloaded
=>
false
;
public
bool
IsShared
{
...
...
@@ -271,12 +240,7 @@ public bool MustImplement
}
public
EnvDTE
.
CodeElements
Overloads
{
get
{
throw
Exceptions
.
ThrowEFail
();
}
}
=>
throw
Exceptions
.
ThrowEFail
();
public
EnvDTE
.
CodeElements
Parameters
{
...
...
@@ -327,4 +291,4 @@ public void RemoveParameter(object element)
throw
Exceptions
.
ThrowEFail
();
}
}
}
}
\ No newline at end of file
src/VisualStudio/Core/Impl/CodeModel/InternalElements/CodeProperty.cs
浏览文件 @
8f062669
...
...
@@ -144,15 +144,17 @@ public override EnvDTE.CodeElements Children
}
private
bool
HasAccessorNode
(
MethodKind
methodKind
)
{
return
CodeModelService
.
TryGetAccessorNode
(
LookupNode
(),
methodKind
,
out
var
accessorNode
);
}
=>
CodeModelService
.
TryGetAccessorNode
(
LookupNode
(),
methodKind
,
out
var
accessorNode
);
private
bool
IsExpressionBodiedProperty
()
=>
CodeModelService
.
IsExpressionBodiedProperty
(
LookupNode
());
public
EnvDTE
.
CodeFunction
Getter
{
get
{
if
(!
HasAccessorNode
(
MethodKind
.
PropertyGet
))
if
(!
HasAccessorNode
(
MethodKind
.
PropertyGet
)
&&
!
IsExpressionBodiedProperty
())
{
return
null
;
}
...
...
src/VisualStudio/Core/Test/CodeModel/CSharp/CodePropertyTests.vb
浏览文件 @
8f062669
...
...
@@ -54,6 +54,68 @@ class C
TextPoint
(
line
:
=
3
,
lineOffset
:
=
5
,
absoluteOffset
:
=
15
,
lineLength
:
=
16
)))
End
Function
<
ConditionalWpfFact
(
GetType
(
x86
)),
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
CodeModel
)
>
Public
Async
Function
TestAutoPropGetStartPoint1
()
As
Task
Dim
code
=
<
Code
>
class
C
{
public
int
$$
P
=>
0
;
}
</
Code
>
Await
TestElement
(
code
,
Sub
(
prop
)
Dim
getter
=
prop
.
Getter
Dim
textPointGetter
=
Function
(
part
As
EnvDTE
.
vsCMPart
)
Return
getter
.
GetStartPoint
(
part
)
End
Function
Part
(
EnvDTE
.
vsCMPart
.
vsCMPartAttributes
,
ThrowsNotImplementedException
)(
textPointGetter
)
Part
(
EnvDTE
.
vsCMPart
.
vsCMPartAttributesWithDelimiter
,
ThrowsNotImplementedException
)(
textPointGetter
)
Part
(
EnvDTE
.
vsCMPart
.
vsCMPartBody
,
TextPoint
(
line
:
=
3
,
lineOffset
:
=
21
,
absoluteOffset
:
=
31
,
lineLength
:
=
22
))(
textPointGetter
)
Part
(
EnvDTE
.
vsCMPart
.
vsCMPartBodyWithDelimiter
,
ThrowsNotImplementedException
)(
textPointGetter
)
Part
(
EnvDTE
.
vsCMPart
.
vsCMPartHeader
,
ThrowsNotImplementedException
)(
textPointGetter
)
Part
(
EnvDTE
.
vsCMPart
.
vsCMPartHeaderWithAttributes
,
ThrowsNotImplementedException
)(
textPointGetter
)
Part
(
EnvDTE
.
vsCMPart
.
vsCMPartName
,
ThrowsNotImplementedException
)(
textPointGetter
)
Part
(
EnvDTE
.
vsCMPart
.
vsCMPartNavigate
,
ThrowsNotImplementedException
)(
textPointGetter
)
Part
(
EnvDTE
.
vsCMPart
.
vsCMPartWhole
,
TextPoint
(
line
:
=
3
,
lineOffset
:
=
18
,
absoluteOffset
:
=
28
,
lineLength
:
=
22
))(
textPointGetter
)
Part
(
EnvDTE
.
vsCMPart
.
vsCMPartWholeWithAttributes
,
ThrowsNotImplementedException
)(
textPointGetter
)
End
Sub
)
End
Function
<
ConditionalWpfFact
(
GetType
(
x86
)),
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
CodeModel
)
>
Public
Async
Function
TestAutoPropGetEndPoint1
()
As
Task
Dim
code
=
<
Code
>
class
C
{
public
int
$$
P
=>
0
;
}
</
Code
>
Await
TestElement
(
code
,
Sub
(
prop
)
Dim
getter
=
prop
.
Getter
Dim
textPointGetter
=
Function
(
part
As
EnvDTE
.
vsCMPart
)
Return
getter
.
GetEndPoint
(
part
)
End
Function
Part
(
EnvDTE
.
vsCMPart
.
vsCMPartAttributes
,
ThrowsNotImplementedException
)(
textPointGetter
)
Part
(
EnvDTE
.
vsCMPart
.
vsCMPartAttributesWithDelimiter
,
ThrowsNotImplementedException
)(
textPointGetter
)
Part
(
EnvDTE
.
vsCMPart
.
vsCMPartBody
,
TextPoint
(
line
:
=
3
,
lineOffset
:
=
22
,
absoluteOffset
:
=
32
,
lineLength
:
=
22
))(
textPointGetter
)
Part
(
EnvDTE
.
vsCMPart
.
vsCMPartBodyWithDelimiter
,
ThrowsNotImplementedException
)(
textPointGetter
)
Part
(
EnvDTE
.
vsCMPart
.
vsCMPartHeader
,
ThrowsNotImplementedException
)(
textPointGetter
)
Part
(
EnvDTE
.
vsCMPart
.
vsCMPartHeaderWithAttributes
,
ThrowsNotImplementedException
)(
textPointGetter
)
Part
(
EnvDTE
.
vsCMPart
.
vsCMPartName
,
ThrowsNotImplementedException
)(
textPointGetter
)
Part
(
EnvDTE
.
vsCMPart
.
vsCMPartNavigate
,
ThrowsNotImplementedException
)(
textPointGetter
)
Part
(
EnvDTE
.
vsCMPart
.
vsCMPartWhole
,
TextPoint
(
line
:
=
3
,
lineOffset
:
=
22
,
absoluteOffset
:
=
32
,
lineLength
:
=
22
))(
textPointGetter
)
Part
(
EnvDTE
.
vsCMPart
.
vsCMPartWholeWithAttributes
,
ThrowsNotImplementedException
)(
textPointGetter
)
End
Sub
)
End
Function
<
ConditionalWpfFact
(
GetType
(
x86
)),
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
CodeModel
)
>
Public
Async
Function
TestGetStartPoint_Attribute
()
As
Task
Dim
code
=
...
...
src/VisualStudio/VisualBasic/Impl/CodeModel/VisualBasicCodeModelService.vb
浏览文件 @
8f062669
...
...
@@ -1048,6 +1048,14 @@ Namespace Microsoft.VisualStudio.LanguageServices.VisualBasic.CodeModel
Return
GetExternalSymbolFullName
(
symbol
)
End
Function
Public
Overrides
Function
IsExpressionBodiedProperty
(
node
As
SyntaxNode
)
As
Boolean
Return
False
End
Function
Public
Overrides
Function
TryGetAutoPropertyExpressionBody
(
parentNode
As
SyntaxNode
,
ByRef
accessorNode
As
SyntaxNode
)
As
Boolean
Return
False
End
Function
Public
Overrides
Function
IsAccessorNode
(
node
As
SyntaxNode
)
As
Boolean
Select
Case
node
.
Kind
Case
SyntaxKind
.
GetAccessorBlock
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录