Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
0f658a49
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,发现更多精彩内容 >>
提交
0f658a49
编写于
6月 30, 2017
作者:
T
Ty Overby
提交者:
GitHub
6月 30, 2017
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #20464 from TyOverby/20335-protected-event-handler
fix protected event handler
上级
d09d70f4
10952b35
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
179 addition
and
2 deletion
+179
-2
src/Compilers/VisualBasic/Portable/Binding/Binder_Statements.vb
...mpilers/VisualBasic/Portable/Binding/Binder_Statements.vb
+2
-2
src/Compilers/VisualBasic/Test/Symbol/SymbolsTests/Source/EventTests.vb
...VisualBasic/Test/Symbol/SymbolsTests/Source/EventTests.vb
+177
-0
未找到文件。
src/Compilers/VisualBasic/Portable/Binding/Binder_Statements.vb
浏览文件 @
0f658a49
...
...
@@ -2279,8 +2279,8 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
hasErrors
=
True
Else
Dim
useSiteDiagnostics
As
HashSet
(
Of
DiagnosticInfo
)
=
Nothing
If
Not
Me
.
IsAccessible
(
method
,
useSiteDiagnostics
,
If
(
actualEventAccess
.
ReceiverOpt
IsNot
Nothing
,
actualEventAccess
.
ReceiverOpt
.
Type
,
eventSymbol
.
ContainingType
)
)
Then
Dim
accessThroughType
=
GetAccessThroughType
(
actualEventAccess
.
ReceiverOpt
)
If
Not
Me
.
IsAccessible
(
method
,
useSiteDiagnostics
,
accessThroughType
)
Then
Debug
.
Assert
(
eventSymbol
.
DeclaringCompilation
IsNot
Me
.
Compilation
)
ReportDiagnostic
(
diagnostics
,
node
.
EventExpression
,
GetInaccessibleErrorInfo
(
method
))
End
If
...
...
src/Compilers/VisualBasic/Test/Symbol/SymbolsTests/Source/EventTests.vb
浏览文件 @
0f658a49
...
...
@@ -24,6 +24,183 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.UnitTests
Public
Class
EventSymbolTests
Inherits
BasicTestBase
<
WorkItem
(
20335
,
"https://github.com/dotnet/roslyn/issues/20335"
)
>
<
Fact
()
>
Public
Sub
IlEventVisibility
()
Dim
ilSource
=
<
!
[
CDATA
[
.
class
public
auto
ansi
beforefieldinit
A
{
.
method
assembly
hidebysig
newslot
specialname
virtual
instance
void
add_E
(
class
[
mscorlib
]
System
.
Action
`
1
<
int32
>
'value') cil managed
{
ret
}
.
method
public
hidebysig
newslot
specialname
virtual
instance
void
remove_E
(
class
[
mscorlib
]
System
.
Action
`
1
<
int32
>
'value') cil managed
{
ret
}
.
method
public
hidebysig
specialname
rtspecialname
instance
void
.
ctor
()
cil
managed
{
ldarg
.
0
call
instance
void
[
mscorlib
]
System
.
Object
::.
ctor
()
ret
}
.
event
class
[
mscorlib
]
System
.
Action
`
1
<
int32
>
E
{
.
addon
instance
void
A
::
add_E
(
class
[
mscorlib
]
System
.
Action
`
1
<
int32
>
)
.
removeon
instance
void
A
::
remove_E
(
class
[
mscorlib
]
System
.
Action
`
1
<
int32
>
)
}
}
]]
>
Dim
vbSource
=
<
compilation
name
=
"F"
>
<
file
name
=
"F.vb"
>
Class
B
Inherits
A
Sub
M
()
AddHandler
E
,
Nothing
RemoveHandler
E
,
Nothing
AddHandler
MyBase
.
E
,
Nothing
RemoveHandler
MyBase
.
E
,
Nothing
End
Sub
End
Class
</
file
>
</
compilation
>
Dim
comp1
=
CreateCompilationWithCustomILSource
(
vbSource
,
ilSource
.
Value
,
TestOptions
.
DebugDll
)
CompilationUtils
.
AssertTheseCompileDiagnostics
(
comp1
,
<
Expected
>
BC30390
:
'A.Friend Overridable Overloads AddHandler Event E(value As Action(Of Integer))' is not accessible in this context because it is 'Friend'.
AddHandler
E
,
Nothing
~
BC30390
:
'A.Friend Overridable Overloads AddHandler Event E(value As Action(Of Integer))' is not accessible in this context because it is 'Friend'.
AddHandler
MyBase
.
E
,
Nothing
~~~~~~~~
</
Expected
>
)
End
Sub
<
WorkItem
(
20335
,
"https://github.com/dotnet/roslyn/issues/20335"
)
>
<
Fact
()
>
Public
Sub
CustomEventVisibility
()
Dim
source
=
<
compilation
name
=
"F"
>
<
file
name
=
"F.vb"
>
Imports
System
Public
Class
C
Protected
Custom
Event
Click
As
EventHandler
AddHandler
(
ByVal
value
As
EventHandler
)
Console
.
Write
(
"add"
)
End
AddHandler
RemoveHandler
(
ByVal
value
As
EventHandler
)
Console
.
Write
(
"remove"
)
End
RemoveHandler
RaiseEvent
(
ByVal
sender
As
Object
,
ByVal
e
As
EventArgs
)
Console
.
Write
(
"raise"
)
End
RaiseEvent
End
Event
End
Class
Public
Class
D
Inherits
C
Public
Sub
F
()
AddHandler
Click
,
Nothing
RemoveHandler
Click
,
Nothing
AddHandler
MyBase
.
Click
,
Nothing
RemoveHandler
MyBase
.
Click
,
Nothing
End
Sub
End
Class
</
file
>
</
compilation
>
Dim
comp
=
CompilationUtils
.
CreateCompilationWithMscorlibAndVBRuntime
(
source
,
TestOptions
.
ReleaseDll
.
WithOptionStrict
(
OptionStrict
.
On
))
CompilationUtils
.
AssertTheseCompileDiagnostics
(
comp
,
<
Expected
></
Expected
>
)
End
Sub
<
WorkItem
(
20335
,
"https://github.com/dotnet/roslyn/issues/20335"
)
>
<
Fact
()
>
Public
Sub
ProtectedHandlerDefinedInCSharp
()
Dim
csharpCompilation
=
CreateCSharpCompilation
(
"
public class C {
protected delegate void Handle();
protected event Handle MyEvent;
}
public class D: C {
public D() {
MyEvent += () => {};
}
}
"
)
Dim
source
=
Parse
(
"
Public Class E
Inherits C
Public Sub S()
AddHandler MyBase.MyEvent, Nothing
End Sub
End Class
"
)
Dim
vbCompilation
=
CompilationUtils
.
CreateCompilationWithMscorlib45AndVBRuntime
(
sourceTrees
:
=
{
source
},
references
:
=
{
csharpCompilation
.
EmitToImageReference
()},
options
:
=
TestOptions
.
DebugDll
.
WithOptionStrict
(
OptionStrict
.
On
))
CompilationUtils
.
AssertTheseCompileDiagnostics
(
vbCompilation
,
<
Expected
></
Expected
>
)
End
Sub
<
WorkItem
(
20335
,
"https://github.com/dotnet/roslyn/issues/20335"
)
>
<
Fact
()
>
Public
Sub
EventVisibility
()
Dim
source
=
<
compilation
name
=
"F"
>
<
file
name
=
"F.vb"
>
Public
Class
Form1
Protected
Event
EventA
As
System
.
Action
Private
Event
EventB
As
System
.
Action
Friend
Event
EventC
As
System
.
Action
End
Class
Public
Class
Form2
Inherits
Form1
Public
Sub
New
()
AddHandler
MyBase
.
EventA
,
Nothing
RemoveHandler
MyBase
.
EventA
,
Nothing
AddHandler
EventA
,
Nothing
RemoveHandler
EventA
,
Nothing
AddHandler
MyBase
.
EventB
,
Nothing
RemoveHandler
MyBase
.
EventB
,
Nothing
AddHandler
EventB
,
Nothing
RemoveHandler
EventB
,
Nothing
AddHandler
MyBase
.
EventC
,
Nothing
RemoveHandler
MyBase
.
EventC
,
Nothing
AddHandler
EventC
,
Nothing
RemoveHandler
EventC
,
Nothing
End
Sub
End
Class
</
file
>
</
compilation
>
Dim
comp
=
CompilationUtils
.
CreateCompilationWithMscorlibAndVBRuntime
(
source
,
TestOptions
.
ReleaseDll
.
WithOptionStrict
(
OptionStrict
.
On
))
CompilationUtils
.
AssertTheseCompileDiagnostics
(
comp
,
<
Expected
>
BC30389
:
'Form1.EventB' is not accessible in this context because it is 'Private'.
AddHandler
MyBase
.
EventB
,
Nothing
~~~~~~~~~~~~~
BC30389
:
'Form1.EventB' is not accessible in this context because it is 'Private'.
RemoveHandler
MyBase
.
EventB
,
Nothing
~~~~~~~~~~~~~
BC30389
:
'Form1.EventB' is not accessible in this context because it is 'Private'.
AddHandler
EventB
,
Nothing
~~~~~~
BC30389
:
'Form1.EventB' is not accessible in this context because it is 'Private'.
RemoveHandler
EventB
,
Nothing
~~~~~~
</
Expected
>
)
End
Sub
<
WorkItem
(
542806
,
"http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542806"
)
>
<
Fact
()
>
Public
Sub
EmptyCustomEvent
()
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录