@@ -40,15 +40,7 @@ internal abstract class JsonRPCPlugin : IAsyncPlugin, IContextMenu
40
40
public List < Result > LoadContextMenus ( Result selectedResult )
41
41
{
42
42
var output = ExecuteContextMenu ( selectedResult ) ;
43
- try
44
- {
45
- return DeserializedResult ( output ) ;
46
- }
47
- catch ( Exception e )
48
- {
49
- Log . Exception ( $ "|JsonRPCPlugin.LoadContextMenus|Exception on result <{ selectedResult } >", e ) ;
50
- return null ;
51
- }
43
+ return DeserializedResult ( output ) ;
52
44
}
53
45
54
46
private static readonly JsonSerializerOptions options = new ( )
@@ -65,23 +57,10 @@ private async Task<List<Result>> DeserializedResultAsync(Stream output)
65
57
{
66
58
if ( output == Stream . Null ) return null ;
67
59
68
- try
69
- {
70
- var queryResponseModel =
71
- await JsonSerializer . DeserializeAsync < JsonRPCQueryResponseModel > ( output , options ) ;
72
-
73
- return ParseResults ( queryResponseModel ) ;
74
- }
75
- catch ( JsonException e )
76
- {
77
- Log . Exception ( GetType ( ) . FullName , "Unexpected Json Input" , e ) ;
78
- }
79
- finally
80
- {
81
- await output . DisposeAsync ( ) ;
82
- }
60
+ var queryResponseModel =
61
+ await JsonSerializer . DeserializeAsync < JsonRPCQueryResponseModel > ( output , options ) ;
83
62
84
- return null ;
63
+ return ParseResults ( queryResponseModel ) ;
85
64
}
86
65
87
66
private List < Result > DeserializedResult ( string output )
@@ -249,12 +228,14 @@ protected async Task<Stream> ExecuteAsync(ProcessStartInfo startInfo, Cancellati
249
228
await using var source = process . StandardOutput . BaseStream ;
250
229
251
230
var buffer = BufferManager . GetStream ( ) ;
252
-
231
+
253
232
token . Register ( ( ) =>
254
233
{
255
234
// ReSharper disable once AccessToModifiedClosure
256
235
// Manually Check whether disposed
236
+ // ReSharper disable once AccessToDisposedClosure
257
237
if ( ! disposed && ! process . HasExited )
238
+ // ReSharper disable once AccessToDisposedClosure
258
239
process . Kill ( ) ;
259
240
} ) ;
260
241
@@ -274,30 +255,27 @@ protected async Task<Stream> ExecuteAsync(ProcessStartInfo startInfo, Cancellati
274
255
275
256
token . ThrowIfCancellationRequested ( ) ;
276
257
258
+ if ( buffer . Length == 0 )
259
+ {
260
+ var errorMessage = process . StandardError . EndOfStream ?
261
+ "Empty JSONRPC Response" :
262
+ await process . StandardError . ReadToEndAsync ( ) ;
263
+ throw new InvalidDataException ( $ "{ context . CurrentPluginMetadata . Name } |{ errorMessage } ") ;
264
+ }
265
+
277
266
if ( ! process . StandardError . EndOfStream )
278
267
{
279
268
using var standardError = process . StandardError ;
280
269
var error = await standardError . ReadToEndAsync ( ) ;
281
270
282
271
if ( ! string . IsNullOrEmpty ( error ) )
283
272
{
284
- Log . Error ( $ "|JsonRPCPlugin.ExecuteAsync|{ error } ") ;
285
- return Stream . Null ;
273
+ Log . Error ( $ "|{ context . CurrentPluginMetadata . Name } .{ nameof ( ExecuteAsync ) } |{ error } ") ;
286
274
}
287
-
288
- Log . Error ( "|JsonRPCPlugin.ExecuteAsync|Empty standard output and standard error." ) ;
289
- return Stream . Null ;
290
275
}
291
276
292
277
return buffer ;
293
278
}
294
- catch ( Exception e )
295
- {
296
- Log . Exception (
297
- $ "|JsonRPCPlugin.ExecuteAsync|Exception for filename <{ startInfo . FileName } > with argument <{ startInfo . Arguments } >",
298
- e ) ;
299
- return Stream . Null ;
300
- }
301
279
finally
302
280
{
303
281
process ? . Dispose ( ) ;
@@ -307,20 +285,8 @@ protected async Task<Stream> ExecuteAsync(ProcessStartInfo startInfo, Cancellati
307
285
308
286
public async Task < List < Result > > QueryAsync ( Query query , CancellationToken token )
309
287
{
310
- try
311
- {
312
- var output = await ExecuteQueryAsync ( query , token ) ;
313
- return await DeserializedResultAsync ( output ) ;
314
- }
315
- catch ( OperationCanceledException )
316
- {
317
- return null ;
318
- }
319
- catch ( Exception e )
320
- {
321
- Log . Exception ( $ "|JsonRPCPlugin.Query|Exception when query <{ query } >", e ) ;
322
- return null ;
323
- }
288
+ var output = await ExecuteQueryAsync ( query , token ) ;
289
+ return await DeserializedResultAsync ( output ) ;
324
290
}
325
291
326
292
public virtual Task InitAsync ( PluginInitContext context )
0 commit comments