@@ -22,49 +22,45 @@ IEnumerator IEnumerable.GetEnumerator()
2222 return GetEnumerator ( ) ;
2323 }
2424
25- public IDisposable Add ( IJsonRpcHandler handler )
25+ public IDisposable Add ( params IJsonRpcHandler [ ] handlers )
2626 {
27- //var type = handler.GetType();
27+ return Add ( handlers . AsEnumerable ( ) ) ;
28+ }
2829
29- var handlers = new List < HandlerDescriptor > ( ) ;
30- foreach ( var implementedInterface in handler . GetType ( ) . GetTypeInfo ( )
31- . ImplementedInterfaces
32- . Where ( x => ! string . IsNullOrWhiteSpace ( LspHelper . GetMethodName ( x ) ) ) )
30+ public IDisposable Add ( IEnumerable < IJsonRpcHandler > handlers )
31+ {
32+ var descriptors = new List < HandlerDescriptor > ( ) ;
33+ foreach ( var handler in handlers )
3334 {
34- var @interface = GetHandlerInterface ( implementedInterface ) ;
35- if ( @interface == null ) continue ;
36- var registration = UnwrapGenericType ( typeof ( IRegistration < > ) , implementedInterface ) ;
37- var capability = UnwrapGenericType ( typeof ( ICapability < > ) , implementedInterface ) ;
38-
39- Type @params = null ;
40- if ( @interface . GetTypeInfo ( ) . IsGenericType )
35+ foreach ( var implementedInterface in handler . GetType ( ) . GetTypeInfo ( )
36+ . ImplementedInterfaces
37+ . Where ( x => ! string . IsNullOrWhiteSpace ( LspHelper . GetMethodName ( x ) ) ) )
4138 {
42- @params = @interface . GetTypeInfo ( ) . GetGenericArguments ( ) [ 0 ] ;
43- }
39+ var @interface = GetHandlerInterface ( implementedInterface ) ;
40+ var registration = UnwrapGenericType ( typeof ( IRegistration < > ) , implementedInterface ) ;
41+ var capability = UnwrapGenericType ( typeof ( ICapability < > ) , implementedInterface ) ;
4442
45- var h = new HandlerDescriptor (
46- LspHelper . GetMethodName ( implementedInterface ) ,
47- handler ,
48- @interface ,
49- @params ,
50- registration ,
51- capability ,
52- ( ) => _handlers . RemoveWhere ( instance => instance . Handler == handler ) ) ;
43+ Type @params = null ;
44+ if ( @interface . GetTypeInfo ( ) . IsGenericType )
45+ {
46+ @params = @interface . GetTypeInfo ( ) . GetGenericArguments ( ) [ 0 ] ;
47+ }
5348
54- _handlers . Add ( h ) ;
55- }
49+ var h = new HandlerDescriptor (
50+ LspHelper . GetMethodName ( implementedInterface ) ,
51+ handler ,
52+ @interface ,
53+ @params ,
54+ registration ,
55+ capability ,
56+ ( ) => _handlers . RemoveWhere ( instance => instance . Handler == handler ) ) ;
5657
57- return new ImutableDisposable ( handlers ) ;
58- }
59-
60- public IEnumerable < ILspHandlerDescriptor > Get ( IJsonRpcHandler handler )
61- {
62- return _handlers . Where ( instance => instance . Handler == handler ) ;
63- }
58+ descriptors . Add ( h ) ;
59+ _handlers . Add ( h ) ;
60+ }
61+ }
6462
65- public IEnumerable < ILspHandlerDescriptor > Get ( string method )
66- {
67- return _handlers . Where ( instance => instance . Method == method ) ;
63+ return new ImutableDisposable ( descriptors ) ;
6864 }
6965
7066 private static readonly Type [ ] HandlerTypes = { typeof ( INotificationHandler ) , typeof ( INotificationHandler < > ) , typeof ( IRequestHandler < > ) , typeof ( IRequestHandler < , > ) , } ;
0 commit comments