@@ -316,14 +316,24 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer
316
316
this . _registerCommands ( ) . then ( ( ) => TaskCommandsRegistered . bindTo ( this . _contextKeyService ) . set ( true ) ) ;
317
317
ServerlessWebContext . bindTo ( this . _contextKeyService ) . set ( Platform . isWeb && ! remoteAgentService . getConnection ( ) ?. remoteAuthority ) ;
318
318
this . _configurationResolverService . contributeVariable ( 'defaultBuildTask' , async ( ) : Promise < string | undefined > => {
319
- let tasks = await this . _getTasksForGroup ( TaskGroup . Build ) ;
319
+ // delay provider activation, we might find a default task in the tasks.json file
320
+ let tasks = await this . _getTasksForGroup ( TaskGroup . Build , true ) ;
320
321
if ( tasks . length > 0 ) {
321
322
const defaults = this . _getDefaultTasks ( tasks ) ;
322
323
if ( defaults . length === 1 ) {
323
324
return defaults [ 0 ] . _label ;
324
325
} else if ( defaults . length ) {
325
326
tasks = defaults ;
326
327
}
328
+ } else {
329
+ // activate all providers, we haven't found the default build task in the tasks.json file
330
+ tasks = await this . _getTasksForGroup ( TaskGroup . Build ) ;
331
+ const defaults = this . _getDefaultTasks ( tasks ) ;
332
+ if ( defaults . length === 1 ) {
333
+ return defaults [ 0 ] . _label ;
334
+ } else if ( defaults . length ) {
335
+ tasks = defaults ;
336
+ }
327
337
}
328
338
329
339
let entry : ITaskQuickPickEntry | null | undefined ;
@@ -608,6 +618,7 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer
608
618
// We need to first wait for extensions to be registered because we might read
609
619
// the `TaskDefinitionRegistry` in case `type` is `undefined`
610
620
await this . _extensionService . whenInstalledExtensionsRegistered ( ) ;
621
+ this . _log ( 'Activating task providers ' + type ?? 'all' ) ;
611
622
await raceTimeout (
612
623
Promise . all ( this . _getActivationEvents ( type ) . map ( activationEvent => this . _extensionService . activateByEvent ( activationEvent ) ) ) ,
613
624
5000 ,
@@ -1418,8 +1429,8 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer
1418
1429
return task ;
1419
1430
}
1420
1431
1421
- private async _getTasksForGroup ( group : TaskGroup ) : Promise < Task [ ] > {
1422
- const groups = await this . _getGroupedTasks ( ) ;
1432
+ private async _getTasksForGroup ( group : TaskGroup , waitToActivate ?: boolean ) : Promise < Task [ ] > {
1433
+ const groups = await this . _getGroupedTasks ( undefined , waitToActivate ) ;
1423
1434
const result : Task [ ] = [ ] ;
1424
1435
groups . forEach ( tasks => {
1425
1436
for ( const task of tasks ) {
@@ -2001,11 +2012,13 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer
2001
2012
return ! definition || ! definition . when || this . _contextKeyService . contextMatchesRules ( definition . when ) ;
2002
2013
}
2003
2014
2004
- private async _getGroupedTasks ( filter ?: ITaskFilter ) : Promise < TaskMap > {
2015
+ private async _getGroupedTasks ( filter ?: ITaskFilter , waitToActivate ?: boolean ) : Promise < TaskMap > {
2005
2016
await this . _waitForAllSupportedExecutions ;
2006
2017
const type = filter ?. type ;
2007
2018
const needsRecentTasksMigration = this . _needsRecentTasksMigration ( ) ;
2008
- await this . _activateTaskProviders ( filter ?. type ) ;
2019
+ if ( ! waitToActivate ) {
2020
+ await this . _activateTaskProviders ( filter ?. type ) ;
2021
+ }
2009
2022
const validTypes : IStringDictionary < boolean > = Object . create ( null ) ;
2010
2023
TaskDefinitionRegistry . all ( ) . forEach ( definition => validTypes [ definition . taskType ] = true ) ;
2011
2024
validTypes [ 'shell' ] = true ;
0 commit comments