Skip to content

Commit 304c3fa

Browse files
committed
Tests for AccessibilityCheck
1 parent ab1d8bf commit 304c3fa

File tree

3 files changed

+684
-26
lines changed

3 files changed

+684
-26
lines changed

Rubberduck.Parsing/Symbols/AccessibilityCheck.cs

Lines changed: 34 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,11 @@ public static class AccessibilityCheck
44
{
55
public static bool IsAccessible(Declaration callingProject, Declaration callingModule, Declaration callingParent, Declaration callee)
66
{
7-
if (callee.DeclarationType.HasFlag(DeclarationType.Project))
7+
if (callee == null)
8+
{
9+
return false;
10+
}
11+
else if (callee.DeclarationType.HasFlag(DeclarationType.Project))
812
{
913
return true;
1014
}
@@ -20,49 +24,53 @@ public static bool IsAccessible(Declaration callingProject, Declaration callingM
2024

2125
public static bool IsModuleAccessible(Declaration callingProject, Declaration callingModule, Declaration calleeModule)
2226
{
23-
if (IsEnclosingModuleOfModule(callingModule, calleeModule))
27+
if (calleeModule == null)
2428
{
25-
return true;
26-
}
27-
else if (IsInTheSameProject(callingModule, calleeModule))
29+
return false;
30+
}
31+
else if (IsTheSameModule(callingModule, calleeModule) || IsEnclosingProject(callingProject, calleeModule))
2832
{
29-
return IsValidAccessibility(calleeModule);
33+
return true;
3034
}
3135
else if (calleeModule.DeclarationType.HasFlag(DeclarationType.ProceduralModule))
3236
{
3337
bool isPrivate = ((ProceduralModuleDeclaration)calleeModule).IsPrivateModule;
34-
return !isPrivate && IsValidAccessibility(calleeModule);
38+
return !isPrivate;
3539
}
3640
else
3741
{
38-
bool isExposed = calleeModule != null && ((ClassModuleDeclaration)calleeModule).IsExposed;
39-
return isExposed && IsValidAccessibility(calleeModule);
42+
bool isExposed = ((ClassModuleDeclaration)calleeModule).IsExposed;
43+
return isExposed;
4044
}
4145
}
4246

43-
private static bool IsEnclosingModuleOfModule(Declaration callingModule, Declaration calleeModule)
47+
private static bool IsTheSameModule(Declaration callingModule, Declaration calleeModule)
4448
{
45-
return callingModule.Equals(calleeModule);
49+
return calleeModule.Equals(callingModule);
4650
}
4751

48-
private static bool IsInTheSameProject(Declaration callingModule, Declaration calleeModule)
52+
private static bool IsEnclosingProject(Declaration callingProject, Declaration calleeModule)
4953
{
50-
return callingModule.ParentScopeDeclaration.Equals(calleeModule.ParentScopeDeclaration);
54+
return calleeModule.ParentScopeDeclaration.Equals(callingProject);
5155
}
5256

57+
private static bool IsValidAccessibility(Declaration moduleOrMember)
58+
{
59+
return moduleOrMember != null
60+
&& (moduleOrMember.Accessibility == Accessibility.Global
61+
|| moduleOrMember.Accessibility == Accessibility.Public
62+
|| moduleOrMember.Accessibility == Accessibility.Friend
63+
|| moduleOrMember.Accessibility == Accessibility.Implicit);
64+
}
5365

54-
public static bool IsValidAccessibility(Declaration moduleOrMember)
55-
{
56-
return moduleOrMember != null
57-
&& (moduleOrMember.Accessibility == Accessibility.Global
58-
|| moduleOrMember.Accessibility == Accessibility.Public
59-
|| moduleOrMember.Accessibility == Accessibility.Friend
60-
|| moduleOrMember.Accessibility == Accessibility.Implicit);
61-
}
6266

6367
public static bool IsMemberAccessible(Declaration callingProject, Declaration callingModule, Declaration callingParent, Declaration calleeMember)
6468
{
65-
if (IsEnclosingModuleOfInstanceMember(callingModule, calleeMember) || (CallerIsSubroutineOrProperty(callingParent) && CaleeHasSameParentAsCaller(callingParent, calleeMember)))
69+
if (calleeMember == null)
70+
{
71+
return false;
72+
}
73+
else if (IsEnclosingModuleOfInstanceMember(callingModule, calleeMember) || (IsSubroutineOrProperty(callingParent) && CaleeHasSameParentAsCaller(callingParent, calleeMember)))
6674
{
6775
return true;
6876
}
@@ -97,11 +105,11 @@ private static bool IsEnclosingModuleOfInstanceMember(Declaration callingModule,
97105
return false;
98106
}
99107

100-
private static bool CallerIsSubroutineOrProperty(Declaration callingParent)
108+
private static bool IsSubroutineOrProperty(Declaration decl)
101109
{
102-
return callingParent.DeclarationType.HasFlag(DeclarationType.Property)
103-
|| callingParent.DeclarationType.HasFlag(DeclarationType.Function)
104-
|| callingParent.DeclarationType.HasFlag(DeclarationType.Procedure);
110+
return decl.DeclarationType.HasFlag(DeclarationType.Property)
111+
|| decl.DeclarationType.HasFlag(DeclarationType.Function)
112+
|| decl.DeclarationType.HasFlag(DeclarationType.Procedure);
105113
}
106114

107115
private static bool CaleeHasSameParentAsCaller(Declaration callingParent, Declaration calleeMember)

Rubberduck.Parsing/VBA/Attributes.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,5 +44,10 @@ public void AddGlobalClassAttribute()
4444
{
4545
Add("VB_GlobalNamespace", new[] {"True"});
4646
}
47+
48+
public void AddExposedClassAttribute()
49+
{
50+
Add("VB_Exposed", new[] { "True" });
51+
}
4752
}
4853
}

0 commit comments

Comments
 (0)