Exemplo n.º 1
0
        private CSharpType?CreateInheritedType()
        {
            var sourceBaseType = ExistingType?.BaseType;

            if (sourceBaseType != null &&
                sourceBaseType.SpecialType != SpecialType.System_ValueType &&
                sourceBaseType.SpecialType != SpecialType.System_Object &&
                _typeFactory.TryCreateType(sourceBaseType, out CSharpType? baseType))
            {
                return(baseType);
            }

            var objectSchemas = _objectSchema.Parents !.Immediate.OfType <ObjectSchema>().ToArray();

            ObjectSchema?selectedSchema = null;

            foreach (var objectSchema in objectSchemas)
            {
                // Take first schema or the one with discriminator
                selectedSchema ??= objectSchema;

                if (objectSchema.Discriminator != null)
                {
                    selectedSchema = objectSchema;
                    break;
                }
            }

            if (selectedSchema != null)
            {
                CSharpType type = _typeFactory.CreateType(selectedSchema, false);
                Debug.Assert(!type.IsFrameworkType);
                return(type);
            }
            return(null);
        }