@@ -10,8 +10,8 @@ import {
10
10
TaskProvider ,
11
11
TaskScope ,
12
12
QuickPickItem ,
13
- Disposable ,
14
- ProgressLocation
13
+ ProgressLocation ,
14
+ StatusBarItem
15
15
} from 'vscode' ;
16
16
import * as path from 'path' ;
17
17
import * as fs from 'fs' ;
@@ -37,11 +37,11 @@ type AutoDetect = 'on' | 'off';
37
37
let cachedTasks : Task [ ] | undefined = undefined ;
38
38
39
39
export class GradleTaskProvider implements TaskProvider {
40
- constructor ( ) { }
40
+ constructor ( readonly statusBarItem : StatusBarItem ) { }
41
41
42
42
async provideTasks ( ) {
43
43
try {
44
- return await provideGradleTasks ( ) ;
44
+ return await provideGradleTasks ( this . statusBarItem ) ;
45
45
} catch ( e ) {
46
46
window . showErrorMessage ( `Unable to get gradle tasks - ${ e . message } ` ) ;
47
47
}
@@ -50,7 +50,7 @@ export class GradleTaskProvider implements TaskProvider {
50
50
public async resolveTask ( _task : Task ) : Promise < Task | undefined > {
51
51
const gradleTask = ( < any > _task . definition ) . task ;
52
52
if ( gradleTask ) {
53
- const kind : GradleTaskDefinition = < any > _task . definition ;
53
+ const { definition } = < any > _task ;
54
54
let buildGradleUri : Uri ;
55
55
if (
56
56
_task . scope === undefined ||
@@ -60,9 +60,9 @@ export class GradleTaskProvider implements TaskProvider {
60
60
// scope is required to be a WorkspaceFolder for resolveTask
61
61
return undefined ;
62
62
}
63
- if ( kind . path ) {
63
+ if ( definition . path ) {
64
64
buildGradleUri = _task . scope . uri . with ( {
65
- path : _task . scope . uri . path + '/' + kind . path + 'build.gradle'
65
+ path : _task . scope . uri . path + '/' + definition . path + 'build.gradle'
66
66
} ) ;
67
67
} else {
68
68
buildGradleUri = _task . scope . uri . with ( {
@@ -72,8 +72,8 @@ export class GradleTaskProvider implements TaskProvider {
72
72
const folder = workspace . getWorkspaceFolder ( buildGradleUri ) ;
73
73
if ( folder ) {
74
74
return createTask (
75
- kind ,
76
- kind . task ,
75
+ definition ,
76
+ definition . task ,
77
77
_task . scope ,
78
78
buildGradleUri ,
79
79
await getGradleWrapperCommandFromFolder ( folder )
@@ -112,7 +112,9 @@ async function getGradleWrapperCommandFromFolder(
112
112
}
113
113
}
114
114
115
- async function detectGradleTasks ( ) : Promise < Task [ ] > {
115
+ async function detectGradleTasks (
116
+ statusBarItem : StatusBarItem
117
+ ) : Promise < Task [ ] > {
116
118
const emptyTasks : Task [ ] = [ ] ;
117
119
const allTasks : Task [ ] = [ ] ;
118
120
const visitedBuildGradleFiles : Set < string > = new Set ( ) ;
@@ -128,7 +130,10 @@ async function detectGradleTasks(): Promise<Task[]> {
128
130
const paths = await workspace . findFiles ( relativePattern ) ;
129
131
for ( const path of paths ) {
130
132
if ( ! visitedBuildGradleFiles . has ( path . fsPath ) ) {
131
- const tasks = await provideGradleTasksForFolder ( path ) ;
133
+ const tasks = await provideGradleTasksForFolder (
134
+ path ,
135
+ statusBarItem
136
+ ) ;
132
137
visitedBuildGradleFiles . add ( path . fsPath ) ;
133
138
allTasks . push ( ...tasks ) ;
134
139
}
@@ -142,17 +147,20 @@ async function detectGradleTasks(): Promise<Task[]> {
142
147
}
143
148
144
149
export async function detectGradleTasksForFolder (
145
- folder : Uri
150
+ folder : Uri ,
151
+ statusBarItem : StatusBarItem
146
152
) : Promise < FolderTaskItem [ ] > {
147
153
const folderTasks : FolderTaskItem [ ] = [ ] ;
148
- const tasks = await provideGradleTasksForFolder ( folder ) ;
149
- folderTasks . push ( ...tasks . map ( t => ( { label : t . name , task : t } ) ) ) ;
154
+ const tasks = await provideGradleTasksForFolder ( folder , statusBarItem ) ;
155
+ folderTasks . push ( ...tasks . map ( task => ( { label : task . name , task } ) ) ) ;
150
156
return folderTasks ;
151
157
}
152
158
153
- export async function provideGradleTasks ( ) : Promise < Task [ ] > {
159
+ export async function provideGradleTasks (
160
+ statusBarItem : StatusBarItem
161
+ ) : Promise < Task [ ] > {
154
162
if ( ! cachedTasks ) {
155
- cachedTasks = await detectGradleTasks ( ) ;
163
+ cachedTasks = await detectGradleTasks ( statusBarItem ) ;
156
164
}
157
165
return cachedTasks ;
158
166
}
@@ -166,7 +174,8 @@ function isAutoDetectionEnabled(folder: WorkspaceFolder): boolean {
166
174
}
167
175
168
176
async function provideGradleTasksForFolder (
169
- gradleBuildFileUri : Uri
177
+ gradleBuildFileUri : Uri ,
178
+ statusBarItem : StatusBarItem
170
179
) : Promise < Task [ ] > {
171
180
const emptyTasks : Task [ ] = [ ] ;
172
181
@@ -178,22 +187,13 @@ async function provideGradleTasksForFolder(
178
187
if ( ! command ) {
179
188
return emptyTasks ;
180
189
}
181
- const tasksMap = await getTasks ( command , folder ) ;
190
+ const tasksMap = await getTasks ( command , folder , statusBarItem ) ;
182
191
if ( ! tasksMap ) {
183
192
return emptyTasks ;
184
193
}
185
194
return Object . keys ( tasksMap )
186
195
. sort ( ( a , b ) => a . localeCompare ( b ) )
187
- . map ( task =>
188
- createTask (
189
- task ,
190
- task ,
191
- folder ! ,
192
- gradleBuildFileUri ,
193
- command ,
194
- tasksMap ! [ task ]
195
- )
196
- ) ;
196
+ . map ( task => createTask ( task , task , folder ! , gradleBuildFileUri , command ) ) ;
197
197
}
198
198
199
199
export function getTaskName ( task : string , relativePath : string | undefined ) {
@@ -208,14 +208,13 @@ export function createTask(
208
208
taskName : string ,
209
209
folder : WorkspaceFolder ,
210
210
buildGradleUri : Uri ,
211
- command : string ,
212
- description ?: string
211
+ command : string
213
212
) : Task {
214
- let kind : GradleTaskDefinition ;
213
+ let definition : GradleTaskDefinition ;
215
214
if ( typeof taskDefinition === 'string' ) {
216
- kind = { type : 'gradle' , task : taskDefinition } ;
215
+ definition = { type : 'gradle' , task : taskDefinition } ;
217
216
} else {
218
- kind = taskDefinition ;
217
+ definition = taskDefinition ;
219
218
}
220
219
221
220
function getCommandLine ( task : string ) : string {
@@ -236,12 +235,12 @@ export function createTask(
236
235
237
236
const relativeBuildGradle = getRelativePath ( folder , buildGradleUri ) ;
238
237
if ( relativeBuildGradle . length ) {
239
- kind . path = getRelativePath ( folder , buildGradleUri ) ;
238
+ definition . path = getRelativePath ( folder , buildGradleUri ) ;
240
239
}
241
- const normalizedTaskName = getTaskName ( kind . task , relativeBuildGradle ) ;
240
+ const normalizedTaskName = getTaskName ( definition . task , relativeBuildGradle ) ;
242
241
const cwd = path . dirname ( buildGradleUri . fsPath ) ;
243
242
const task = new Task (
244
- kind ,
243
+ definition ,
245
244
folder ,
246
245
normalizedTaskName ,
247
246
'gradle' ,
@@ -328,11 +327,12 @@ function exec(
328
327
329
328
function getTasksFromGradle (
330
329
command : string ,
331
- folder : WorkspaceFolder
330
+ folder : WorkspaceFolder ,
331
+ statusBarItem : StatusBarItem
332
332
) : Promise < ProcessOutput > {
333
- const statusbar : Disposable = window . setStatusBarMessage (
334
- 'Refreshing gradle tasks'
335
- ) ;
333
+ statusBarItem . text = '$(sync~spin) Refreshing gradle tasks' ;
334
+ statusBarItem . show ( ) ;
335
+
336
336
const args = [ '--console' , 'plain' , 'tasks' ] ;
337
337
const tasksArgs = getTasksArgs ( ) ;
338
338
if ( tasksArgs ) {
@@ -349,39 +349,29 @@ function getTasksFromGradle(
349
349
title : 'Loading Gradle Tasks' ,
350
350
cancellable : true
351
351
} ,
352
- ( progress , token ) => {
352
+ ( _ , token ) => {
353
353
token . onCancellationRequested ( ( ) => {
354
354
process . kill ( ) ;
355
355
window . showInformationMessage (
356
356
'Operation cancelled. Try again using command "Gradle: Refresh Tasks"'
357
357
) ;
358
358
} ) ;
359
-
360
- progress . report ( { increment : 20 } ) ;
361
-
362
- const int = setInterval (
363
- ( ) =>
364
- progress . report ( {
365
- increment : 10
366
- } ) ,
367
- 1500
368
- ) ;
369
-
370
- return promise . finally ( ( ) => clearInterval ( int ) ) ;
359
+ return promise ;
371
360
}
372
361
) ;
373
362
} , 3000 ) ;
374
363
375
364
return promise . finally ( ( ) => {
376
365
clearTimeout ( showProgress ) ;
377
- statusbar . dispose ( ) ;
366
+ statusBarItem . hide ( ) ;
378
367
} ) ;
379
368
}
380
369
381
370
async function getTasks (
382
371
command : string ,
383
- folder : WorkspaceFolder
372
+ folder : WorkspaceFolder ,
373
+ statusBarItem : StatusBarItem
384
374
) : Promise < StringMap | undefined > {
385
- const { stdout } = await getTasksFromGradle ( command , folder ) ;
375
+ const { stdout } = await getTasksFromGradle ( command , folder , statusBarItem ) ;
386
376
return parseGradleTasks ( stdout ) ;
387
377
}
0 commit comments