Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

It is required to restart the language server if KEITH is restarted, since the diagram view has a problem (since theia-sprotty is used) to reconnect after that.

Developing for KEITH

We use java ServiceLoader to register stuff. Here is a small example how a LanguageServerExtension is registered via a ServiceLoader and how it is used:

ServiceLoader Example

This is a LanguageServerExtension. It has to be used in the de.cau.cs.kieler.language.server plugin. Since the language-sever-plugin should not have dependencies to all plugins that define a language server extension dependency inversion is used to prevent that. A ServiceLoader does exactly that.

Here is such an example extension, the KiCoolLanguageServerExtension:

Code Block
package de.cau.cs.kieler.kicool.ide.language.server


@Singleton
class KiCoolLanguageServerExtension implements ILanguageServerExtension, CommandExtension {
	// fancy extension stuff   
}

This language server extension is provided by a corresponding contribution, which is later used to access it:

Code Block
package de.cau.cs.kieler.kicool.ide.language.server

import com.google.inject.Injector
import de.cau.cs.kieler.language.server.ILanguageServerContribution

/**
 * @author really fancy name
 *
 */
class KiCoolLanguageServerContribution implements ILanguageServerContribution {
    
    override getLanguageServerExtension(Injector injector) {
        return injector.getInstance(KiCoolLanguageServerExtension)
    }
}


Register an extension (on server side)

...