Skip to content

Commit 1dac236

Browse files
authored
Bump Roslyn libs to 4.13.0 (#220)
* Update Roslyn libs to 4.13.0 * Update MSBuildLocatorPackageVersion to 1.9.1 * Update MSBuildPackageVersion to 17.3.9
1 parent 8e390fd commit 1dac236

File tree

3 files changed

+52
-47
lines changed

3 files changed

+52
-47
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ All notable changes to this project will be documented in this file.
44
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
55

66
## [Unreleased]
7+
* Upgrade Roslyn to 4.13.0
8+
- https://github.com/razzmatazz/csharp-language-server/pull/220
79
* csharp-ls will now use and require .NET 8 runtime/SDK
810
- PR by @lapponiandevil in https://github.com/razzmatazz/csharp-language-server/pull/222
911
* Upgrade Ionide.LanguageServerProtocol to 0.7.0:

Directory.Packages.props

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66
</PropertyGroup>
77

88
<PropertyGroup>
9-
<RoslynPackageVersion>4.12.0</RoslynPackageVersion>
10-
<MSBuildPackageVersion>17.12.6</MSBuildPackageVersion>
11-
<MSBuildLocatorPackageVersion>1.7.8</MSBuildLocatorPackageVersion>
9+
<MSBuildPackageVersion>17.13.9</MSBuildPackageVersion>
10+
<RoslynPackageVersion>4.13.0</RoslynPackageVersion>
11+
<MSBuildLocatorPackageVersion>1.9.1</MSBuildLocatorPackageVersion>
1212
</PropertyGroup>
1313

1414
<ItemGroup>

src/CSharpLanguageServer/RoslynHelpers.fs

Lines changed: 47 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -149,65 +149,69 @@ type PickMembersServiceInterceptor (_logMessage) =
149149
NotImplementedException(string invocation.Method) |> raise
150150

151151
type ExtractClassOptionsServiceInterceptor (_logMessage) =
152-
interface IInterceptor with
153-
member __.Intercept(invocation: IInvocation) =
154152

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")
160155

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
163159

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")
167162

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)
170165

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
173171

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
179175

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)
183179

184-
for memberToAdd in selectedMembersToAdd do
185-
let memberAnalysisResult =
186-
Activator.CreateInstance(extractClassMemberAnalysisResultType, memberToAdd, false)
180+
resultListType.GetMethod("Add").Invoke(resultList, [| memberAnalysisResult |])
181+
|> ignore
187182

188-
resultListType.GetMethod("Add").Invoke(resultList, [| memberAnalysisResult |])
189-
|> ignore
183+
let resultListAsArray =
184+
resultListType.GetMethod("ToArray").Invoke(resultList, null)
190185

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
193190

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 |])
198193

199-
let emptyMemberAnalysisResults =
200-
immArrayCreateFromArray.MakeGenericMethod([| extractClassMemberAnalysisResultType |]).Invoke(null, [| resultListAsArray |])
194+
let extractClassOptionsType = featuresAssembly.GetType("Microsoft.CodeAnalysis.ExtractClass.ExtractClassOptions")
201195

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)
205206

206207
let fromResultMethod = typeof<Task>.GetMethod("FromResult")
207-
let typedFromResultMethod = fromResultMethod.MakeGenericMethod([| extractClassOptionsType |])
208+
let typedFromResultMethod = fromResultMethod.MakeGenericMethod([| extractClassOptionsValue.GetType() |])
208209

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)
211215

212216
| _ ->
213217
NotImplementedException(string invocation.Method) |> raise
@@ -221,7 +225,6 @@ type ExtractInterfaceOptionsServiceInterceptor (logMessage) =
221225
let argExtractableMembers = invocation.Arguments[2] :?> List<ISymbol>
222226
let argDefaultInterfaceName = invocation.Arguments[3] :?> string
223227

224-
let isCancelled = false
225228
let fileName = sprintf "%s.cs" argDefaultInterfaceName
226229

227230
let featuresAssembly = Assembly.Load("Microsoft.CodeAnalysis.Features")

0 commit comments

Comments
 (0)