File: Emit\EditAndContinue\DeletedPropertyDefinition.cs
Web Access
Project: ..\..\..\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 Microsoft.Cci;
using Microsoft.CodeAnalysis.CodeGen;
using Microsoft.CodeAnalysis.Symbols;
 
namespace Microsoft.CodeAnalysis.Emit.EditAndContinue
{
    internal sealed class DeletedPropertyDefinition : DeletedDefinition<IPropertyDefinition>, IPropertyDefinition
    {
        private readonly ITypeDefinition _containingTypeDef;
        private readonly ImmutableArray<DeletedParameterDefinition> _parameters;
 
        private readonly IMethodReference? _getter;
        private readonly IMethodReference? _setter;
 
        public DeletedPropertyDefinition(IPropertyDefinition oldProperty, DeletedMethodDefinition? getter, DeletedMethodDefinition? setter, ITypeDefinition containingTypeDef, Dictionary<ITypeDefinition, DeletedTypeDefinition> typesUsedByDeletedMembers)
            : base(oldProperty, typesUsedByDeletedMembers)
        {
            _containingTypeDef = containingTypeDef;
            _getter = getter;
            _setter = setter;
 
            _parameters = WrapParameters(oldProperty.Parameters);
        }
 
        public MetadataConstant? DefaultValue => OldDefinition.DefaultValue;
 
        public IMethodReference? Getter => _getter;
 
        public bool HasDefaultValue => OldDefinition.HasDefaultValue;
 
        public bool IsRuntimeSpecial => OldDefinition.IsRuntimeSpecial;
 
        public bool IsSpecialName => OldDefinition.IsSpecialName;
 
        public ImmutableArray<IParameterDefinition> Parameters => StaticCast<IParameterDefinition>.From(_parameters);
 
        public IMethodReference? Setter => _setter;
 
        public CallingConvention CallingConvention => OldDefinition.CallingConvention;
 
        public ushort ParameterCount => (ushort)_parameters.Length;
 
        public ImmutableArray<ICustomModifier> ReturnValueCustomModifiers => OldDefinition.ReturnValueCustomModifiers;
 
        public ImmutableArray<ICustomModifier> RefCustomModifiers => OldDefinition.RefCustomModifiers;
 
        public bool ReturnValueIsByRef => OldDefinition.ReturnValueIsByRef;
 
        public ITypeDefinition ContainingTypeDefinition => _containingTypeDef;
 
        public TypeMemberVisibility Visibility => OldDefinition.Visibility;
 
        public string? Name => OldDefinition.Name;
 
        public IDefinition? AsDefinition(EmitContext context)
        {
            return OldDefinition.AsDefinition(context);
        }
 
        public void Dispatch(MetadataVisitor visitor)
        {
            visitor.Visit(this);
        }
 
        public IEnumerable<IMethodReference> GetAccessors(EmitContext context)
        {
            if (_getter is not null)
                yield return _getter;
 
            if (_setter is not null)
                yield return _setter;
        }
 
        public IEnumerable<ICustomAttribute> GetAttributes(EmitContext context)
        {
            return WrapAttributes(OldDefinition.GetAttributes(context));
        }
 
        public ITypeReference GetContainingType(EmitContext context)
        {
            return _containingTypeDef;
        }
 
        public ISymbolInternal? GetInternalSymbol()
        {
            return OldDefinition.GetInternalSymbol();
        }
 
        public ImmutableArray<IParameterTypeInformation> GetParameters(EmitContext context)
        {
            return StaticCast<IParameterTypeInformation>.From(_parameters);
        }
 
        public ITypeReference GetType(EmitContext context)
        {
            return WrapType(OldDefinition.GetType(context));
        }
    }
}