| File: Linker\OverrideInformation.cs | Web Access |
| Project: src\runtime\src\tools\illink\src\linker\Mono.Linker.csproj (illink) |
// Copyright (c) .NET Foundation and contributors. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. using System.Diagnostics; using Mono.Cecil; using System.Diagnostics.CodeAnalysis; namespace Mono.Linker { [DebuggerDisplay("{Override}")] public class OverrideInformation { public MethodDefinition Base { get; } public MethodDefinition Override { get; } internal InterfaceImplementor? InterfaceImplementor { get; } internal OverrideInformation(MethodDefinition @base, MethodDefinition @override, InterfaceImplementor? interfaceImplementor = null) { Base = @base; Override = @override; InterfaceImplementor = interfaceImplementor; // Ensure we have an interface implementation if the base method is from an interface and the override method is on a class Debug.Assert(@base.DeclaringType.IsInterface && interfaceImplementor != null || !@base.DeclaringType.IsInterface && interfaceImplementor == null); // Ensure the interfaceImplementor is for the interface we expect Debug.Assert(@base.DeclaringType.IsInterface ? interfaceImplementor!.InterfaceType == @base.DeclaringType : true); } public InterfaceImplementation? MatchingInterfaceImplementation => InterfaceImplementor?.InterfaceImplementation; public TypeDefinition? InterfaceType => InterfaceImplementor?.InterfaceType; [MemberNotNullWhen(true, nameof(InterfaceImplementor), nameof(MatchingInterfaceImplementation))] public bool IsOverrideOfInterfaceMember => InterfaceImplementor != null; } }