Skip to content

Commit 0a3846a

Browse files
committed
fix #8230: ensure that user tasks model is created before opening it
Signed-off-by: Anton Kosyakov <anton.kosyakov@typefox.io>
1 parent 1f795e4 commit 0a3846a

File tree

4 files changed

+12
-22
lines changed

4 files changed

+12
-22
lines changed

packages/task/src/browser/task-configuration-manager.ts

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -185,17 +185,14 @@ export class TaskConfigurationManager {
185185
protected async doCreate(model: TaskConfigurationModel): Promise<URI | undefined> {
186186
const content = await this.getInitialConfigurationContent();
187187
if (content) {
188-
await this.folderPreferences.setPreference('tasks', {}, model.getWorkspaceFolder()); // create dummy tasks.json in the correct place
189-
const { configUri } = this.folderPreferences.resolve('tasks', model.getWorkspaceFolder()); // get uri to write content to it
190-
191-
let uri: URI;
192-
if (configUri && configUri.path.base === 'tasks.json') {
193-
uri = configUri;
194-
} else { // fallback
195-
uri = new URI(model.getWorkspaceFolder()).resolve(`${this.preferenceConfigurations.getPaths()[0]}/tasks.json`);
188+
await model.preferences.setPreference('tasks', {}, model.getWorkspaceFolder()); // create dummy tasks.json in the correct place
189+
const { configUri } = model.preferences.resolve('tasks', model.getWorkspaceFolder()); // get uri to write content to it
190+
191+
if (!configUri || configUri.path.base !== 'tasks.json') {
192+
return undefined;
196193
}
197-
await this.fileService.write(uri, content);
198-
return uri;
194+
await this.fileService.write(configUri, content);
195+
return configUri;
199196
}
200197
}
201198

packages/task/src/browser/task-configuration-model.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@ export class TaskConfigurationModel implements Disposable {
3636
);
3737

3838
constructor(
39-
public readonly scope: TaskConfigurationScope,
40-
protected readonly preferences: PreferenceProvider
39+
readonly scope: TaskConfigurationScope,
40+
readonly preferences: PreferenceProvider
4141
) {
4242
this.reconcile();
4343
this.toDispose.push(this.preferences.onDidPreferencesChanged((e: PreferenceProviderDataChanges) => {

packages/task/src/browser/task-configurations.ts

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,6 @@ import { TaskSourceResolver } from './task-source-resolver';
3131
import { Disposable, DisposableCollection } from '@theia/core/lib/common';
3232
import { FileChangeType } from '@theia/filesystem/lib/common/filesystem-watcher-protocol';
3333
import { WorkspaceService } from '@theia/workspace/lib/browser';
34-
import { OpenerService } from '@theia/core/lib/browser';
35-
import { UserStorageUri } from '@theia/userstorage/lib/browser/user-storage-uri';
3634

3735
export interface TaskConfigurationClient {
3836
/**
@@ -42,8 +40,6 @@ export interface TaskConfigurationClient {
4240
taskConfigurationChanged: (event: string[]) => void;
4341
}
4442

45-
export const USER_TASKS_URI = UserStorageUri.resolve('tasks.json');
46-
4743
/**
4844
* Watches a tasks.json configuration file and provides a parsed version of the contained task configurations
4945
*/
@@ -71,9 +67,6 @@ export class TaskConfigurations implements Disposable {
7167
@inject(WorkspaceService)
7268
protected readonly workspaceService: WorkspaceService;
7369

74-
@inject(OpenerService)
75-
protected readonly openerService: OpenerService;
76-
7770
@inject(TaskDefinitionRegistry)
7871
protected readonly taskDefinitionRegistry: TaskDefinitionRegistry;
7972

@@ -303,7 +296,7 @@ export class TaskConfigurations implements Disposable {
303296
}
304297

305298
async openUserTasks(): Promise<void> {
306-
await this.openerService.getOpener(USER_TASKS_URI).then(opener => opener.open(USER_TASKS_URI));
299+
await this.taskConfigurationManager.openConfiguration(TaskScope.Global);
307300
}
308301

309302
/** Adds given task to a config file and opens the file to provide ability to edit task configuration. */

packages/task/src/browser/task-schema-updater.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ import URI from '@theia/core/lib/common/uri';
3131
import { ProblemMatcherRegistry } from './task-problem-matcher-registry';
3232
import { TaskDefinitionRegistry } from './task-definition-registry';
3333
import { TaskServer } from '../common';
34-
import { USER_TASKS_URI } from './task-configurations';
34+
import { UserStorageUri } from '@theia/userstorage/lib/browser';
3535

3636
export const taskSchemaId = 'vscode://schemas/tasks';
3737

@@ -62,7 +62,7 @@ export class TaskSchemaUpdater implements JsonSchemaContribution {
6262
});
6363
}
6464
context.registerSchema({
65-
fileMatch: ['tasks.json', USER_TASKS_URI.toString()],
65+
fileMatch: ['tasks.json', UserStorageUri.resolve('tasks.json').toString()],
6666
url: taskSchemaUri.toString()
6767
});
6868

0 commit comments

Comments
 (0)