Skip to content
This repository was archived by the owner on Jan 23, 2023. It is now read-only.

Implement HasSameMetadataDefinitionAs() on CoreCLR #11774

Merged
merged 1 commit into from May 22, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/mscorlib/shared/System/Reflection/MemberInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ public virtual Module Module
}
}

public virtual bool HasSameMetadataDefinitionAs(MemberInfo other) { throw NotImplemented.ByDesign; }

public abstract bool IsDefined(Type attributeType, bool inherit);
public abstract object[] GetCustomAttributes(bool inherit);
public abstract object[] GetCustomAttributes(Type attributeType, bool inherit);
Expand Down
18 changes: 18 additions & 0 deletions src/mscorlib/src/System/Reflection/MemberInfo.Internal.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,23 @@ namespace System.Reflection
public abstract partial class MemberInfo
{
internal virtual bool CacheEquals(object o) { throw new NotImplementedException(); }

internal bool HasSameMetadataDefinitionAsCore<TOther>(MemberInfo other) where TOther : MemberInfo
{
if (other == null)
throw new ArgumentNullException(nameof(other));

// Ensure that "other" is a runtime-implemented MemberInfo. Do this check before calling any methods on it!
if (!(other is TOther))
return false;

if (MetadataToken != other.MetadataToken)
return false;

if (!(Module.Equals(other.Module)))
return false;

return true;
}
}
}
2 changes: 2 additions & 0 deletions src/mscorlib/src/System/Reflection/RuntimeConstructorInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,8 @@ public override Type DeclaringType
}
}

public sealed override bool HasSameMetadataDefinitionAs(MemberInfo other) => HasSameMetadataDefinitionAsCore<RuntimeConstructorInfo>(other);

public override Type ReflectedType
{
get
Expand Down
1 change: 1 addition & 0 deletions src/mscorlib/src/System/Reflection/RuntimeEventInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,7 @@ public override String Name
}
}
public override Type DeclaringType { get { return m_declaringType; } }
public sealed override bool HasSameMetadataDefinitionAs(MemberInfo other) => HasSameMetadataDefinitionAsCore<RuntimeEventInfo>(other);
public override Type ReflectedType
{
get
Expand Down
2 changes: 2 additions & 0 deletions src/mscorlib/src/System/Reflection/RuntimeFieldInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,8 @@ public override Type DeclaringType
}
}

public sealed override bool HasSameMetadataDefinitionAs(MemberInfo other) => HasSameMetadataDefinitionAsCore<RuntimeFieldInfo>(other);

public override Module Module { get { return GetRuntimeModule(); } }
#endregion

Expand Down
2 changes: 2 additions & 0 deletions src/mscorlib/src/System/Reflection/RuntimeMethodInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -335,6 +335,8 @@ public override Type DeclaringType
}
}

public sealed override bool HasSameMetadataDefinitionAs(MemberInfo other) => HasSameMetadataDefinitionAsCore<RuntimeMethodInfo>(other);

public override Type ReflectedType
{
get
Expand Down
2 changes: 2 additions & 0 deletions src/mscorlib/src/System/Reflection/RuntimePropertyInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,8 @@ public override Type DeclaringType
}
}

public sealed override bool HasSameMetadataDefinitionAs(MemberInfo other) => HasSameMetadataDefinitionAsCore<RuntimePropertyInfo>(other);

public override Type ReflectedType
{
get
Expand Down
2 changes: 2 additions & 0 deletions src/mscorlib/src/System/RtType.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3789,6 +3789,8 @@ public override Type[] GetGenericParameterConstraints()
#endregion

#region Misc
public sealed override bool HasSameMetadataDefinitionAs(MemberInfo other) => HasSameMetadataDefinitionAsCore<RuntimeType>(other);

public override bool IsTypeDefinition
{
get { return RuntimeTypeHandle.IsTypeDefinition(this); }
Expand Down