diff --git a/extension/src/tasks/taskUtil.ts b/extension/src/tasks/taskUtil.ts index 6d7d0c65..1a5cbd7a 100644 --- a/extension/src/tasks/taskUtil.ts +++ b/extension/src/tasks/taskUtil.ts @@ -1,4 +1,5 @@ import * as vscode from "vscode"; +import * as path from "path"; import { parseArgsStringToArgv } from "string-argv"; import { GradleProject, GradleTask } from "../proto/gradle_pb"; import { TaskArgs } from "../stores/types"; @@ -278,6 +279,27 @@ export async function loadTasksForProjectRoots( } } } + // detect duplicate task names + const tasksMap: Map = new Map(); + for (const task of allTasks) { + if (tasksMap.has(task.name)) { + tasksMap.get(task.name)!.push(task); + } else { + tasksMap.set(task.name, [task]); + } + } + // rename duplicate task names with additional relative path + for (const tasks of tasksMap.values()) { + if (tasks.length !== 1) { + for (const task of tasks) { + const definition = task.definition as GradleTaskDefinition; + const relativePath = path.relative(definition.workspaceFolder, definition.projectFolder); + if (relativePath) { + task.name = task.name + ` (${relativePath})`; + } + } + } + } return allTasks; }