diff --git a/script/etc/nbcode.conf b/script/etc/nbcode.conf index 699e4c9..a0c5897 100644 --- a/script/etc/nbcode.conf +++ b/script/etc/nbcode.conf @@ -58,7 +58,7 @@ default_cachedir="${DEFAULT_CACHEDIR_ROOT}/dev" # options used by the launcher by default, can be overridden by explicit # command line switches -default_options="--nogui --nosplash --branding nbcode -J-Xmx1G -J-XX:+UseParallelGC -J-XX:GCTimeRatio=4 -J-XX:AdaptiveSizePolicyWeight=90 -J-Djava.awt.headless=true -J-DTopSecurityManager.disable=true -J--add-opens=java.base/java.net=ALL-UNNAMED -J--add-opens=java.base/java.lang.ref=ALL-UNNAMED -J--add-opens=java.base/java.lang=ALL-UNNAMED -J--add-opens=java.base/java.security=ALL-UNNAMED -J--add-opens=java.base/java.util=ALL-UNNAMED -J--add-opens=java.desktop/javax.swing.plaf.basic=ALL-UNNAMED -J--add-opens=java.desktop/javax.swing.text=ALL-UNNAMED -J--add-opens=java.desktop/javax.swing=ALL-UNNAMED -J--add-opens=java.desktop/java.awt=ALL-UNNAMED -J--add-opens=java.desktop/java.awt.event=ALL-UNNAMED -J--add-opens=java.prefs/java.util.prefs=ALL-UNNAMED -J--add-opens=jdk.jshell/jdk.jshell=ALL-UNNAMED -J--add-modules=jdk.jshell -J--add-exports=java.desktop/sun.awt=ALL-UNNAMED -J--add-exports=java.desktop/java.awt.peer=ALL-UNNAMED -J--add-exports=java.desktop/com.sun.beans.editors=ALL-UNNAMED -J--add-exports=java.desktop/sun.swing=ALL-UNNAMED -J--add-exports=java.desktop/sun.awt.im=ALL-UNNAMED -J--add-exports=jdk.internal.jvmstat/sun.jvmstat.monitor=ALL-UNNAMED -J--add-exports=java.management/sun.management=ALL-UNNAMED -J--add-exports=java.base/sun.reflect.annotation=ALL-UNNAMED -J--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED -J--add-exports=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED -J--add-exports=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED -J--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED -J--add-exports=jdk.compiler/com.sun.tools.javac.jvm=ALL-UNNAMED -J--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED -J--add-exports=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED -J--add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED -J--add-exports=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED -J--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED -J--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED -J--add-opens=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED -J--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED -J--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED -J--add-opens=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED -J--add-opens=jdk.compiler/com.sun.tools.javac.jvm=ALL-UNNAMED -J--add-opens=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED -J--add-opens=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED -J--add-opens=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED -J--add-opens=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED -J--add-opens=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED -J--add-opens=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED -J--add-exports=jdk.jdeps/com.sun.tools.classfile=ALL-UNNAMED -J--add-exports=jdk.jdeps/com.sun.tools.javap=ALL-UNNAMED -J-XX:+IgnoreUnrecognizedVMOptions" +default_options="--nogui --nosplash --branding nbcode -J-Djava.awt.headless=true -J-DTopSecurityManager.disable=true -J--add-opens=java.base/java.net=ALL-UNNAMED -J--add-opens=java.base/java.lang.ref=ALL-UNNAMED -J--add-opens=java.base/java.lang=ALL-UNNAMED -J--add-opens=java.base/java.security=ALL-UNNAMED -J--add-opens=java.base/java.util=ALL-UNNAMED -J--add-opens=java.desktop/javax.swing.plaf.basic=ALL-UNNAMED -J--add-opens=java.desktop/javax.swing.text=ALL-UNNAMED -J--add-opens=java.desktop/javax.swing=ALL-UNNAMED -J--add-opens=java.desktop/java.awt=ALL-UNNAMED -J--add-opens=java.desktop/java.awt.event=ALL-UNNAMED -J--add-opens=java.prefs/java.util.prefs=ALL-UNNAMED -J--add-opens=jdk.jshell/jdk.jshell=ALL-UNNAMED -J--add-modules=jdk.jshell -J--add-exports=java.desktop/sun.awt=ALL-UNNAMED -J--add-exports=java.desktop/java.awt.peer=ALL-UNNAMED -J--add-exports=java.desktop/com.sun.beans.editors=ALL-UNNAMED -J--add-exports=java.desktop/sun.swing=ALL-UNNAMED -J--add-exports=java.desktop/sun.awt.im=ALL-UNNAMED -J--add-exports=jdk.internal.jvmstat/sun.jvmstat.monitor=ALL-UNNAMED -J--add-exports=java.management/sun.management=ALL-UNNAMED -J--add-exports=java.base/sun.reflect.annotation=ALL-UNNAMED -J--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED -J--add-exports=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED -J--add-exports=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED -J--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED -J--add-exports=jdk.compiler/com.sun.tools.javac.jvm=ALL-UNNAMED -J--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED -J--add-exports=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED -J--add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED -J--add-exports=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED -J--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED -J--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED -J--add-opens=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED -J--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED -J--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED -J--add-opens=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED -J--add-opens=jdk.compiler/com.sun.tools.javac.jvm=ALL-UNNAMED -J--add-opens=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED -J--add-opens=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED -J--add-opens=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED -J--add-opens=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED -J--add-opens=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED -J--add-opens=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED -J--add-exports=jdk.jdeps/com.sun.tools.classfile=ALL-UNNAMED -J--add-exports=jdk.jdeps/com.sun.tools.javap=ALL-UNNAMED" # for development purposes you may wish to append: -J-Dnetbeans.logger.console=true -J-ea diff --git a/vscode/package.json b/vscode/package.json index 3ee87d2..c15846a 100644 --- a/vscode/package.json +++ b/vscode/package.json @@ -139,6 +139,12 @@ "description": "Specifies the JDK on which user's project will be run. Defaults to the value of netbeans.jdkhome", "scope": "machine-overridable" }, + "netbeans.serverVmOptions": { + "type": "array", + "default": [], + "description": "Specifies extra VM arguments used to launch the Apache NetBeans Language Server", + "scope": "machine-overridable" + }, "netbeans.verbose": { "type": "boolean", "default": false, diff --git a/vscode/src/extension.ts b/vscode/src/extension.ts index 14294c2..946c08b 100644 --- a/vscode/src/extension.ts +++ b/vscode/src/extension.ts @@ -181,6 +181,23 @@ export function awaitClient() : Promise { function findJDK(onChange: (path : string | null) => void): void { let nowDark : boolean = isDarkColorTheme(); let nowJavaEnabled : boolean = isJavaSupportEnabled(); + function sameStringArray(a: string[] | undefined, b: string[] | undefined): boolean { + const aa = a || []; + const bb = b || []; + if (aa.length !== bb.length) { + return false; + } + for (let i = 0; i < aa.length; i++) { + if (aa[i] !== bb[i]) { + return false; + } + } + return true; + } + function getServerVmOptions(): string[] { + const raw = workspace.getConfiguration('netbeans')?.get('serverVmOptions', []); + return Array.isArray(raw) ? (raw as any[]).map(String) : []; + } function find(): string | null { let nbJdk = workspace.getConfiguration('netbeans').get('jdkhome'); if (nbJdk) { @@ -204,6 +221,7 @@ function findJDK(onChange: (path : string | null) => void): void { let currentJdk = find(); let projectJdk : string | undefined = getProjectJDKHome(); + let serverVmOptions: string[] = getServerVmOptions(); validateJDKCompatibility(projectJdk); let timeout: NodeJS.Timeout | undefined = undefined; workspace.onDidChangeConfiguration(params => { @@ -228,11 +246,13 @@ function findJDK(onChange: (path : string | null) => void): void { let newD = isDarkColorTheme(); let newJavaEnabled = isJavaSupportEnabled(); let newProjectJDK : string | undefined = getProjectJDKHome(); - if (newJdk !== currentJdk || newD != nowDark || newJavaEnabled != nowJavaEnabled || newProjectJDK != projectJdk) { + let newServerVmOptions: string[] = getServerVmOptions(); + if (newJdk !== currentJdk || newD != nowDark || newJavaEnabled != nowJavaEnabled || newProjectJDK != projectJdk || !sameStringArray(newServerVmOptions, serverVmOptions)) { nowDark = newD; nowJavaEnabled = newJavaEnabled; currentJdk = newJdk; projectJdk = newProjectJDK; + serverVmOptions = newServerVmOptions; onChange(currentJdk); } }, 0); @@ -1316,7 +1336,12 @@ function doActivateWithJDK(promise: Promise, specifiedJDK: str }); server.listen(() => { const address: any = server.address(); - let extras : string[] = ["--modules", "-J-XX:PerfMaxStringConstLength=10240"]; + let extras : string[] = []; + const rawVmOptions = netbeansConfig.get('serverVmOptions', []); + if (Array.isArray(rawVmOptions)) { + extras.push(...(rawVmOptions as any[]).map((el) => `-J${el}`)); + } + extras.push("--modules", "-J-XX:PerfMaxStringConstLength=10240"); if (isDarkColorTheme()) { extras.push('--laf', 'com.formdev.flatlaf.FlatDarkLaf'); }