Skip to content

Commit f8ddb48

Browse files
authored
Merge pull request #1001 from usethesource/fix/997-capability-nulls
Annotate many capability classes for CF
2 parents d7cc4ce + 46b53e2 commit f8ddb48

File tree

6 files changed

+463
-10
lines changed

6 files changed

+463
-10
lines changed

rascal-lsp/src/main/checkerframework/lsp4j.astub

Lines changed: 344 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,3 +107,347 @@ public class CallHierarchyItem {
107107
public void setDetail(@Nullable final String detail) { }
108108
public void setData(@Nullable final Object data) { }
109109
}
110+
111+
112+
package org.eclipse.lsp4j;
113+
114+
import org.checkerframework.checker.nullness.qual.*;
115+
116+
public class ClientCapabilities {
117+
public @Nullable WorkspaceClientCapabilities getWorkspace() {}
118+
public @Nullable TextDocumentClientCapabilities getTextDocument() {}
119+
public @Nullable NotebookDocumentClientCapabilities getNotebookDocument() {}
120+
public @Nullable WindowClientCapabilities getWindow() {}
121+
public @Nullable GeneralClientCapabilities getGeneral() {}
122+
public @Nullable Object getExperimental() {}
123+
}
124+
125+
126+
package org.eclipse.lsp4j;
127+
128+
import org.checkerframework.checker.nullness.qual.*;
129+
130+
public class WorkspaceClientCapabilities {
131+
public @Nullable Boolean getApplyEdit() {}
132+
public @Nullable WorkspaceEditCapabilities getWorkspaceEdit() {}
133+
public @Nullable DidChangeConfigurationCapabilities getDidChangeConfiguration() {}
134+
public @Nullable DidChangeWatchedFilesCapabilities getDidChangeWatchedFiles() {}
135+
public @Nullable SymbolCapabilities getSymbol() {}
136+
public @Nullable ExecuteCommandCapabilities getExecuteCommand() {}
137+
public @Nullable Boolean getWorkspaceFolders() {}
138+
public @Nullable Boolean getConfiguration() {}
139+
public @Nullable SemanticTokensWorkspaceCapabilities getSemanticTokens() {}
140+
public @Nullable CodeLensWorkspaceCapabilities getCodeLens() {}
141+
public @Nullable FileOperationsWorkspaceCapabilities getFileOperations() {}
142+
public @Nullable InlayHintWorkspaceCapabilities getInlayHint() {}
143+
public @Nullable InlineValueWorkspaceCapabilities getInlineValue() {}
144+
public @Nullable DiagnosticWorkspaceCapabilities getDiagnostics() {}
145+
}
146+
147+
148+
package org.eclipse.lsp4j;
149+
150+
import org.checkerframework.checker.nullness.qual.*;
151+
152+
public class TextDocumentClientCapabilities {
153+
public @Nullable SynchronizationCapabilities getSynchronization() {}
154+
public @Nullable CompletionCapabilities getCompletion() {}
155+
public @Nullable HoverCapabilities getHover() {}
156+
public @Nullable SignatureHelpCapabilities getSignatureHelp() {}
157+
public @Nullable ReferencesCapabilities getReferences() {}
158+
public @Nullable DocumentHighlightCapabilities getDocumentHighlight() {}
159+
public @Nullable DocumentSymbolCapabilities getDocumentSymbol() {}
160+
public @Nullable FormattingCapabilities getFormatting() {}
161+
public @Nullable RangeFormattingCapabilities getRangeFormatting() {}
162+
public @Nullable OnTypeFormattingCapabilities getOnTypeFormatting() {}
163+
public @Nullable DeclarationCapabilities getDeclaration() {}
164+
public @Nullable DefinitionCapabilities getDefinition() {}
165+
public @Nullable TypeDefinitionCapabilities getTypeDefinition() {}
166+
public @Nullable ImplementationCapabilities getImplementation() {}
167+
public @Nullable CodeActionCapabilities getCodeAction() {}
168+
public @Nullable CodeLensCapabilities getCodeLens() {}
169+
public @Nullable DocumentLinkCapabilities getDocumentLink() {}
170+
public @Nullable ColorProviderCapabilities getColorProvider() {}
171+
public @Nullable RenameCapabilities getRename() {}
172+
public @Nullable PublishDiagnosticsCapabilities getPublishDiagnostics() {}
173+
public @Nullable FoldingRangeCapabilities getFoldingRange() {}
174+
public @Nullable TypeHierarchyCapabilities getTypeHierarchy() {}
175+
public @Nullable CallHierarchyCapabilities getCallHierarchy() {}
176+
public @Nullable SelectionRangeCapabilities getSelectionRange() {}
177+
public @Nullable SemanticTokensCapabilities getSemanticTokens() {}
178+
public @Nullable MonikerCapabilities getMoniker() {}
179+
public @Nullable LinkedEditingRangeCapabilities getLinkedEditingRange() {}
180+
public @Nullable InlayHintCapabilities getInlayHint() {}
181+
public @Nullable InlineValueCapabilities getInlineValue() {}
182+
public @Nullable DiagnosticCapabilities getDiagnostic() {}
183+
}
184+
185+
186+
package org.eclipse.lsp4j;
187+
188+
import org.checkerframework.checker.nullness.qual.*;
189+
190+
public class WindowClientCapabilities {
191+
public @Nullable Boolean getWorkDoneProgress() {}
192+
public @Nullable WindowShowMessageRequestCapabilities getShowMessage() {}
193+
public @Nullable ShowDocumentCapabilities getShowDocument() {}
194+
}
195+
196+
197+
package org.eclipse.lsp4j;
198+
199+
import org.checkerframework.checker.nullness.qual.*;
200+
201+
public class GeneralClientCapabilities {
202+
public @Nullable RegularExpressionsCapabilities getRegularExpressions() {}
203+
public @Nullable MarkdownCapabilities getMarkdown() {}
204+
public @Nullable StaleRequestCapabilities getStaleRequestSupport() {}
205+
public @Nullable List<String> getPositionEncodings() {}
206+
}
207+
208+
209+
package org.eclipse.lsp4j;
210+
211+
import org.checkerframework.checker.nullness.qual.*;
212+
213+
public class WorkspaceEditCapabilities {
214+
public @Nullable Boolean getDocumentChanges() {}
215+
public @Nullable List<String> getResourceOperations() {}
216+
public @Nullable String getFailureHandling() {}
217+
public @Nullable Boolean getNormalizesLineEndings() {}
218+
public @Nullable WorkspaceEditChangeAnnotationSupportCapabilities getChangeAnnotationSupport() {}
219+
}
220+
221+
222+
package org.eclipse.lsp4j;
223+
224+
import org.checkerframework.checker.nullness.qual.*;
225+
226+
public class DynamicRegistrationCapabilities {
227+
public @Nullable Boolean getDynamicRegistration() {}
228+
}
229+
230+
231+
package org.eclipse.lsp4j;
232+
233+
import org.checkerframework.checker.nullness.qual.*;
234+
235+
public class DidChangeWatchedFilesCapabilities extends DynamicRegistrationCapabilities {
236+
public @Nullable Boolean getRelativePatternSupport() {}
237+
}
238+
239+
240+
package org.eclipse.lsp4j;
241+
242+
import org.checkerframework.checker.nullness.qual.*;
243+
244+
public class SymbolCapabilities extends DynamicRegistrationCapabilities {
245+
public @Nullable SymbolKindCapabilities getSymbolKind() {}
246+
public @Nullable SymbolTagSupportCapabilities getTagSupport() {}
247+
public @Nullable WorkspaceSymbolResolveSupportCapabilities getResolveSupport() {}
248+
}
249+
250+
251+
package org.eclipse.lsp4j;
252+
253+
import org.checkerframework.checker.nullness.qual.*;
254+
255+
public class SemanticTokensWorkspaceCapabilities {
256+
public @Nullable Boolean getRefreshSupport() {}
257+
}
258+
259+
260+
package org.eclipse.lsp4j;
261+
262+
import org.checkerframework.checker.nullness.qual.*;
263+
264+
public class CodeLensWorkspaceCapabilities {
265+
public @Nullable Boolean getRefreshSupport() {}
266+
}
267+
268+
269+
package org.eclipse.lsp4j;
270+
271+
import org.checkerframework.checker.nullness.qual.*;
272+
273+
public class FileOperationsWorkspaceCapabilities extends DynamicRegistrationCapabilities {
274+
public @Nullable Boolean getDidCreate() {}
275+
public @Nullable Boolean getWillCreate() {}
276+
public @Nullable Boolean getDidRename() {}
277+
public @Nullable Boolean getWillRename() {}
278+
public @Nullable Boolean getDidDelete() {}
279+
public @Nullable Boolean getWillDelete() {}
280+
}
281+
282+
283+
package org.eclipse.lsp4j;
284+
285+
import org.checkerframework.checker.nullness.qual.*;
286+
287+
public class InlayHintWorkspaceCapabilities {
288+
public @Nullable Boolean getRefreshSupport() {}
289+
}
290+
291+
292+
package org.eclipse.lsp4j;
293+
294+
import org.checkerframework.checker.nullness.qual.*;
295+
296+
public class InlineValueWorkspaceCapabilities {
297+
public @Nullable Boolean getRefreshSupport() {}
298+
}
299+
300+
301+
package org.eclipse.lsp4j;
302+
303+
import org.checkerframework.checker.nullness.qual.*;
304+
305+
public class DiagnosticWorkspaceCapabilities {
306+
public @Nullable Boolean getRefreshSupport() {}
307+
}
308+
309+
310+
package org.eclipse.lsp4j;
311+
312+
import org.checkerframework.checker.nullness.qual.*;
313+
314+
public class WorkspaceEditChangeAnnotationSupportCapabilities {
315+
public @Nullable Boolean getGroupsOnLabel() {}
316+
}
317+
318+
319+
package org.eclipse.lsp4j;
320+
321+
import org.checkerframework.checker.nullness.qual.*;
322+
323+
public class SynchronizationCapabilities extends DynamicRegistrationCapabilities {
324+
public @Nullable Boolean getWillSave() {}
325+
public @Nullable Boolean getWillSaveWaitUntil() {}
326+
public @Nullable Boolean getDidSave() {}
327+
}
328+
329+
330+
package org.eclipse.lsp4j;
331+
332+
import org.checkerframework.checker.nullness.qual.*;
333+
334+
public class CompletionCapabilities extends DynamicRegistrationCapabilities {
335+
public @Nullable CompletionItemCapabilities getCompletionItem() {}
336+
public @Nullable CompletionItemKindCapabilities getCompletionItemKind() {}
337+
public @Nullable Boolean getContextSupport() {}
338+
public @Nullable InsertTextMode getInsertTextMode() {}
339+
public @Nullable CompletionListCapabilities getCompletionList() {}
340+
}
341+
342+
343+
package org.eclipse.lsp4j;
344+
345+
import org.checkerframework.checker.nullness.qual.*;
346+
347+
public class HoverCapabilities extends DynamicRegistrationCapabilities {
348+
public @Nullable List<String> getContentFormat() {}
349+
}
350+
351+
352+
package org.eclipse.lsp4j;
353+
354+
import org.checkerframework.checker.nullness.qual.*;
355+
356+
public class SignatureHelpCapabilities extends DynamicRegistrationCapabilities {
357+
public @Nullable SignatureInformationCapabilities getSignatureInformation() {}
358+
public @Nullable Boolean getContextSupport() {}
359+
}
360+
361+
362+
package org.eclipse.lsp4j;
363+
364+
import org.checkerframework.checker.nullness.qual.*;
365+
366+
public class DocumentSymbolCapabilities extends DynamicRegistrationCapabilities {
367+
public @Nullable SymbolKindCapabilities getSymbolKind() {}
368+
public @Nullable Boolean getHierarchicalDocumentSymbolSupport() {}
369+
public @Nullable SymbolTagSupportCapabilities getTagSupport() {}
370+
public @Nullable Boolean getLabelSupport() {}
371+
}
372+
373+
374+
package org.eclipse.lsp4j;
375+
376+
import org.checkerframework.checker.nullness.qual.*;
377+
378+
public class DeclarationCapabilities extends DynamicRegistrationCapabilities {
379+
public @Nullable Boolean getLinkSupport() {}
380+
}
381+
382+
383+
package org.eclipse.lsp4j;
384+
385+
import org.checkerframework.checker.nullness.qual.*;
386+
387+
public class DefinitionCapabilities extends DynamicRegistrationCapabilities {
388+
public @Nullable Boolean getLinkSupport() {}
389+
}
390+
391+
392+
package org.eclipse.lsp4j;
393+
394+
import org.checkerframework.checker.nullness.qual.*;
395+
396+
public class TypeDefinitionCapabilities extends DynamicRegistrationCapabilities {
397+
public @Nullable Boolean getLinkSupport() {}
398+
}
399+
400+
401+
package org.eclipse.lsp4j;
402+
403+
import org.checkerframework.checker.nullness.qual.*;
404+
405+
public class ImplementationCapabilities extends DynamicRegistrationCapabilities {
406+
public @Nullable Boolean getLinkSupport() {}
407+
}
408+
409+
410+
package org.eclipse.lsp4j;
411+
412+
import org.checkerframework.checker.nullness.qual.*;
413+
414+
public class CodeActionCapabilities extends DynamicRegistrationCapabilities {
415+
public @Nullable CodeActionLiteralSupportCapabilities getCodeActionLiteralSupport() {}
416+
public @Nullable Boolean getIsPreferredSupport() {}
417+
public @Nullable Boolean getDisabledSupport() {}
418+
public @Nullable Boolean getDataSupport() {}
419+
public @Nullable CodeActionResolveSupportCapabilities getResolveSupport() {}
420+
public @Nullable Boolean getHonorsChangeAnnotations() {}
421+
}
422+
423+
424+
package org.eclipse.lsp4j;
425+
426+
import org.checkerframework.checker.nullness.qual.*;
427+
428+
public class DocumentLinkCapabilities extends DynamicRegistrationCapabilities {
429+
public @Nullable Boolean getTooltipSupport() {}
430+
}
431+
432+
433+
package org.eclipse.lsp4j;
434+
435+
import org.checkerframework.checker.nullness.qual.*;
436+
437+
public class RenameCapabilities extends DynamicRegistrationCapabilities {
438+
public @Nullable Boolean getPrepareSupport() {}
439+
public @Nullable PrepareSupportDefaultBehavior getPrepareSupportDefaultBehavior() {}
440+
public @Nullable Boolean getHonorsChangeAnnotations() {}
441+
}
442+
443+
444+
package org.eclipse.lsp4j;
445+
446+
import org.checkerframework.checker.nullness.qual.*;
447+
448+
public class SemanticTokensCapabilities extends DynamicRegistrationCapabilities {
449+
public @Nullable Boolean getOverlappingTokenSupport() {}
450+
public @Nullable Boolean getMultilineTokenSupport() {}
451+
public @Nullable Boolean getServerCancelSupport() {}
452+
public @Nullable Boolean getAugmentsSyntaxTokens() {}
453+
}

rascal-lsp/src/main/java/org/rascalmpl/vscode/lsp/BaseWorkspaceService.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,14 @@
4747
import org.eclipse.lsp4j.FileDelete;
4848
import org.eclipse.lsp4j.RenameFilesParams;
4949
import org.eclipse.lsp4j.ServerCapabilities;
50+
import org.eclipse.lsp4j.WorkspaceClientCapabilities;
5051
import org.eclipse.lsp4j.WorkspaceFolder;
5152
import org.eclipse.lsp4j.WorkspaceFoldersOptions;
5253
import org.eclipse.lsp4j.WorkspaceServerCapabilities;
5354
import org.eclipse.lsp4j.services.LanguageClient;
5455
import org.eclipse.lsp4j.services.LanguageClientAware;
5556
import org.eclipse.lsp4j.services.WorkspaceService;
57+
import org.rascalmpl.vscode.lsp.util.Nullables;
5658
import org.rascalmpl.vscode.lsp.util.concurrent.CompletableFutureUtils;
5759
import org.rascalmpl.vscode.lsp.util.locations.Locations;
5860

@@ -82,14 +84,12 @@ public void initialize(ClientCapabilities clientCap, @Nullable List<WorkspaceFol
8284
this.workspaceFolders.addAll(currentWorkspaceFolders);
8385
}
8486

85-
var clientWorkspaceCap = clientCap.getWorkspace();
86-
8787
if (capabilities.getWorkspace() == null) {
8888
capabilities.setWorkspace(new WorkspaceServerCapabilities());
8989
}
9090

9191
var workspaceCapabilities = capabilities.getWorkspace();
92-
if (clientWorkspaceCap != null && clientWorkspaceCap.getWorkspaceFolders().booleanValue()) {
92+
if (Nullables.has(clientCap.getWorkspace(), WorkspaceClientCapabilities::getWorkspaceFolders)) {
9393
var folderOptions = new WorkspaceFoldersOptions();
9494
folderOptions.setSupported(true);
9595
folderOptions.setChangeNotifications(true);

0 commit comments

Comments
 (0)