@@ -8,16 +8,18 @@ public static bool IsAccessible(Declaration callingProject, Declaration callingM
8
8
{
9
9
return true ;
10
10
}
11
- if ( callee . DeclarationType . HasFlag ( DeclarationType . Module ) )
11
+ else if ( callee . DeclarationType . HasFlag ( DeclarationType . Module ) )
12
12
{
13
13
return IsModuleAccessible ( callingProject , callingModule , callee ) ;
14
14
}
15
- return IsMemberAccessible ( callingProject , callingModule , callingParent , callee ) ;
15
+ else
16
+ {
17
+ return IsMemberAccessible ( callingProject , callingModule , callingParent , callee ) ;
18
+ }
16
19
}
17
20
18
21
public static bool IsModuleAccessible ( Declaration callingProject , Declaration callingModule , Declaration calleeModule )
19
- {
20
- bool validAccessibility = IsValidAccessibility ( calleeModule ) ;
22
+ {
21
23
bool enclosingModule = callingModule . Equals ( calleeModule ) ;
22
24
if ( enclosingModule )
23
25
{
@@ -26,17 +28,17 @@ public static bool IsModuleAccessible(Declaration callingProject, Declaration ca
26
28
bool sameProject = callingModule . ParentScopeDeclaration . Equals ( calleeModule . ParentScopeDeclaration ) ;
27
29
if ( sameProject )
28
30
{
29
- return validAccessibility ;
31
+ return IsValidAccessibility ( calleeModule ) ;
30
32
}
31
- if ( calleeModule . DeclarationType . HasFlag ( DeclarationType . ProceduralModule ) )
33
+ else if ( calleeModule . DeclarationType . HasFlag ( DeclarationType . ProceduralModule ) )
32
34
{
33
35
bool isPrivate = ( ( ProceduralModuleDeclaration ) calleeModule ) . IsPrivateModule ;
34
- return validAccessibility && ! isPrivate ;
36
+ return ! isPrivate && IsValidAccessibility ( calleeModule ) ;
35
37
}
36
38
else
37
39
{
38
40
bool isExposed = calleeModule != null && ( ( ClassModuleDeclaration ) calleeModule ) . IsExposed ;
39
- return validAccessibility && isExposed ;
41
+ return isExposed && IsValidAccessibility ( calleeModule ) ;
40
42
}
41
43
}
42
44
@@ -51,18 +53,10 @@ public static bool IsValidAccessibility(Declaration moduleOrMember)
51
53
52
54
public static bool IsMemberAccessible ( Declaration callingProject , Declaration callingModule , Declaration callingParent , Declaration calleeMember )
53
55
{
54
- if ( IsEnclosingModule ( callingModule , calleeMember ) )
56
+ if ( IsEnclosingModule ( callingModule , calleeMember ) || ( CallerIsSubroutineOrProperty ( callingParent ) && CaleeHasSameParentAsCaller ( callingParent , calleeMember ) ) )
55
57
{
56
58
return true ;
57
59
}
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
- }
66
60
var memberModule = Declaration . GetModuleParent ( calleeMember ) ;
67
61
if ( IsModuleAccessible ( callingProject , callingModule , memberModule ) )
68
62
{
@@ -78,20 +72,32 @@ public static bool IsMemberAccessible(Declaration callingProject, Declaration ca
78
72
return false ;
79
73
}
80
74
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 )
88
76
{
89
- if ( IsEnclosingModule ( supertype , calleeMember ) )
77
+ if ( callingModule . Equals ( calleeMember . ParentScopeDeclaration ) )
90
78
{
91
79
return true ;
92
80
}
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 ) ;
93
101
}
94
- return false ;
95
- }
96
102
}
97
103
}
0 commit comments