private bool IsPublicOrProtectedMemberAccessible(TypeWrapper caller, TypeWrapper instance) { if (IsPublic || (IsProtected && caller.IsSubTypeOf(DeclaringType) && (IsStatic || instance.IsSubTypeOf(caller)))) { return DeclaringType.IsPublic || InPracticeInternalsVisibleTo(caller); } return false; }