Page History
...
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)
...