/**
* Toggles the server capabilities according to user preferences.
*/
private void syncCapabilitiesToSettings() {
if (preferenceManager.getClientPreferences().isCompletionDynamicRegistered()) {
toggleCapability(preferenceManager.getPreferences().isCompletionEnabled(), Preferences.COMPLETION_ID, Preferences.COMPLETION, CompletionHandler.DEFAULT_COMPLETION_OPTIONS);
}
if (preferenceManager.getClientPreferences().isFormattingDynamicRegistrationSupported()) {
toggleCapability(preferenceManager.getPreferences().isJavaFormatEnabled(), Preferences.FORMATTING_ID, Preferences.TEXT_DOCUMENT_FORMATTING, null);
}
if (preferenceManager.getClientPreferences().isRangeFormattingDynamicRegistrationSupported()) {
toggleCapability(preferenceManager.getPreferences().isJavaFormatEnabled(), Preferences.FORMATTING_RANGE_ID, Preferences.TEXT_DOCUMENT_RANGE_FORMATTING, null);
}
if (preferenceManager.getClientPreferences().isOnTypeFormattingDynamicRegistrationSupported()) {
toggleCapability(preferenceManager.getPreferences().isJavaFormatOnTypeEnabled(), Preferences.FORMATTING_ON_TYPE_ID, Preferences.TEXT_DOCUMENT_ON_TYPE_FORMATTING,
new DocumentOnTypeFormattingOptions(";", Arrays.asList("\n", "}")));
}
if (preferenceManager.getClientPreferences().isCodeLensDynamicRegistrationSupported()) {
toggleCapability(preferenceManager.getPreferences().isCodeLensEnabled(), Preferences.CODE_LENS_ID, Preferences.TEXT_DOCUMENT_CODE_LENS, new CodeLensOptions(true));
}
if (preferenceManager.getClientPreferences().isSignatureHelpDynamicRegistrationSupported()) {
toggleCapability(preferenceManager.getPreferences().isSignatureHelpEnabled(), Preferences.SIGNATURE_HELP_ID, Preferences.TEXT_DOCUMENT_SIGNATURE_HELP, SignatureHelpHandler.createOptions());
}
if (preferenceManager.getClientPreferences().isRenameDynamicRegistrationSupported()) {
toggleCapability(preferenceManager.getPreferences().isRenameEnabled(), Preferences.RENAME_ID, Preferences.TEXT_DOCUMENT_RENAME, RenameHandler.createOptions());
}
if (preferenceManager.getClientPreferences().isExecuteCommandDynamicRegistrationSupported()) {
toggleCapability(preferenceManager.getPreferences().isExecuteCommandEnabled(), Preferences.EXECUTE_COMMAND_ID, Preferences.WORKSPACE_EXECUTE_COMMAND,
new ExecuteCommandOptions(new ArrayList<>(commandHandler.getNonStaticCommands())));
}
if (preferenceManager.getClientPreferences().isCodeActionDynamicRegistered()) {
toggleCapability(preferenceManager.getClientPreferences().isCodeActionDynamicRegistered(), Preferences.CODE_ACTION_ID, Preferences.CODE_ACTION, getCodeActionOptions());
}
if (preferenceManager.getClientPreferences().isFoldgingRangeDynamicRegistered()) {
toggleCapability(preferenceManager.getPreferences().isFoldingRangeEnabled(), Preferences.FOLDINGRANGE_ID, Preferences.FOLDINGRANGE, null);
}
if (preferenceManager.getClientPreferences().isSelectionRangeDynamicRegistered()) {
toggleCapability(preferenceManager.getPreferences().isSelectionRangeEnabled(), Preferences.SELECTION_RANGE_ID, Preferences.SELECTION_RANGE, null);
}
}
@Override
public void registerCapabilities(InitializeResult initializeResult) {
ServerCapabilities capabilities = new ServerCapabilities();
if (!preferenceManager.getClientPreferences().isCompletionDynamicRegistered()) {
capabilities.setCompletionProvider(CompletionHandler.DEFAULT_COMPLETION_OPTIONS);
}
if (!preferenceManager.getClientPreferences().isFormattingDynamicRegistrationSupported()) {
capabilities.setDocumentFormattingProvider(Boolean.TRUE);
}
if (!preferenceManager.getClientPreferences().isRangeFormattingDynamicRegistrationSupported()) {
capabilities.setDocumentRangeFormattingProvider(Boolean.TRUE);
}
if (!preferenceManager.getClientPreferences().isOnTypeFormattingDynamicRegistrationSupported()) {
capabilities.setDocumentOnTypeFormattingProvider(new DocumentOnTypeFormattingOptions(";", Arrays.asList("\n", "}")));
}
if (!preferenceManager.getClientPreferences().isCodeLensDynamicRegistrationSupported()) {
capabilities.setCodeLensProvider(new CodeLensOptions(true));
}
if (!preferenceManager.getClientPreferences().isSignatureHelpDynamicRegistrationSupported()) {
capabilities.setSignatureHelpProvider(SignatureHelpHandler.createOptions());
}
if (!preferenceManager.getClientPreferences().isRenameDynamicRegistrationSupported()) {
capabilities.setRenameProvider(RenameHandler.createOptions());
}
if (!preferenceManager.getClientPreferences().isCodeActionDynamicRegistered()) {
capabilities.setCodeActionProvider(Boolean.TRUE);
}
if (!preferenceManager.getClientPreferences().isExecuteCommandDynamicRegistrationSupported()) {
Set<String> commands = commandHandler.getAllCommands();
if (!commands.isEmpty()) {
capabilities.setExecuteCommandProvider(new ExecuteCommandOptions(new ArrayList<>(commands)));
}
} else {
// Send static command at the startup - they remain registered all the time
Set<String> staticCommands = commandHandler.getStaticCommands();
if (!staticCommands.isEmpty()) {
capabilities.setExecuteCommandProvider(new ExecuteCommandOptions(new ArrayList<>(staticCommands)));
}
}
if (!preferenceManager.getClientPreferences().isWorkspaceSymbolDynamicRegistered()) {
capabilities.setWorkspaceSymbolProvider(Boolean.TRUE);
}
if (!preferenceManager.getClientPreferences().isClientDocumentSymbolProviderRegistered() && !preferenceManager.getClientPreferences().isDocumentSymbolDynamicRegistered()) {
capabilities.setDocumentSymbolProvider(Boolean.TRUE);
}
if (!preferenceManager.getClientPreferences().isDefinitionDynamicRegistered()) {
capabilities.setDefinitionProvider(Boolean.TRUE);
}
if (!preferenceManager.getClientPreferences().isTypeDefinitionDynamicRegistered()) {
capabilities.setTypeDefinitionProvider(Boolean.TRUE);
}
if (!preferenceManager.getClientPreferences().isClientHoverProviderRegistered() && !preferenceManager.getClientPreferences().isHoverDynamicRegistered()) {
capabilities.setHoverProvider(Boolean.TRUE);
}
if (!preferenceManager.getClientPreferences().isReferencesDynamicRegistered()) {
capabilities.setReferencesProvider(Boolean.TRUE);
}
if (!preferenceManager.getClientPreferences().isDocumentHighlightDynamicRegistered()) {
capabilities.setDocumentHighlightProvider(Boolean.TRUE);
}
if (!preferenceManager.getClientPreferences().isFoldgingRangeDynamicRegistered()) {
capabilities.setFoldingRangeProvider(Boolean.TRUE);
}
if (!preferenceManager.getClientPreferences().isImplementationDynamicRegistered()) {
capabilities.setImplementationProvider(Boolean.TRUE);
}
if (!preferenceManager.getClientPreferences().isSelectionRangeDynamicRegistered()) {
capabilities.setSelectionRangeProvider(Boolean.TRUE);
}
capabilities.setCallHierarchyProvider(Boolean.TRUE);
TextDocumentSyncOptions textDocumentSyncOptions = new TextDocumentSyncOptions();
textDocumentSyncOptions.setOpenClose(Boolean.TRUE);
textDocumentSyncOptions.setSave(new SaveOptions(Boolean.TRUE));
textDocumentSyncOptions.setChange(TextDocumentSyncKind.Incremental);
if (preferenceManager.getClientPreferences().isWillSaveRegistered()) {
textDocumentSyncOptions.setWillSave(Boolean.TRUE);
}
if (preferenceManager.getClientPreferences().isWillSaveWaitUntilRegistered()) {
textDocumentSyncOptions.setWillSaveWaitUntil(Boolean.TRUE);
}
capabilities.setTextDocumentSync(textDocumentSyncOptions);
if (preferenceManager.getClientPreferences().isSemanticHighlightingSupported()) {
SemanticHighlightingServerCapabilities semanticHighlightingCapabilities = new SemanticHighlightingServerCapabilities();
semanticHighlightingCapabilities.setScopes(SemanticHighlightingService.getAllScopes());
capabilities.setSemanticHighlighting(semanticHighlightingCapabilities);
}
WorkspaceServerCapabilities wsCapabilities = new WorkspaceServerCapabilities();
WorkspaceFoldersOptions wsFoldersOptions = new WorkspaceFoldersOptions();
wsFoldersOptions.setSupported(Boolean.TRUE);
wsFoldersOptions.setChangeNotifications(Boolean.TRUE);
wsCapabilities.setWorkspaceFolders(wsFoldersOptions);
capabilities.setWorkspace(wsCapabilities);
initializeResult.setCapabilities(capabilities);
}
/**
* The server provides document formatting on typing.
*/
@Pure
public DocumentOnTypeFormattingOptions getDocumentOnTypeFormattingProvider() {
return this.documentOnTypeFormattingProvider;
}
/**
* The server provides document formatting on typing.
*/
public void setDocumentOnTypeFormattingProvider(final DocumentOnTypeFormattingOptions documentOnTypeFormattingProvider) {
this.documentOnTypeFormattingProvider = documentOnTypeFormattingProvider;
}