From cd2559d0c97077edefa4c5e91af7493ad0ba5c74 Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Fri, 12 Apr 2019 12:34:22 +0800 Subject: [PATCH 1/5] Auto add --enable-preview vmArgs for java 12 project Signed-off-by: Jinbo Wang --- src/commands.ts | 2 ++ src/configurationProvider.ts | 4 ++++ src/languageServerPlugin.ts | 4 ++++ 3 files changed, 10 insertions(+) diff --git a/src/commands.ts b/src/commands.ts index 24a29799..ff8e7d95 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -27,6 +27,8 @@ export const JAVA_RESOLVE_MAINMETHOD = "vscode.java.resolveMainMethod"; export const JAVA_INFER_LAUNCH_COMMAND_LENGTH = "vscode.java.inferLaunchCommandLength"; +export const JAVA_DETECT_PREVIEW_FLAG = "vscode.java.detectEnablePreviewFeaturesFlag"; + export function executeJavaLanguageServerCommand(...rest) { // TODO: need to handle error and trace telemetry return vscode.commands.executeCommand(JAVA_EXECUTE_WORKSPACE_COMMAND, ...rest); diff --git a/src/configurationProvider.ts b/src/configurationProvider.ts index 8f9d9027..5f1c5c2b 100644 --- a/src/configurationProvider.ts +++ b/src/configurationProvider.ts @@ -186,6 +186,10 @@ export class JavaDebugConfigurationProvider implements vscode.DebugConfiguration // Add the default launch options to the config. config.cwd = config.cwd || _.get(folder, "uri.fsPath"); + // Auto add '--enable-preview' vmArgs if the java project enables COMPILER_PB_ENABLE_PREVIEW_FEATURES flag. + if (await lsPlugin.detectPreviewFlag(config.mainClass, config.projectName)) { + config.vmArgs = (config.vmArgs || "") + " --enable-preview"; + } } else if (config.request === "attach") { if (!config.hostName || !config.port) { throw new utility.UserError({ diff --git a/src/languageServerPlugin.ts b/src/languageServerPlugin.ts index e3bab2d7..f730370d 100644 --- a/src/languageServerPlugin.ts +++ b/src/languageServerPlugin.ts @@ -61,3 +61,7 @@ export function validateLaunchConfig(workspaceUri: vscode.Uri, mainClass: string export function inferLaunchCommandLength(config: vscode.DebugConfiguration): Promise { return >commands.executeJavaLanguageServerCommand(commands.JAVA_INFER_LAUNCH_COMMAND_LENGTH, JSON.stringify(config)); } + +export function detectPreviewFlag(mainClass: string, projectName?: string): Promise { + return >commands.executeJavaLanguageServerCommand(commands.JAVA_DETECT_PREVIEW_FLAG, mainClass, projectName); +} \ No newline at end of file From c047013a4d558bc6c04579f26cdb68af18b412f4 Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Fri, 12 Apr 2019 12:39:40 +0800 Subject: [PATCH 2/5] make tslint happy Signed-off-by: Jinbo Wang --- src/languageServerPlugin.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languageServerPlugin.ts b/src/languageServerPlugin.ts index f730370d..2c3eff61 100644 --- a/src/languageServerPlugin.ts +++ b/src/languageServerPlugin.ts @@ -64,4 +64,4 @@ export function inferLaunchCommandLength(config: vscode.DebugConfiguration): Pro export function detectPreviewFlag(mainClass: string, projectName?: string): Promise { return >commands.executeJavaLanguageServerCommand(commands.JAVA_DETECT_PREVIEW_FLAG, mainClass, projectName); -} \ No newline at end of file +} From 833a8a222bbeb5328e0995646b5a9c69e1022650 Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Fri, 12 Apr 2019 16:41:41 +0800 Subject: [PATCH 3/5] Use new generic api to check project preview flag Signed-off-by: Jinbo Wang --- src/commands.ts | 4 +++- src/languageServerPlugin.ts | 21 +++++++++++++++++++-- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/commands.ts b/src/commands.ts index ff8e7d95..942960dd 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -27,7 +27,9 @@ export const JAVA_RESOLVE_MAINMETHOD = "vscode.java.resolveMainMethod"; export const JAVA_INFER_LAUNCH_COMMAND_LENGTH = "vscode.java.inferLaunchCommandLength"; -export const JAVA_DETECT_PREVIEW_FLAG = "vscode.java.detectEnablePreviewFeaturesFlag"; +export const JAVA_GET_PROJECT_SETTINGS = "vscode.java.getProjectSettings"; + +export const JAVA_GET_PROJECT_SETTINGS_FROM_TYPE = "vscode.java.getProjectSettingsFromType"; export function executeJavaLanguageServerCommand(...rest) { // TODO: need to handle error and trace telemetry diff --git a/src/languageServerPlugin.ts b/src/languageServerPlugin.ts index 2c3eff61..026a9eb6 100644 --- a/src/languageServerPlugin.ts +++ b/src/languageServerPlugin.ts @@ -62,6 +62,23 @@ export function inferLaunchCommandLength(config: vscode.DebugConfiguration): Pro return >commands.executeJavaLanguageServerCommand(commands.JAVA_INFER_LAUNCH_COMMAND_LENGTH, JSON.stringify(config)); } -export function detectPreviewFlag(mainClass: string, projectName?: string): Promise { - return >commands.executeJavaLanguageServerCommand(commands.JAVA_DETECT_PREVIEW_FLAG, mainClass, projectName); +export function getProjectSettings(projectName: string, inheritOptions?: boolean): Promise<{[key: string]: string}> { + return >commands.executeJavaLanguageServerCommand( + commands.JAVA_GET_PROJECT_SETTINGS, projectName, inheritOptions); +} + +export function getProjectSettingsFromType(className: string, inheritOptions?: boolean): Promise<{[key: string]: string}> { + return >commands.executeJavaLanguageServerCommand( + commands.JAVA_GET_PROJECT_SETTINGS_FROM_TYPE, className, inheritOptions); +} + +const COMPILER_PB_ENABLE_PREVIEW_FEATURES: string = "org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures"; +export async function detectPreviewFlag(className: string, projectName: string): Promise { + if (projectName) { + const settings = (await getProjectSettings(projectName, false)) || {}; + return settings[COMPILER_PB_ENABLE_PREVIEW_FEATURES] === "enabled"; + } else { + const settings = (await getProjectSettingsFromType(className, false)) || {}; + return settings[COMPILER_PB_ENABLE_PREVIEW_FEATURES] === "enabled"; + } } From f158f2040f956da5e10db032f97ea992d751e251 Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Mon, 15 Apr 2019 13:16:26 +0800 Subject: [PATCH 4/5] Address review comments Signed-off-by: Jinbo Wang --- src/commands.ts | 4 +--- src/languageServerPlugin.ts | 27 ++++++++++++--------------- 2 files changed, 13 insertions(+), 18 deletions(-) diff --git a/src/commands.ts b/src/commands.ts index 942960dd..f5efb9a0 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -27,9 +27,7 @@ export const JAVA_RESOLVE_MAINMETHOD = "vscode.java.resolveMainMethod"; export const JAVA_INFER_LAUNCH_COMMAND_LENGTH = "vscode.java.inferLaunchCommandLength"; -export const JAVA_GET_PROJECT_SETTINGS = "vscode.java.getProjectSettings"; - -export const JAVA_GET_PROJECT_SETTINGS_FROM_TYPE = "vscode.java.getProjectSettingsFromType"; +export const JAVA_CHECK_PROJECT_SETTINGS = "vscode.java.checkProjectSettings"; export function executeJavaLanguageServerCommand(...rest) { // TODO: need to handle error and trace telemetry diff --git a/src/languageServerPlugin.ts b/src/languageServerPlugin.ts index 026a9eb6..de2be3b2 100644 --- a/src/languageServerPlugin.ts +++ b/src/languageServerPlugin.ts @@ -62,23 +62,20 @@ export function inferLaunchCommandLength(config: vscode.DebugConfiguration): Pro return >commands.executeJavaLanguageServerCommand(commands.JAVA_INFER_LAUNCH_COMMAND_LENGTH, JSON.stringify(config)); } -export function getProjectSettings(projectName: string, inheritOptions?: boolean): Promise<{[key: string]: string}> { - return >commands.executeJavaLanguageServerCommand( - commands.JAVA_GET_PROJECT_SETTINGS, projectName, inheritOptions); -} - -export function getProjectSettingsFromType(className: string, inheritOptions?: boolean): Promise<{[key: string]: string}> { - return >commands.executeJavaLanguageServerCommand( - commands.JAVA_GET_PROJECT_SETTINGS_FROM_TYPE, className, inheritOptions); +export function checkProjectSettings(className: string, projectName: string, inheritedOptions: boolean, expectedOptions: {[key: string]: string}): Promise { + return >commands.executeJavaLanguageServerCommand( + commands.JAVA_CHECK_PROJECT_SETTINGS, JSON.stringify({ + className, + projectName, + inheritedOptions, + expectedOptions + })); } const COMPILER_PB_ENABLE_PREVIEW_FEATURES: string = "org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures"; export async function detectPreviewFlag(className: string, projectName: string): Promise { - if (projectName) { - const settings = (await getProjectSettings(projectName, false)) || {}; - return settings[COMPILER_PB_ENABLE_PREVIEW_FEATURES] === "enabled"; - } else { - const settings = (await getProjectSettingsFromType(className, false)) || {}; - return settings[COMPILER_PB_ENABLE_PREVIEW_FEATURES] === "enabled"; - } + const expectedOptions = { + [COMPILER_PB_ENABLE_PREVIEW_FEATURES]: "enabled" + }; + return await checkProjectSettings(className, projectName, true, expectedOptions); } From 95f8f51a57a27e07eea68feb50e3e7e3b65cdfa0 Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Mon, 15 Apr 2019 13:26:08 +0800 Subject: [PATCH 5/5] Make tslint happy Signed-off-by: Jinbo Wang --- src/languageServerPlugin.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/languageServerPlugin.ts b/src/languageServerPlugin.ts index de2be3b2..cdeb8703 100644 --- a/src/languageServerPlugin.ts +++ b/src/languageServerPlugin.ts @@ -62,20 +62,21 @@ export function inferLaunchCommandLength(config: vscode.DebugConfiguration): Pro return >commands.executeJavaLanguageServerCommand(commands.JAVA_INFER_LAUNCH_COMMAND_LENGTH, JSON.stringify(config)); } -export function checkProjectSettings(className: string, projectName: string, inheritedOptions: boolean, expectedOptions: {[key: string]: string}): Promise { +export function checkProjectSettings(className: string, projectName: string, inheritedOptions: boolean, expectedOptions: {[key: string]: string}): +Promise { return >commands.executeJavaLanguageServerCommand( commands.JAVA_CHECK_PROJECT_SETTINGS, JSON.stringify({ className, projectName, inheritedOptions, - expectedOptions + expectedOptions, })); } const COMPILER_PB_ENABLE_PREVIEW_FEATURES: string = "org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures"; export async function detectPreviewFlag(className: string, projectName: string): Promise { const expectedOptions = { - [COMPILER_PB_ENABLE_PREVIEW_FEATURES]: "enabled" + [COMPILER_PB_ENABLE_PREVIEW_FEATURES]: "enabled", }; return await checkProjectSettings(className, projectName, true, expectedOptions); }