@@ -8,7 +8,7 @@ import { registerStatusBar, updateStatusBar } from "./services/status-bar";
88import { registerWebview } from "./services/webview" ;
99import { registerHover } from "./services/hover" ;
1010import { registerEvents } from "./services/events" ;
11- import { runLanguageServer } from "./lsp/server" ;
11+ import { runLanguageServer , stopLanguageServer } from "./lsp/server" ;
1212import { runClient , stopClient } from "./lsp/client" ;
1313
1414/**
@@ -26,12 +26,35 @@ export async function activate(context: vscode.ExtensionContext) {
2626 extension . logger . client . info ( "Activating LiquidJava extension..." ) ;
2727
2828 await applyItalicOverlay ( ) ;
29+ await startExtension ( context ) ;
30+ }
31+
32+ /**
33+ * Deactivates the LiquidJava extension
34+ */
35+ export async function deactivate ( ) {
36+ extension . logger ?. client . info ( "Deactivating LiquidJava extension..." ) ;
37+ await stopClient ( "Extension was deactivated" ) ;
38+ await stopLanguageServer ( ) ;
39+ }
40+
41+ /**
42+ * Starts the LiquidJava language server and client
43+ * @param context The extension context
44+ */
45+ export async function startExtension ( context : vscode . ExtensionContext ) {
46+ // check if already running
47+ if ( extension . client || extension . serverProcess ) {
48+ extension . logger . client . info ( "LiquidJava is already running" ) ;
49+ return ;
50+ }
51+ extension . logger . client . info ( "Starting LiquidJava..." ) ;
2952
3053 // find java executable path
3154 const javaExecutablePath = findJavaExecutable ( ) ;
3255 if ( ! javaExecutablePath ) {
3356 vscode . window . showErrorMessage ( "LiquidJava - Java Runtime Not Found in JAVA_HOME or PATH" ) ;
34- extension . logger . client . error ( "Java Runtime not found in JAVA_HOME or PATH - Not activating extension " ) ;
57+ extension . logger . client . error ( "Java Runtime not found in JAVA_HOME or PATH" ) ;
3558 updateStatusBar ( "stopped" ) ;
3659 return ;
3760 }
@@ -47,9 +70,33 @@ export async function activate(context: vscode.ExtensionContext) {
4770}
4871
4972/**
50- * Deactivates the LiquidJava extension
73+ * Stops the LiquidJava language server and client
5174 */
52- export async function deactivate ( ) {
53- extension . logger ?. client . info ( "Deactivating LiquidJava extension..." ) ;
54- await stopClient ( "Extension was deactivated" ) ;
75+ export async function stopExtension ( ) {
76+ if ( ! extension . client && ! extension . serverProcess ) {
77+ extension . logger ?. client . info ( "LiquidJava is not running" ) ;
78+ return ;
79+ }
80+ extension . logger ?. client . info ( "Stopping LiquidJava..." ) ;
81+ await stopClient ( "Extension stop command" ) ;
82+ await stopLanguageServer ( ) ;
5583}
84+
85+ /**
86+ * Restarts the LiquidJava language server and client
87+ * @param context The extension context
88+ */
89+ export async function restartExtension ( context : vscode . ExtensionContext ) {
90+ extension . logger ?. client . info ( "Restarting LiquidJava..." ) ;
91+
92+ // stop if running
93+ if ( extension . client || extension . serverProcess ) {
94+ await stopExtension ( ) ;
95+ // ensure clean shutdown
96+ await new Promise ( resolve => setTimeout ( resolve , 500 ) ) ;
97+ }
98+
99+ // start again
100+ await startExtension ( context ) ;
101+ }
102+
0 commit comments