| File: PEWriter\InheritedTypeParameter.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.Reflection.Metadata; using Microsoft.CodeAnalysis; using EmitContext = Microsoft.CodeAnalysis.Emit.EmitContext; namespace Microsoft.Cci { internal class InheritedTypeParameter : IGenericTypeParameter { private readonly ushort _index; private readonly ITypeDefinition _inheritingType; private readonly IGenericTypeParameter _parentParameter; internal InheritedTypeParameter(ushort index, ITypeDefinition inheritingType, IGenericTypeParameter parentParameter) { _index = index; _inheritingType = inheritingType; _parentParameter = parentParameter; } #region IGenericTypeParameter Members public ITypeDefinition DefiningType { get { return _inheritingType; } } #endregion #region IGenericParameter Members public virtual IEnumerable<TypeReferenceWithAttributes> GetConstraints(EmitContext context) { return _parentParameter.GetConstraints(context); } public bool MustBeReferenceType { get { return _parentParameter.MustBeReferenceType; } } public bool MustBeValueType { get { return _parentParameter.MustBeValueType; } } public bool AllowsRefLikeType { get { return _parentParameter.AllowsRefLikeType; } } public bool MustHaveDefaultConstructor { get { return _parentParameter.MustHaveDefaultConstructor; } } public TypeParameterVariance Variance { get { return _inheritingType.IsInterface || _inheritingType.IsDelegate ? _parentParameter.Variance : TypeParameterVariance.NonVariant; } } #endregion #region ITypeDefinition Members public bool IsEncDeleted => false; public ushort Alignment { get { return 0; } } public bool HasDeclarativeSecurity { get { return false; } } public bool IsEnum { get { return false; } } public IArrayTypeReference? AsArrayTypeReference { get { return this as IArrayTypeReference; } } public IGenericMethodParameter? AsGenericMethodParameter { get { return this as IGenericMethodParameter; } } public IGenericMethodParameterReference? AsGenericMethodParameterReference { get { return this as IGenericMethodParameterReference; } } public IGenericTypeInstanceReference? AsGenericTypeInstanceReference { get { return this as IGenericTypeInstanceReference; } } public IGenericTypeParameter? AsGenericTypeParameter { get { return this as IGenericTypeParameter; } } public IGenericTypeParameterReference? AsGenericTypeParameterReference { get { return this as IGenericTypeParameterReference; } } public INamespaceTypeDefinition? AsNamespaceTypeDefinition(EmitContext context) { return this as INamespaceTypeDefinition; } public INamespaceTypeReference? AsNamespaceTypeReference { get { return this as INamespaceTypeReference; } } public INestedTypeDefinition? AsNestedTypeDefinition(EmitContext context) { return this as INestedTypeDefinition; } public INestedTypeReference? AsNestedTypeReference { get { return this as INestedTypeReference; } } public ISpecializedNestedTypeReference? AsSpecializedNestedTypeReference { get { return this as ISpecializedNestedTypeReference; } } public IModifiedTypeReference? AsModifiedTypeReference { get { return this as IModifiedTypeReference; } } public IPointerTypeReference? AsPointerTypeReference { get { return this as IPointerTypeReference; } } public ITypeDefinition? AsTypeDefinition(EmitContext context) { return this as ITypeDefinition; } public IDefinition? AsDefinition(EmitContext context) { return this as IDefinition; } #endregion #region IReference Members CodeAnalysis.Symbols.ISymbolInternal? Cci.IReference.GetInternalSymbol() => null; public virtual IEnumerable<ICustomAttribute> GetAttributes(EmitContext context) { return _parentParameter.GetAttributes(context); } public void Dispatch(MetadataVisitor visitor) { } #endregion #region ITypeReference Members public TypeDefinitionHandle TypeDef { get { return default(TypeDefinitionHandle); } } public bool IsAlias { get { return false; } } public bool IsValueType { get { return false; } } public ITypeDefinition GetResolvedType(EmitContext context) { throw ExceptionUtilities.Unreachable(); } public PrimitiveTypeCode TypeCode { get { return PrimitiveTypeCode.NotPrimitive; } } #endregion #region IParameterListEntry Members public ushort Index { get { return _index; } } #endregion #region INamedEntity Members public virtual string? Name { get { return _parentParameter.Name; } } #endregion #region IGenericTypeParameterReference Members ITypeReference IGenericTypeParameterReference.DefiningType { get { return _inheritingType; } } #endregion #region INamedTypeReference Members public bool MangleName { get { return false; } } #endregion public bool IsNested { get { throw ExceptionUtilities.Unreachable(); } } public bool IsSpecializedNested { get { throw ExceptionUtilities.Unreachable(); } } public ITypeReference UnspecializedVersion { get { throw ExceptionUtilities.Unreachable(); } } public bool IsNamespaceTypeReference { get { throw ExceptionUtilities.Unreachable(); } } public bool IsGenericTypeInstance { get { throw ExceptionUtilities.Unreachable(); } } 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(); } } }