Skip to content

Commit 7ef38c6

Browse files
jdneorgrunber
authored andcommitted
Remove the compatibility check for createLanguageStatusItem() api
Signed-off-by: Sheng Chen <[email protected]>
1 parent 65a6431 commit 7ef38c6

File tree

4 files changed

+60
-116
lines changed

4 files changed

+60
-116
lines changed

src/extension.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import * as fs from 'fs';
55
import * as fse from 'fs-extra';
66
import * as os from 'os';
77
import * as path from 'path';
8-
import { CodeActionContext, commands, ConfigurationTarget, Diagnostic, env, EventEmitter, ExtensionContext, extensions, IndentAction, InputBoxOptions, languages, RelativePattern, TextDocument, UIKind, Uri, ViewColumn, window, workspace, WorkspaceConfiguration, version } from 'vscode';
8+
import { CodeActionContext, commands, ConfigurationTarget, Diagnostic, env, EventEmitter, ExtensionContext, extensions, IndentAction, InputBoxOptions, languages, RelativePattern, TextDocument, UIKind, Uri, ViewColumn, window, workspace, WorkspaceConfiguration } from 'vscode';
99
import { CancellationToken, CodeActionParams, CodeActionRequest, Command, CompletionRequest, DidChangeConfigurationNotification, ExecuteCommandParams, ExecuteCommandRequest, LanguageClientOptions, RevealOutputChannelOn } from 'vscode-languageclient';
1010
import { LanguageClient } from 'vscode-languageclient/node';
1111
import { apiManager } from './apiManager';
@@ -22,7 +22,7 @@ import { collectJavaExtensions, getBundlesToReload, isContributedPartUpdated } f
2222
import { registerClientProviders } from './providerDispatcher';
2323
import { initialize as initializeRecommendation } from './recommendation';
2424
import * as requirements from './requirements';
25-
import { runtimeStatusBarProvider } from './runtimeStatusBarProvider';
25+
import { languageStatusBarProvider } from './runtimeStatusBarProvider';
2626
import { serverStatusBarProvider } from './serverStatusBarProvider';
2727
import { ACTIVE_BUILD_TOOL_STATE, cleanWorkspaceFileName, getJavaServerMode, handleTextDocumentChanges, getImportMode, onConfigurationChange, ServerMode, ImportMode } from './settings';
2828
import { snippetCompletionProvider } from './snippetCompletionProvider';
@@ -399,7 +399,7 @@ export async function activate(context: ExtensionContext): Promise<ExtensionAPI>
399399

400400
context.subscriptions.push(snippetCompletionProvider.initialize());
401401
context.subscriptions.push(serverStatusBarProvider);
402-
context.subscriptions.push(runtimeStatusBarProvider);
402+
context.subscriptions.push(languageStatusBarProvider);
403403

404404
const classEditorProviderRegistration = window.registerCustomEditorProvider(JavaClassEditorProvider.viewType, new JavaClassEditorProvider(context));
405405
context.subscriptions.push(classEditorProviderRegistration);
@@ -410,7 +410,7 @@ export async function activate(context: ExtensionContext): Promise<ExtensionAPI>
410410
if (event === ServerMode.standard) {
411411
syntaxClient.stop();
412412
fileEventHandler.setServerStatus(true);
413-
runtimeStatusBarProvider.initialize(context);
413+
languageStatusBarProvider.initialize(context);
414414
}
415415
commands.executeCommand('setContext', 'java:serverMode', event);
416416
});

src/languageStatusItemFactory.ts

Lines changed: 17 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,6 @@ const languageServerDocumentSelector = [
1313
{ pattern: '**/{build,settings}.gradle.kts'}
1414
];
1515

16-
export function supportsLanguageStatus(): boolean {
17-
return !!vscode.languages.createLanguageStatusItem;
18-
}
19-
2016
export namespace StatusCommands {
2117
export const switchToStandardCommand = {
2218
title: "Load Projects",
@@ -25,12 +21,6 @@ export namespace StatusCommands {
2521
tooltip: "LightWeight mode only provides limited features, please load projects to get full feature set"
2622
};
2723

28-
export const showServerStatusCommand = {
29-
title: "Show Build Status",
30-
command: Commands.SHOW_SERVER_TASK_STATUS,
31-
tooltip: "Show Build Status"
32-
};
33-
3424
export const configureJavaRuntimeCommand = {
3525
title: "Configure Java Runtime",
3626
command: "workbench.action.openSettings",
@@ -47,19 +37,16 @@ export namespace StatusCommands {
4737
}
4838

4939
export namespace RuntimeStatusItemFactory {
50-
export function create(text: string, vmInstallPath: string): any {
51-
if (supportsLanguageStatus()) {
52-
const item = vscode.languages.createLanguageStatusItem("javaRuntimeStatusItem", languageServerDocumentSelector);
53-
item.severity = vscode.LanguageStatusSeverity?.Information;
54-
item.name = "Java Runtime";
55-
item.text = text;
56-
item.command = StatusCommands.configureJavaRuntimeCommand;
57-
if (vmInstallPath) {
58-
item.command.tooltip = `Language Level: ${text} <${vmInstallPath}>`;
59-
}
60-
return item;
40+
export function create(text: string, vmInstallPath: string): vscode.LanguageStatusItem {
41+
const item = vscode.languages.createLanguageStatusItem("javaRuntimeStatusItem", languageServerDocumentSelector);
42+
item.severity = vscode.LanguageStatusSeverity?.Information;
43+
item.name = "Java Runtime";
44+
item.text = text;
45+
item.command = StatusCommands.configureJavaRuntimeCommand;
46+
if (vmInstallPath) {
47+
item.command.tooltip = `Language Level: ${text} <${vmInstallPath}>`;
6148
}
62-
return undefined;
49+
return item;
6350
}
6451

6552
export function update(item: any, text: string, vmInstallPath: string): void {
@@ -69,17 +56,14 @@ export namespace RuntimeStatusItemFactory {
6956
}
7057

7158
export namespace BuildFileStatusItemFactory {
72-
export function create(buildFilePath: string): any {
73-
if (supportsLanguageStatus()) {
74-
const fileName = path.basename(buildFilePath);
75-
const item = vscode.languages.createLanguageStatusItem("javaBuildFileStatusItem", languageServerDocumentSelector);
76-
item.severity = vscode.LanguageStatusSeverity?.Information;
77-
item.name = "Java Build File";
78-
item.text = fileName;
79-
item.command = getOpenBuildFileCommand(buildFilePath);
80-
return item;
81-
}
82-
return undefined;
59+
export function create(buildFilePath: string): vscode.LanguageStatusItem {
60+
const fileName = path.basename(buildFilePath);
61+
const item = vscode.languages.createLanguageStatusItem("javaBuildFileStatusItem", languageServerDocumentSelector);
62+
item.severity = vscode.LanguageStatusSeverity?.Information;
63+
item.name = "Java Build File";
64+
item.text = fileName;
65+
item.command = getOpenBuildFileCommand(buildFilePath);
66+
return item;
8367
}
8468

8569
export function update(item: any, buildFilePath: string): void {

src/lombokSupport.ts

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@ import * as vscode from "vscode";
77
import { ExtensionContext, window, commands } from "vscode";
88
import { Commands } from "./commands";
99
import { apiManager } from "./apiManager";
10-
import { supportsLanguageStatus } from "./languageStatusItemFactory";
11-
import { runtimeStatusBarProvider } from './runtimeStatusBarProvider';
10+
import { languageStatusBarProvider } from './runtimeStatusBarProvider';
1211
import { logger } from './log';
1312
import { getAllJavaProjects } from "./utils";
1413

@@ -157,11 +156,11 @@ export async function checkLombokDependency(context: ExtensionContext) {
157156
registerLombokConfigureCommand(context);
158157
isLombokCommandInitialized = true;
159158
}
160-
runtimeStatusBarProvider.initializeLombokStatusBar();
159+
languageStatusBarProvider.initializeLombokStatusBar();
161160
isLombokStatusBarInitialized = true;
162161
}
163162
if (isLombokStatusBarInitialized && !projectLombokPath) {
164-
runtimeStatusBarProvider.destroyLombokStatusBar();
163+
languageStatusBarProvider.destroyLombokStatusBar();
165164
isLombokStatusBarInitialized = false;
166165
cleanupLombokCache(context);
167166
}
@@ -245,16 +244,13 @@ export function registerLombokConfigureCommand(context: ExtensionContext) {
245244
}
246245

247246
export namespace LombokVersionItemFactory {
248-
export function create(text: string): any {
249-
if (supportsLanguageStatus()) {
250-
const item = vscode.languages.createLanguageStatusItem("javaLombokVersionItem", languageServerDocumentSelector);
251-
item.severity = vscode.LanguageStatusSeverity?.Information;
252-
item.name = "Lombok Version";
253-
item.text = text;
254-
item.command = getLombokChangeCommand();
255-
return item;
256-
}
257-
return undefined;
247+
export function create(text: string): vscode.LanguageStatusItem {
248+
const item = vscode.languages.createLanguageStatusItem("javaLombokVersionItem", languageServerDocumentSelector);
249+
item.severity = vscode.LanguageStatusSeverity?.Information;
250+
item.name = "Lombok Version";
251+
item.text = text;
252+
item.command = getLombokChangeCommand();
253+
return item;
258254
}
259255

260256
export function update(item: any, text: string): void {

src/runtimeStatusBarProvider.ts

Lines changed: 29 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,29 @@
11
'use strict';
22

33
import * as fse from "fs-extra";
4-
import { StatusBarItem, window, StatusBarAlignment, TextEditor, Uri, commands, workspace, version, languages, Command, ExtensionContext } from "vscode";
4+
import { window, TextEditor, Uri, commands, workspace, ExtensionContext, LanguageStatusItem } from "vscode";
55
import { Commands } from "./commands";
66
import { Disposable } from "vscode-languageclient";
77
import * as path from "path";
88
import { apiManager } from "./apiManager";
9-
import * as semver from "semver";
109
import { ACTIVE_BUILD_TOOL_STATE } from "./settings";
11-
import { BuildFileStatusItemFactory, RuntimeStatusItemFactory, StatusCommands, supportsLanguageStatus } from "./languageStatusItemFactory";
10+
import { BuildFileStatusItemFactory, RuntimeStatusItemFactory } from "./languageStatusItemFactory";
1211
import { getAllJavaProjects, getJavaConfiguration, hasBuildToolConflicts } from "./utils";
1312
import { LombokVersionItemFactory, getLombokVersion, isLombokImported } from "./lombokSupport";
1413

15-
class RuntimeStatusBarProvider implements Disposable {
16-
private statusBarItem: StatusBarItem;
17-
private runtimeStatusItem: any;
18-
private buildFileStatusItem: any;
19-
private lombokVersionItem: any;
14+
class LanguageStatusBarProvider implements Disposable {
15+
private runtimeStatusItem: LanguageStatusItem;
16+
private buildFileStatusItem: LanguageStatusItem;
17+
private lombokVersionItem: LanguageStatusItem;
2018
private javaProjects: Map<string, IProjectInfo>;
2119
private fileProjectMapping: Map<string, string>;
2220
private storagePath: string | undefined;
2321
private disposables: Disposable[];
24-
// Adopt new API for status bar item, meanwhile keep the compatibility with Theia.
25-
// See: https://github.com/redhat-developer/vscode-java/issues/1982
26-
private isAdvancedStatusBarItem: boolean;
2722

2823
constructor() {
2924
this.javaProjects = new Map<string, IProjectInfo>();
3025
this.fileProjectMapping = new Map<string, string>();
3126
this.disposables = [];
32-
this.isAdvancedStatusBarItem = semver.gte(version, "1.57.0");
3327
}
3428

3529
public async initialize(context: ExtensionContext): Promise<void> {
@@ -39,15 +33,6 @@ class RuntimeStatusBarProvider implements Disposable {
3933
this.storagePath = Uri.file(path.join(storagePath, "..", "..")).fsPath;
4034
}
4135

42-
if (!supportsLanguageStatus()) {
43-
if (this.isAdvancedStatusBarItem) {
44-
this.statusBarItem = (window.createStatusBarItem as any)("java.runtimeStatus", StatusBarAlignment.Right, 0);
45-
(this.statusBarItem as any).name = "Java Runtime Configuration";
46-
} else {
47-
this.statusBarItem = window.createStatusBarItem(StatusBarAlignment.Right, 0);
48-
}
49-
}
50-
5136
let projectUriStrings: string[];
5237
try {
5338
projectUriStrings = await getAllJavaProjects(false);
@@ -59,10 +44,6 @@ class RuntimeStatusBarProvider implements Disposable {
5944
this.javaProjects.set(Uri.parse(uri).fsPath, undefined);
6045
}
6146

62-
if (!supportsLanguageStatus()) {
63-
this.statusBarItem.command = StatusCommands.configureJavaRuntimeCommand;
64-
}
65-
6647
this.disposables.push(window.onDidChangeActiveTextEditor((textEditor) => {
6748
this.updateItem(context, textEditor);
6849
}));
@@ -111,7 +92,6 @@ class RuntimeStatusBarProvider implements Disposable {
11192
}
11293

11394
public dispose(): void {
114-
this.statusBarItem?.dispose();
11595
this.runtimeStatusItem?.dispose();
11696
this.buildFileStatusItem?.dispose();
11797
this.lombokVersionItem?.dispose();
@@ -176,63 +156,47 @@ class RuntimeStatusBarProvider implements Disposable {
176156
}
177157

178158
private async updateItem(context: ExtensionContext, textEditor: TextEditor): Promise<void> {
179-
if (!textEditor || path.extname(textEditor.document.fileName) !== ".java" && !supportsLanguageStatus()) {
180-
this.statusBarItem?.hide();
159+
if (!textEditor || path.extname(textEditor.document.fileName) !== ".java") {
181160
return;
182161
}
183162

184163
const uri: Uri = textEditor.document.uri;
185164
const projectPath: string = this.findOwnerProject(uri);
186165
if (!projectPath) {
187-
if (supportsLanguageStatus()) {
188-
this.hideRuntimeStatusItem();
189-
this.hideBuildFileStatusItem();
190-
this.hideLombokVersionItem();
191-
} else {
192-
this.statusBarItem?.hide();
193-
}
166+
this.hideRuntimeStatusItem();
167+
this.hideBuildFileStatusItem();
168+
this.hideLombokVersionItem();
194169
return;
195170
}
196171

197172
const projectInfo: IProjectInfo = await this.getProjectInfo(projectPath);
198173
if (!projectInfo) {
199-
if (supportsLanguageStatus()) {
200-
this.hideRuntimeStatusItem();
201-
this.hideBuildFileStatusItem();
202-
this.hideLombokVersionItem();
203-
} else {
204-
this.statusBarItem?.hide();
205-
}
174+
this.hideRuntimeStatusItem();
175+
this.hideBuildFileStatusItem();
176+
this.hideLombokVersionItem();
206177
return;
207178
}
208179

209180
const text = this.getJavaRuntimeFromVersion(projectInfo.sourceLevel);
210-
if (supportsLanguageStatus()) {
211-
const buildFilePath = await this.getBuildFilePath(context, projectPath);
212-
if (!this.runtimeStatusItem) {
213-
this.runtimeStatusItem = RuntimeStatusItemFactory.create(text, projectInfo.vmInstallPath);
214-
if (buildFilePath) {
215-
this.buildFileStatusItem = BuildFileStatusItemFactory.create(buildFilePath);
216-
}
217-
} else {
218-
RuntimeStatusItemFactory.update(this.runtimeStatusItem, text, projectInfo.vmInstallPath);
219-
if (buildFilePath) {
220-
BuildFileStatusItemFactory.update(this.buildFileStatusItem, buildFilePath);
221-
}
181+
const buildFilePath = await this.getBuildFilePath(context, projectPath);
182+
if (!this.runtimeStatusItem) {
183+
this.runtimeStatusItem = RuntimeStatusItemFactory.create(text, projectInfo.vmInstallPath);
184+
if (buildFilePath) {
185+
this.buildFileStatusItem = BuildFileStatusItemFactory.create(buildFilePath);
186+
}
187+
} else {
188+
RuntimeStatusItemFactory.update(this.runtimeStatusItem, text, projectInfo.vmInstallPath);
189+
if (buildFilePath) {
190+
BuildFileStatusItemFactory.update(this.buildFileStatusItem, buildFilePath);
222191
}
192+
}
193+
194+
if (isLombokImported()) {
223195
if (!this.lombokVersionItem) {
224-
if (isLombokImported()) {
225-
this.lombokVersionItem = LombokVersionItemFactory.create(getLombokVersion());
226-
}
196+
this.lombokVersionItem = LombokVersionItemFactory.create(getLombokVersion());
227197
} else {
228-
if (isLombokImported()) {
229-
LombokVersionItemFactory.update(this.lombokVersionItem, getLombokVersion());
230-
}
198+
LombokVersionItemFactory.update(this.lombokVersionItem, getLombokVersion());
231199
}
232-
} else {
233-
this.statusBarItem.text = text;
234-
this.statusBarItem.tooltip = projectInfo.vmInstallPath ? `Language Level: ${this.statusBarItem.text} <${projectInfo.vmInstallPath}>` : "Configure Java Runtime";
235-
this.statusBarItem.show();
236200
}
237201
}
238202

@@ -302,4 +266,4 @@ interface IProjectInfo {
302266
const SOURCE_LEVEL_KEY = "org.eclipse.jdt.core.compiler.source";
303267
const VM_INSTALL_PATH = "org.eclipse.jdt.ls.core.vm.location";
304268

305-
export const runtimeStatusBarProvider: RuntimeStatusBarProvider = new RuntimeStatusBarProvider();
269+
export const languageStatusBarProvider: LanguageStatusBarProvider = new LanguageStatusBarProvider();

0 commit comments

Comments
 (0)