@@ -4,7 +4,11 @@ public static class AccessibilityCheck
4
4
{
5
5
public static bool IsAccessible ( Declaration callingProject , Declaration callingModule , Declaration callingParent , Declaration callee )
6
6
{
7
- if ( callee . DeclarationType . HasFlag ( DeclarationType . Project ) )
7
+ if ( callee == null )
8
+ {
9
+ return false ;
10
+ }
11
+ else if ( callee . DeclarationType . HasFlag ( DeclarationType . Project ) )
8
12
{
9
13
return true ;
10
14
}
@@ -20,49 +24,53 @@ public static bool IsAccessible(Declaration callingProject, Declaration callingM
20
24
21
25
public static bool IsModuleAccessible ( Declaration callingProject , Declaration callingModule , Declaration calleeModule )
22
26
{
23
- if ( IsEnclosingModuleOfModule ( callingModule , calleeModule ) )
27
+ if ( calleeModule == null )
24
28
{
25
- return true ;
26
- }
27
- else if ( IsInTheSameProject ( callingModule , calleeModule ) )
29
+ return false ;
30
+ }
31
+ else if ( IsTheSameModule ( callingModule , calleeModule ) || IsEnclosingProject ( callingProject , calleeModule ) )
28
32
{
29
- return IsValidAccessibility ( calleeModule ) ;
33
+ return true ;
30
34
}
31
35
else if ( calleeModule . DeclarationType . HasFlag ( DeclarationType . ProceduralModule ) )
32
36
{
33
37
bool isPrivate = ( ( ProceduralModuleDeclaration ) calleeModule ) . IsPrivateModule ;
34
- return ! isPrivate && IsValidAccessibility ( calleeModule ) ;
38
+ return ! isPrivate ;
35
39
}
36
40
else
37
41
{
38
- bool isExposed = calleeModule != null && ( ( ClassModuleDeclaration ) calleeModule ) . IsExposed ;
39
- return isExposed && IsValidAccessibility ( calleeModule ) ;
42
+ bool isExposed = ( ( ClassModuleDeclaration ) calleeModule ) . IsExposed ;
43
+ return isExposed ;
40
44
}
41
45
}
42
46
43
- private static bool IsEnclosingModuleOfModule ( Declaration callingModule , Declaration calleeModule )
47
+ private static bool IsTheSameModule ( Declaration callingModule , Declaration calleeModule )
44
48
{
45
- return callingModule . Equals ( calleeModule ) ;
49
+ return calleeModule . Equals ( callingModule ) ;
46
50
}
47
51
48
- private static bool IsInTheSameProject ( Declaration callingModule , Declaration calleeModule )
52
+ private static bool IsEnclosingProject ( Declaration callingProject , Declaration calleeModule )
49
53
{
50
- return callingModule . ParentScopeDeclaration . Equals ( calleeModule . ParentScopeDeclaration ) ;
54
+ return calleeModule . ParentScopeDeclaration . Equals ( callingProject ) ;
51
55
}
52
56
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
+ }
53
65
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
- }
62
66
63
67
public static bool IsMemberAccessible ( Declaration callingProject , Declaration callingModule , Declaration callingParent , Declaration calleeMember )
64
68
{
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 ) ) )
66
74
{
67
75
return true ;
68
76
}
@@ -97,11 +105,11 @@ private static bool IsEnclosingModuleOfInstanceMember(Declaration callingModule,
97
105
return false ;
98
106
}
99
107
100
- private static bool CallerIsSubroutineOrProperty ( Declaration callingParent )
108
+ private static bool IsSubroutineOrProperty ( Declaration decl )
101
109
{
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 ) ;
105
113
}
106
114
107
115
private static bool CaleeHasSameParentAsCaller ( Declaration callingParent , Declaration calleeMember )
0 commit comments