Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
b07c96ab
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,体验更适合开发者的 AI 搜索 >>
提交
b07c96ab
编写于
10月 04, 2017
作者:
G
Gen Lu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Make event reference in raise event statement always explicit
上级
55ff9ac2
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
43 addition
and
10 deletion
+43
-10
src/Compilers/VisualBasic/Portable/Operations/VisualBasicOperationFactory.vb
...lBasic/Portable/Operations/VisualBasicOperationFactory.vb
+7
-2
src/Compilers/VisualBasic/Test/Semantic/IOperation/IOperationTests_IRaiseEventExpression.vb
...antic/IOperation/IOperationTests_IRaiseEventExpression.vb
+36
-8
未找到文件。
src/Compilers/VisualBasic/Portable/Operations/VisualBasicOperationFactory.vb
浏览文件 @
b07c96ab
...
...
@@ -1337,15 +1337,20 @@ Namespace Microsoft.CodeAnalysis.Semantics
Dim
eventReferenceSyntax
=
receiver
.
Syntax
Dim
eventReferenceType
As
ITypeSymbol
=
eventSymbol
.
Type
Dim
eventReferenceConstantValue
As
[
Optional
]
(
Of
Object
)
=
ConvertToOptional
(
receiver
.
ConstantValueOpt
)
dim
eventReferenceIsImplicit
as
Boolean
=
eventInvocation
.
WasCompilerGenerated
' EventReference in a raise event statement is never implicit. However, the way it is implemented, we don't get
' a "BoundEventAccess" for either field backed event or custom event, and the bound nodes we get are marked as
' generated by compiler. As a result, we have to explicitly set IsImplicit to false.
dim
eventReferenceIsImplicit
as
Boolean
=
False
Dim
boundInstance
As
BoundNode
If
receiver
.
Kind
=
BoundKind
.
FieldAccess
Dim
eventFieldAccess
=
CType
(
eventInvocation
.
ReceiverOpt
,
BoundFieldAccess
)
' For raising a field backed event, we will only get a field access node in bound tree.
Dim
eventFieldAccess
=
CType
(
receiver
,
BoundFieldAccess
)
Debug
.
Assert
(
eventFieldAccess
.
FieldSymbol
.
AssociatedSymbol
=
eventSymbol
)
boundInstance
=
eventFieldAccess
.
ReceiverOpt
Else
' This is for a custom event
boundInstance
=
receiver
End
If
...
...
src/Compilers/VisualBasic/Test/Semantic/IOperation/IOperationTests_IRaiseEventExpression.vb
浏览文件 @
b07c96ab
...
...
@@ -26,7 +26,7 @@ End Class]]>.Value
Dim
expectedOperationTree
=
<
!
[
CDATA
[
IRaiseEventStatement
(
OperationKind
.
RaiseEventStatement
)
(
Syntax
:
'RaiseEvent TestEvent()')
Event
Reference
:
IEventReferenceExpression
:
Event
TestClass
.
TestEvent
As
System
.
Action
(
OperationKind
.
EventReferenceExpression
,
Type
:
System
.
Action
,
IsImplicit
)
(
Syntax
:
'TestEvent')
IEventReferenceExpression
:
Event
TestClass
.
TestEvent
As
System
.
Action
(
OperationKind
.
EventReferenceExpression
,
Type
:
System
.
Action
)
(
Syntax
:
'TestEvent')
Instance
Receiver
:
IInstanceReferenceExpression
(
OperationKind
.
InstanceReferenceExpression
,
Type
:
TestClass
,
IsImplicit
)
(
Syntax
:
'TestEvent')
Arguments
(
0
)
...
...
@@ -54,7 +54,7 @@ End Class]]>.Value
Dim
expectedOperationTree
=
<
!
[
CDATA
[
IRaiseEventStatement
(
OperationKind
.
RaiseEventStatement
)
(
Syntax
:
'RaiseEvent ... ring.Empty)')
Event
Reference
:
IEventReferenceExpression
:
Event
TestClass
.
MyEvent
(
x
As
System
.
String
,
y
As
System
.
Int32
)
(
OperationKind
.
EventReferenceExpression
,
Type
:
TestClass
.
MyEventEventHandler
,
IsImplicit
)
(
Syntax
:
'MyEvent')
IEventReferenceExpression
:
Event
TestClass
.
MyEvent
(
x
As
System
.
String
,
y
As
System
.
Int32
)
(
OperationKind
.
EventReferenceExpression
,
Type
:
TestClass
.
MyEventEventHandler
)
(
Syntax
:
'MyEvent')
Instance
Receiver
:
IInstanceReferenceExpression
(
OperationKind
.
InstanceReferenceExpression
,
Type
:
TestClass
,
IsImplicit
)
(
Syntax
:
'MyEvent')
Arguments
(
2
):
...
...
@@ -92,7 +92,7 @@ End Class]]>.Value
Dim
expectedOperationTree
=
<
!
[
CDATA
[
IRaiseEventStatement
(
OperationKind
.
RaiseEventStatement
)
(
Syntax
:
'RaiseEvent TestEvent()')
Event
Reference
:
IEventReferenceExpression
:
Event
TestClass
.
TestEvent
As
System
.
Action
(
Static
)
(
OperationKind
.
EventReferenceExpression
,
Type
:
System
.
Action
,
IsImplicit
)
(
Syntax
:
'TestEvent')
IEventReferenceExpression
:
Event
TestClass
.
TestEvent
As
System
.
Action
(
Static
)
(
OperationKind
.
EventReferenceExpression
,
Type
:
System
.
Action
)
(
Syntax
:
'TestEvent')
Instance
Receiver
:
null
Arguments
(
0
)
...
...
@@ -250,7 +250,7 @@ End Class]]>.Value
Dim
expectedOperationTree
=
<
!
[
CDATA
[
IRaiseEventStatement
(
OperationKind
.
RaiseEventStatement
)
(
Syntax
:
'RaiseEvent TestEvent()')
Event
Reference
:
IEventReferenceExpression
:
Event
TestClass
.
TestEvent
As
System
.
Action
(
OperationKind
.
EventReferenceExpression
,
Type
:
System
.
Action
,
IsImplicit
)
(
Syntax
:
'TestEvent')
IEventReferenceExpression
:
Event
TestClass
.
TestEvent
As
System
.
Action
(
OperationKind
.
EventReferenceExpression
,
Type
:
System
.
Action
)
(
Syntax
:
'TestEvent')
Instance
Receiver
:
IInstanceReferenceExpression
(
OperationKind
.
InstanceReferenceExpression
,
Type
:
TestClass
,
IsImplicit
)
(
Syntax
:
'TestEvent')
Arguments
(
0
)
...
...
@@ -286,7 +286,7 @@ End Class]]>.Value
Dim
expectedOperationTree
=
<
!
[
CDATA
[
IRaiseEventStatement
(
OperationKind
.
RaiseEventStatement
)
(
Syntax
:
'RaiseEvent ... g, Nothing)')
Event
Reference
:
IEventReferenceExpression
:
Event
TestClass
.
TestEvent
As
System
.
EventHandler
(
OperationKind
.
EventReferenceExpression
,
Type
:
System
.
EventHandler
,
IsImplicit
)
(
Syntax
:
'TestEvent')
IEventReferenceExpression
:
Event
TestClass
.
TestEvent
As
System
.
EventHandler
(
OperationKind
.
EventReferenceExpression
,
Type
:
System
.
EventHandler
)
(
Syntax
:
'TestEvent')
Instance
Receiver
:
IInstanceReferenceExpression
(
OperationKind
.
InstanceReferenceExpression
,
Type
:
TestClass
,
IsImplicit
)
(
Syntax
:
'TestEvent')
Arguments
(
2
):
...
...
@@ -309,10 +309,33 @@ IRaiseEventStatement (OperationKind.RaiseEventStatement) (Syntax: 'RaiseEvent .
Dim
expectedDiagnostics
=
String
.
Empty
VerifyOperationTreeAndDiagnosticsForTest
(
Of
RaiseEventStatementSyntax
)(
source
,
expectedOperationTree
,
expectedDiagnostics
)
End
Sub
<
CompilerTrait
(
CompilerFeature
.
IOperation
)
>
<
Fact
>
Public
Sub
EventAccessFromRaiseEventShouldReturnEventReference
()
Dim
source
=
<
!
[
CDATA
[
Imports
System
Class
TestClass
Event
TestEvent
As
Action
Sub
M
()
RaiseEvent
TestEvent
()
'BIND:"TestEvent"
End
Sub
End
Class
]]
>
.
Value
Dim
expectedOperationTree
=
<
!
[
CDATA
[
IEventReferenceExpression
:
Event
TestClass
.
TestEvent
As
System
.
Action
(
OperationKind
.
EventReferenceExpression
,
Type
:
System
.
Action
)
(
Syntax
:
'TestEvent')
Instance
Receiver
:
IInstanceReferenceExpression
(
OperationKind
.
InstanceReferenceExpression
,
Type
:
TestClass
,
IsImplicit
)
(
Syntax
:
'TestEvent')
]]
>
.
Value
Dim
expectedDiagnostics
=
String
.
Empty
VerifyOperationTreeAndDiagnosticsForTest
(
Of
IdentifierNameSyntax
)(
source
,
expectedOperationTree
,
expectedDiagnostics
)
End
Sub
<
CompilerTrait
(
CompilerFeature
.
IOperation
)
>
<
Fact
>
Public
Sub
EventAccessFromRaiseCustomEventShould
NotReturnOperation
()
Public
Sub
EventAccessFromRaiseCustomEventShould
ReturnEventReference
()
Dim
source
=
<
!
[
CDATA
[
Imports
System
...
...
@@ -332,9 +355,14 @@ Class TestClass
RaiseEvent
TestEvent
()
'BIND:"TestEvent"
End
Sub
End
Class
]]
>
.
Value
Dim
expectedOperationTree
=
<
!
[
CDATA
[
IEventReferenceExpression
:
Event
TestClass
.
TestEvent
As
System
.
Action
(
OperationKind
.
EventReferenceExpression
,
Type
:
System
.
Action
)
(
Syntax
:
'TestEvent')
Instance
Receiver
:
IInstanceReferenceExpression
(
OperationKind
.
InstanceReferenceExpression
,
Type
:
TestClass
,
IsImplicit
)
(
Syntax
:
'TestEvent')
]]
>
.
Value
Dim
expectedDiagnostics
=
String
.
Empty
Verify
NoOperationTreeForTest
(
Of
IdentifierNameSyntax
)(
source
)
Verify
OperationTreeAndDiagnosticsForTest
(
Of
IdentifierNameSyntax
)(
source
,
expectedOperationTree
,
expectedDiagnostics
)
End
Sub
End
Class
End
Namespace
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录