in ReSharper.FSharp/src/FSharp/FSharp.TypeProviders.Protocol/src/Utils/ProvidedTypesComparer.cs [39:74]
public bool Equals(ProvidedType x, ProvidedType y)
{
var xResult = TryGetFullName(x, out var xFullName);
var yResult = TryGetFullName(y, out var yFullName);
if (xResult != yResult) return false;
if (GetAssemblyNameSafe(x) != GetAssemblyNameSafe(y)) return false;
if (xResult)
{
if (xFullName != yFullName) return false;
}
else
{
// ReSharper disable PossibleNullReferenceException
if (x.Name != y.Name) return false;
if (x.Namespace != y.Namespace) return false;
}
var xIsGenericType = x.IsGenericType;
if (xIsGenericType != y.IsGenericType) return false;
if (xIsGenericType)
{
var xGenericArgs = x.GetGenericArguments();
var yGenericArgs = y.GetGenericArguments();
if (xGenericArgs.Length != yGenericArgs.Length) return false;
for (var i = 0; i < xGenericArgs.Length; i++)
if (!Equals(xGenericArgs[i], yGenericArgs[i]))
return false;
}
return true;
}