Exemple #1
0
        public static bool IsMemberAccessible(Declaration callingProject, Declaration callingModule, Declaration callingParent, Declaration calleeMember)
        {
            bool enclosingModule = callingModule.Equals(calleeMember.ParentScopeDeclaration);

            if (enclosingModule)
            {
                return(true);
            }
            var callerIsSubroutineOrProperty = callingParent.DeclarationType.HasFlag(DeclarationType.Property) ||
                                               callingParent.DeclarationType.HasFlag(DeclarationType.Function) ||
                                               callingParent.DeclarationType.HasFlag(DeclarationType.Procedure);
            var calleeHasSameParent = callingParent.Equals(callingParent.ParentScopeDeclaration);

            if (callerIsSubroutineOrProperty && calleeHasSameParent)
            {
                return(calleeHasSameParent);
            }
            var memberModule = Declaration.GetMemberModule(calleeMember);

            if (IsModuleAccessible(callingProject, callingModule, memberModule) && calleeMember.ParentScopeDeclaration.DeclarationType.HasFlag(DeclarationType.Module))
            {
                if (calleeMember.DeclarationType.HasFlag(DeclarationType.EnumerationMember) || calleeMember.DeclarationType.HasFlag(DeclarationType.UserDefinedTypeMember))
                {
                    return(IsValidAccessibility(calleeMember.ParentDeclaration));
                }
                else
                {
                    return(IsValidAccessibility(calleeMember));
                }
            }
            return(false);
        }