eclipse-jdtls / eclipse.jdt.ls

Java language server

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

`InitializationOptions.settings` is incorrectly documented as an array

liblit-at-amazon opened this issue · comments

The Initialize Request section of the "Running the JAVA LS server from the command line" wiki page describes the InitializationOptions.settings property as an array of JavaConfigurationSettings:

interface InitializationOptions {
        ...
        /**
         * Java LS configuration settings
         */
        settings?: JavaConfigurationSettings[];
}

However, an example given later in that section shows settings as a single JavaConfigurationSettings instance, not an array of multiple JavaConfigurationSettings instances:

InitializeParams: {
    ...
    "initializationOptions": {
        ...
        "settings": {
            "java": {
                ...
            }
        }
    },
    ...
}

In practice, I find that when I pass settings as an array of one JavaConfigurationSettings instance, its value is ignored. Conversely, if I pass settings directly as a single JavaConfigurationSettings instance, its value is used.

This line of code from the server's implementation also suggests that settings is expected to be a dictionary, not an array:

if (initializationOptions.get(SETTINGS_KEY) instanceof Map<?, ?> settings) {

Therefore, I believe that the documentation's declaration of interface InitializationOptions is incorrect. The value of the InitializationOptions.settings property should be a single JavaConfigurationSettings instance, not an array of JavaConfigurationSettings instances, as in:

interface InitializationOptions {
        ...
        /**
         * Java LS configuration settings
         */
        settings?: JavaConfigurationSettings;
}