From 7aafbfd0eff4f0054e676d5df46ec165050e95cc Mon Sep 17 00:00:00 2001 From: Sam Xu Date: Tue, 14 Nov 2017 16:15:19 -0800 Subject: [PATCH] remove optional properties initializer --- .../V2/OpenApiDocumentDeserializer.cs | 5 +++++ src/Microsoft.OpenApi/Models/OpenApiDocument.cs | 6 +++--- src/Microsoft.OpenApi/Services/OpenApiWalker.cs | 12 ++++++++---- .../Writers/OpenApiWriterExtensions.cs | 5 ++++- .../ModelToV2Tests.cs | 6 +++++- 5 files changed, 25 insertions(+), 9 deletions(-) diff --git a/src/Microsoft.OpenApi.Readers/V2/OpenApiDocumentDeserializer.cs b/src/Microsoft.OpenApi.Readers/V2/OpenApiDocumentDeserializer.cs index f841eb5c7..243ee93b0 100644 --- a/src/Microsoft.OpenApi.Readers/V2/OpenApiDocumentDeserializer.cs +++ b/src/Microsoft.OpenApi.Readers/V2/OpenApiDocumentDeserializer.cs @@ -93,6 +93,11 @@ public static OpenApiDocument LoadOpenApi(RootNode rootNode) ReportMissing(openApiNode, required); // Post Process OpenApi Object + if (openApidoc.Servers == null) + { + openApidoc.Servers = new List(); + } + MakeServers(openApidoc.Servers, openApiNode.Context); return openApidoc; diff --git a/src/Microsoft.OpenApi/Models/OpenApiDocument.cs b/src/Microsoft.OpenApi/Models/OpenApiDocument.cs index dcc7613cf..14f4f94d8 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiDocument.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiDocument.cs @@ -30,7 +30,7 @@ public class OpenApiDocument : OpenApiElement, IOpenApiExtension /// /// An array of Server Objects, which provide connectivity information to a target server. /// - public IList Servers { get; set; } = new List(); + public IList Servers { get; set; } /// /// REQUIRED. The available paths and operations for the API. @@ -50,12 +50,12 @@ public class OpenApiDocument : OpenApiElement, IOpenApiExtension /// /// A list of tags used by the specification with additional metadata. /// - public IList Tags { get; set; } = new List(); + public IList Tags { get; set; } /// /// Additional external documentation. /// - public OpenApiExternalDocs ExternalDocs { get; set; } = new OpenApiExternalDocs(); + public OpenApiExternalDocs ExternalDocs { get; set; } /// /// This object MAY be extended with Specification Extensions. diff --git a/src/Microsoft.OpenApi/Services/OpenApiWalker.cs b/src/Microsoft.OpenApi/Services/OpenApiWalker.cs index 80c290d86..f8adae8b2 100644 --- a/src/Microsoft.OpenApi/Services/OpenApiWalker.cs +++ b/src/Microsoft.OpenApi/Services/OpenApiWalker.cs @@ -32,12 +32,16 @@ public void Walk(OpenApiDocument doc) this._visitor.Visit(doc); this._visitor.Visit(doc.Info); this._visitor.Visit(doc.Servers); - foreach (var server in doc.Servers) + + if (doc.Servers != null) { - this._visitor.Visit(server); - foreach (var variable in server.Variables.Values) + foreach (var server in doc.Servers) { - this._visitor.Visit(variable); + this._visitor.Visit(server); + foreach (var variable in server.Variables.Values) + { + this._visitor.Visit(variable); + } } } diff --git a/src/Microsoft.OpenApi/Writers/OpenApiWriterExtensions.cs b/src/Microsoft.OpenApi/Writers/OpenApiWriterExtensions.cs index 4f6595ef4..e4428ab47 100644 --- a/src/Microsoft.OpenApi/Writers/OpenApiWriterExtensions.cs +++ b/src/Microsoft.OpenApi/Writers/OpenApiWriterExtensions.cs @@ -133,7 +133,10 @@ public static void WriteRequiredObject(this IOpenApiWriter writer, string nam CheckArguments(writer, name, action); writer.WritePropertyName(name); - action(writer, value); + if (value != null) + { + action(writer, value); + } } /// diff --git a/test/Microsoft.OpenApi.Readers.Tests/ModelToV2Tests.cs b/test/Microsoft.OpenApi.Readers.Tests/ModelToV2Tests.cs index b379f5cd1..4e623188d 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/ModelToV2Tests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/ModelToV2Tests.cs @@ -42,7 +42,11 @@ private static JObject ExportV2ToJObject(OpenApiDocument openApiDoc) [Fact] public void HostTest() { - var openApiDoc = new OpenApiDocument(); + var openApiDoc = new OpenApiDocument + { + Servers = new List() + }; + openApiDoc.Servers.Add(new OpenApiServer {Url = "http://example.org/api"}); openApiDoc.Servers.Add(new OpenApiServer {Url = "https://example.org/api"});