public static bool InternalsAreVisible(Module referringModule, Module declaringModule) { if (referringModule == declaringModule) return true; if (referringModule == null || declaringModule == null) return false; AssemblyNode referringAssembly = referringModule.ContainingAssembly; if (referringAssembly == null) referringAssembly = referringModule as AssemblyNode; AssemblyNode declaringAssembly = declaringModule.ContainingAssembly; if (declaringAssembly == null) declaringAssembly = declaringModule as AssemblyNode; if (referringAssembly == declaringAssembly) return true; if (referringAssembly == null) return referringModule.ContainsModule(declaringModule); if (referringAssembly.ContainsModule(declaringModule)) return true; return referringAssembly.MayAccessInternalTypesOf(declaringAssembly); }
protected virtual bool MayAccessInternals(Module referringModule, TypeNode referredToType) { if (referringModule == null || referredToType == null) return false; Module referredToModule = referredToType.DeclaringModule; if (referredToModule == null) return false; if (referringModule == referredToModule) return true; AssemblyNode referringAssembly = referringModule.ContainingAssembly; AssemblyNode referredToAssembly = referredToModule.ContainingAssembly; if (referringAssembly == null) referringAssembly = referringModule as AssemblyNode; if (referredToAssembly == null) referredToAssembly = referredToModule as AssemblyNode; if (referringAssembly == null) return referringModule.ContainsModule(referredToModule); if (referringAssembly == referredToAssembly) return true; if (referringAssembly.ContainsModule(referringModule)) return true; return referringAssembly.MayAccessInternalTypesOf(referredToAssembly); }