下面列出了怎么用org.eclipse.lsp4j.DidChangeWorkspaceFoldersParams的API类实例代码及写法,或者点击链接到github查看源代码。
private synchronized void unwatchProject(@Nonnull Module project) {
this.allWatchedProjects.remove(project);
// TODO? disconnect resources?
if (supportsWorkspaceFolderCapability()) {
WorkspaceFoldersChangeEvent event = new WorkspaceFoldersChangeEvent();
event.getRemoved().add(LSPIJUtils.toWorkspaceFolder(project));
DidChangeWorkspaceFoldersParams params = new DidChangeWorkspaceFoldersParams();
params.setEvent(event);
this.languageServer.getWorkspaceService().didChangeWorkspaceFolders(params);
}
}
public DefaultLanguageServerWrapper(StartupLogic startupLogic, LSP lsp, String serverPath, List<String> lspArgs, BiConsumer<LanguageServerWrapper, File> workspaceInit) {
this.documentManager = new DefaultDocumentManager(this, startupLogic);
this.startupLogic = startupLogic;
this.fileWatchManager = startupLogic.getFileWatchManager();
this.lsp = lsp;
this.serverPath = () -> serverPath;
this.lspArgs = lspArgs;
this.workspaceInit = workspaceInit;
if (!lsp.usesWorkspaces()) return;
this.workspaces.addListener((ListChangeListener<WorkspaceFolder>) change -> {
var added = new ArrayList<WorkspaceFolder>();
var removed = new ArrayList<WorkspaceFolder>();
while (change.next()) {
added.addAll(change.getAddedSubList());
removed.addAll(change.getRemoved());
}
LOGGER.info("Adding: {} Removing: {}", added, removed);
this.languageServer.getWorkspaceService().didChangeWorkspaceFolders(
new DidChangeWorkspaceFoldersParams(
new WorkspaceFoldersChangeEvent(
added,
removed)));
});
}
/**
* @since 2.21
*/
@Override
public void didChangeWorkspaceFolders(DidChangeWorkspaceFoldersParams params) {
requestManager.runWrite(() -> {
workspaceManager.didChangeWorkspaceFolders(params, CancelIndicator.NullImpl);
return null;
}, (a, b) -> null);
}
/**
* Updates the workspace folders and refreshes the workspace.
*
* @since 2.21
*/
public void didChangeWorkspaceFolders(DidChangeWorkspaceFoldersParams params, CancelIndicator cancelIndicator) {
WorkspaceFoldersChangeEvent event = params.getEvent();
Map<String, WorkspaceFolder> uri2workspaceFolder = new HashMap<>();
workspaceFolders.forEach(it -> uri2workspaceFolder.put(it.getUri(), it));
event.getRemoved().forEach(it -> uri2workspaceFolder.remove(it.getUri()));
event.getAdded().forEach(it -> {
if (!uri2workspaceFolder.containsKey(it.getUri()))
uri2workspaceFolder.put(it.getUri(), it);
});
this.workspaceFolders = new ArrayList<>(uri2workspaceFolder.values());
refreshWorkspaceConfig(cancelIndicator);
}
@Override
public void didChangeWorkspaceFolders(DidChangeWorkspaceFoldersParams params) {
logInfo(">> java/didChangeWorkspaceFolders");
WorkspaceFolderChangeHandler handler = new WorkspaceFolderChangeHandler(pm, preferenceManager);
handler.update(params);
}
@Override
public void didChangeWorkspaceFolders(DidChangeWorkspaceFoldersParams params) {
logInfo(">> java/didChangeWorkspaceFolders");
WorkspaceFolderChangeHandler handler = new WorkspaceFolderChangeHandler(projectsManager, preferenceManager);
handler.update(params);
}
/**
* The workspace/didChangeWorkspaceFolders notification is sent from the client
* to the server to inform the server about workspace folder configuration changes.
* The notification is sent by default if both ServerCapabilities/workspaceFolders
* and ClientCapabilities/workspace/workspaceFolders are true; or if the server has
* registered to receive this notification it first.
*/
@JsonNotification
default void didChangeWorkspaceFolders(DidChangeWorkspaceFoldersParams params) {}