@@ -149,65 +149,69 @@ type PickMembersServiceInterceptor (_logMessage) =
149
149
NotImplementedException( string invocation.Method) |> raise
150
150
151
151
type ExtractClassOptionsServiceInterceptor ( _logMessage ) =
152
- interface IInterceptor with
153
- member __.Intercept ( invocation : IInvocation ) =
154
152
155
- match invocation.Method.Name with
156
- | " GetExtractClassOptionsAsync" ->
157
- let _argDocument = invocation.Arguments[ 0 ] :?> Document
158
- let argOriginalType = invocation.Arguments[ 1 ] :?> INamedTypeSymbol
159
- let _argSelectedMembers = invocation.Arguments[ 2 ] :?> ImmutableArray< ISymbol>
153
+ let getExtractClassOptionsImpl ( argOriginalType : INamedTypeSymbol ): Object =
154
+ let featuresAssembly = Assembly.Load( " Microsoft.CodeAnalysis.Features" )
160
155
161
- let featuresAssembly = Assembly.Load( " Microsoft.CodeAnalysis.Features" )
162
- let extractClassOptionsType = featuresAssembly.GetType( " Microsoft.CodeAnalysis.ExtractClass.ExtractClassOptions" )
156
+ let typeName = " Base" + argOriginalType.Name
157
+ let fileName = typeName + " .cs"
158
+ let sameFile = box true
163
159
164
- let typeName = " Base" + argOriginalType.Name
165
- let fileName = typeName + " .cs"
166
- let sameFile = box true
160
+ let immArrayType = typeof< ImmutableArray>
161
+ let extractClassMemberAnalysisResultType = featuresAssembly.GetType( " Microsoft.CodeAnalysis.ExtractClass.ExtractClassMemberAnalysisResult" )
167
162
168
- let immArrayType = typeof < ImmutableArray >
169
- let extractClassMemberAnalysisResultType = featuresAssembly.GetType ( " Microsoft.CodeAnalysis.ExtractClass.ExtractClassMemberAnalysisResult " )
163
+ let resultListType = typedefof < List <_>>. MakeGenericType ( extractClassMemberAnalysisResultType )
164
+ let resultList = Activator.CreateInstance ( resultListType )
170
165
171
- let resultListType = typedefof< List<_>>. MakeGenericType( extractClassMemberAnalysisResultType)
172
- let resultList = Activator.CreateInstance( resultListType)
166
+ let memberFilter ( m : ISymbol ) =
167
+ match m with
168
+ | :? IMethodSymbol as ms -> ms.MethodKind = MethodKind.Ordinary
169
+ | :? IFieldSymbol as fs -> not fs.IsImplicitlyDeclared
170
+ | _ -> m.Kind = SymbolKind.Property || m.Kind = SymbolKind.Event
173
171
174
- let memberFilter ( m : ISymbol ) =
175
- match m with
176
- | :? IMethodSymbol as ms -> ms.MethodKind = MethodKind.Ordinary
177
- | :? IFieldSymbol as fs -> not fs.IsImplicitlyDeclared
178
- | _ -> m.Kind = SymbolKind.Property || m.Kind = SymbolKind.Event
172
+ let selectedMembersToAdd =
173
+ argOriginalType.GetMembers()
174
+ |> Seq.filter memberFilter
179
175
180
- let selectedMembersToAdd =
181
- argOriginalType.GetMembers ()
182
- |> Seq.filter memberFilter
176
+ for memberToAdd in selectedMembersToAdd do
177
+ let memberAnalysisResult =
178
+ Activator.CreateInstance ( extractClassMemberAnalysisResultType , memberToAdd , false )
183
179
184
- for memberToAdd in selectedMembersToAdd do
185
- let memberAnalysisResult =
186
- Activator.CreateInstance( extractClassMemberAnalysisResultType, memberToAdd, false )
180
+ resultListType.GetMethod( " Add" ) .Invoke( resultList, [| memberAnalysisResult |])
181
+ |> ignore
187
182
188
- resultListType.GetMethod ( " Add " ) .Invoke ( resultList , [| memberAnalysisResult |])
189
- |> ignore
183
+ let resultListAsArray =
184
+ resultListType.GetMethod ( " ToArray " ) .Invoke ( resultList , null )
190
185
191
- let resultListAsArray =
192
- resultListType.GetMethod( " ToArray" ) .Invoke( resultList, null )
186
+ let immArrayCreateFromArray =
187
+ immArrayType.GetMethods()
188
+ |> Seq.filter ( fun m -> m.GetParameters() .Length = 1 && ( m.GetParameters()[ 0 ]) .ParameterType.IsArray)
189
+ |> Seq.head
193
190
194
- let immArrayCreateFromArray =
195
- immArrayType.GetMethods()
196
- |> Seq.filter ( fun m -> m.GetParameters() .Length = 1 && ( m.GetParameters()[ 0 ]) .ParameterType.IsArray)
197
- |> Seq.head
191
+ let emptyMemberAnalysisResults =
192
+ immArrayCreateFromArray.MakeGenericMethod([| extractClassMemberAnalysisResultType |]) .Invoke( null , [| resultListAsArray |])
198
193
199
- let emptyMemberAnalysisResults =
200
- immArrayCreateFromArray.MakeGenericMethod([| extractClassMemberAnalysisResultType |]) .Invoke( null , [| resultListAsArray |])
194
+ let extractClassOptionsType = featuresAssembly.GetType( " Microsoft.CodeAnalysis.ExtractClass.ExtractClassOptions" )
201
195
202
- let extractClassOptionsValue =
203
- Activator.CreateInstance(
204
- extractClassOptionsType, fileName, typeName, sameFile, emptyMemberAnalysisResults)
196
+ Activator.CreateInstance(
197
+ extractClassOptionsType, fileName, typeName, sameFile, emptyMemberAnalysisResults)
198
+
199
+ interface IInterceptor with
200
+ member __.Intercept ( invocation : IInvocation ) =
201
+
202
+ match invocation.Method.Name with
203
+ | " GetExtractClassOptionsAsync" ->
204
+ let argOriginalType = invocation.Arguments[ 1 ] :?> INamedTypeSymbol
205
+ let extractClassOptionsValue = getExtractClassOptionsImpl( argOriginalType)
205
206
206
207
let fromResultMethod = typeof< Task>. GetMethod( " FromResult" )
207
- let typedFromResultMethod = fromResultMethod.MakeGenericMethod([| extractClassOptionsType |])
208
+ let typedFromResultMethod = fromResultMethod.MakeGenericMethod([| extractClassOptionsValue.GetType () |])
208
209
209
- invocation.ReturnValue <-
210
- typedFromResultMethod.Invoke( null , [| extractClassOptionsValue |])
210
+ invocation.ReturnValue <- typedFromResultMethod.Invoke( null , [| extractClassOptionsValue |])
211
+
212
+ | " GetExtractClassOptions" ->
213
+ let argOriginalType = invocation.Arguments[ 1 ] :?> INamedTypeSymbol
214
+ invocation.ReturnValue <- getExtractClassOptionsImpl( argOriginalType)
211
215
212
216
| _ ->
213
217
NotImplementedException( string invocation.Method) |> raise
@@ -221,7 +225,6 @@ type ExtractInterfaceOptionsServiceInterceptor (logMessage) =
221
225
let argExtractableMembers = invocation.Arguments[ 2 ] :?> List< ISymbol>
222
226
let argDefaultInterfaceName = invocation.Arguments[ 3 ] :?> string
223
227
224
- let isCancelled = false
225
228
let fileName = sprintf " %s .cs" argDefaultInterfaceName
226
229
227
230
let featuresAssembly = Assembly.Load( " Microsoft.CodeAnalysis.Features" )
0 commit comments