Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Correct UDT accessibility categorization
Add test to check for each of the 3 access options.
  • Loading branch information
IvenBach committed Dec 1, 2020
1 parent 7d5b052 commit ee7787e
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 2 deletions.
Expand Up @@ -745,7 +745,7 @@ private void AddUdtDeclaration(VBAParser.UdtDeclarationContext context)
{
var identifier = Identifier.GetName(context.untypedIdentifier());
var identifierSelection = Identifier.GetNameSelection(context.untypedIdentifier());
var accessibility = context.visibility()?.PRIVATE() != null ? Accessibility.Private : Accessibility.Public;
var accessibility = GetAccessibility(context.visibility());
var declaration = CreateDeclaration(
identifier,
null,
Expand All @@ -758,6 +758,21 @@ private void AddUdtDeclaration(VBAParser.UdtDeclarationContext context)
null);
AddDeclaration(declaration);
_parentDeclaration = declaration; // treat members as child declarations, but keep them scoped to module

Accessibility GetAccessibility(VBAParser.VisibilityContext visibilityContext)
{
if (visibilityContext == null)
{
return Accessibility.Implicit;
}

if (visibilityContext.PUBLIC() != null)
{
return Accessibility.Public;
}

return Accessibility.Private;
}
}

public override void EnterUdtMember(VBAParser.UdtMemberContext context)
Expand Down
Expand Up @@ -18,7 +18,6 @@ public class ImplicitPublicMemberInspectionTests : InspectionTestsBase
[TestCase("Enum Foo\r\n Member\r\nEnd Enum", 1)]
[TestCase("Enum Foo\r\n Member\r\nEnd Enum\r\n\r\nEnum Bar\r\n Member\r\nEnd Enum", 2)]
[TestCase("Private Enum Foo\r\n Member\r\nEnd Enum\r\n\r\nEnum Bar\r\n Member\r\nEnd Enum", 1)]
[TestCase("Type Foo\r\n Name As String\r\nEnd Type", 1)]
[Category("Inspections")]
public void ImplicitPublicMember_Various(string inputCode, int expectedCount)
{
Expand All @@ -38,5 +37,35 @@ protected override IInspection InspectionUnderTest(RubberduckParserState state)
{
return new ImplicitPublicMemberInspection(state);
}

[TestCase(null, 1)]
[TestCase(true, 0)]
[TestCase(false, 0)]
[Category(nameof(ImplicitPublicMemberInspectionTests))]
[Category("Inspections")]
public void User_defined_type_correctly_flagged_as_implicitly_public(bool? modifier, int expectedCount)
{
string accessModifier = null;
if (!modifier.HasValue)
{
accessModifier = string.Empty;
}
else
{
accessModifier = modifier.Value ? "Public " : "Private ";
}

var code = $@"Option Explicit
{accessModifier}Type FooType
Name As String
End Type
";

var inspectionResults = InspectionResultsForStandardModule(code);

var actual = inspectionResults.Count();

Assert.AreEqual(expectedCount, actual);
}
}
}

0 comments on commit ee7787e

Please sign in to comment.