Skip to content

Commit 1e84b35

Browse files
yaohaizhfbricon
authored andcommitted
Reload prompt when extension bundle changed. (#822)
Signed-off-by: Yaohai Zheng <[email protected]>
1 parent b6b922c commit 1e84b35

File tree

6 files changed

+50
-16
lines changed

6 files changed

+50
-16
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,6 @@ undefined
88
target
99
dist
1010
bin/
11+
.settings
12+
.classpath
13+
.project

package-lock.json

Lines changed: 4 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
"bugs": "https://github.com/redhat-developer/vscode-java/issues",
1111
"preview": true,
1212
"engines": {
13-
"vscode": "^1.30.0"
13+
"vscode": "^1.31.0"
1414
},
1515
"repository": {
1616
"type": "git",

src/extension.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import * as os from 'os';
55
import * as fs from 'fs';
66
import { workspace, extensions, ExtensionContext, window, StatusBarAlignment, commands, ViewColumn, Uri, CancellationToken, TextDocumentContentProvider, TextEditor, WorkspaceConfiguration, languages, IndentAction, ProgressLocation, InputBoxOptions, Selection, Position, EventEmitter } from 'vscode';
77
import { ExecuteCommandParams, ExecuteCommandRequest, LanguageClient, LanguageClientOptions, RevealOutputChannelOn, Position as LSPosition, Location as LSLocation, StreamInfo, VersionedTextDocumentIdentifier } from 'vscode-languageclient';
8-
import { collectionJavaExtensions } from './plugin';
8+
import { onExtensionChange, collectJavaExtensions } from './plugin';
99
import { prepareExecutable, awaitServerConnection } from './javaServerStarter';
1010
import * as requirements from './requirements';
1111
import { Commands } from './commands';
@@ -68,7 +68,7 @@ export function activate(context: ExtensionContext): Promise<ExtensionAPI> {
6868
],
6969
},
7070
initializationOptions: {
71-
bundles: collectionJavaExtensions(extensions.all),
71+
bundles: collectJavaExtensions(extensions.all),
7272
workspaceFolders: workspace.workspaceFolders ? workspace.workspaceFolders.map(f => f.uri.toString()) : null,
7373
settings: { java: getJavaConfiguration() },
7474
extendedClientCapabilities:{
@@ -304,6 +304,9 @@ export function activate(context: ExtensionContext): Promise<ExtensionAPI> {
304304
}
305305
};
306306
context.subscriptions.push(workspace.registerTextDocumentContentProvider('jdt', provider));
307+
extensions.onDidChange(() => {
308+
onExtensionChange(extensions.all);
309+
});
307310
excludeProjectSettingsFiles();
308311
});
309312

src/plugin.ts

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
'use strict';
22

3-
import { Extension } from 'vscode';
3+
import * as vscode from 'vscode';
44
import * as path from 'path';
5+
import { Commands } from './commands';
56

6-
export function collectionJavaExtensions(extensions: Extension<any>[]): string[] {
7-
let result = [];
7+
let existingExtensions: Array<string>;
8+
9+
export function collectJavaExtensions(extensions: vscode.Extension<any>[]): string[] {
10+
const result = [];
811
if (extensions && extensions.length) {
912
for (let extension of extensions) {
1013
let contributesSection = extension.packageJSON['contributes'];
@@ -18,5 +21,35 @@ export function collectionJavaExtensions(extensions: Extension<any>[]): string[]
1821
}
1922
}
2023
}
24+
// Make a copy of extensions:
25+
existingExtensions = result.slice();
2126
return result;
2227
}
28+
29+
export function onExtensionChange(extensions: vscode.Extension<any>[]) {
30+
if (!existingExtensions) {
31+
return;
32+
}
33+
const oldExtensions = new Set(existingExtensions.slice());
34+
const newExtensions = collectJavaExtensions(extensions);
35+
let hasChanged = ( oldExtensions.size != newExtensions.length);
36+
if (!hasChanged) {
37+
for (const newExtension of newExtensions) {
38+
if (!oldExtensions.has(newExtension)) {
39+
hasChanged = true;
40+
break;
41+
}
42+
}
43+
}
44+
45+
if (hasChanged) {
46+
const msg = 'Extensions to the Java Language Server changed, reloading Visual Studio Code is required for the changes to take effect.';
47+
const action = 'Reload';
48+
const restartId = Commands.RELOAD_WINDOW;
49+
vscode.window.showWarningMessage(msg, action).then((selection) => {
50+
if (action === selection) {
51+
vscode.commands.executeCommand(restartId);
52+
}
53+
});
54+
}
55+
}

test/extension.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ suite('Java Language Extension', () => {
8888
};
8989

9090
const extensions = [fakedExtension];
91-
const result = plugin.collectionJavaExtensions(extensions);
91+
const result = plugin.collectJavaExtensions(extensions);
9292
assert(result.length === 1);
9393
assert(result[0].endsWith(path.normalize('./bin/java.extend.jar')));
9494
});

0 commit comments

Comments
 (0)