in src/exportJarSteps/ResolveMainClassExecutor.ts [26:91]
private async resolveMainClass(stepMetadata: IStepMetadata): Promise<boolean> {
const mainClasses: IMainClassInfo[] | undefined = await window.withProgress({
location: ProgressLocation.Window,
title: "Exporting Jar : Resolving main classes...",
cancellable: true,
}, (_progress, token) => {
return new Promise<IMainClassInfo[]>(async (resolve, reject) => {
token.onCancellationRequested(() => {
return reject();
});
if (!stepMetadata.workspaceFolder) {
return reject(new Error(ExportJarMessages.fieldUndefinedMessage(ExportJarMessages.Field.WORKSPACEFOLDER, this.currentStep)));
}
resolve(await Jdtls.getMainClasses(stepMetadata.workspaceFolder.uri.toString()));
});
});
if (_.isEmpty(mainClasses)) {
stepMetadata.mainClass = "";
return true;
}
const pickItems: QuickPickItem[] = [];
for (const mainClass of mainClasses) {
pickItems.push({
label: ResolveMainClassExecutor.getName(mainClass),
description: mainClass.name,
});
}
const noMainClassItem: QuickPickItem = {
label: "<without main class>",
description: "",
};
pickItems.push(noMainClassItem);
const disposables: Disposable[] = [];
let result: boolean = false;
try {
result = await new Promise<boolean>(async (resolve, reject) => {
const pickBox = createPickBox<QuickPickItem>("Export Jar : Determine main class", "Select the main class",
pickItems, stepMetadata.steps.length > 0);
disposables.push(
pickBox.onDidTriggerButton((item) => {
if (item === QuickInputButtons.Back) {
return resolve(false);
}
}),
pickBox.onDidAccept(() => {
if (_.isEmpty(pickBox.selectedItems)) {
return;
}
stepMetadata.mainClass = pickBox.selectedItems[0].description;
stepMetadata.steps.push(ExportJarStep.ResolveMainClass);
return resolve(true);
}),
pickBox.onDidHide(() => {
return reject();
}),
);
disposables.push(pickBox);
pickBox.show();
});
} finally {
for (const d of disposables) {
d.dispose();
}
}
return result;
}