Skip to content

Commit def59b4

Browse files
Merge pull request #73 from OmniSharp/nullref-fail
fix argument exception from newtonsoft.json
2 parents 5318e84 + 6d8ff97 commit def59b4

File tree

2 files changed

+31
-1
lines changed

2 files changed

+31
-1
lines changed

src/Server/Matchers/ResolveCommandMatcher.cs

+4-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,10 @@ public IEnumerable<ILspHandlerDescriptor> FindHandler(object parameters, IEnumer
2929
{
3030
if (parameters is ICanBeResolved canBeResolved)
3131
{
32-
var handlerType = canBeResolved.Data?.Value<string>(PrivateHandlerTypeName);
32+
string handlerType = null;
33+
if (canBeResolved.Data != null)
34+
handlerType = canBeResolved.Data.Value<string>(PrivateHandlerTypeName);
35+
3336
if (string.IsNullOrWhiteSpace(handlerType))
3437
{
3538
foreach (var descriptor in descriptors)

test/Lsp.Tests/Matchers/ResolveCommandMatcherTests.cs

+27
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,33 @@ public void Should_Return_CodeLensResolve_Descriptor()
112112
result.Should().Contain(x => x.Handler == resolveHandler2);
113113
}
114114

115+
[Fact]
116+
public void Should_Handle_Null_Data()
117+
{
118+
// Given
119+
var handlerMatcher = new ResolveCommandMatcher(_logger);
120+
var resolveHandler = Substitute.For<ICompletionResolveHandler>();
121+
resolveHandler.CanResolve(Arg.Any<CompletionItem>()).Returns(true);
122+
123+
// When
124+
var result = handlerMatcher.FindHandler(new CompletionItem() { },
125+
new List<HandlerDescriptor> {
126+
new HandlerDescriptor(DocumentNames.CompletionResolve,
127+
"Key",
128+
resolveHandler,
129+
resolveHandler.GetType(),
130+
typeof(CompletionItem),
131+
null,
132+
null,
133+
() => { }),
134+
})
135+
.ToArray();
136+
137+
// Then
138+
result.Should().NotBeNullOrEmpty();
139+
result.Should().Contain(x => x.Handler == resolveHandler);
140+
}
141+
115142
[Fact]
116143
public void Should_Return_CompletionResolve_Descriptor()
117144
{

0 commit comments

Comments
 (0)