Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
1875bd78
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,发现更多精彩内容 >>
提交
1875bd78
编写于
4月 06, 2020
作者:
M
Manish Vasani
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Move extension methods down to shared analyzer layer
上级
efa5d647
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
122 addition
and
122 deletion
+122
-122
src/Workspaces/SharedUtilitiesAndExtensions/Compiler/VisualBasic/Extensions/ExpressionSyntaxExtensions.vb
...iler/VisualBasic/Extensions/ExpressionSyntaxExtensions.vb
+122
-0
src/Workspaces/SharedUtilitiesAndExtensions/Workspace/VisualBasic/Extensions/ExpressionSyntaxExtensions.vb
...pace/VisualBasic/Extensions/ExpressionSyntaxExtensions.vb
+0
-122
未找到文件。
src/Workspaces/SharedUtilitiesAndExtensions/Compiler/VisualBasic/Extensions/ExpressionSyntaxExtensions.vb
浏览文件 @
1875bd78
...
...
@@ -219,5 +219,127 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Extensions
Return
OperatorPrecedence
.
PrecedenceNone
End
Select
End
Function
<
Extension
()
>
Public
Function
IsInOutContext
(
expression
As
ExpressionSyntax
)
As
Boolean
' NOTE(cyrusn): VB has no concept of an out context. Even when a parameter has an
' '<Out>' attribute on it, it's still treated as ref by VB. So we always return false
' here.
Return
False
End
Function
<
Extension
()
>
Public
Function
IsInRefContext
(
expression
As
ExpressionSyntax
,
semanticModel
As
SemanticModel
,
cancellationToken
As
CancellationToken
)
As
Boolean
Dim
simpleArgument
=
TryCast
(
expression
?
.
Parent
,
SimpleArgumentSyntax
)
If
simpleArgument
Is
Nothing
Then
Return
False
ElseIf
simpleArgument
.
IsNamed
Then
Dim
info
=
semanticModel
.
GetSymbolInfo
(
simpleArgument
.
NameColonEquals
.
Name
,
cancellationToken
)
Dim
parameter
=
TryCast
(
info
.
GetAnySymbol
(),
IParameterSymbol
)
Return
parameter
IsNot
Nothing
AndAlso
parameter
.
RefKind
<>
RefKind
.
None
Else
Dim
argumentList
=
TryCast
(
simpleArgument
.
Parent
,
ArgumentListSyntax
)
If
argumentList
IsNot
Nothing
Then
Dim
parent
=
argumentList
.
Parent
Dim
index
=
argumentList
.
Arguments
.
IndexOf
(
simpleArgument
)
Dim
info
=
semanticModel
.
GetSymbolInfo
(
parent
,
cancellationToken
)
Dim
symbol
=
info
.
GetAnySymbol
()
If
TypeOf
symbol
Is
IMethodSymbol
Then
Dim
method
=
DirectCast
(
symbol
,
IMethodSymbol
)
If
index
<
method
.
Parameters
.
Length
Then
Return
method
.
Parameters
(
index
).
RefKind
<>
RefKind
.
None
End
If
ElseIf
TypeOf
symbol
Is
IPropertySymbol
Then
Dim
prop
=
DirectCast
(
symbol
,
IPropertySymbol
)
If
index
<
prop
.
Parameters
.
Length
Then
Return
prop
.
Parameters
(
index
).
RefKind
<>
RefKind
.
None
End
If
End
If
End
If
End
If
Return
False
End
Function
<
Extension
()
>
Public
Function
IsInInContext
(
expression
As
ExpressionSyntax
)
As
Boolean
' NOTE: VB does not support in parameters. Always return False here.
Return
False
End
Function
<
Extension
()
>
Public
Function
IsOnlyWrittenTo
(
expression
As
ExpressionSyntax
)
As
Boolean
If
expression
.
IsRightSideOfDot
()
Then
expression
=
TryCast
(
expression
.
Parent
,
ExpressionSyntax
)
End
If
If
expression
IsNot
Nothing
Then
If
expression
.
IsInOutContext
()
Then
Return
True
End
If
If
expression
.
IsParentKind
(
SyntaxKind
.
SimpleAssignmentStatement
)
Then
Dim
assignmentStatement
=
DirectCast
(
expression
.
Parent
,
AssignmentStatementSyntax
)
If
expression
Is
assignmentStatement
.
Left
Then
Return
True
End
If
End
If
If
expression
.
IsParentKind
(
SyntaxKind
.
NameColonEquals
)
AndAlso
expression
.
Parent
.
IsParentKind
(
SyntaxKind
.
SimpleArgument
)
Then
' <C(Prop:=1)>
' this is only a write to Prop
Return
True
End
If
If
expression
.
IsChildNode
(
Of
NamedFieldInitializerSyntax
)(
Function
(
n
)
n
.
Name
)
Then
Return
True
End
If
Return
False
End
If
Return
False
End
Function
<
Extension
()
>
Public
Function
IsWrittenTo
(
expression
As
ExpressionSyntax
,
semanticModel
As
SemanticModel
,
cancellationToken
As
CancellationToken
)
As
Boolean
If
IsOnlyWrittenTo
(
expression
)
Then
Return
True
End
If
If
expression
.
IsRightSideOfDot
()
Then
expression
=
TryCast
(
expression
.
Parent
,
ExpressionSyntax
)
End
If
If
expression
IsNot
Nothing
Then
If
expression
.
IsInRefContext
(
semanticModel
,
cancellationToken
)
Then
Return
True
End
If
If
TypeOf
expression
.
Parent
Is
AssignmentStatementSyntax
Then
Dim
assignmentStatement
=
DirectCast
(
expression
.
Parent
,
AssignmentStatementSyntax
)
If
expression
Is
assignmentStatement
.
Left
Then
Return
True
End
If
End
If
If
expression
.
IsChildNode
(
Of
NamedFieldInitializerSyntax
)(
Function
(
n
)
n
.
Name
)
Then
Return
True
End
If
Return
False
End
If
Return
False
End
Function
End
Module
End
Namespace
src/Workspaces/SharedUtilitiesAndExtensions/Workspace/VisualBasic/Extensions/ExpressionSyntaxExtensions.vb
浏览文件 @
1875bd78
...
...
@@ -213,128 +213,6 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Extensions
DirectCast
(
expression
,
ObjectCreationExpressionSyntax
).
ArgumentList
Is
Nothing
End
Function
<
Extension
()
>
Public
Function
IsInOutContext
(
expression
As
ExpressionSyntax
)
As
Boolean
' NOTE(cyrusn): VB has no concept of an out context. Even when a parameter has an
' '<Out>' attribute on it, it's still treated as ref by VB. So we always return false
' here.
Return
False
End
Function
<
Extension
()
>
Public
Function
IsInRefContext
(
expression
As
ExpressionSyntax
,
semanticModel
As
SemanticModel
,
cancellationToken
As
CancellationToken
)
As
Boolean
Dim
simpleArgument
=
TryCast
(
expression
?
.
Parent
,
SimpleArgumentSyntax
)
If
simpleArgument
Is
Nothing
Then
Return
False
ElseIf
simpleArgument
.
IsNamed
Then
Dim
info
=
semanticModel
.
GetSymbolInfo
(
simpleArgument
.
NameColonEquals
.
Name
,
cancellationToken
)
Dim
parameter
=
TryCast
(
info
.
GetAnySymbol
(),
IParameterSymbol
)
Return
parameter
IsNot
Nothing
AndAlso
parameter
.
RefKind
<>
RefKind
.
None
Else
Dim
argumentList
=
TryCast
(
simpleArgument
.
Parent
,
ArgumentListSyntax
)
If
argumentList
IsNot
Nothing
Then
Dim
parent
=
argumentList
.
Parent
Dim
index
=
argumentList
.
Arguments
.
IndexOf
(
simpleArgument
)
Dim
info
=
semanticModel
.
GetSymbolInfo
(
parent
,
cancellationToken
)
Dim
symbol
=
info
.
GetAnySymbol
()
If
TypeOf
symbol
Is
IMethodSymbol
Then
Dim
method
=
DirectCast
(
symbol
,
IMethodSymbol
)
If
index
<
method
.
Parameters
.
Length
Then
Return
method
.
Parameters
(
index
).
RefKind
<>
RefKind
.
None
End
If
ElseIf
TypeOf
symbol
Is
IPropertySymbol
Then
Dim
prop
=
DirectCast
(
symbol
,
IPropertySymbol
)
If
index
<
prop
.
Parameters
.
Length
Then
Return
prop
.
Parameters
(
index
).
RefKind
<>
RefKind
.
None
End
If
End
If
End
If
End
If
Return
False
End
Function
<
Extension
()
>
Public
Function
IsInInContext
(
expression
As
ExpressionSyntax
)
As
Boolean
' NOTE: VB does not support in parameters. Always return False here.
Return
False
End
Function
<
Extension
()
>
Public
Function
IsOnlyWrittenTo
(
expression
As
ExpressionSyntax
)
As
Boolean
If
expression
.
IsRightSideOfDot
()
Then
expression
=
TryCast
(
expression
.
Parent
,
ExpressionSyntax
)
End
If
If
expression
IsNot
Nothing
Then
If
expression
.
IsInOutContext
()
Then
Return
True
End
If
If
expression
.
IsParentKind
(
SyntaxKind
.
SimpleAssignmentStatement
)
Then
Dim
assignmentStatement
=
DirectCast
(
expression
.
Parent
,
AssignmentStatementSyntax
)
If
expression
Is
assignmentStatement
.
Left
Then
Return
True
End
If
End
If
If
expression
.
IsParentKind
(
SyntaxKind
.
NameColonEquals
)
AndAlso
expression
.
Parent
.
IsParentKind
(
SyntaxKind
.
SimpleArgument
)
Then
' <C(Prop:=1)>
' this is only a write to Prop
Return
True
End
If
If
expression
.
IsChildNode
(
Of
NamedFieldInitializerSyntax
)(
Function
(
n
)
n
.
Name
)
Then
Return
True
End
If
Return
False
End
If
Return
False
End
Function
<
Extension
()
>
Public
Function
IsWrittenTo
(
expression
As
ExpressionSyntax
,
semanticModel
As
SemanticModel
,
cancellationToken
As
CancellationToken
)
As
Boolean
If
IsOnlyWrittenTo
(
expression
)
Then
Return
True
End
If
If
expression
.
IsRightSideOfDot
()
Then
expression
=
TryCast
(
expression
.
Parent
,
ExpressionSyntax
)
End
If
If
expression
IsNot
Nothing
Then
If
expression
.
IsInRefContext
(
semanticModel
,
cancellationToken
)
Then
Return
True
End
If
If
TypeOf
expression
.
Parent
Is
AssignmentStatementSyntax
Then
Dim
assignmentStatement
=
DirectCast
(
expression
.
Parent
,
AssignmentStatementSyntax
)
If
expression
Is
assignmentStatement
.
Left
Then
Return
True
End
If
End
If
If
expression
.
IsChildNode
(
Of
NamedFieldInitializerSyntax
)(
Function
(
n
)
n
.
Name
)
Then
Return
True
End
If
Return
False
End
If
Return
False
End
Function
<
Extension
()
>
Public
Function
IsMeMyBaseOrMyClass
(
expression
As
ExpressionSyntax
)
As
Boolean
If
expression
Is
Nothing
Then
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录