Skip to content

Commit 5318e84

Browse files
Merge pull request #72 from OmniSharp/fix/resolve-exception
Handle case of null CanBeResolvedHandlerType
2 parents 79667a2 + b991dc0 commit 5318e84

File tree

2 files changed

+30
-13
lines changed

2 files changed

+30
-13
lines changed

src/Server/Matchers/ResolveCommandMatcher.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ public object Process(ILspHandlerDescriptor descriptor, object parameters, objec
9292
{
9393
// Only pin the handler type, if we know the source handler (codelens) is also the resolver.
9494
if (response is IEnumerable<ICanBeResolved> canBeResolveds &&
95-
descriptor.CanBeResolvedHandlerType.GetTypeInfo().IsAssignableFrom(descriptor.Handler.GetType()))
95+
descriptor?.CanBeResolvedHandlerType?.GetTypeInfo().IsAssignableFrom(descriptor.Handler.GetType()) == true)
9696
{
9797
_logger.LogTrace("Updating Resolve items with wrapped data for {Method}:{Handler}",
9898
descriptor.Method,

test/Lsp.Tests/Matchers/ResolveCommandMatcherTests.cs

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,27 @@ public void Should_Return_Empty_Descriptor()
5252
result.Should().BeEmpty();
5353
}
5454

55+
[Fact]
56+
public void Should_Not_Throw_Given_Another_Descriptor()
57+
{
58+
// Given
59+
var resolveHandler = Substitute.For<ICodeLensHandler>();
60+
var handlerDescriptor = new HandlerDescriptor(
61+
DocumentNames.CodeLens,
62+
"Key",
63+
resolveHandler,
64+
resolveHandler.GetType(),
65+
typeof(CodeLensParams),
66+
null,
67+
null,
68+
() => { });
69+
var handlerMatcher = new ResolveCommandMatcher(_logger);
70+
71+
// When
72+
Action a = () => handlerMatcher.Process(handlerDescriptor, new CodeLensParams(), new CodeLensContainer());
73+
a.ShouldNotThrow();
74+
}
75+
5576
[Fact]
5677
public void Should_Return_CodeLensResolve_Descriptor()
5778
{
@@ -63,8 +84,7 @@ public void Should_Return_CodeLensResolve_Descriptor()
6384
resolveHandler2.CanResolve(Arg.Any<CodeLens>()).Returns(true);
6485

6586
// When
66-
var result = handlerMatcher.FindHandler(new CodeLens()
67-
{
87+
var result = handlerMatcher.FindHandler(new CodeLens() {
6888
Data = JToken.FromObject(new { handlerType = typeof(ICodeLensResolveHandler).FullName, data = new { a = 1 } })
6989
},
7090
new List<HandlerDescriptor> {
@@ -103,8 +123,7 @@ public void Should_Return_CompletionResolve_Descriptor()
103123
resolveHandler2.CanResolve(Arg.Any<CompletionItem>()).Returns(true);
104124

105125
// When
106-
var result = handlerMatcher.FindHandler(new CompletionItem()
107-
{
126+
var result = handlerMatcher.FindHandler(new CompletionItem() {
108127
Data = JToken.FromObject(new { handlerType = typeof(ICompletionResolveHandler).FullName, data = new { a = 1 } })
109128
},
110129
new List<HandlerDescriptor> {
@@ -146,8 +165,7 @@ public void Should_Deal_WithHandlers_That_Not_Also_Resolvers()
146165
(resolveHandler2 as ICompletionResolveHandler).CanResolve(Arg.Any<CompletionItem>()).Returns(true);
147166

148167
// When
149-
var result = handlerMatcher.FindHandler(new CompletionItem()
150-
{
168+
var result = handlerMatcher.FindHandler(new CompletionItem() {
151169
Data = new JObject()
152170
},
153171
new List<HandlerDescriptor> {
@@ -189,8 +207,7 @@ public void Should_Deal_WithHandlers_That_Not_Also_Resolvers2()
189207
(resolveHandler2 as ICompletionResolveHandler).CanResolve(Arg.Any<CompletionItem>()).Returns(false);
190208

191209
// When
192-
var result = handlerMatcher.FindHandler(new CompletionItem()
193-
{
210+
var result = handlerMatcher.FindHandler(new CompletionItem() {
194211
Data = new JObject()
195212
},
196213
new List<HandlerDescriptor> {
@@ -287,9 +304,9 @@ public void Should_Update_CompletionItems_With_HandlerType()
287304
() => { });
288305

289306
var item = new CompletionItem() {
290-
Data =JObject.FromObject(new { hello = "world" })
307+
Data = JObject.FromObject(new { hello = "world" })
291308
};
292-
var list = new CompletionList(new [] {item});
309+
var list = new CompletionList(new[] { item });
293310

294311
(list is IEnumerable<ICanBeResolved>).Should().BeTrue();
295312

@@ -325,9 +342,9 @@ public void Should_Update_CodeLensContainer_With_HandlerType()
325342
() => { });
326343

327344
var item = new CodeLens() {
328-
Data =JObject.FromObject(new { hello = "world" })
345+
Data = JObject.FromObject(new { hello = "world" })
329346
};
330-
var list = new CodeLensContainer(new [] {item});
347+
var list = new CodeLensContainer(new[] { item });
331348

332349
(list is IEnumerable<ICanBeResolved>).Should().BeTrue();
333350

0 commit comments

Comments
 (0)