From 335a1c982eb1be05152f60c2af4e425a74493069 Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Sun, 26 Sep 2021 13:45:01 +0800 Subject: [PATCH] Make compatible with Theia Signed-off-by: Sheng Chen --- package-lock.json | 40 +++++++++++++++++++++++++++------ package.json | 2 ++ src/runtimeStatusBarProvider.ts | 16 ++++++++++--- src/serverStatusBarProvider.ts | 21 +++++++++++++---- 4 files changed, 65 insertions(+), 14 deletions(-) diff --git a/package-lock.json b/package-lock.json index c87d845c7b..7e3f40caf9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -94,6 +94,12 @@ "integrity": "sha512-8RkBivJrDCyPpBXhVZcjh7cQxVBSmRk9QM7hOketZzp6Tg79c0N8kkpAIito9bnJ3HCVCHVYz+KHTEbfQNfeVQ==", "dev": true }, + "@types/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-D/2EJvAlCEtYFEYmmlGwbGXuK886HzyCc3nZX/tkFTQdEU8jZDAgiv08P162yB17y4ZXZoq7yFAnW4GDBb9Now==", + "dev": true + }, "@types/vscode": { "version": "1.59.0", "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.59.0.tgz", @@ -2526,9 +2532,9 @@ }, "dependencies": { "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", "dev": true, "optional": true } @@ -4850,6 +4856,12 @@ "requires": { "path-parse": "^1.0.6" } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true } } }, @@ -5657,10 +5669,12 @@ } }, "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "requires": { + "lru-cache": "^6.0.0" + } }, "semver-greatest-satisfied-range": { "version": "1.1.0", @@ -6358,6 +6372,12 @@ "supports-color": "^5.3.0" } }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -6421,6 +6441,12 @@ "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", "dev": true }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", diff --git a/package.json b/package.json index a4b7b5d853..1bdaa35631 100644 --- a/package.json +++ b/package.json @@ -1086,6 +1086,7 @@ "@types/lodash.findindex": "^4.6.6", "@types/mocha": "^5.2.5", "@types/node": "^8.10.51", + "@types/semver": "^7.3.8", "@types/vscode": "^1.57.0", "@types/winreg": "^1.2.30", "@types/winston": "^2.4.4", @@ -1111,6 +1112,7 @@ "fs-extra": "^8.1.0", "glob": "^7.1.3", "vscode-languageclient": "7.1.0-next.5", + "semver": "^7.3.5", "winreg-utf8": "^0.1.1", "winston": "^3.2.1", "winston-daily-rotate-file": "^3.10.0" diff --git a/src/runtimeStatusBarProvider.ts b/src/runtimeStatusBarProvider.ts index 944665203b..9cf4a022e5 100644 --- a/src/runtimeStatusBarProvider.ts +++ b/src/runtimeStatusBarProvider.ts @@ -1,10 +1,11 @@ 'use strict'; -import { StatusBarItem, window, StatusBarAlignment, TextEditor, Uri, commands, Event, workspace } from "vscode"; +import { StatusBarItem, window, StatusBarAlignment, TextEditor, Uri, commands, workspace, version } from "vscode"; import { Commands } from "./commands"; import { Disposable } from "vscode-languageclient"; import * as path from "path"; import { apiManager } from "./apiManager"; +import * as semver from "semver"; class RuntimeStatusBarProvider implements Disposable { private statusBarItem: StatusBarItem; @@ -12,11 +13,15 @@ class RuntimeStatusBarProvider implements Disposable { private fileProjectMapping: Map; private storagePath: string | undefined; private disposables: Disposable[]; + // Adopt new API for status bar item, meanwhile keep the compatibility with Theia. + // See: https://github.com/redhat-developer/vscode-java/issues/1982 + private isAdvancedStatusBarItem: boolean; constructor() { this.javaProjects = new Map(); this.fileProjectMapping = new Map(); this.disposables = []; + this.isAdvancedStatusBarItem = semver.gte(version, "1.57.0"); } public async initialize(storagePath?: string): Promise { @@ -25,8 +30,13 @@ class RuntimeStatusBarProvider implements Disposable { this.storagePath = Uri.file(path.join(storagePath, "..", "..")).fsPath; } - this.statusBarItem = window.createStatusBarItem("java.runtimeStatus", StatusBarAlignment.Right, 0); - this.statusBarItem.name = "Java Runtime Configuration"; + if (this.isAdvancedStatusBarItem) { + this.statusBarItem = window.createStatusBarItem("java.runtimeStatus", StatusBarAlignment.Right, 0); + this.statusBarItem.name = "Java Runtime Configuration"; + } else { + this.statusBarItem = window.createStatusBarItem(StatusBarAlignment.Right, 0); + } + let projectUriStrings: string[]; try { projectUriStrings = await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.GET_ALL_JAVA_PROJECTS); diff --git a/src/serverStatusBarProvider.ts b/src/serverStatusBarProvider.ts index a51a7bffc3..ac6eabc9bb 100644 --- a/src/serverStatusBarProvider.ts +++ b/src/serverStatusBarProvider.ts @@ -1,19 +1,30 @@ 'use strict'; -import { StatusBarItem, window, StatusBarAlignment } from "vscode"; +import { StatusBarItem, window, StatusBarAlignment, version } from "vscode"; import { Commands } from "./commands"; import { Disposable } from "vscode-languageclient"; import { ServerMode } from "./settings"; +import * as semver from "semver"; class ServerStatusBarProvider implements Disposable { private statusBarItem: StatusBarItem; + // Adopt new API for status bar item, meanwhile keep the compatibility with Theia. + // See: https://github.com/redhat-developer/vscode-java/issues/1982 + private isAdvancedStatusBarItem: boolean; constructor() { - this.statusBarItem = window.createStatusBarItem("java.serverStatus", StatusBarAlignment.Right, Number.MIN_VALUE); + this.isAdvancedStatusBarItem = semver.gte(version, "1.57.0"); + if (this.isAdvancedStatusBarItem) { + this.statusBarItem = window.createStatusBarItem("java.serverStatus", StatusBarAlignment.Right, Number.MIN_VALUE); + } else { + this.statusBarItem = window.createStatusBarItem(StatusBarAlignment.Right, Number.MIN_VALUE); + } } public showLightWeightStatus(): void { - this.statusBarItem.name = "Java Server Mode"; + if (this.isAdvancedStatusBarItem) { + this.statusBarItem.name = "Java Server Mode"; + } this.statusBarItem.text = StatusIcon.LightWeight; this.statusBarItem.command = { title: "Switch to Standard mode", @@ -25,7 +36,9 @@ class ServerStatusBarProvider implements Disposable { } public showStandardStatus(): void { - this.statusBarItem.name = "Java Server Status"; + if (this.isAdvancedStatusBarItem) { + this.statusBarItem.name = "Java Server Status"; + } this.statusBarItem.text = StatusIcon.Busy; this.statusBarItem.command = Commands.SHOW_SERVER_TASK_STATUS; this.statusBarItem.tooltip = "";