function registerProjectCreationEndListener()

in src/extension.ts [263:310]


function registerProjectCreationEndListener(context: vscode.ExtensionContext): void {
    // corresponding to setting values
    const OPEN_IN_NEW_WORKSPACE = "Open";
    const OPEN_IN_CURRENT_WORKSPACE = "Add to Workspace";
    const OPEN_INTERACTIVE = "Interactive";

    const specifyOpenMethod = async (hasOpenFolder: boolean, projectName: string, projectLocation: string) => {
        let openMethod = vscode.workspace.getConfiguration("maven").get<string>("projectOpenBehavior");
        sendInfo("", {
            name: "projectOpenBehavior(from setting)",
            value: openMethod ?? "undefined"
        }, {});
        if (openMethod === OPEN_INTERACTIVE) {
            const candidates: string[] = [
                OPEN_IN_NEW_WORKSPACE,
                hasOpenFolder ? OPEN_IN_CURRENT_WORKSPACE : undefined
            ].filter(Boolean) as string[];
            openMethod = await vscode.window.showInformationMessage(`Maven project [${projectName}] is created under: ${projectLocation}`, ...candidates);
            sendInfo("", {
                name: "projectOpenBehavior(from choice)",
                value: openMethod ?? "cancelled"
            }, {});
        }
        return openMethod;
    };

    context.subscriptions.push(vscode.tasks.onDidEndTaskProcess(async (e) => {
        if (e.execution.task.name === "createProject" && e.execution.task.source === "maven") {
            if (e.exitCode !== 0) {
                vscode.window.showErrorMessage("Failed to create the project, check terminal output for more details.");
                return;
            }
            const { targetFolder, artifactId } = e.execution.task.definition;
            const projectFolder = path.join(targetFolder, artifactId);
            // Open project either is the same workspace or new workspace
            const hasOpenFolder = vscode.workspace.workspaceFolders !== undefined;
            const choice = await specifyOpenMethod(hasOpenFolder, artifactId, targetFolder);
            if (choice === OPEN_IN_NEW_WORKSPACE) {
                vscode.commands.executeCommand("vscode.openFolder", vscode.Uri.file(projectFolder), hasOpenFolder);
            } else if (choice === OPEN_IN_CURRENT_WORKSPACE) {
                assert(vscode.workspace.workspaceFolders !== undefined);
                if (!vscode.workspace.workspaceFolders?.find((workspaceFolder) => projectFolder.startsWith(workspaceFolder.uri?.fsPath))) {
                    vscode.workspace.updateWorkspaceFolders(vscode.workspace.workspaceFolders.length, null, { uri: vscode.Uri.file(projectFolder) });
                }
            }
        }
    }));
}