(isRestart = false, reason: ExtensionRestartReason | undefined)
| 866 | } |
| 867 | |
| 868 | export async function deactivate(isRestart = false, reason: ExtensionRestartReason | undefined): Promise<void> { |
| 869 | logger.info(`Extension deactivate was called (isRestart: ${isRestart})`); |
| 870 | |
| 871 | // Record session durations. |
| 872 | const sessionEndTimestamp = Date.now(); |
| 873 | const sessionDurationMs = sessionEndTimestamp - extensionThisSessionStart; // Always record _this_ duration. |
| 874 | const totalSessionDurationMs = isRestart ? undefined : sessionEndTimestamp - extensionTotalSessionStart; // Only record totals for non-restarts. |
| 875 | if (analytics) |
| 876 | analytics.logExtensionDeactivate({ sessionDurationMs, totalSessionDurationMs, reason }); |
| 877 | |
| 878 | extensionApiModel.clear(); |
| 879 | |
| 880 | const loggersToDispose = [...loggers]; |
| 881 | loggers.length = 0; |
| 882 | await Promise.allSettled([ |
| 883 | tryCleanup(() => setCommandVisiblity(false)), |
| 884 | tryCleanup(() => maybeAnalyzer?.dispose()), |
| 885 | tryCleanup(() => flutterDaemon?.shutdown()), |
| 886 | tryCleanup(() => vs.commands.executeCommand("setContext", FLUTTER_SUPPORTS_ATTACH, false)), |
| 887 | ...loggersToDispose.map((l) => tryCleanup(() => l.dispose())), |
| 888 | ]); |
| 889 | logger.info(`Extension cleanup done`); |
| 890 | |
| 891 | // Pump for any log events that might need to be written to the loggers. |
| 892 | await new Promise((resolve) => setTimeout(resolve, 100)); |
| 893 | |
| 894 | if (!isRestart) { |
| 895 | logger.info(`Closing all loggers...`); |
| 896 | await new Promise((resolve) => setTimeout(resolve, 50)); |
| 897 | await Promise.allSettled([ |
| 898 | tryCleanup(() => logger.dispose()), |
| 899 | tryCleanup(() => ringLogger?.dispose()), |
| 900 | tryCleanup(() => extensionLog?.dispose()), |
| 901 | ]); |
| 902 | await new Promise((resolve) => setTimeout(resolve, 50)); |
| 903 | } else { |
| 904 | logger.info(`Restarting...`); |
| 905 | await new Promise((resolve) => setTimeout(resolve, 300)); |
| 906 | } |
| 907 | } |
| 908 | |
| 909 | function setCommandVisiblity(enable: boolean, workspaceContext?: WorkspaceContext) { |
| 910 | void vs.commands.executeCommand("setContext", PROJECT_LOADED, enable); |
no test coverage detected