@@ -10,8 +10,8 @@ import {
1010 TaskProvider ,
1111 TaskScope ,
1212 QuickPickItem ,
13- Disposable ,
14- ProgressLocation
13+ ProgressLocation ,
14+ StatusBarItem
1515} from 'vscode' ;
1616import * as path from 'path' ;
1717import * as fs from 'fs' ;
@@ -37,11 +37,11 @@ type AutoDetect = 'on' | 'off';
3737let cachedTasks : Task [ ] | undefined = undefined ;
3838
3939export class GradleTaskProvider implements TaskProvider {
40- constructor ( ) { }
40+ constructor ( readonly statusBarItem : StatusBarItem ) { }
4141
4242 async provideTasks ( ) {
4343 try {
44- return await provideGradleTasks ( ) ;
44+ return await provideGradleTasks ( this . statusBarItem ) ;
4545 } catch ( e ) {
4646 window . showErrorMessage ( `Unable to get gradle tasks - ${ e . message } ` ) ;
4747 }
@@ -50,7 +50,7 @@ export class GradleTaskProvider implements TaskProvider {
5050 public async resolveTask ( _task : Task ) : Promise < Task | undefined > {
5151 const gradleTask = ( < any > _task . definition ) . task ;
5252 if ( gradleTask ) {
53- const kind : GradleTaskDefinition = < any > _task . definition ;
53+ const { definition } = < any > _task ;
5454 let buildGradleUri : Uri ;
5555 if (
5656 _task . scope === undefined ||
@@ -60,9 +60,9 @@ export class GradleTaskProvider implements TaskProvider {
6060 // scope is required to be a WorkspaceFolder for resolveTask
6161 return undefined ;
6262 }
63- if ( kind . path ) {
63+ if ( definition . path ) {
6464 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'
6666 } ) ;
6767 } else {
6868 buildGradleUri = _task . scope . uri . with ( {
@@ -72,8 +72,8 @@ export class GradleTaskProvider implements TaskProvider {
7272 const folder = workspace . getWorkspaceFolder ( buildGradleUri ) ;
7373 if ( folder ) {
7474 return createTask (
75- kind ,
76- kind . task ,
75+ definition ,
76+ definition . task ,
7777 _task . scope ,
7878 buildGradleUri ,
7979 await getGradleWrapperCommandFromFolder ( folder )
@@ -112,7 +112,9 @@ async function getGradleWrapperCommandFromFolder(
112112 }
113113}
114114
115- async function detectGradleTasks ( ) : Promise < Task [ ] > {
115+ async function detectGradleTasks (
116+ statusBarItem : StatusBarItem
117+ ) : Promise < Task [ ] > {
116118 const emptyTasks : Task [ ] = [ ] ;
117119 const allTasks : Task [ ] = [ ] ;
118120 const visitedBuildGradleFiles : Set < string > = new Set ( ) ;
@@ -128,7 +130,10 @@ async function detectGradleTasks(): Promise<Task[]> {
128130 const paths = await workspace . findFiles ( relativePattern ) ;
129131 for ( const path of paths ) {
130132 if ( ! visitedBuildGradleFiles . has ( path . fsPath ) ) {
131- const tasks = await provideGradleTasksForFolder ( path ) ;
133+ const tasks = await provideGradleTasksForFolder (
134+ path ,
135+ statusBarItem
136+ ) ;
132137 visitedBuildGradleFiles . add ( path . fsPath ) ;
133138 allTasks . push ( ...tasks ) ;
134139 }
@@ -142,17 +147,20 @@ async function detectGradleTasks(): Promise<Task[]> {
142147}
143148
144149export async function detectGradleTasksForFolder (
145- folder : Uri
150+ folder : Uri ,
151+ statusBarItem : StatusBarItem
146152) : Promise < FolderTaskItem [ ] > {
147153 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 } ) ) ) ;
150156 return folderTasks ;
151157}
152158
153- export async function provideGradleTasks ( ) : Promise < Task [ ] > {
159+ export async function provideGradleTasks (
160+ statusBarItem : StatusBarItem
161+ ) : Promise < Task [ ] > {
154162 if ( ! cachedTasks ) {
155- cachedTasks = await detectGradleTasks ( ) ;
163+ cachedTasks = await detectGradleTasks ( statusBarItem ) ;
156164 }
157165 return cachedTasks ;
158166}
@@ -166,7 +174,8 @@ function isAutoDetectionEnabled(folder: WorkspaceFolder): boolean {
166174}
167175
168176async function provideGradleTasksForFolder (
169- gradleBuildFileUri : Uri
177+ gradleBuildFileUri : Uri ,
178+ statusBarItem : StatusBarItem
170179) : Promise < Task [ ] > {
171180 const emptyTasks : Task [ ] = [ ] ;
172181
@@ -178,22 +187,13 @@ async function provideGradleTasksForFolder(
178187 if ( ! command ) {
179188 return emptyTasks ;
180189 }
181- const tasksMap = await getTasks ( command , folder ) ;
190+ const tasksMap = await getTasks ( command , folder , statusBarItem ) ;
182191 if ( ! tasksMap ) {
183192 return emptyTasks ;
184193 }
185194 return Object . keys ( tasksMap )
186195 . 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 ) ) ;
197197}
198198
199199export function getTaskName ( task : string , relativePath : string | undefined ) {
@@ -208,14 +208,13 @@ export function createTask(
208208 taskName : string ,
209209 folder : WorkspaceFolder ,
210210 buildGradleUri : Uri ,
211- command : string ,
212- description ?: string
211+ command : string
213212) : Task {
214- let kind : GradleTaskDefinition ;
213+ let definition : GradleTaskDefinition ;
215214 if ( typeof taskDefinition === 'string' ) {
216- kind = { type : 'gradle' , task : taskDefinition } ;
215+ definition = { type : 'gradle' , task : taskDefinition } ;
217216 } else {
218- kind = taskDefinition ;
217+ definition = taskDefinition ;
219218 }
220219
221220 function getCommandLine ( task : string ) : string {
@@ -236,12 +235,12 @@ export function createTask(
236235
237236 const relativeBuildGradle = getRelativePath ( folder , buildGradleUri ) ;
238237 if ( relativeBuildGradle . length ) {
239- kind . path = getRelativePath ( folder , buildGradleUri ) ;
238+ definition . path = getRelativePath ( folder , buildGradleUri ) ;
240239 }
241- const normalizedTaskName = getTaskName ( kind . task , relativeBuildGradle ) ;
240+ const normalizedTaskName = getTaskName ( definition . task , relativeBuildGradle ) ;
242241 const cwd = path . dirname ( buildGradleUri . fsPath ) ;
243242 const task = new Task (
244- kind ,
243+ definition ,
245244 folder ,
246245 normalizedTaskName ,
247246 'gradle' ,
@@ -328,11 +327,12 @@ function exec(
328327
329328function getTasksFromGradle (
330329 command : string ,
331- folder : WorkspaceFolder
330+ folder : WorkspaceFolder ,
331+ statusBarItem : StatusBarItem
332332) : 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+
336336 const args = [ '--console' , 'plain' , 'tasks' ] ;
337337 const tasksArgs = getTasksArgs ( ) ;
338338 if ( tasksArgs ) {
@@ -349,39 +349,29 @@ function getTasksFromGradle(
349349 title : 'Loading Gradle Tasks' ,
350350 cancellable : true
351351 } ,
352- ( progress , token ) => {
352+ ( _ , token ) => {
353353 token . onCancellationRequested ( ( ) => {
354354 process . kill ( ) ;
355355 window . showInformationMessage (
356356 'Operation cancelled. Try again using command "Gradle: Refresh Tasks"'
357357 ) ;
358358 } ) ;
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 ;
371360 }
372361 ) ;
373362 } , 3000 ) ;
374363
375364 return promise . finally ( ( ) => {
376365 clearTimeout ( showProgress ) ;
377- statusbar . dispose ( ) ;
366+ statusBarItem . hide ( ) ;
378367 } ) ;
379368}
380369
381370async function getTasks (
382371 command : string ,
383- folder : WorkspaceFolder
372+ folder : WorkspaceFolder ,
373+ statusBarItem : StatusBarItem
384374) : Promise < StringMap | undefined > {
385- const { stdout } = await getTasksFromGradle ( command , folder ) ;
375+ const { stdout } = await getTasksFromGradle ( command , folder , statusBarItem ) ;
386376 return parseGradleTasks ( stdout ) ;
387377}
0 commit comments