diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectmanager.cpp b/src/plugins/cmakeprojectmanager/cmakeprojectmanager.cpp index 69a8f0adf66..4f563f232ce 100644 --- a/src/plugins/cmakeprojectmanager/cmakeprojectmanager.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeprojectmanager.cpp @@ -30,11 +30,13 @@ #include "cmakeproject.h" #include "cmakeprojectconstants.h" #include "cmakeprojectnodes.h" +#include "fileapiparser.h" #include #include #include #include +#include #include #include #include @@ -46,15 +48,19 @@ #include #include +#include +#include using namespace ProjectExplorer; using namespace CMakeProjectManager::Internal; -CMakeManager::CMakeManager() : - m_runCMakeAction(new QAction(QIcon(), tr("Run CMake"), this)), - m_clearCMakeCacheAction(new QAction(QIcon(), tr("Clear CMake Configuration"), this)), - m_runCMakeActionContextMenu(new QAction(QIcon(), tr("Run CMake"), this)), - m_rescanProjectAction(new QAction(QIcon(), tr("Rescan Project"), this)) +CMakeManager::CMakeManager() + : m_runCMakeAction(new QAction(QIcon(), tr("Run CMake"), this)) + , m_clearCMakeCacheAction(new QAction(QIcon(), tr("Clear CMake Configuration"), this)) + , m_runCMakeActionContextMenu(new QAction(QIcon(), tr("Run CMake"), this)) + , m_rescanProjectAction(new QAction(QIcon(), tr("Rescan Project"), this)) + , m_parseAndValidateCMakeReplyFileAction( + new QAction(QIcon(), tr("Parse and verify a CMake reply file"), this)) { Core::ActionContainer *mbuild = Core::ActionManager::actionContainer(ProjectExplorer::Constants::M_BUILDPROJECT); @@ -126,6 +132,13 @@ CMakeManager::CMakeManager() : mbuild->addAction(command, ProjectExplorer::Constants::G_BUILD_BUILD); connect(m_buildFileAction, &QAction::triggered, this, [this] { buildFile(); }); + command = Core::ActionManager::registerAction(m_parseAndValidateCMakeReplyFileAction, + "CMakeProject.Debug.ParseAndVerifyReplyFile"); + connect(m_parseAndValidateCMakeReplyFileAction, + &QAction::triggered, + this, + &CMakeManager::parseAndValidateCMakeReplyFile); + connect(SessionManager::instance(), &SessionManager::startupProjectChanged, this, &CMakeManager::updateCmakeActions); connect(BuildManager::instance(), &BuildManager::buildStateChanged, @@ -214,6 +227,29 @@ void CMakeManager::enableBuildFileMenus(Node *node) } } +void CMakeManager::parseAndValidateCMakeReplyFile() +{ + QString replyFile = QFileDialog::getOpenFileName(Core::ICore::mainWindow(), + tr("Select a CMake reply file"), + QString(), + QString("index*.json")); + if (replyFile.isEmpty()) + return; + + QString errorMessage; + auto result = FileApiParser::parseData(QFileInfo(replyFile), errorMessage); + + const QString message + = errorMessage.isEmpty() + ? tr("The reply file \"%1\" and referenced data parsed OK and passed validation.") + .arg(QDir::toNativeSeparators(replyFile)) + : tr("The reply file \"%1\" failed to parse or validate with error " + "message:
\"%2\"") + .arg(QDir::toNativeSeparators(replyFile)) + .arg(errorMessage); + QMessageBox::information(Core::ICore::mainWindow(), tr("Parsing Result"), message); +} + void CMakeManager::buildFile(Node *node) { if (!node) { diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectmanager.h b/src/plugins/cmakeprojectmanager/cmakeprojectmanager.h index db3b10b6e2c..22c0c30edc6 100644 --- a/src/plugins/cmakeprojectmanager/cmakeprojectmanager.h +++ b/src/plugins/cmakeprojectmanager/cmakeprojectmanager.h @@ -53,11 +53,15 @@ private: void updateBuildFileAction(); void enableBuildFileMenus(ProjectExplorer::Node *node); + // Debugging helper: + void parseAndValidateCMakeReplyFile(); + QAction *m_runCMakeAction; QAction *m_clearCMakeCacheAction; QAction *m_runCMakeActionContextMenu; QAction *m_rescanProjectAction; QAction *m_buildFileContextMenu; + QAction *m_parseAndValidateCMakeReplyFileAction; Utils::ParameterAction *m_buildFileAction; };