55
66import * as nls from 'vs/nls' ;
77
8- import { URI } from 'vs/base/common/uri' ;
8+ import { URI , UriComponents } from 'vs/base/common/uri' ;
99import { generateUuid } from 'vs/base/common/uuid' ;
1010import * as Types from 'vs/base/common/types' ;
1111import * as Platform from 'vs/base/common/platform' ;
1212import { IStringDictionary , forEach } from 'vs/base/common/collections' ;
1313import { IDisposable } from 'vs/base/common/lifecycle' ;
1414
15- import { IWorkspaceContextService , IWorkspaceFolder } from 'vs/platform/workspace/common/workspace' ;
15+ import { IWorkspace , IWorkspaceContextService , IWorkspaceFolder } from 'vs/platform/workspace/common/workspace' ;
1616
1717import {
1818 ContributedTask , ConfiguringTask , KeyedTaskIdentifier , TaskExecution , Task , TaskEvent , TaskEventKind ,
@@ -509,11 +509,27 @@ export class MainThreadTask implements MainThreadTaskShape {
509509 } ) ;
510510 }
511511
512+ private getWorkspace ( value : UriComponents | string ) : string | IWorkspace | IWorkspaceFolder | null {
513+ let workspace ;
514+ if ( typeof value === 'string' ) {
515+ workspace = value ;
516+ } else {
517+ const workspaceObject = this . _workspaceContextServer . getWorkspace ( ) ;
518+ const uri = URI . revive ( value ) ;
519+ if ( workspaceObject . configuration ?. toString ( ) === uri . toString ( ) ) {
520+ workspace = workspaceObject ;
521+ } else {
522+ workspace = this . _workspaceContextServer . getWorkspaceFolder ( uri ) ;
523+ }
524+ }
525+ return workspace ;
526+ }
527+
512528 public async $getTaskExecution ( value : TaskHandleDTO | TaskDTO ) : Promise < TaskExecutionDTO > {
513529 if ( TaskHandleDTO . is ( value ) ) {
514- const workspaceFolder = typeof value . workspaceFolder === 'string' ? value . workspaceFolder : this . _workspaceContextServer . getWorkspaceFolder ( URI . revive ( value . workspaceFolder ) ) ;
515- if ( workspaceFolder ) {
516- const task = await this . _taskService . getTask ( workspaceFolder , value . id , true ) ;
530+ const workspace = this . getWorkspace ( value . workspaceFolder ) ;
531+ if ( workspace ) {
532+ const task = await this . _taskService . getTask ( workspace , value . id , true ) ;
517533 if ( task ) {
518534 return {
519535 id : task . _id ,
@@ -538,9 +554,9 @@ export class MainThreadTask implements MainThreadTaskShape {
538554 public $executeTask ( value : TaskHandleDTO | TaskDTO ) : Promise < TaskExecutionDTO > {
539555 return new Promise < TaskExecutionDTO > ( ( resolve , reject ) => {
540556 if ( TaskHandleDTO . is ( value ) ) {
541- const workspaceFolder = typeof value . workspaceFolder === 'string' ? value . workspaceFolder : this . _workspaceContextServer . getWorkspaceFolder ( URI . revive ( value . workspaceFolder ) ) ;
542- if ( workspaceFolder ) {
543- this . _taskService . getTask ( workspaceFolder , value . id , true ) . then ( ( task : Task | undefined ) => {
557+ const workspace = this . getWorkspace ( value . workspaceFolder ) ;
558+ if ( workspace ) {
559+ this . _taskService . getTask ( workspace , value . id , true ) . then ( ( task : Task | undefined ) => {
544560 if ( ! task ) {
545561 reject ( new Error ( 'Task not found' ) ) ;
546562 } else {
0 commit comments