Ejemplo n.º 1
0
        public TypeScriptType ReferenceFrom(TypeScriptUnit targetUnit, ITypeGenerator typeGenerator, IAttributeProvider?attributeProvider)
        {
            var itemType   = typeGenerator.ResolveType(elementType).ReferenceFrom(targetUnit, typeGenerator, null);
            var resultType = TypeScriptGeneratorHelpers.BuildTargetNullableTypeByOptions(itemType, CanItemBeNull(attributeProvider), options);

            return(new TypeScriptArrayType(resultType));
        }
Ejemplo n.º 2
0
        private TypeScriptType MaybeNull(ITypeInfo trueType, TypeScriptType type, IAttributeProvider?attributeProvider, int index)
        {
            if (options.NullabilityMode != NullabilityMode.NullableReference)
            {
                return(type);
            }

            var isNullable = TypeScriptGeneratorHelpers.NullableReferenceCanBeNull(attributeProvider, trueType, index);

            return(TypeScriptGeneratorHelpers.BuildTargetNullableTypeByOptions(type, isNullable, options));
        }
        public TypeScriptType ReferenceFrom(ITypeInfo type, TypeScriptUnit targetUnit, ITypeGenerator typeGenerator)
        {
            if (!type.Equals(Type))
            {
                throw new InvalidOperationException($"Expected type {Type} with different meta, but got different type: {type}");
            }

            return(TypeScriptGeneratorHelpers.BuildTargetNullableTypeByOptions(
                       ReferenceFromInternal(type, targetUnit, typeGenerator),
                       type.CanBeNull(typeGenerator.Options.NullabilityMode),
                       typeGenerator.Options));
        }
Ejemplo n.º 4
0
        private bool CanItemBeNull(IAttributeProvider?attributeProvider)
        {
            if (elementType.IsValueType || elementType.IsEnum || attributeProvider == null)
            {
                return(false);
            }

            if (options.NullabilityMode == NullabilityMode.NullableReference)
            {
                return(TypeScriptGeneratorHelpers.NullableReferenceCanBeNull(attributeProvider, elementType, 1));
            }

            return(options.NullabilityMode == NullabilityMode.Pessimistic
                       ? !attributeProvider.IsNameDefined(AnnotationsNames.ItemNotNull)
                       : attributeProvider.IsNameDefined(AnnotationsNames.ItemCanBeNull));
        }
Ejemplo n.º 5
0
        public TypeScriptTypeMemberDeclaration ResolveProperty(TypeScriptUnit unit, ITypeGenerator typeGenerator, Type type, PropertyInfo property)
        {
            var(isNullable, _) = TypeScriptGeneratorHelpers.ProcessNullable(property, property.PropertyType, typeGenerator.Options.NullabilityMode);

            if (!TryGetGetOnlyEnumPropertyValue(type, property, out var value))
            {
                return(null);
            }

            return(new TypeScriptTypeMemberDeclaration
            {
                Name = property.Name.ToLowerCamelCase(),
                Optional = isNullable && typeGenerator.Options.EnableOptionalProperties,
                Type = GetConstEnumType(typeGenerator, unit, property, value),
            });
        }
Ejemplo n.º 6
0
        public TypeScriptType ReferenceFrom(TypeScriptUnit targetUnit, ITypeGenerator typeGenerator, IAttributeProvider?attributeProvider)
        {
            var typeReference = typeGenerator.ResolveType(type.GetGenericTypeDefinition()).ReferenceFrom(targetUnit, typeGenerator, null);
            var arguments     = new List <TypeScriptType>();
            var nullableIndex = 1;

            foreach (var argument in type.GetGenericArguments())
            {
                var targetType = typeGenerator.ResolveType(argument).ReferenceFrom(targetUnit, typeGenerator, null);
                if (options.NullabilityMode == NullabilityMode.NullableReference)
                {
                    var isNullable = TypeScriptGeneratorHelpers.NullableReferenceCanBeNull(attributeProvider, argument, nullableIndex);
                    nullableIndex += TypeScriptGeneratorHelpers.GetGenericArgumentsToSkip(argument);
                    arguments.Add(TypeScriptGeneratorHelpers.BuildTargetNullableTypeByOptions(targetType, !argument.IsValueType && isNullable, options));
                }
                else
                {
                    arguments.Add(targetType is INullabilityWrapperType nullabilityType ? nullabilityType.InnerType : targetType);
                }
            }
            return(new TypeScriptGenericTypeReference((TypeScriptTypeReference)typeReference, arguments.ToArray()));
        }
Ejemplo n.º 7
0
        private TypeScriptType GetValueType(TypeScriptUnit targetUnit, ITypeGenerator typeGenerator, IAttributeProvider?attributeProvider)
        {
            var value = typeGenerator.ResolveType(valueType).ReferenceFrom(targetUnit, typeGenerator, null);

            return(MaybeNull(valueType, value, attributeProvider, 1 + TypeScriptGeneratorHelpers.GetGenericArgumentsToSkip(keyType)));
        }