File: CodeGenerationConstructedNamedTypeSymbol.cs
Web Access
Project: ..\..\..\src\Workspaces\Core\Portable\Microsoft.CodeAnalysis.Workspaces.csproj (Microsoft.CodeAnalysis.Workspaces)
// 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.
 
#nullable disable
 
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Linq;
 
namespace Microsoft.CodeAnalysis.CodeGeneration
{
    internal class CodeGenerationConstructedNamedTypeSymbol : CodeGenerationAbstractNamedTypeSymbol
    {
        private readonly CodeGenerationNamedTypeSymbol _constructedFrom;
        private readonly ImmutableArray<ITypeSymbol> _typeArguments;
 
        public CodeGenerationConstructedNamedTypeSymbol(
            CodeGenerationNamedTypeSymbol constructedFrom,
            ImmutableArray<ITypeSymbol> typeArguments,
            ImmutableArray<CodeGenerationAbstractNamedTypeSymbol> typeMembers)
            : base(constructedFrom.ContainingAssembly, constructedFrom.ContainingType, constructedFrom.GetAttributes(),
                   constructedFrom.DeclaredAccessibility, constructedFrom.Modifiers,
                   constructedFrom.Name, constructedFrom.SpecialType, constructedFrom.NullableAnnotation, typeMembers)
        {
            _constructedFrom = constructedFrom;
            this.OriginalDefinition = constructedFrom.OriginalDefinition;
            _typeArguments = typeArguments;
        }
 
        public override ImmutableArray<ITypeSymbol> TypeArguments => _typeArguments;
 
        public override ImmutableArray<NullableAnnotation> TypeArgumentNullableAnnotations => _typeArguments.SelectAsArray(t => t.NullableAnnotation);
 
        public override int Arity => _constructedFrom.Arity;
 
        public override bool IsGenericType => _constructedFrom.IsGenericType;
 
        public override bool IsUnboundGenericType => false;
 
        public override bool IsScriptClass => _constructedFrom.IsScriptClass;
 
        public override bool IsImplicitClass => _constructedFrom.IsImplicitClass;
 
        public override IEnumerable<string> MemberNames => _constructedFrom.MemberNames;
 
        public override IMethodSymbol DelegateInvokeMethod
                // NOTE(cyrusn): remember to Construct the result if we implement this.
                => null;
 
        public override INamedTypeSymbol EnumUnderlyingType
                // NOTE(cyrusn): remember to Construct the result if we implement this.
                => null;
 
        protected override CodeGenerationNamedTypeSymbol ConstructedFrom => _constructedFrom;
 
        public override INamedTypeSymbol ConstructUnboundGenericType()
            => null;
 
        public override ImmutableArray<IMethodSymbol> InstanceConstructors
        {
            get
            {
                // TODO(cyrusn): construct these.
                return this.OriginalDefinition.InstanceConstructors;
            }
        }
 
        public override ImmutableArray<IMethodSymbol> StaticConstructors
        {
            get
            {
                // TODO(cyrusn): construct these.
                return this.OriginalDefinition.StaticConstructors;
            }
        }
 
        public override ImmutableArray<IMethodSymbol> Constructors
        {
            get
            {
                // TODO(cyrusn): construct these.
                return this.OriginalDefinition.Constructors;
            }
        }
 
        public override ImmutableArray<INamedTypeSymbol> GetTypeMembers()
        {
            // TODO(cyrusn): construct these.
            return ImmutableArray.CreateRange(_constructedFrom.TypeMembers.Cast<INamedTypeSymbol>());
        }
 
        public override TypeKind TypeKind => _constructedFrom.TypeKind;
 
        protected override CodeGenerationTypeSymbol CloneWithNullableAnnotation(NullableAnnotation nullableAnnotation)
        {
            return new CodeGenerationConstructedNamedTypeSymbol(
                (CodeGenerationNamedTypeSymbol)_constructedFrom.WithNullableAnnotation(nullableAnnotation),
                _typeArguments,
                this.TypeMembers);
        }
 
        public override ImmutableArray<ITypeParameterSymbol> TypeParameters => _constructedFrom.TypeParameters;
    }
}