@@ -2,13 +2,9 @@ import * as vscode from 'vscode';
2
2
import { Output } from '../proto/gradle_pb' ;
3
3
import { Logger , logger } from '../logger' ;
4
4
import { GradleTasksTreeDataProvider } from '../views' ;
5
- import { GradleTaskDefinition } from '../tasks' ;
6
5
import { GradleClient } from '../client' ;
7
6
import { Icons } from '../icons' ;
8
- import {
9
- getRunBuildCancellationKey ,
10
- getRunTaskCommandCancellationKey ,
11
- } from '../client/CancellationKeys' ;
7
+ import { getRunBuildCancellationKey } from '../client/CancellationKeys' ;
12
8
13
9
export interface RunTaskOpts {
14
10
projectFolder : string ;
@@ -17,6 +13,7 @@ export interface RunTaskOpts {
17
13
input ?: string ;
18
14
onOutput ?: ( output : Output ) => void ;
19
15
showOutputColors : boolean ;
16
+ cancellationKey ?: string ;
20
17
}
21
18
22
19
export interface RunBuildOpts {
@@ -25,11 +22,19 @@ export interface RunBuildOpts {
25
22
input ?: string ;
26
23
onOutput ?: ( output : Output ) => void ;
27
24
showOutputColors : boolean ;
25
+ cancellationKey ?: string ;
28
26
}
29
27
30
28
export interface CancelTaskOpts {
31
- projectFolder : string ;
32
- taskName : string ;
29
+ projectFolder ?: string ;
30
+ taskName ?: string ;
31
+ cancellationKey ?: string ;
32
+ }
33
+
34
+ export interface CancelBuildOpts {
35
+ projectFolder ?: string ;
36
+ args ?: ReadonlyArray < string > ;
37
+ cancellationKey ?: string ;
33
38
}
34
39
35
40
export class Api {
@@ -39,61 +44,63 @@ export class Api {
39
44
private readonly icons : Icons
40
45
) { }
41
46
42
- public async runTask ( opts : RunTaskOpts ) : Promise < void > {
47
+ public onReady ( callback : ( ) => void ) : vscode . Disposable {
48
+ return this . client . onDidConnect ( callback ) ;
49
+ }
50
+
51
+ public runTask ( opts : RunTaskOpts ) : Promise < void > {
43
52
const taskArgs = ( opts . args || [ ] ) . filter ( Boolean ) ;
44
- const task = await this . findTask ( opts . projectFolder , opts . taskName ) ;
45
53
const runBuildArgs = [ opts . taskName ] . concat ( taskArgs ) ;
46
54
const runBuildOpts = {
47
55
...opts ,
48
56
args : runBuildArgs ,
49
57
} ;
50
- return this . runBuild ( runBuildOpts , task ) ;
58
+ return this . runBuild ( runBuildOpts ) ;
51
59
}
52
60
53
- public async runBuild ( opts : RunBuildOpts , task ?: vscode . Task ) : Promise < void > {
54
- const cancellationKey = getRunBuildCancellationKey (
55
- opts . projectFolder ,
56
- opts . args
57
- ) ;
61
+ public runBuild ( opts : RunBuildOpts ) : Promise < void > {
58
62
return this . client . runBuild (
59
63
opts . projectFolder ,
60
- cancellationKey ,
64
+ opts . cancellationKey ||
65
+ getRunBuildCancellationKey ( opts . projectFolder , opts . args ) ,
61
66
opts . args ,
62
67
opts . input ,
63
68
0 ,
64
- task ,
69
+ undefined ,
65
70
opts . onOutput ,
66
71
opts . showOutputColors
67
72
) ;
68
73
}
69
74
70
- public async cancelRunTask ( opts : CancelTaskOpts ) : Promise < void > {
71
- const task = await this . findTask ( opts . projectFolder , opts . taskName ) ;
72
- const cancellationKey = getRunTaskCommandCancellationKey (
73
- opts . projectFolder ,
74
- opts . taskName
75
- ) ;
76
- return this . client . cancelBuild ( cancellationKey , task ) ;
75
+ public cancelRunTask ( opts : CancelTaskOpts ) : Promise < void > {
76
+ const args = opts . taskName ? [ opts . taskName ] : [ ] ;
77
+ const cancelBuildOpts = {
78
+ projectFolder : opts . projectFolder ,
79
+ args,
80
+ cancellationKey : opts . cancellationKey ,
81
+ } ;
82
+ return this . cancelRunBuild ( cancelBuildOpts ) ;
83
+ }
84
+
85
+ public cancelRunBuild ( opts : CancelBuildOpts ) : Promise < void > {
86
+ const cancellationKey = this . getRunBuildCancellationKey ( opts ) ;
87
+ return this . client . cancelBuild ( cancellationKey ) ;
88
+ }
89
+
90
+ public cancelAllBuilds ( ) : Promise < void > {
91
+ return this . client . cancelBuilds ( ) ;
77
92
}
78
93
79
- private async findTask (
80
- projectFolder : string ,
81
- taskName : string
82
- ) : Promise < vscode . Task > {
83
- const tasks = await vscode . tasks . fetchTasks ( { type : 'gradle' } ) ;
84
- if ( ! tasks ) {
85
- throw new Error ( 'Unable to load gradle tasks' ) ;
94
+ private getRunBuildCancellationKey ( opts : CancelBuildOpts ) : string {
95
+ if ( opts . cancellationKey ) {
96
+ return opts . cancellationKey ;
86
97
}
87
- const foundTask = tasks . find ( ( task ) => {
88
- const definition = task . definition as GradleTaskDefinition ;
89
- return (
90
- task . name === taskName && definition . projectFolder === projectFolder
98
+ if ( ! opts . args || ! opts . projectFolder ) {
99
+ throw new Error (
100
+ 'args and projectFolder are required to build the cancellation key'
91
101
) ;
92
- } ) ;
93
- if ( ! foundTask ) {
94
- throw new Error ( `Unable to find task: ${ taskName } ` ) ;
95
102
}
96
- return foundTask ;
103
+ return getRunBuildCancellationKey ( opts . projectFolder , opts . args ) ;
97
104
}
98
105
99
106
public getTasksTreeProvider ( ) : GradleTasksTreeDataProvider {
0 commit comments