Skip to content

Commit 13d9846

Browse files
committed
Fix to IsMemberAccessible (calleeParentSameAsCallerParent has been broken) + refactoring
1 parent 5fe4afc commit 13d9846

File tree

1 file changed

+33
-27
lines changed

1 file changed

+33
-27
lines changed

Rubberduck.Parsing/Symbols/AccessibilityCheck.cs

Lines changed: 33 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,18 @@ public static bool IsAccessible(Declaration callingProject, Declaration callingM
88
{
99
return true;
1010
}
11-
if (callee.DeclarationType.HasFlag(DeclarationType.Module))
11+
else if (callee.DeclarationType.HasFlag(DeclarationType.Module))
1212
{
1313
return IsModuleAccessible(callingProject, callingModule, callee);
1414
}
15-
return IsMemberAccessible(callingProject, callingModule, callingParent, callee);
15+
else
16+
{
17+
return IsMemberAccessible(callingProject, callingModule, callingParent, callee);
18+
}
1619
}
1720

1821
public static bool IsModuleAccessible(Declaration callingProject, Declaration callingModule, Declaration calleeModule)
19-
{
20-
bool validAccessibility = IsValidAccessibility(calleeModule);
22+
{
2123
bool enclosingModule = callingModule.Equals(calleeModule);
2224
if (enclosingModule)
2325
{
@@ -26,17 +28,17 @@ public static bool IsModuleAccessible(Declaration callingProject, Declaration ca
2628
bool sameProject = callingModule.ParentScopeDeclaration.Equals(calleeModule.ParentScopeDeclaration);
2729
if (sameProject)
2830
{
29-
return validAccessibility;
31+
return IsValidAccessibility(calleeModule);
3032
}
31-
if (calleeModule.DeclarationType.HasFlag(DeclarationType.ProceduralModule))
33+
else if (calleeModule.DeclarationType.HasFlag(DeclarationType.ProceduralModule))
3234
{
3335
bool isPrivate = ((ProceduralModuleDeclaration)calleeModule).IsPrivateModule;
34-
return validAccessibility && !isPrivate;
36+
return !isPrivate && IsValidAccessibility(calleeModule);
3537
}
3638
else
3739
{
3840
bool isExposed = calleeModule != null && ((ClassModuleDeclaration)calleeModule).IsExposed;
39-
return validAccessibility && isExposed;
41+
return isExposed && IsValidAccessibility(calleeModule);
4042
}
4143
}
4244

@@ -51,18 +53,10 @@ public static bool IsValidAccessibility(Declaration moduleOrMember)
5153

5254
public static bool IsMemberAccessible(Declaration callingProject, Declaration callingModule, Declaration callingParent, Declaration calleeMember)
5355
{
54-
if (IsEnclosingModule(callingModule, calleeMember))
56+
if (IsEnclosingModule(callingModule, calleeMember) || (CallerIsSubroutineOrProperty(callingParent) && CaleeHasSameParentAsCaller(callingParent, calleeMember)))
5557
{
5658
return true;
5759
}
58-
var callerIsSubroutineOrProperty = callingParent.DeclarationType.HasFlag(DeclarationType.Property)
59-
|| callingParent.DeclarationType.HasFlag(DeclarationType.Function)
60-
|| callingParent.DeclarationType.HasFlag(DeclarationType.Procedure);
61-
var calleeHasSameParent = callingParent.Equals(callingParent.ParentScopeDeclaration);
62-
if (callerIsSubroutineOrProperty && calleeHasSameParent)
63-
{
64-
return calleeHasSameParent;
65-
}
6660
var memberModule = Declaration.GetModuleParent(calleeMember);
6761
if (IsModuleAccessible(callingProject, callingModule, memberModule))
6862
{
@@ -78,20 +72,32 @@ public static bool IsMemberAccessible(Declaration callingProject, Declaration ca
7872
return false;
7973
}
8074

81-
private static bool IsEnclosingModule(Declaration callingModule, Declaration calleeMember)
82-
{
83-
if (callingModule.Equals(calleeMember.ParentScopeDeclaration))
84-
{
85-
return true;
86-
}
87-
foreach (var supertype in ClassModuleDeclaration.GetSupertypes(callingModule))
75+
private static bool IsEnclosingModule(Declaration callingModule, Declaration calleeMember)
8876
{
89-
if (IsEnclosingModule(supertype, calleeMember))
77+
if (callingModule.Equals(calleeMember.ParentScopeDeclaration))
9078
{
9179
return true;
9280
}
81+
foreach (var supertype in ClassModuleDeclaration.GetSupertypes(callingModule))
82+
{
83+
if (IsEnclosingModule(supertype, calleeMember))
84+
{
85+
return true;
86+
}
87+
}
88+
return false;
89+
}
90+
91+
private static bool CallerIsSubroutineOrProperty(Declaration callingParent)
92+
{
93+
return callingParent.DeclarationType.HasFlag(DeclarationType.Property)
94+
|| callingParent.DeclarationType.HasFlag(DeclarationType.Function)
95+
|| callingParent.DeclarationType.HasFlag(DeclarationType.Procedure);
96+
}
97+
98+
private static bool CaleeHasSameParentAsCaller(Declaration callingParent, Declaration calleeMember)
99+
{
100+
return callingParent.Equals(calleeMember.ParentScopeDeclaration);
93101
}
94-
return false;
95-
}
96102
}
97103
}

0 commit comments

Comments
 (0)