From c1c374150df738c18e4f59dbe787784b8e3fe8ba Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 17 Apr 2025 12:51:11 +0200 Subject: [PATCH] ProjectExplorer: More customwizard code cosmetics Change-Id: I42311bb5f8e6503a8f81dafd5c7487aaaaf84a0c Reviewed-by: Alessandro Portale --- .../customwizard/customwizard.cpp | 59 +++++++++++-------- .../customwizard/customwizard.h | 2 +- .../customwizardscriptgenerator.cpp | 29 +++++---- .../customwizardscriptgenerator.h | 11 ++-- 4 files changed, 54 insertions(+), 47 deletions(-) diff --git a/src/plugins/projectexplorer/customwizard/customwizard.cpp b/src/plugins/projectexplorer/customwizard/customwizard.cpp index a80beaec5cb..c7a866511cf 100644 --- a/src/plugins/projectexplorer/customwizard/customwizard.cpp +++ b/src/plugins/projectexplorer/customwizard/customwizard.cpp @@ -160,11 +160,10 @@ BaseFileWizard *CustomWizard::create(const WizardDialogParameters &p) const } // Read out files and store contents with field contents replaced. -static Result<> createFile(CustomWizardFile cwFile, - const QString &sourceDirectory, - const FilePath &targetDirectory, - const CustomProjectWizard::FieldReplacementMap &fm, - GeneratedFiles *files) +static Result createFile(CustomWizardFile cwFile, + const QString &sourceDirectory, + const FilePath &targetDirectory, + const CustomProjectWizard::FieldReplacementMap &fm) { const QChar slash = QLatin1Char('/'); const QString sourcePath = sourceDirectory + slash + cwFile.source; @@ -197,8 +196,7 @@ static Result<> createFile(CustomWizardFile cwFile, if (cwFile.openProject) attributes |= GeneratedFile::OpenProjectAttribute; generatedFile.setAttributes(attributes); - files->push_back(generatedFile); - return ResultOk; + return generatedFile; } // Helper to find a specific wizard page of a wizard by type. @@ -242,7 +240,13 @@ GeneratedFiles CustomWizard::generateFiles(const QWizard *dialog, QString *error str << " '" << it.key() << "' -> '" << it.value() << "'\n"; qWarning("%s", qPrintable(logText)); } - return generateWizardFiles(errorMessage); + const Result res = generateWizardFiles(); + if (!res) { + if (errorMessage) + *errorMessage = res.error(); + return {}; + } + return res.value(); } Result<> CustomWizard::writeFiles(const GeneratedFiles &files) const @@ -285,7 +289,7 @@ Result<> CustomWizard::writeFiles(const GeneratedFiles &files) const return ResultOk; } -GeneratedFiles CustomWizard::generateWizardFiles(QString *errorMessage) const +Result CustomWizard::generateWizardFiles() const { GeneratedFiles rc; const CustomWizardContextPtr ctx = context(); @@ -296,24 +300,24 @@ GeneratedFiles CustomWizard::generateWizardFiles(QString *errorMessage) const qDebug() << "CustomWizard::generateWizardFiles: in " << ctx->targetPath << ", using: " << ctx->replacements; - // If generator script is non-empty, do a dry run to get it's files. + // If generator script is non-empty, do a dry run to get its files. if (!d->m_parameters->filesGeneratorScript.isEmpty()) { - rc += dryRunCustomWizardGeneratorScript(scriptWorkingDirectory(ctx, d->m_parameters), - d->m_parameters->filesGeneratorScript, - d->m_parameters->filesGeneratorScriptArguments, - ctx->replacements, - errorMessage); - if (rc.isEmpty()) - return rc; + Result> res = + dryRunCustomWizardGeneratorScript(scriptWorkingDirectory(ctx, d->m_parameters), + d->m_parameters->filesGeneratorScript, + d->m_parameters->filesGeneratorScriptArguments, + ctx->replacements); + if (!res) + return res; + rc.append(res.value()); } // Add the template files specified by the elements. for (const CustomWizardFile &file : std::as_const(d->m_parameters->files)) { - const Result<> res = createFile(file, d->m_parameters->directory, ctx->targetPath, context()->replacements, &rc); - if (!res) { - if (errorMessage) - errorMessage->append(res.error()); - return {}; - } + const Result res = createFile(file, d->m_parameters->directory, + ctx->targetPath, context()->replacements); + if (!res) + return ResultError(res.error()); + rc.append(res.value()); } return rc; @@ -514,8 +518,13 @@ GeneratedFiles CustomProjectWizard::generateFiles(const QWizard *w, QString *err ctx->replacements = fieldReplacementMap; if (CustomWizardPrivate::verbose) qDebug() << "CustomProjectWizard::generateFiles" << dialog << ctx->targetPath << ctx->replacements; - const GeneratedFiles generatedFiles = generateWizardFiles(errorMessage); - return generatedFiles; + const Result generatedFiles = generateWizardFiles(); + if (!generatedFiles) { + if (errorMessage) + *errorMessage = generatedFiles.error(); + return {}; + } + return *generatedFiles; } /*! diff --git a/src/plugins/projectexplorer/customwizard/customwizard.h b/src/plugins/projectexplorer/customwizard/customwizard.h index 21a07f6cad3..3575552fa4e 100644 --- a/src/plugins/projectexplorer/customwizard/customwizard.h +++ b/src/plugins/projectexplorer/customwizard/customwizard.h @@ -80,7 +80,7 @@ protected: using CustomWizardContextPtr = std::shared_ptr; // generate files in path - Core::GeneratedFiles generateWizardFiles(QString *errorMessage) const; + Utils::Result generateWizardFiles() const; // Create replacement map as static base fields + QWizard fields FieldReplacementMap replacementMap(const QWizard *w) const; Utils::Result<> writeFiles(const Core::GeneratedFiles &files) const override; diff --git a/src/plugins/projectexplorer/customwizard/customwizardscriptgenerator.cpp b/src/plugins/projectexplorer/customwizard/customwizardscriptgenerator.cpp index bb0cab58c1e..f1bc91fb6a2 100644 --- a/src/plugins/projectexplorer/customwizard/customwizardscriptgenerator.cpp +++ b/src/plugins/projectexplorer/customwizard/customwizardscriptgenerator.cpp @@ -14,6 +14,7 @@ #include #include +using namespace Core; using namespace Utils; namespace ProjectExplorer::Internal { @@ -114,39 +115,37 @@ static Result<> \sa runCustomWizardGeneratorScript, ProjectExplorer::CustomWizard */ -Core::GeneratedFiles +Result> dryRunCustomWizardGeneratorScript(const QString &targetPath, const QStringList &script, const QList &arguments, - const QMap &fieldMap, - QString *errorMessage) + const QMap &fieldMap) { // Run in temporary directory as the target path may not exist yet. QString stdOut; - const Result<> res = runGenerationScriptHelper(Utils::TemporaryDirectory::masterDirectoryFilePath(), - script, arguments, true, fieldMap, &stdOut); - if (!res) { - *errorMessage = res.error(); - return Core::GeneratedFiles(); - } - Core::GeneratedFiles files; + const Result<> res = runGenerationScriptHelper(TemporaryDirectory::masterDirectoryFilePath(), + script, arguments, true, fieldMap, &stdOut); + if (!res) + return ResultError(res.error()); + + GeneratedFiles files; // Parse the output consisting of lines with ',' separated tokens. // (file name + attributes matching those of the element) const QStringList lines = stdOut.split(QLatin1Char('\n')); for (const QString &line : lines) { const QString trimmed = line.trimmed(); if (!trimmed.isEmpty()) { - Core::GeneratedFile file; - Core::GeneratedFile::Attributes attributes = Core::GeneratedFile::CustomGeneratorAttribute; + GeneratedFile file; + GeneratedFile::Attributes attributes = GeneratedFile::CustomGeneratorAttribute; const QStringList tokens = line.split(QLatin1Char(',')); const int count = tokens.count(); for (int i = 0; i < count; i++) { const QString &token = tokens.at(i); if (i) { if (token == QLatin1String(customWizardFileOpenEditorAttributeC)) - attributes |= Core::GeneratedFile::OpenEditorAttribute; + attributes |= GeneratedFile::OpenEditorAttribute; else if (token == QLatin1String(customWizardFileOpenProjectAttributeC)) - attributes |= Core::GeneratedFile::OpenProjectAttribute; + attributes |= GeneratedFile::OpenProjectAttribute; } else { // Token 0 is file name. Wizard wants native names. // Expand to full path if relative @@ -165,7 +164,7 @@ Core::GeneratedFiles if (CustomWizard::verbose()) { QDebug nospace = qDebug().nospace(); nospace << script << " generated:\n"; - for (const Core::GeneratedFile &f : std::as_const(files)) + for (const GeneratedFile &f : std::as_const(files)) nospace << ' ' << f.filePath() << f.attributes() << '\n'; } return files; diff --git a/src/plugins/projectexplorer/customwizard/customwizardscriptgenerator.h b/src/plugins/projectexplorer/customwizard/customwizardscriptgenerator.h index 57854883909..d7ff0f842df 100644 --- a/src/plugins/projectexplorer/customwizard/customwizardscriptgenerator.h +++ b/src/plugins/projectexplorer/customwizard/customwizardscriptgenerator.h @@ -18,17 +18,16 @@ class GeneratorScriptArgument; QStringList fixGeneratorScript(const QString &configFile, QString attributeIn); // Step 1) Do a dry run of the generation script to get a list of files on stdout -QList +Utils::Result> dryRunCustomWizardGeneratorScript(const QString &targetPath, const QStringList &script, const QList &arguments, - const QMap &fieldMap, - QString *errorMessage); + const QMap &fieldMap); // Step 2) Generate files Utils::Result<> runCustomWizardGeneratorScript(const QString &targetPath, - const QStringList &script, - const QList &arguments, - const QMap &fieldMap); + const QStringList &script, + const QList &arguments, + const QMap &fieldMap); } // namespace ProjectExplorer::Internal