@@ -61,14 +61,15 @@ public static ReadResult Load(MemoryStream stream,
6161 /// <param name="input">Stream containing OpenAPI description to parse.</param>
6262 /// <param name="version">Version of the OpenAPI specification that the fragment conforms to.</param>
6363 /// <param name="format"></param>
64+ /// <param name="openApiDocument">The OpenApiDocument object to which the fragment belongs, used to lookup references.</param>
6465 /// <param name="diagnostic">Returns diagnostic object containing errors detected during parsing.</param>
6566 /// <param name="settings">The OpenApiReader settings.</param>
6667 /// <returns>Instance of newly created IOpenApiElement.</returns>
6768 /// <returns>The OpenAPI element.</returns>
68- public static T Load < T > ( MemoryStream input , OpenApiSpecVersion version , string format , out OpenApiDiagnostic diagnostic , OpenApiReaderSettings settings = null ) where T : IOpenApiElement
69+ public static T Load < T > ( MemoryStream input , OpenApiSpecVersion version , string format , OpenApiDocument openApiDocument , out OpenApiDiagnostic diagnostic , OpenApiReaderSettings settings = null ) where T : IOpenApiElement
6970 {
7071 format ??= InspectStreamFormat ( input ) ;
71- return OpenApiReaderRegistry . GetReader ( format ) . ReadFragment < T > ( input , version , out diagnostic , settings ) ;
72+ return OpenApiReaderRegistry . GetReader ( format ) . ReadFragment < T > ( input , version , openApiDocument , out diagnostic , settings ) ;
7273 }
7374
7475 /// <summary>
@@ -91,13 +92,14 @@ public static async Task<ReadResult> LoadAsync(string url, OpenApiReaderSettings
9192 /// <param name="url">The path to the OpenAPI file</param>
9293 /// <param name="version">Version of the OpenAPI specification that the fragment conforms to.</param>
9394 /// <param name="settings">The OpenApiReader settings.</param>
95+ /// <param name="openApiDocument">The OpenApiDocument object to which the fragment belongs, used to lookup references.</param>
9496 /// <param name="token"></param>
9597 /// <returns>Instance of newly created IOpenApiElement.</returns>
9698 /// <returns>The OpenAPI element.</returns>
97- public static async Task < T > LoadAsync < T > ( string url , OpenApiSpecVersion version , OpenApiReaderSettings settings = null , CancellationToken token = default ) where T : IOpenApiElement
99+ public static async Task < T > LoadAsync < T > ( string url , OpenApiSpecVersion version , OpenApiDocument openApiDocument , OpenApiReaderSettings settings = null , CancellationToken token = default ) where T : IOpenApiElement
98100 {
99101 var ( stream , format ) = await RetrieveStreamAndFormatAsync ( url , token ) . ConfigureAwait ( false ) ;
100- return await LoadAsync < T > ( stream , version , format , settings , token ) ;
102+ return await LoadAsync < T > ( stream , version , openApiDocument , format , settings , token ) ;
101103 }
102104
103105 /// <summary>
@@ -145,27 +147,30 @@ public static async Task<ReadResult> LoadAsync(Stream input, string format = nul
145147 /// <typeparam name="T"></typeparam>
146148 /// <param name="input"></param>
147149 /// <param name="version"></param>
150+ /// <param name="openApiDocument">The document used to lookup tag or schema references.</param>
148151 /// <param name="format"></param>
149152 /// <param name="settings"></param>
150153 /// <param name="token"></param>
151154 /// <returns></returns>
152155 public static async Task < T > LoadAsync < T > ( Stream input ,
153156 OpenApiSpecVersion version ,
157+ OpenApiDocument openApiDocument ,
154158 string format = null ,
155159 OpenApiReaderSettings settings = null ,
156160 CancellationToken token = default ) where T : IOpenApiElement
157161 {
162+ Utils . CheckArgumentNull ( openApiDocument ) ;
158163 if ( input is null ) throw new ArgumentNullException ( nameof ( input ) ) ;
159164 if ( input is MemoryStream memoryStream )
160165 {
161- return Load < T > ( memoryStream , version , format , out var _ , settings ) ;
166+ return Load < T > ( memoryStream , version , format , openApiDocument , out var _ , settings ) ;
162167 }
163168 else
164169 {
165170 memoryStream = new MemoryStream ( ) ;
166171 await input . CopyToAsync ( memoryStream , 81920 , token ) . ConfigureAwait ( false ) ;
167172 memoryStream . Position = 0 ;
168- return Load < T > ( memoryStream , version , format , out var _ , settings ) ;
173+ return Load < T > ( memoryStream , version , format , openApiDocument , out var _ , settings ) ;
169174 }
170175 }
171176
@@ -195,12 +200,14 @@ public static ReadResult Parse(string input,
195200 /// </summary>
196201 /// <param name="input">The input string.</param>
197202 /// <param name="version"></param>
203+ /// <param name="openApiDocument">The OpenApiDocument object to which the fragment belongs, used to lookup references.</param>
198204 /// <param name="diagnostic">The diagnostic entity containing information from the reading process.</param>
199205 /// <param name="format">The Open API format</param>
200206 /// <param name="settings">The OpenApi reader settings.</param>
201207 /// <returns>An OpenAPI document instance.</returns>
202208 public static T Parse < T > ( string input ,
203209 OpenApiSpecVersion version ,
210+ OpenApiDocument openApiDocument ,
204211 out OpenApiDiagnostic diagnostic ,
205212 string format = null ,
206213 OpenApiReaderSettings settings = null ) where T : IOpenApiElement
@@ -209,7 +216,7 @@ public static T Parse<T>(string input,
209216 format ??= InspectInputFormat ( input ) ;
210217 settings ??= new OpenApiReaderSettings ( ) ;
211218 using var stream = new MemoryStream ( Encoding . UTF8 . GetBytes ( input ) ) ;
212- return Load < T > ( stream , version , format , out diagnostic , settings ) ;
219+ return Load < T > ( stream , version , format , openApiDocument , out diagnostic , settings ) ;
213220 }
214221
215222 private static readonly OpenApiReaderSettings DefaultReaderSettings = new ( ) ;
0 commit comments