@@ -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>
@@ -141,27 +143,30 @@ public static async Task<ReadResult> LoadAsync(Stream input, string format = nul
141143 /// <typeparam name="T"></typeparam>
142144 /// <param name="input"></param>
143145 /// <param name="version"></param>
146+ /// <param name="openApiDocument">The document used to lookup tag or schema references.</param>
144147 /// <param name="format"></param>
145148 /// <param name="settings"></param>
146149 /// <param name="token"></param>
147150 /// <returns></returns>
148151 public static async Task < T > LoadAsync < T > ( Stream input ,
149152 OpenApiSpecVersion version ,
153+ OpenApiDocument openApiDocument ,
150154 string format = null ,
151155 OpenApiReaderSettings settings = null ,
152156 CancellationToken token = default ) where T : IOpenApiElement
153157 {
158+ Utils . CheckArgumentNull ( openApiDocument ) ;
154159 if ( input is null ) throw new ArgumentNullException ( nameof ( input ) ) ;
155160 if ( input is MemoryStream memoryStream )
156161 {
157- return Load < T > ( memoryStream , version , format , out var _ , settings ) ;
162+ return Load < T > ( memoryStream , version , format , openApiDocument , out var _ , settings ) ;
158163 }
159164 else
160165 {
161166 memoryStream = new MemoryStream ( ) ;
162167 await input . CopyToAsync ( memoryStream , 81920 , token ) . ConfigureAwait ( false ) ;
163168 memoryStream . Position = 0 ;
164- return Load < T > ( memoryStream , version , format , out var _ , settings ) ;
169+ return Load < T > ( memoryStream , version , format , openApiDocument , out var _ , settings ) ;
165170 }
166171 }
167172
@@ -191,12 +196,14 @@ public static ReadResult Parse(string input,
191196 /// </summary>
192197 /// <param name="input">The input string.</param>
193198 /// <param name="version"></param>
199+ /// <param name="openApiDocument">The OpenApiDocument object to which the fragment belongs, used to lookup references.</param>
194200 /// <param name="diagnostic">The diagnostic entity containing information from the reading process.</param>
195201 /// <param name="format">The Open API format</param>
196202 /// <param name="settings">The OpenApi reader settings.</param>
197203 /// <returns>An OpenAPI document instance.</returns>
198204 public static T Parse < T > ( string input ,
199205 OpenApiSpecVersion version ,
206+ OpenApiDocument openApiDocument ,
200207 out OpenApiDiagnostic diagnostic ,
201208 string format = null ,
202209 OpenApiReaderSettings settings = null ) where T : IOpenApiElement
@@ -205,7 +212,7 @@ public static T Parse<T>(string input,
205212 format ??= InspectInputFormat ( input ) ;
206213 settings ??= new OpenApiReaderSettings ( ) ;
207214 using var stream = new MemoryStream ( Encoding . UTF8 . GetBytes ( input ) ) ;
208- return Load < T > ( stream , version , format , out diagnostic , settings ) ;
215+ return Load < T > ( stream , version , format , openApiDocument , out diagnostic , settings ) ;
209216 }
210217
211218 private static readonly OpenApiReaderSettings DefaultReaderSettings = new ( ) ;
0 commit comments