File: PEWriter\MethodDefinitionBase.cs
Web Access
Project: src\roslyn\src\Compilers\Core\Portable\Microsoft.CodeAnalysis.csproj (Microsoft.CodeAnalysis)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.

using System.Collections.Generic;
using System.Collections.Immutable;
using System.Reflection;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CodeGen;
using Microsoft.CodeAnalysis.Collections;
using Microsoft.CodeAnalysis.Debugging;
using Microsoft.CodeAnalysis.Emit;
using Roslyn.Utilities;

namespace Microsoft.Cci;

internal abstract class MethodDefinitionBase : IMethodDefinition, IMethodBody
{
    public MethodDefinitionBase(ITypeDefinition containingTypeDefinition, ushort maxStack, ImmutableArray<byte> il)
    {
        ContainingTypeDefinition = containingTypeDefinition;
        MaxStack = maxStack;
        IL = il;
    }

    // IMethodDefinition implementation

    bool IDefinition.IsEncDeleted => false;

    public ITypeDefinition ContainingTypeDefinition { get; }

    public abstract string Name { get; }

    public bool HasBody => true;

    public IMethodBody GetBody(EmitContext context) => this;

    public IEnumerable<IGenericMethodParameter> GenericParameters => SpecializedCollections.EmptyEnumerable<IGenericMethodParameter>();

    public bool HasDeclarativeSecurity => false;

    public bool IsAbstract => false;

    public bool IsAccessCheckedOnOverride => false;

    public bool IsConstructor => false;

    public bool IsExternal => false;

    public bool IsHiddenBySignature => true;

    public bool IsNewSlot => false;

    public bool IsPlatformInvoke => false;

    public virtual bool IsRuntimeSpecial => false;

    public bool IsSealed => false;

    public virtual bool IsSpecialName => false;

    public bool IsStatic => true;

    public bool IsVirtual => false;

    public virtual ImmutableArray<IParameterDefinition> Parameters => ImmutableArray<IParameterDefinition>.Empty;

#nullable disable
    public IPlatformInvokeInformation PlatformInvokeData => null;

    public bool RequiresSecurityObject => false;

    public bool ReturnValueIsMarshalledExplicitly => false;

    public IMarshallingInformation ReturnValueMarshallingInformation => null;

    public ImmutableArray<byte> ReturnValueMarshallingDescriptor => default;

    public IEnumerable<SecurityAttribute> SecurityAttributes => null;

    public INamespace ContainingNamespace => null;

    public abstract TypeMemberVisibility Visibility { get; }

    public bool AcceptsExtraArguments => false;

    public ushort GenericParameterCount => 0;

    public ImmutableArray<IParameterTypeInformation> ExtraParameters => ImmutableArray<IParameterTypeInformation>.Empty;

    public IGenericMethodInstanceReference AsGenericMethodInstanceReference => null;

    public ISpecializedMethodReference AsSpecializedMethodReference => null;

    public CallingConvention CallingConvention => CallingConvention.Default;

    public ushort ParameterCount => (ushort)Parameters.Length;

    public ImmutableArray<ICustomModifier> ReturnValueCustomModifiers => ImmutableArray<ICustomModifier>.Empty;

    public ImmutableArray<ICustomModifier> RefCustomModifiers => ImmutableArray<ICustomModifier>.Empty;

    public bool ReturnValueIsByRef => false;

    public IDefinition AsDefinition(EmitContext context) => this;

    CodeAnalysis.Symbols.ISymbolInternal Cci.IReference.GetInternalSymbol() => null;

    public void Dispatch(MetadataVisitor visitor) => visitor.Visit((IMethodDefinition)this);

    public IEnumerable<ICustomAttribute> GetAttributes(EmitContext context) => SpecializedCollections.EmptyEnumerable<ICustomAttribute>();

    public ITypeReference GetContainingType(EmitContext context) => ContainingTypeDefinition;

    public MethodImplAttributes GetImplementationAttributes(EmitContext context) => default;

    public ImmutableArray<IParameterTypeInformation> GetParameters(EmitContext context) => Parameters.CastArray<IParameterTypeInformation>();

    public IMethodDefinition GetResolvedMethod(EmitContext context) => this;

    public IEnumerable<ICustomAttribute> GetReturnValueAttributes(EmitContext context) => SpecializedCollections.EmptyEnumerable<ICustomAttribute>();

    public virtual ITypeReference GetType(EmitContext context) => context.Module.GetPlatformType(PlatformType.SystemVoid, context);

    // IMethodBody implementation

    public ushort MaxStack { get; }

    public ImmutableArray<byte> IL { get; }

    public IMethodDefinition MethodDefinition => this;

    public ImmutableArray<ExceptionHandlerRegion> ExceptionRegions => ImmutableArray<ExceptionHandlerRegion>.Empty;

    public bool AreLocalsZeroed => false;

    public bool HasStackalloc => false;

    public ImmutableArray<ILocalDefinition> LocalVariables => ImmutableArray<ILocalDefinition>.Empty;

    public StateMachineMoveNextBodyDebugInfo MoveNextBodyInfo => null;

    public ImmutableArray<SequencePoint> SequencePoints => ImmutableArray<SequencePoint>.Empty;

    public bool HasDynamicLocalVariables => false;

    public ImmutableArray<LocalScope> LocalScopes => ImmutableArray<LocalScope>.Empty;

    public IImportScope ImportScope => null;

    public DebugId MethodId => default;

    public ImmutableArray<StateMachineHoistedLocalScope> StateMachineHoistedLocalScopes => default;

    public string StateMachineTypeName => null;

    public ImmutableArray<EncHoistedLocalInfo> StateMachineHoistedLocalSlots => default;

    public ImmutableArray<ITypeReference> StateMachineAwaiterSlots => default;

    public ImmutableArray<EncClosureInfo> ClosureDebugInfo => ImmutableArray<EncClosureInfo>.Empty;

    public ImmutableArray<EncLambdaInfo> LambdaDebugInfo => ImmutableArray<EncLambdaInfo>.Empty;

    public ImmutableArray<LambdaRuntimeRudeEditInfo> OrderedLambdaRuntimeRudeEdits => ImmutableArray<LambdaRuntimeRudeEditInfo>.Empty;

    public StateMachineStatesDebugInfo StateMachineStatesDebugInfo => default;

    public ImmutableArray<SourceSpan> CodeCoverageSpans => ImmutableArray<SourceSpan>.Empty;

    public bool IsPrimaryConstructor => false;

    public sealed override bool Equals(object obj)
    {
        // It is not supported to rely on default equality of these Cci objects, an explicit way to compare and hash them should be used.
        throw ExceptionUtilities.Unreachable();
    }

    public sealed override int GetHashCode()
    {
        // It is not supported to rely on default equality of these Cci objects, an explicit way to compare and hash them should be used.
        throw ExceptionUtilities.Unreachable();
    }
}