Add HCR document update event. (#195)
* Add HCR document update event. * Fix const value. * Refine HCR event.
This commit is contained in:
parent
80cceab24e
commit
dd884d34bc
|
@ -6,6 +6,7 @@ import * as vscode from "vscode";
|
||||||
import TelemetryReporter from "vscode-extension-telemetry";
|
import TelemetryReporter from "vscode-extension-telemetry";
|
||||||
import * as commands from "./commands";
|
import * as commands from "./commands";
|
||||||
import { JavaDebugConfigurationProvider } from "./configurationProvider";
|
import { JavaDebugConfigurationProvider } from "./configurationProvider";
|
||||||
|
import { startHotCodeReplace } from "./hotCodeReplace";
|
||||||
|
|
||||||
export function activate(context: vscode.ExtensionContext) {
|
export function activate(context: vscode.ExtensionContext) {
|
||||||
// The reporter will be initialized by the later telemetry handler.
|
// The reporter will be initialized by the later telemetry handler.
|
||||||
|
@ -43,8 +44,8 @@ export function activate(context: vscode.ExtensionContext) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
context.subscriptions.push(vscode.debug.registerDebugConfigurationProvider("java", new JavaDebugConfigurationProvider(reporter)));
|
context.subscriptions.push(vscode.debug.registerDebugConfigurationProvider("java", new JavaDebugConfigurationProvider(reporter)));
|
||||||
|
startHotCodeReplace(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
// this method is called when your extension is deactivated
|
// this method is called when your extension is deactivated
|
||||||
|
|
|
@ -0,0 +1,81 @@
|
||||||
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
|
// Licensed under the MIT license.
|
||||||
|
|
||||||
|
import * as vscode from "vscode";
|
||||||
|
|
||||||
|
const runningSessions: Set<vscode.DebugSession> = new Set();
|
||||||
|
|
||||||
|
const suppressedReasons: Set<string> = new Set();
|
||||||
|
|
||||||
|
const NOT_SHOW_AGAIN: string = "Not show again";
|
||||||
|
|
||||||
|
const JAVA_LANGID: string = "java";
|
||||||
|
|
||||||
|
const HCR_EVENT = "hotCodeReplace";
|
||||||
|
|
||||||
|
const SAVEDOCUMENT_EVENT = "saveDocument";
|
||||||
|
|
||||||
|
enum HcrEventType {
|
||||||
|
ERROR = "ERROR",
|
||||||
|
WARNING = "WARNING",
|
||||||
|
STARTING = "STARTING",
|
||||||
|
END = "END",
|
||||||
|
}
|
||||||
|
|
||||||
|
export function startHotCodeReplace(context: vscode.ExtensionContext) {
|
||||||
|
context.subscriptions.push(vscode.debug.onDidStartDebugSession((session) => {
|
||||||
|
const t = session ? session.type : undefined;
|
||||||
|
if (t === JAVA_LANGID) {
|
||||||
|
runningSessions.add(session);
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
|
context.subscriptions.push(vscode.debug.onDidTerminateDebugSession((session) => {
|
||||||
|
const t = session ? session.type : undefined;
|
||||||
|
if (t === JAVA_LANGID) {
|
||||||
|
runningSessions.delete(session);
|
||||||
|
suppressedReasons.clear();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
|
context.subscriptions.push(vscode.debug.onDidReceiveDebugSessionCustomEvent((customEvent) => {
|
||||||
|
const t = customEvent.session ? customEvent.session.type : undefined;
|
||||||
|
if (t === JAVA_LANGID) {
|
||||||
|
if (customEvent.event === HCR_EVENT) {
|
||||||
|
if (customEvent.body.eventType === HcrEventType.ERROR || customEvent.body.eventType === HcrEventType.WARNING) {
|
||||||
|
if (!suppressedReasons.has(customEvent.body.message)) {
|
||||||
|
vscode.window.showInformationMessage(`Hot code replace failed - ${customEvent.body.message}`, NOT_SHOW_AGAIN).then((res) => {
|
||||||
|
if (res === NOT_SHOW_AGAIN) {
|
||||||
|
suppressedReasons.add(customEvent.body.message);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (customEvent.body.eventType === HcrEventType.STARTING) {
|
||||||
|
vscode.window.withProgress({ location: vscode.ProgressLocation.Window }, (p) => {
|
||||||
|
p.report({ message: customEvent.body.message });
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
const listener = vscode.debug.onDidReceiveDebugSessionCustomEvent((hcrEvent) => {
|
||||||
|
p.report({ message: hcrEvent.body.message });
|
||||||
|
if (hcrEvent.body.eventType === HcrEventType.END) {
|
||||||
|
listener.dispose();
|
||||||
|
resolve();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
|
context.subscriptions.push(vscode.workspace.onDidSaveTextDocument((e) => {
|
||||||
|
if (e.languageId === JAVA_LANGID) {
|
||||||
|
runningSessions.forEach((session) => {
|
||||||
|
return session.customRequest(SAVEDOCUMENT_EVENT, { documentUri: e.uri.toString() }).then(() => {
|
||||||
|
}, () => { });
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
}
|
Loading…
Reference in New Issue