Skip to content

Commit 7087d2d

Browse files
Fix issue serializing null options in VB (#78895)
2 parents d785549 + dea4092 commit 7087d2d

File tree

2 files changed

+43
-2
lines changed

2 files changed

+43
-2
lines changed

src/Workspaces/VisualBasic/Portable/Serialization/VisualBasicOptionsSerializationService.vb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Serialization
2323

2424
Dim vbOptions = DirectCast(options, VisualBasicCompilationOptions)
2525

26-
writer.WriteArray(vbOptions.GlobalImports.SelectAsArray(Function(g) g.Name), Sub(w, n) w.WriteString(n))
26+
writer.WriteArray(vbOptions.GlobalImports.NullToEmpty().SelectAsArray(Function(g) g?.Name), Sub(w, n) w.WriteString(n))
2727
writer.WriteString(vbOptions.RootNamespace)
2828
writer.WriteInt32(vbOptions.OptionStrict)
2929
writer.WriteBoolean(vbOptions.OptionInfer)
@@ -81,7 +81,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Serialization
8181
Dim assemblyIdentityComparer = tuple.assemblyIdentityComparer
8282
Dim strongNameProvider = tuple.strongNameProvider
8383

84-
Dim globalImports = GlobalImport.Parse(reader.ReadArray(Function(r) r.ReadString()))
84+
Dim globalImports = GlobalImport.Parse(reader.ReadArray(Function(r) r.ReadString()).WhereNotNull())
8585
Dim rootNamespace = reader.ReadString()
8686
Dim optionStrict = CType(reader.ReadInt32(), OptionStrict)
8787
Dim optionInfer = reader.ReadBoolean()
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
' Licensed to the .NET Foundation under one or more agreements.
2+
' The .NET Foundation licenses this file to you under the MIT license.
3+
' See the LICENSE file in the project root for more information.
4+
5+
Imports System.IO
6+
Imports System.Threading
7+
Imports Microsoft.CodeAnalysis.Serialization
8+
Imports Microsoft.CodeAnalysis.Test.Utilities
9+
Imports Roslyn.Test.Utilities
10+
Imports Roslyn.Utilities
11+
Imports Xunit
12+
13+
Namespace Microsoft.CodeAnalysis.VisualBasic.UnitTests.Serialization
14+
<UseExportProvider>
15+
Public NotInheritable Class OptionsSerializationTests
16+
<Fact, WorkItem("https://devdiv.visualstudio.com/DevDiv/_workitems/edit/2325692")>
17+
Public Sub TestNullGlobalImport()
18+
Dim options = New VisualBasicCompilationOptions(
19+
OutputKind.ConsoleApplication,
20+
"module",
21+
globalImports:={Nothing})
22+
23+
Using workspace = New AdhocWorkspace()
24+
Dim service = workspace.Services.GetLanguageServices(LanguageNames.VisualBasic).GetService(Of IOptionsSerializationService)()
25+
26+
Using stream = New MemoryStream()
27+
Dim writer = New ObjectWriter(stream, leaveOpen:=True)
28+
service.WriteTo(options, writer, CancellationToken.None)
29+
stream.Position = 0
30+
31+
Dim reader = ObjectReader.TryGetReader(stream, leaveOpen:=True)
32+
Dim serializedOptions = DirectCast(
33+
service.ReadCompilationOptionsFrom(reader, CancellationToken.None),
34+
VisualBasicCompilationOptions)
35+
36+
Assert.Empty(serializedOptions.GlobalImports)
37+
End Using
38+
End Using
39+
End Sub
40+
End Class
41+
End Namespace

0 commit comments

Comments
 (0)