提交 4f7d0f1d 编写于 作者: C CyrusNajmabadi

Add VB tests.

上级 f7e1805c
' Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
Imports Microsoft.CodeAnalysis.CodeFixes
Imports Microsoft.CodeAnalysis.Diagnostics
Imports Microsoft.CodeAnalysis.VisualBasic.AddAccessibilityModifiers
Imports Microsoft.CodeAnalysis.Editor.VisualBasic.UnitTests.Diagnostics
Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.UnitTests.AddAccessibilityModifiers
Public Class AddAccessibilityModifiersTests
Inherits AbstractVisualBasicDiagnosticProviderBasedUserDiagnosticTest
Friend Overrides Function CreateDiagnosticProviderAndFixer(workspace As Workspace) As (DiagnosticAnalyzer, CodeFixProvider)
Return (New VisualBasicAddAccessibilityModifiersDiagnosticAnalyzer(),
New VisualBasicAddAccessibilityModifiersCodeFixProvider())
End Function
<Fact, Trait(Traits.Feature, Traits.Features.CodeActionsAddAccessibilityModifiers)>
Public Async Function TestAllConstructs() As Task
Await TestInRegularAndScriptAsync(
"
namespace N
namespace Outer.Inner
class {|FixAllInDocument:C|}
class NestedClass
end class
structure NestedStruct
end structure
dim f1 as integer
dim f2, f3 as integer
dim f4, f5 as integer, f6, f7 as boolean
public f4 as integer
event e1 as Action
public event e2 as Action
custom event e4 as Action
end event
shared sub new()
end sub
sub new()
end sub
public sub new(i as integer)
end sub
sub M1()
end sub
public sub M2()
end sub
function M3() as integer
end function
function M4() as integer
public function M5() as integer
end function
property P1 as integer
property P2 as integer
get
end get
end property
public property P3 as integer
shared operator &(c1 as C, c2 as C) as integer
end operator
end class
interface I
event e6 as Action
sub M3()
function M4() as integer
property P3 as integer
end interface
delegate sub D1()
delegate function D2() as integer
enum E
EMember
end enum
structure S
dim f as integer
sub M()
end sub()
shared operator &(c1 as S, c2 as S) as integer
end operator
end structure
module M
dim f as integer
sub M()
end sub()
end module
end namespace
end namespace",
"
namespace N
namespace Outer.Inner
Friend class C
Public class NestedClass
end class
Public structure NestedStruct
end structure
Private f1 as integer
Private f2, f3 as integer
Private f4, f5 as integer, f6, f7 as boolean
public f4 as integer
Public event e1 as Action
public event e2 as Action
Public custom event e4 as Action
end event
shared sub new()
end sub
Public sub new()
end sub
public sub new(i as integer)
end sub
Public sub M1()
end sub
public sub M2()
end sub
Public function M3() as integer
end function
Public function M4() as integer
public function M5() as integer
end function
Public property P1 as integer
Public property P2 as integer
get
end get
end property
public property P3 as integer
Public shared operator &(c1 as C, c2 as C) as integer
end operator
end class
Friend interface I
event e6 as Action
sub M3()
function M4() as integer
property P3 as integer
end interface
Friend delegate sub D1()
Friend delegate function D2() as integer
Friend enum E
EMember
end enum
Friend structure S
Public f as integer
Public sub M()
end sub()
Public shared operator &(c1 as S, c2 as S) as integer
end operator
end structure
Friend module M
Private f as integer
Public sub M()
end sub()
end module
end namespace
end namespace")
End Function
End Class
End Namespace
...@@ -21,60 +21,55 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.AddAccessibilityModifiers ...@@ -21,60 +21,55 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.AddAccessibilityModifiers
Private Sub ProcessMembers(context As SyntaxTreeAnalysisContext, generator As SyntaxGenerator, Private Sub ProcessMembers(context As SyntaxTreeAnalysisContext, generator As SyntaxGenerator,
[option] As CodeStyleOption(Of AccessibilityModifiersRequired), members As SyntaxList(Of StatementSyntax)) [option] As CodeStyleOption(Of AccessibilityModifiersRequired), members As SyntaxList(Of StatementSyntax))
For Each member In members For Each member In members
ProcessMember(context, generator, [option], member) ProcessMember(context, generator, [option], member)
Next Next
End Sub End Sub
Private Sub ProcessMember(context As SyntaxTreeAnalysisContext, generator As SyntaxGenerator, Private Sub ProcessMember(context As SyntaxTreeAnalysisContext, generator As SyntaxGenerator,
[option] As CodeStyleOption(Of AccessibilityModifiersRequired), member As StatementSyntax) [option] As CodeStyleOption(Of AccessibilityModifiersRequired), member As StatementSyntax)
If member.Kind() = SyntaxKind.NamespaceBlock Then If member.Kind() = SyntaxKind.NamespaceBlock Then
Dim namespaceBlock = DirectCast(member, NamespaceBlockSyntax) Dim namespaceBlock = DirectCast(member, NamespaceBlockSyntax)
ProcessMembers(context, generator, [option], namespaceBlock.Members) ProcessMembers(context, generator, [option], namespaceBlock.Members)
End If End If
' If we have a class or struct or module, recurse inwards. ' If we have a class or struct or module, recurse inwards.
If member.IsKind(SyntaxKind.ClassBlock) OrElse If member.IsKind(SyntaxKind.ClassBlock) OrElse
member.IsKind(SyntaxKind.StructureBlock) OrElse member.IsKind(SyntaxKind.StructureBlock) OrElse
member.IsKind(SyntaxKind.ModuleBlock) Then member.IsKind(SyntaxKind.ModuleBlock) Then
Dim typeBlock = DirectCast(member, TypeBlockSyntax) Dim typeBlock = DirectCast(member, TypeBlockSyntax)
ProcessMembers(context, generator, [option], typeBlock.Members) ProcessMembers(context, generator, [option], typeBlock.Members)
End If End If
Dim declarationStatement = TryCast(member, DeclarationStatementSyntax)
If declarationStatement IsNot Nothing Then
Return
End If
' Have to have a name to report the issue on. ' Have to have a name to report the issue on.
Dim name = declarationStatement.GetNameToken() Dim name = member.GetNameToken()
If name.Kind() = SyntaxKind.None Then If name.Kind() = SyntaxKind.None Then
Return Return
End If End If
' If they already have accessibility, no need to report anything. ' If they already have accessibility, no need to report anything.
Dim Accessibility = generator.GetAccessibility(member) Dim Accessibility = generator.GetAccessibility(member)
If Accessibility <> Accessibility.NotApplicable Then If Accessibility <> Accessibility.NotApplicable Then
Return Return
End If End If
' Certain members never have accessibility. Don't bother reporting on them. ' Certain members never have accessibility. Don't bother reporting on them.
If member.IsKind(SyntaxKind.ConstructorBlock) AndAlso If member.IsKind(SyntaxKind.ConstructorBlock) AndAlso
member.GetModifiers().Any(SyntaxKind.SharedKeyword) Then member.GetModifiers().Any(SyntaxKind.SharedKeyword) Then
Return Return
End If End If
' Missing accessibility. Report issue to user. ' Missing accessibility. Report issue to user.
Dim additionalLocations = ImmutableArray.Create(member.GetLocation()) Dim additionalLocations = ImmutableArray.Create(member.GetLocation())
context.ReportDiagnostic(Diagnostic.Create( context.ReportDiagnostic(Diagnostic.Create(
CreateDescriptorWithSeverity([option].Notification.Value), CreateDescriptorWithSeverity([option].Notification.Value),
name.GetLocation(), name.GetLocation(),
additionalLocations:=additionalLocations)) additionalLocations:=additionalLocations))
End Sub End Sub
End Class End Class
End Namespace End Namespace
...@@ -303,7 +303,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Extensions ...@@ -303,7 +303,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Extensions
End Function End Function
<Extension()> <Extension()>
Public Function GetNameToken(member As DeclarationStatementSyntax) As SyntaxToken Public Function GetNameToken(member As StatementSyntax) As SyntaxToken
If member IsNot Nothing Then If member IsNot Nothing Then
Select Case member.Kind Select Case member.Kind
Case SyntaxKind.ClassBlock, Case SyntaxKind.ClassBlock,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册