@theia/task 1.45.0 → 1.46.0-next.72
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +193 -193
- package/lib/browser/index.d.ts +6 -6
- package/lib/browser/index.js +33 -33
- package/lib/browser/process/process-task-contribution.d.ts +6 -6
- package/lib/browser/process/process-task-contribution.js +43 -43
- package/lib/browser/process/process-task-frontend-module.d.ts +2 -2
- package/lib/browser/process/process-task-frontend-module.js +27 -27
- package/lib/browser/process/process-task-resolver.d.ts +17 -17
- package/lib/browser/process/process-task-resolver.js +101 -101
- package/lib/browser/provided-task-configurations.d.ts +43 -43
- package/lib/browser/provided-task-configurations.js +213 -213
- package/lib/browser/provided-task-configurations.spec.d.ts +1 -1
- package/lib/browser/provided-task-configurations.spec.js +43 -43
- package/lib/browser/quick-open-task.d.ts +144 -144
- package/lib/browser/quick-open-task.d.ts.map +1 -1
- package/lib/browser/quick-open-task.js +752 -748
- package/lib/browser/quick-open-task.js.map +1 -1
- package/lib/browser/task-configuration-manager.d.ts +64 -64
- package/lib/browser/task-configuration-manager.js +261 -261
- package/lib/browser/task-configuration-model.d.ts +32 -32
- package/lib/browser/task-configuration-model.js +79 -79
- package/lib/browser/task-configurations.d.ts +127 -127
- package/lib/browser/task-configurations.js +486 -486
- package/lib/browser/task-contribution.d.ts +182 -182
- package/lib/browser/task-contribution.js +206 -206
- package/lib/browser/task-definition-registry.d.ts +38 -38
- package/lib/browser/task-definition-registry.js +134 -134
- package/lib/browser/task-definition-registry.spec.d.ts +1 -1
- package/lib/browser/task-definition-registry.spec.js +170 -170
- package/lib/browser/task-frontend-contribution.d.ts +56 -56
- package/lib/browser/task-frontend-contribution.js +358 -358
- package/lib/browser/task-frontend-module.d.ts +5 -5
- package/lib/browser/task-frontend-module.js +79 -79
- package/lib/browser/task-name-resolver.d.ts +13 -13
- package/lib/browser/task-name-resolver.js +67 -67
- package/lib/browser/task-node.d.ts +9 -9
- package/lib/browser/task-node.js +17 -17
- package/lib/browser/task-preferences.d.ts +4 -4
- package/lib/browser/task-preferences.js +40 -40
- package/lib/browser/task-problem-matcher-registry.d.ts +40 -40
- package/lib/browser/task-problem-matcher-registry.js +309 -309
- package/lib/browser/task-problem-pattern-registry.d.ts +23 -23
- package/lib/browser/task-problem-pattern-registry.js +210 -210
- package/lib/browser/task-schema-updater.d.ts +58 -58
- package/lib/browser/task-schema-updater.js +688 -688
- package/lib/browser/task-service.d.ts +279 -279
- package/lib/browser/task-service.js +1119 -1119
- package/lib/browser/task-source-resolver.d.ts +9 -9
- package/lib/browser/task-source-resolver.js +51 -51
- package/lib/browser/task-templates.d.ts +13 -13
- package/lib/browser/task-templates.js +161 -161
- package/lib/browser/task-terminal-widget-manager.d.ts +44 -44
- package/lib/browser/task-terminal-widget-manager.js +228 -228
- package/lib/browser/tasks-monaco-contribution.d.ts +1 -1
- package/lib/browser/tasks-monaco-contribution.js +27 -27
- package/lib/common/index.d.ts +4 -4
- package/lib/common/index.js +31 -31
- package/lib/common/problem-matcher-protocol.d.ts +124 -124
- package/lib/common/problem-matcher-protocol.js +132 -132
- package/lib/common/process/task-protocol.d.ts +68 -68
- package/lib/common/process/task-protocol.js +33 -33
- package/lib/common/task-common-module.d.ts +7 -7
- package/lib/common/task-common-module.js +33 -33
- package/lib/common/task-protocol.d.ts +192 -192
- package/lib/common/task-protocol.js +137 -137
- package/lib/common/task-util.d.ts +22 -22
- package/lib/common/task-util.js +46 -46
- package/lib/common/task-watcher.d.ts +17 -17
- package/lib/common/task-watcher.js +86 -86
- package/lib/node/custom/custom-task-runner-backend-module.d.ts +2 -2
- package/lib/node/custom/custom-task-runner-backend-module.js +36 -36
- package/lib/node/custom/custom-task-runner-contribution.d.ts +6 -6
- package/lib/node/custom/custom-task-runner-contribution.js +42 -42
- package/lib/node/custom/custom-task-runner.d.ts +15 -15
- package/lib/node/custom/custom-task-runner.js +69 -69
- package/lib/node/custom/custom-task.d.ts +20 -20
- package/lib/node/custom/custom-task.js +78 -78
- package/lib/node/index.d.ts +3 -3
- package/lib/node/index.js +30 -30
- package/lib/node/process/process-task-runner-backend-module.d.ts +2 -2
- package/lib/node/process/process-task-runner-backend-module.js +36 -36
- package/lib/node/process/process-task-runner-contribution.d.ts +6 -6
- package/lib/node/process/process-task-runner-contribution.js +43 -43
- package/lib/node/process/process-task-runner.d.ts +60 -60
- package/lib/node/process/process-task-runner.js +355 -355
- package/lib/node/process/process-task.d.ts +26 -26
- package/lib/node/process/process-task.js +135 -135
- package/lib/node/process/process-task.spec.d.ts +1 -1
- package/lib/node/process/process-task.spec.js +29 -29
- package/lib/node/task-abstract-line-matcher.d.ts +49 -49
- package/lib/node/task-abstract-line-matcher.js +273 -273
- package/lib/node/task-backend-application-contribution.d.ts +8 -8
- package/lib/node/task-backend-application-contribution.js +48 -48
- package/lib/node/task-backend-module.d.ts +3 -3
- package/lib/node/task-backend-module.js +50 -50
- package/lib/node/task-line-matchers.d.ts +27 -27
- package/lib/node/task-line-matchers.js +121 -121
- package/lib/node/task-manager.d.ts +55 -55
- package/lib/node/task-manager.js +135 -135
- package/lib/node/task-problem-collector.d.ts +10 -10
- package/lib/node/task-problem-collector.js +57 -57
- package/lib/node/task-problem-collector.spec.d.ts +1 -1
- package/lib/node/task-problem-collector.spec.js +310 -310
- package/lib/node/task-runner-protocol.d.ts +16 -16
- package/lib/node/task-runner-protocol.js +19 -19
- package/lib/node/task-runner.d.ts +50 -50
- package/lib/node/task-runner.js +97 -97
- package/lib/node/task-server.d.ts +39 -39
- package/lib/node/task-server.js +237 -237
- package/lib/node/task-server.slow-spec.d.ts +1 -1
- package/lib/node/task-server.slow-spec.js +395 -395
- package/lib/node/task.d.ts +50 -50
- package/lib/node/task.js +77 -77
- package/lib/node/test/task-test-container.d.ts +2 -2
- package/lib/node/test/task-test-container.js +58 -58
- package/package.json +14 -14
- package/src/browser/index.ts +22 -22
- package/src/browser/process/process-task-contribution.ts +31 -31
- package/src/browser/process/process-task-frontend-module.ts +27 -27
- package/src/browser/process/process-task-resolver.ts +89 -89
- package/src/browser/provided-task-configurations.spec.ts +46 -46
- package/src/browser/provided-task-configurations.ts +213 -213
- package/src/browser/quick-open-task.ts +831 -827
- package/src/browser/style/index.css +19 -19
- package/src/browser/task-configuration-manager.ts +256 -256
- package/src/browser/task-configuration-model.ts +101 -101
- package/src/browser/task-configurations.ts +508 -508
- package/src/browser/task-contribution.ts +266 -266
- package/src/browser/task-definition-registry.spec.ts +203 -203
- package/src/browser/task-definition-registry.ts +131 -131
- package/src/browser/task-frontend-contribution.ts +402 -402
- package/src/browser/task-frontend-module.ts +86 -86
- package/src/browser/task-name-resolver.ts +55 -55
- package/src/browser/task-node.ts +37 -37
- package/src/browser/task-preferences.ts +40 -40
- package/src/browser/task-problem-matcher-registry.ts +308 -308
- package/src/browser/task-problem-pattern-registry.ts +196 -196
- package/src/browser/task-schema-updater.ts +701 -701
- package/src/browser/task-service.ts +1164 -1164
- package/src/browser/task-source-resolver.ts +36 -36
- package/src/browser/task-templates.ts +168 -168
- package/src/browser/task-terminal-widget-manager.ts +224 -224
- package/src/browser/tasks-monaco-contribution.ts +27 -27
- package/src/common/index.ts +20 -20
- package/src/common/problem-matcher-protocol.ts +234 -234
- package/src/common/process/task-protocol.ts +97 -97
- package/src/common/task-common-module.ts +34 -34
- package/src/common/task-protocol.ts +317 -317
- package/src/common/task-util.ts +43 -43
- package/src/common/task-watcher.ts +78 -78
- package/src/node/custom/custom-task-runner-backend-module.ts +37 -37
- package/src/node/custom/custom-task-runner-contribution.ts +30 -30
- package/src/node/custom/custom-task-runner.ts +60 -60
- package/src/node/custom/custom-task.ts +73 -73
- package/src/node/index.ts +19 -19
- package/src/node/process/process-task-runner-backend-module.ts +37 -37
- package/src/node/process/process-task-runner-contribution.ts +31 -31
- package/src/node/process/process-task-runner.ts +371 -371
- package/src/node/process/process-task.spec.ts +30 -30
- package/src/node/process/process-task.ts +144 -144
- package/src/node/task-abstract-line-matcher.ts +312 -312
- package/src/node/task-backend-application-contribution.ts +36 -36
- package/src/node/task-backend-module.ts +57 -57
- package/src/node/task-line-matchers.ts +127 -127
- package/src/node/task-manager.ts +129 -129
- package/src/node/task-problem-collector.spec.ts +338 -338
- package/src/node/task-problem-collector.ts +62 -62
- package/src/node/task-runner-protocol.ts +33 -33
- package/src/node/task-runner.ts +96 -96
- package/src/node/task-server.slow-spec.ts +444 -444
- package/src/node/task-server.ts +263 -263
- package/src/node/task.ts +103 -103
- package/src/node/test/task-test-container.ts +63 -63
package/lib/node/task.d.ts
CHANGED
|
@@ -1,51 +1,51 @@
|
|
|
1
|
-
import { ILogger, Disposable, DisposableCollection, Emitter, Event, MaybePromise } from '@theia/core/lib/common/';
|
|
2
|
-
import { TaskInfo, TaskExitedEvent, TaskConfiguration, TaskOutputEvent, ManagedTask, ManagedTaskManager } from '../common/task-protocol';
|
|
3
|
-
/**
|
|
4
|
-
* Represents the options used for running a task.
|
|
5
|
-
*/
|
|
6
|
-
export interface TaskOptions {
|
|
7
|
-
/** The task label */
|
|
8
|
-
label: string;
|
|
9
|
-
/** The task configuration which should be executed */
|
|
10
|
-
config: TaskConfiguration;
|
|
11
|
-
/** The optional execution context */
|
|
12
|
-
context?: string;
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* A {@link Task} represents the execution state of a `TaskConfiguration`.
|
|
16
|
-
* Implementing classes have to call the {@link Task#fireOutputLine} function
|
|
17
|
-
* whenever a new output occurs during the execution.
|
|
18
|
-
*/
|
|
19
|
-
export declare abstract class Task implements Disposable, ManagedTask {
|
|
20
|
-
protected readonly taskManager: ManagedTaskManager<Task>;
|
|
21
|
-
protected readonly logger: ILogger;
|
|
22
|
-
protected readonly options: TaskOptions;
|
|
23
|
-
protected taskId: number;
|
|
24
|
-
protected readonly toDispose: DisposableCollection;
|
|
25
|
-
readonly exitEmitter: Emitter<TaskExitedEvent>;
|
|
26
|
-
readonly outputEmitter: Emitter<TaskOutputEvent>;
|
|
27
|
-
constructor(taskManager: ManagedTaskManager<Task>, logger: ILogger, options: TaskOptions);
|
|
28
|
-
/**
|
|
29
|
-
* Terminate this task.
|
|
30
|
-
*
|
|
31
|
-
* @returns a promise that resolves once the task has been properly terminated.
|
|
32
|
-
*/
|
|
33
|
-
abstract kill(): Promise<void>;
|
|
34
|
-
get onExit(): Event<TaskExitedEvent>;
|
|
35
|
-
get onOutput(): Event<TaskOutputEvent>;
|
|
36
|
-
/** Has to be called when a task has concluded its execution. */
|
|
37
|
-
protected fireTaskExited(event: TaskExitedEvent): void;
|
|
38
|
-
protected fireOutputLine(event: TaskOutputEvent): void;
|
|
39
|
-
/**
|
|
40
|
-
* Retrieves the runtime information about this task.
|
|
41
|
-
* The runtime information computation may happen asynchronous.
|
|
42
|
-
*
|
|
43
|
-
* @returns (a promise of) the runtime information as `TaskInfo`.
|
|
44
|
-
*/
|
|
45
|
-
abstract getRuntimeInfo(): MaybePromise<TaskInfo>;
|
|
46
|
-
get id(): number;
|
|
47
|
-
get context(): string | undefined;
|
|
48
|
-
get label(): string;
|
|
49
|
-
dispose(): void;
|
|
50
|
-
}
|
|
1
|
+
import { ILogger, Disposable, DisposableCollection, Emitter, Event, MaybePromise } from '@theia/core/lib/common/';
|
|
2
|
+
import { TaskInfo, TaskExitedEvent, TaskConfiguration, TaskOutputEvent, ManagedTask, ManagedTaskManager } from '../common/task-protocol';
|
|
3
|
+
/**
|
|
4
|
+
* Represents the options used for running a task.
|
|
5
|
+
*/
|
|
6
|
+
export interface TaskOptions {
|
|
7
|
+
/** The task label */
|
|
8
|
+
label: string;
|
|
9
|
+
/** The task configuration which should be executed */
|
|
10
|
+
config: TaskConfiguration;
|
|
11
|
+
/** The optional execution context */
|
|
12
|
+
context?: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* A {@link Task} represents the execution state of a `TaskConfiguration`.
|
|
16
|
+
* Implementing classes have to call the {@link Task#fireOutputLine} function
|
|
17
|
+
* whenever a new output occurs during the execution.
|
|
18
|
+
*/
|
|
19
|
+
export declare abstract class Task implements Disposable, ManagedTask {
|
|
20
|
+
protected readonly taskManager: ManagedTaskManager<Task>;
|
|
21
|
+
protected readonly logger: ILogger;
|
|
22
|
+
protected readonly options: TaskOptions;
|
|
23
|
+
protected taskId: number;
|
|
24
|
+
protected readonly toDispose: DisposableCollection;
|
|
25
|
+
readonly exitEmitter: Emitter<TaskExitedEvent>;
|
|
26
|
+
readonly outputEmitter: Emitter<TaskOutputEvent>;
|
|
27
|
+
constructor(taskManager: ManagedTaskManager<Task>, logger: ILogger, options: TaskOptions);
|
|
28
|
+
/**
|
|
29
|
+
* Terminate this task.
|
|
30
|
+
*
|
|
31
|
+
* @returns a promise that resolves once the task has been properly terminated.
|
|
32
|
+
*/
|
|
33
|
+
abstract kill(): Promise<void>;
|
|
34
|
+
get onExit(): Event<TaskExitedEvent>;
|
|
35
|
+
get onOutput(): Event<TaskOutputEvent>;
|
|
36
|
+
/** Has to be called when a task has concluded its execution. */
|
|
37
|
+
protected fireTaskExited(event: TaskExitedEvent): void;
|
|
38
|
+
protected fireOutputLine(event: TaskOutputEvent): void;
|
|
39
|
+
/**
|
|
40
|
+
* Retrieves the runtime information about this task.
|
|
41
|
+
* The runtime information computation may happen asynchronous.
|
|
42
|
+
*
|
|
43
|
+
* @returns (a promise of) the runtime information as `TaskInfo`.
|
|
44
|
+
*/
|
|
45
|
+
abstract getRuntimeInfo(): MaybePromise<TaskInfo>;
|
|
46
|
+
get id(): number;
|
|
47
|
+
get context(): string | undefined;
|
|
48
|
+
get label(): string;
|
|
49
|
+
dispose(): void;
|
|
50
|
+
}
|
|
51
51
|
//# sourceMappingURL=task.d.ts.map
|
package/lib/node/task.js
CHANGED
|
@@ -1,78 +1,78 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// *****************************************************************************
|
|
3
|
-
// Copyright (C) 2017 Ericsson and others.
|
|
4
|
-
//
|
|
5
|
-
// This program and the accompanying materials are made available under the
|
|
6
|
-
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
7
|
-
// http://www.eclipse.org/legal/epl-2.0.
|
|
8
|
-
//
|
|
9
|
-
// This Source Code may also be made available under the following Secondary
|
|
10
|
-
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
11
|
-
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
12
|
-
// with the GNU Classpath Exception which is available at
|
|
13
|
-
// https://www.gnu.org/software/classpath/license.html.
|
|
14
|
-
//
|
|
15
|
-
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
16
|
-
// *****************************************************************************
|
|
17
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
18
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
19
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
20
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
21
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
22
|
-
};
|
|
23
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
24
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
25
|
-
};
|
|
26
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
|
-
exports.Task = void 0;
|
|
28
|
-
const inversify_1 = require("@theia/core/shared/inversify");
|
|
29
|
-
const common_1 = require("@theia/core/lib/common/");
|
|
30
|
-
/**
|
|
31
|
-
* A {@link Task} represents the execution state of a `TaskConfiguration`.
|
|
32
|
-
* Implementing classes have to call the {@link Task#fireOutputLine} function
|
|
33
|
-
* whenever a new output occurs during the execution.
|
|
34
|
-
*/
|
|
35
|
-
let Task = class Task {
|
|
36
|
-
constructor(taskManager, logger, options) {
|
|
37
|
-
this.taskManager = taskManager;
|
|
38
|
-
this.logger = logger;
|
|
39
|
-
this.options = options;
|
|
40
|
-
this.toDispose = new common_1.DisposableCollection();
|
|
41
|
-
this.taskId = this.taskManager.register(this, this.options.context);
|
|
42
|
-
this.exitEmitter = new common_1.Emitter();
|
|
43
|
-
this.outputEmitter = new common_1.Emitter();
|
|
44
|
-
this.toDispose.push(this.exitEmitter);
|
|
45
|
-
this.toDispose.push(this.outputEmitter);
|
|
46
|
-
}
|
|
47
|
-
get onExit() {
|
|
48
|
-
return this.exitEmitter.event;
|
|
49
|
-
}
|
|
50
|
-
get onOutput() {
|
|
51
|
-
return this.outputEmitter.event;
|
|
52
|
-
}
|
|
53
|
-
/** Has to be called when a task has concluded its execution. */
|
|
54
|
-
fireTaskExited(event) {
|
|
55
|
-
this.exitEmitter.fire(event);
|
|
56
|
-
}
|
|
57
|
-
fireOutputLine(event) {
|
|
58
|
-
this.outputEmitter.fire(event);
|
|
59
|
-
}
|
|
60
|
-
get id() {
|
|
61
|
-
return this.taskId;
|
|
62
|
-
}
|
|
63
|
-
get context() {
|
|
64
|
-
return this.options.context;
|
|
65
|
-
}
|
|
66
|
-
get label() {
|
|
67
|
-
return this.options.label;
|
|
68
|
-
}
|
|
69
|
-
dispose() {
|
|
70
|
-
this.toDispose.dispose();
|
|
71
|
-
}
|
|
72
|
-
};
|
|
73
|
-
Task = __decorate([
|
|
74
|
-
(0, inversify_1.injectable)(),
|
|
75
|
-
__metadata("design:paramtypes", [Object, Object, Object])
|
|
76
|
-
], Task);
|
|
77
|
-
exports.Task = Task;
|
|
1
|
+
"use strict";
|
|
2
|
+
// *****************************************************************************
|
|
3
|
+
// Copyright (C) 2017 Ericsson and others.
|
|
4
|
+
//
|
|
5
|
+
// This program and the accompanying materials are made available under the
|
|
6
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
7
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
8
|
+
//
|
|
9
|
+
// This Source Code may also be made available under the following Secondary
|
|
10
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
11
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
12
|
+
// with the GNU Classpath Exception which is available at
|
|
13
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
14
|
+
//
|
|
15
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
16
|
+
// *****************************************************************************
|
|
17
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
18
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
19
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
20
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
21
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
22
|
+
};
|
|
23
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
24
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
25
|
+
};
|
|
26
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
|
+
exports.Task = void 0;
|
|
28
|
+
const inversify_1 = require("@theia/core/shared/inversify");
|
|
29
|
+
const common_1 = require("@theia/core/lib/common/");
|
|
30
|
+
/**
|
|
31
|
+
* A {@link Task} represents the execution state of a `TaskConfiguration`.
|
|
32
|
+
* Implementing classes have to call the {@link Task#fireOutputLine} function
|
|
33
|
+
* whenever a new output occurs during the execution.
|
|
34
|
+
*/
|
|
35
|
+
let Task = class Task {
|
|
36
|
+
constructor(taskManager, logger, options) {
|
|
37
|
+
this.taskManager = taskManager;
|
|
38
|
+
this.logger = logger;
|
|
39
|
+
this.options = options;
|
|
40
|
+
this.toDispose = new common_1.DisposableCollection();
|
|
41
|
+
this.taskId = this.taskManager.register(this, this.options.context);
|
|
42
|
+
this.exitEmitter = new common_1.Emitter();
|
|
43
|
+
this.outputEmitter = new common_1.Emitter();
|
|
44
|
+
this.toDispose.push(this.exitEmitter);
|
|
45
|
+
this.toDispose.push(this.outputEmitter);
|
|
46
|
+
}
|
|
47
|
+
get onExit() {
|
|
48
|
+
return this.exitEmitter.event;
|
|
49
|
+
}
|
|
50
|
+
get onOutput() {
|
|
51
|
+
return this.outputEmitter.event;
|
|
52
|
+
}
|
|
53
|
+
/** Has to be called when a task has concluded its execution. */
|
|
54
|
+
fireTaskExited(event) {
|
|
55
|
+
this.exitEmitter.fire(event);
|
|
56
|
+
}
|
|
57
|
+
fireOutputLine(event) {
|
|
58
|
+
this.outputEmitter.fire(event);
|
|
59
|
+
}
|
|
60
|
+
get id() {
|
|
61
|
+
return this.taskId;
|
|
62
|
+
}
|
|
63
|
+
get context() {
|
|
64
|
+
return this.options.context;
|
|
65
|
+
}
|
|
66
|
+
get label() {
|
|
67
|
+
return this.options.label;
|
|
68
|
+
}
|
|
69
|
+
dispose() {
|
|
70
|
+
this.toDispose.dispose();
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
Task = __decorate([
|
|
74
|
+
(0, inversify_1.injectable)(),
|
|
75
|
+
__metadata("design:paramtypes", [Object, Object, Object])
|
|
76
|
+
], Task);
|
|
77
|
+
exports.Task = Task;
|
|
78
78
|
//# sourceMappingURL=task.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { Container } from '@theia/core/shared/inversify';
|
|
2
|
-
export declare function createTaskTestContainer(): Container;
|
|
1
|
+
import { Container } from '@theia/core/shared/inversify';
|
|
2
|
+
export declare function createTaskTestContainer(): Container;
|
|
3
3
|
//# sourceMappingURL=task-test-container.d.ts.map
|
|
@@ -1,59 +1,59 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createTaskTestContainer = void 0;
|
|
4
|
-
// *****************************************************************************
|
|
5
|
-
// Copyright (C) 2017 Ericsson and others.
|
|
6
|
-
//
|
|
7
|
-
// This program and the accompanying materials are made available under the
|
|
8
|
-
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
9
|
-
// http://www.eclipse.org/legal/epl-2.0.
|
|
10
|
-
//
|
|
11
|
-
// This Source Code may also be made available under the following Secondary
|
|
12
|
-
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
13
|
-
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
14
|
-
// with the GNU Classpath Exception which is available at
|
|
15
|
-
// https://www.gnu.org/software/classpath/license.html.
|
|
16
|
-
//
|
|
17
|
-
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
18
|
-
// *****************************************************************************
|
|
19
|
-
const inversify_1 = require("@theia/core/shared/inversify");
|
|
20
|
-
const logger_backend_module_1 = require("@theia/core/lib/node/logger-backend-module");
|
|
21
|
-
const backend_application_module_1 = require("@theia/core/lib/node/backend-application-module");
|
|
22
|
-
const process_backend_module_1 = require("@theia/process/lib/node/process-backend-module");
|
|
23
|
-
const terminal_backend_module_1 = require("@theia/terminal/lib/node/terminal-backend-module");
|
|
24
|
-
const task_backend_module_1 = require("../task-backend-module");
|
|
25
|
-
const filesystem_backend_module_1 = require("@theia/filesystem/lib/node/filesystem-backend-module");
|
|
26
|
-
const workspace_backend_module_1 = require("@theia/workspace/lib/node/workspace-backend-module");
|
|
27
|
-
const messaging_backend_module_1 = require("@theia/core/lib/node/messaging/messaging-backend-module");
|
|
28
|
-
const application_package_1 = require("@theia/core/shared/@theia/application-package");
|
|
29
|
-
const node_1 = require("@theia/process/lib/node");
|
|
30
|
-
const process_utils_1 = require("@theia/core/lib/node/process-utils");
|
|
31
|
-
function createTaskTestContainer() {
|
|
32
|
-
const testContainer = new inversify_1.Container();
|
|
33
|
-
testContainer.load(backend_application_module_1.backendApplicationModule);
|
|
34
|
-
testContainer.rebind(application_package_1.ApplicationPackage).toConstantValue({});
|
|
35
|
-
(0, logger_backend_module_1.bindLogger)(testContainer.bind.bind(testContainer));
|
|
36
|
-
testContainer.load(messaging_backend_module_1.messagingBackendModule);
|
|
37
|
-
testContainer.load(process_backend_module_1.default);
|
|
38
|
-
testContainer.load(task_backend_module_1.default);
|
|
39
|
-
testContainer.load(filesystem_backend_module_1.default);
|
|
40
|
-
testContainer.load(workspace_backend_module_1.default);
|
|
41
|
-
testContainer.load(terminal_backend_module_1.default);
|
|
42
|
-
// Make it easier to debug processes.
|
|
43
|
-
testContainer.rebind(node_1.TerminalProcess).to(TestTerminalProcess);
|
|
44
|
-
testContainer.rebind(process_utils_1.ProcessUtils).toConstantValue(new class extends process_utils_1.ProcessUtils {
|
|
45
|
-
terminateProcessTree() { } // don't actually kill the tree, it breaks the tests.
|
|
46
|
-
});
|
|
47
|
-
return testContainer;
|
|
48
|
-
}
|
|
49
|
-
exports.createTaskTestContainer = createTaskTestContainer;
|
|
50
|
-
class TestTerminalProcess extends node_1.TerminalProcess {
|
|
51
|
-
emitOnStarted() {
|
|
52
|
-
if (process.env['THEIA_TASK_TEST_DEBUG']) {
|
|
53
|
-
console.log(`START ${this.id} ${JSON.stringify([this.executable, this.options.commandLine, ...this.arguments])}`);
|
|
54
|
-
this.outputStream.on('data', data => console.debug(`${this.id} OUTPUT: ${data.toString().trim()}`));
|
|
55
|
-
}
|
|
56
|
-
super.emitOnStarted();
|
|
57
|
-
}
|
|
58
|
-
}
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createTaskTestContainer = void 0;
|
|
4
|
+
// *****************************************************************************
|
|
5
|
+
// Copyright (C) 2017 Ericsson and others.
|
|
6
|
+
//
|
|
7
|
+
// This program and the accompanying materials are made available under the
|
|
8
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
9
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
10
|
+
//
|
|
11
|
+
// This Source Code may also be made available under the following Secondary
|
|
12
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
13
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
14
|
+
// with the GNU Classpath Exception which is available at
|
|
15
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
16
|
+
//
|
|
17
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
18
|
+
// *****************************************************************************
|
|
19
|
+
const inversify_1 = require("@theia/core/shared/inversify");
|
|
20
|
+
const logger_backend_module_1 = require("@theia/core/lib/node/logger-backend-module");
|
|
21
|
+
const backend_application_module_1 = require("@theia/core/lib/node/backend-application-module");
|
|
22
|
+
const process_backend_module_1 = require("@theia/process/lib/node/process-backend-module");
|
|
23
|
+
const terminal_backend_module_1 = require("@theia/terminal/lib/node/terminal-backend-module");
|
|
24
|
+
const task_backend_module_1 = require("../task-backend-module");
|
|
25
|
+
const filesystem_backend_module_1 = require("@theia/filesystem/lib/node/filesystem-backend-module");
|
|
26
|
+
const workspace_backend_module_1 = require("@theia/workspace/lib/node/workspace-backend-module");
|
|
27
|
+
const messaging_backend_module_1 = require("@theia/core/lib/node/messaging/messaging-backend-module");
|
|
28
|
+
const application_package_1 = require("@theia/core/shared/@theia/application-package");
|
|
29
|
+
const node_1 = require("@theia/process/lib/node");
|
|
30
|
+
const process_utils_1 = require("@theia/core/lib/node/process-utils");
|
|
31
|
+
function createTaskTestContainer() {
|
|
32
|
+
const testContainer = new inversify_1.Container();
|
|
33
|
+
testContainer.load(backend_application_module_1.backendApplicationModule);
|
|
34
|
+
testContainer.rebind(application_package_1.ApplicationPackage).toConstantValue({});
|
|
35
|
+
(0, logger_backend_module_1.bindLogger)(testContainer.bind.bind(testContainer));
|
|
36
|
+
testContainer.load(messaging_backend_module_1.messagingBackendModule);
|
|
37
|
+
testContainer.load(process_backend_module_1.default);
|
|
38
|
+
testContainer.load(task_backend_module_1.default);
|
|
39
|
+
testContainer.load(filesystem_backend_module_1.default);
|
|
40
|
+
testContainer.load(workspace_backend_module_1.default);
|
|
41
|
+
testContainer.load(terminal_backend_module_1.default);
|
|
42
|
+
// Make it easier to debug processes.
|
|
43
|
+
testContainer.rebind(node_1.TerminalProcess).to(TestTerminalProcess);
|
|
44
|
+
testContainer.rebind(process_utils_1.ProcessUtils).toConstantValue(new class extends process_utils_1.ProcessUtils {
|
|
45
|
+
terminateProcessTree() { } // don't actually kill the tree, it breaks the tests.
|
|
46
|
+
});
|
|
47
|
+
return testContainer;
|
|
48
|
+
}
|
|
49
|
+
exports.createTaskTestContainer = createTaskTestContainer;
|
|
50
|
+
class TestTerminalProcess extends node_1.TerminalProcess {
|
|
51
|
+
emitOnStarted() {
|
|
52
|
+
if (process.env['THEIA_TASK_TEST_DEBUG']) {
|
|
53
|
+
console.log(`START ${this.id} ${JSON.stringify([this.executable, this.options.commandLine, ...this.arguments])}`);
|
|
54
|
+
this.outputStream.on('data', data => console.debug(`${this.id} OUTPUT: ${data.toString().trim()}`));
|
|
55
|
+
}
|
|
56
|
+
super.emitOnStarted();
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
59
|
//# sourceMappingURL=task-test-container.js.map
|
package/package.json
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@theia/task",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.46.0-next.72+4a275b29d",
|
|
4
4
|
"description": "Theia - Task extension. This extension adds support for executing raw or terminal processes in the backend.",
|
|
5
5
|
"dependencies": {
|
|
6
|
-
"@theia/core": "1.
|
|
7
|
-
"@theia/editor": "1.
|
|
8
|
-
"@theia/filesystem": "1.
|
|
9
|
-
"@theia/markers": "1.
|
|
10
|
-
"@theia/monaco": "1.
|
|
11
|
-
"@theia/monaco-editor-core": "1.
|
|
12
|
-
"@theia/process": "1.
|
|
13
|
-
"@theia/terminal": "1.
|
|
14
|
-
"@theia/userstorage": "1.
|
|
15
|
-
"@theia/variable-resolver": "1.
|
|
16
|
-
"@theia/workspace": "1.
|
|
6
|
+
"@theia/core": "1.46.0-next.72+4a275b29d",
|
|
7
|
+
"@theia/editor": "1.46.0-next.72+4a275b29d",
|
|
8
|
+
"@theia/filesystem": "1.46.0-next.72+4a275b29d",
|
|
9
|
+
"@theia/markers": "1.46.0-next.72+4a275b29d",
|
|
10
|
+
"@theia/monaco": "1.46.0-next.72+4a275b29d",
|
|
11
|
+
"@theia/monaco-editor-core": "1.83.101",
|
|
12
|
+
"@theia/process": "1.46.0-next.72+4a275b29d",
|
|
13
|
+
"@theia/terminal": "1.46.0-next.72+4a275b29d",
|
|
14
|
+
"@theia/userstorage": "1.46.0-next.72+4a275b29d",
|
|
15
|
+
"@theia/variable-resolver": "1.46.0-next.72+4a275b29d",
|
|
16
|
+
"@theia/workspace": "1.46.0-next.72+4a275b29d",
|
|
17
17
|
"async-mutex": "^0.3.1",
|
|
18
18
|
"jsonc-parser": "^2.2.0",
|
|
19
19
|
"p-debounce": "^2.1.0"
|
|
@@ -52,10 +52,10 @@
|
|
|
52
52
|
"watch": "theiaext watch"
|
|
53
53
|
},
|
|
54
54
|
"devDependencies": {
|
|
55
|
-
"@theia/ext-scripts": "1.
|
|
55
|
+
"@theia/ext-scripts": "1.46.0"
|
|
56
56
|
},
|
|
57
57
|
"nyc": {
|
|
58
58
|
"extends": "../../configs/nyc.json"
|
|
59
59
|
},
|
|
60
|
-
"gitHead": "
|
|
60
|
+
"gitHead": "4a275b29d0db6c81190488c7f76cb667da05ef19"
|
|
61
61
|
}
|
package/src/browser/index.ts
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
// *****************************************************************************
|
|
2
|
-
// Copyright (C) 2017 Ericsson and others.
|
|
3
|
-
//
|
|
4
|
-
// This program and the accompanying materials are made available under the
|
|
5
|
-
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
-
// http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
-
//
|
|
8
|
-
// This Source Code may also be made available under the following Secondary
|
|
9
|
-
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
-
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
-
// with the GNU Classpath Exception which is available at
|
|
12
|
-
// https://www.gnu.org/software/classpath/license.html.
|
|
13
|
-
//
|
|
14
|
-
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
-
// *****************************************************************************
|
|
16
|
-
|
|
17
|
-
export * from './task-service';
|
|
18
|
-
export * from './task-contribution';
|
|
19
|
-
export * from './task-definition-registry';
|
|
20
|
-
export * from './task-problem-matcher-registry';
|
|
21
|
-
export * from './task-problem-pattern-registry';
|
|
22
|
-
export * from './task-schema-updater';
|
|
1
|
+
// *****************************************************************************
|
|
2
|
+
// Copyright (C) 2017 Ericsson and others.
|
|
3
|
+
//
|
|
4
|
+
// This program and the accompanying materials are made available under the
|
|
5
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
//
|
|
8
|
+
// This Source Code may also be made available under the following Secondary
|
|
9
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
+
// with the GNU Classpath Exception which is available at
|
|
12
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
13
|
+
//
|
|
14
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
+
// *****************************************************************************
|
|
16
|
+
|
|
17
|
+
export * from './task-service';
|
|
18
|
+
export * from './task-contribution';
|
|
19
|
+
export * from './task-definition-registry';
|
|
20
|
+
export * from './task-problem-matcher-registry';
|
|
21
|
+
export * from './task-problem-pattern-registry';
|
|
22
|
+
export * from './task-schema-updater';
|
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
// *****************************************************************************
|
|
2
|
-
// Copyright (C) 2018 Red Hat, Inc. and others.
|
|
3
|
-
//
|
|
4
|
-
// This program and the accompanying materials are made available under the
|
|
5
|
-
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
-
// http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
-
//
|
|
8
|
-
// This Source Code may also be made available under the following Secondary
|
|
9
|
-
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
-
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
-
// with the GNU Classpath Exception which is available at
|
|
12
|
-
// https://www.gnu.org/software/classpath/license.html.
|
|
13
|
-
//
|
|
14
|
-
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
-
// *****************************************************************************
|
|
16
|
-
|
|
17
|
-
import { injectable, inject } from '@theia/core/shared/inversify';
|
|
18
|
-
import { ProcessTaskResolver } from './process-task-resolver';
|
|
19
|
-
import { TaskContribution, TaskResolverRegistry } from '../task-contribution';
|
|
20
|
-
|
|
21
|
-
@injectable()
|
|
22
|
-
export class ProcessTaskContribution implements TaskContribution {
|
|
23
|
-
|
|
24
|
-
@inject(ProcessTaskResolver)
|
|
25
|
-
protected readonly processTaskResolver: ProcessTaskResolver;
|
|
26
|
-
|
|
27
|
-
registerResolvers(resolvers: TaskResolverRegistry): void {
|
|
28
|
-
resolvers.registerExecutionResolver('process', this.processTaskResolver);
|
|
29
|
-
resolvers.registerExecutionResolver('shell', this.processTaskResolver);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
1
|
+
// *****************************************************************************
|
|
2
|
+
// Copyright (C) 2018 Red Hat, Inc. and others.
|
|
3
|
+
//
|
|
4
|
+
// This program and the accompanying materials are made available under the
|
|
5
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
//
|
|
8
|
+
// This Source Code may also be made available under the following Secondary
|
|
9
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
+
// with the GNU Classpath Exception which is available at
|
|
12
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
13
|
+
//
|
|
14
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
+
// *****************************************************************************
|
|
16
|
+
|
|
17
|
+
import { injectable, inject } from '@theia/core/shared/inversify';
|
|
18
|
+
import { ProcessTaskResolver } from './process-task-resolver';
|
|
19
|
+
import { TaskContribution, TaskResolverRegistry } from '../task-contribution';
|
|
20
|
+
|
|
21
|
+
@injectable()
|
|
22
|
+
export class ProcessTaskContribution implements TaskContribution {
|
|
23
|
+
|
|
24
|
+
@inject(ProcessTaskResolver)
|
|
25
|
+
protected readonly processTaskResolver: ProcessTaskResolver;
|
|
26
|
+
|
|
27
|
+
registerResolvers(resolvers: TaskResolverRegistry): void {
|
|
28
|
+
resolvers.registerExecutionResolver('process', this.processTaskResolver);
|
|
29
|
+
resolvers.registerExecutionResolver('shell', this.processTaskResolver);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
// *****************************************************************************
|
|
2
|
-
// Copyright (C) 2018 Red Hat, Inc. and others.
|
|
3
|
-
//
|
|
4
|
-
// This program and the accompanying materials are made available under the
|
|
5
|
-
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
-
// http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
-
//
|
|
8
|
-
// This Source Code may also be made available under the following Secondary
|
|
9
|
-
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
-
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
-
// with the GNU Classpath Exception which is available at
|
|
12
|
-
// https://www.gnu.org/software/classpath/license.html.
|
|
13
|
-
//
|
|
14
|
-
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
-
// *****************************************************************************
|
|
16
|
-
|
|
17
|
-
import { interfaces } from '@theia/core/shared/inversify';
|
|
18
|
-
import { ProcessTaskContribution } from './process-task-contribution';
|
|
19
|
-
import { ProcessTaskResolver } from './process-task-resolver';
|
|
20
|
-
import { TaskContribution } from '../task-contribution';
|
|
21
|
-
|
|
22
|
-
export function bindProcessTaskModule(bind: interfaces.Bind): void {
|
|
23
|
-
|
|
24
|
-
bind(ProcessTaskResolver).toSelf().inSingletonScope();
|
|
25
|
-
bind(ProcessTaskContribution).toSelf().inSingletonScope();
|
|
26
|
-
bind(TaskContribution).toService(ProcessTaskContribution);
|
|
27
|
-
}
|
|
1
|
+
// *****************************************************************************
|
|
2
|
+
// Copyright (C) 2018 Red Hat, Inc. and others.
|
|
3
|
+
//
|
|
4
|
+
// This program and the accompanying materials are made available under the
|
|
5
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
//
|
|
8
|
+
// This Source Code may also be made available under the following Secondary
|
|
9
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
+
// with the GNU Classpath Exception which is available at
|
|
12
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
13
|
+
//
|
|
14
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
+
// *****************************************************************************
|
|
16
|
+
|
|
17
|
+
import { interfaces } from '@theia/core/shared/inversify';
|
|
18
|
+
import { ProcessTaskContribution } from './process-task-contribution';
|
|
19
|
+
import { ProcessTaskResolver } from './process-task-resolver';
|
|
20
|
+
import { TaskContribution } from '../task-contribution';
|
|
21
|
+
|
|
22
|
+
export function bindProcessTaskModule(bind: interfaces.Bind): void {
|
|
23
|
+
|
|
24
|
+
bind(ProcessTaskResolver).toSelf().inSingletonScope();
|
|
25
|
+
bind(ProcessTaskContribution).toSelf().inSingletonScope();
|
|
26
|
+
bind(TaskContribution).toService(ProcessTaskContribution);
|
|
27
|
+
}
|