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) });
}
}
}
}));
}