public bool IsFriendAssemblyTo(IAssemblyDefinition assembly)
{
if (internals_visible_to == null)
return false;
AssemblyName is_visible = null;
if (internals_visible_to_cache == null) {
internals_visible_to_cache = new Dictionary<IAssemblyDefinition, AssemblyName> ();
} else {
if (internals_visible_to_cache.TryGetValue (assembly, out is_visible))
return is_visible != null;
}
var token = assembly.GetPublicKeyToken ();
if (token != null && token.Length == 0)
token = null;
foreach (var internals in internals_visible_to) {
if (internals.Name != assembly.Name)
continue;
if (token == null && assembly is AssemblyDefinition) {
is_visible = internals;
break;
}
if (!ArrayComparer.IsEqual (token, internals.GetPublicKeyToken ()))
continue;
is_visible = internals;
break;
}
internals_visible_to_cache.Add (assembly, is_visible);
return is_visible != null;
}