1
1
import * as vscode from "vscode" ;
2
2
import { confirmModal } from "../util/input" ;
3
- import { StopDaemonsReply } from "../proto/gradle_pb" ;
4
3
import { logger } from "../logger" ;
5
4
import { Command } from "./Command" ;
6
5
import { RootProjectsStore } from "../stores" ;
7
- import { GradleClient } from "../client" ;
6
+ import { getGradleConfig } from "../util/config" ;
7
+ import { GradleStatus } from "../views/gradleDaemons/services/GradleStatus" ;
8
+ import { GradleConnectionType } from "../views/gradleDaemons/models/GradleConnectionType" ;
9
+ import { GradleWrapper } from "../views/gradleDaemons/services/GradleWrapper" ;
10
+ import { GradleLocalInstallation } from "../views/gradleDaemons/services/GradleLocalInstallation" ;
11
+ import { COMMAND_REFRESH_DAEMON_STATUS } from "./RefreshDaemonStatusCommand" ;
12
+
8
13
export const COMMAND_STOP_DAEMONS = "gradle.stopDaemons" ;
9
14
10
15
export class StopDaemonsCommand extends Command {
11
- constructor ( private client : GradleClient , private rootProjectsStore : RootProjectsStore ) {
16
+ constructor ( private rootProjectsStore : RootProjectsStore ) {
12
17
super ( ) ;
13
18
}
14
19
async run ( ) : Promise < void > {
@@ -20,14 +25,29 @@ export class StopDaemonsCommand extends Command {
20
25
return ;
21
26
}
22
27
const gradleRootFolders = await this . rootProjectsStore . getProjectRootsWithUniqueVersions ( ) ;
23
- const promises : Promise < StopDaemonsReply | void > [ ] = gradleRootFolders . map ( ( rootProject ) =>
24
- this . client . stopDaemons ( rootProject . getProjectUri ( ) . fsPath )
25
- ) ;
26
- const replies = await Promise . all ( promises ) ;
27
- replies . forEach ( ( reply ) => {
28
- if ( reply ) {
29
- logger . info ( reply . getMessage ( ) ) ;
30
- }
31
- } ) ;
28
+ try {
29
+ const promises : Promise < void > [ ] = gradleRootFolders . map ( ( rootProject ) =>
30
+ this . stopDaemons ( rootProject . getProjectUri ( ) . fsPath )
31
+ ) ;
32
+ await Promise . all ( promises ) ;
33
+ logger . info ( `Successfully stopped all daemons.` ) ;
34
+ await vscode . commands . executeCommand ( COMMAND_REFRESH_DAEMON_STATUS ) ;
35
+ } catch ( error ) {
36
+ logger . error ( `Failed to stop daemons: ${ error . message } .` ) ;
37
+ }
38
+ }
39
+
40
+ async stopDaemons ( projectFolder : string ) : Promise < void > {
41
+ const gradleConfig = getGradleConfig ( ) ;
42
+ const connectType = await GradleStatus . getConnectionType ( gradleConfig ) ;
43
+ if ( connectType === GradleConnectionType . WRAPPER ) {
44
+ const gradleExecution = new GradleWrapper ( projectFolder ) ;
45
+ await gradleExecution . exec ( [ "--stop" ] ) ;
46
+ } else if ( connectType === GradleConnectionType . LOCALINSTALLATION ) {
47
+ const gradleExecution = new GradleLocalInstallation ( gradleConfig . getGradleHome ( ) ) ;
48
+ await gradleExecution . exec ( [ "--stop" ] ) ;
49
+ } else {
50
+ logger . info ( "No daemons to stop." ) ;
51
+ }
32
52
}
33
53
}
0 commit comments