diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2019-03-13 17:58:06 +0100 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2019-03-15 09:55:21 +0000 |
commit | 3a58c4652eb3c1707d74129f89585b4706d4c577 (patch) | |
tree | 27d180e6de28878ca1ac22a6c43a32b9317d4e28 /src/plugins/clangcodemodel | |
parent | ec9d35f237e88e01cdde03b3cdd4c24cc9dd624f (diff) |
Compilation database: Add information to message pane
We must tell users where we generated the file, and also inform them
about errors.
Change-Id: I6383655e2f731f41b9121b2a6a31bba551d1c1de
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
Diffstat (limited to 'src/plugins/clangcodemodel')
-rw-r--r-- | src/plugins/clangcodemodel/clangcodemodelplugin.cpp | 18 | ||||
-rw-r--r-- | src/plugins/clangcodemodel/clangcodemodelplugin.h | 5 | ||||
-rw-r--r-- | src/plugins/clangcodemodel/clangutils.cpp | 13 | ||||
-rw-r--r-- | src/plugins/clangcodemodel/clangutils.h | 14 |
4 files changed, 40 insertions, 10 deletions
diff --git a/src/plugins/clangcodemodel/clangcodemodelplugin.cpp b/src/plugins/clangcodemodel/clangcodemodelplugin.cpp index b782d04867..04463be527 100644 --- a/src/plugins/clangcodemodel/clangcodemodelplugin.cpp +++ b/src/plugins/clangcodemodel/clangcodemodelplugin.cpp @@ -36,6 +36,7 @@ #include <coreplugin/actionmanager/actioncontainer.h> #include <coreplugin/actionmanager/actionmanager.h> +#include <coreplugin/messagemanager.h> #include <coreplugin/progressmanager/progressmanager.h> #include <cpptools/cppmodelmanager.h> @@ -72,8 +73,9 @@ void ClangCodeModelPlugin::generateCompilationDB() { if (!project || !project->activeTarget()) return; - QFuture<void> task = QtConcurrent::run(&Utils::generateCompilationDB, - CppModelManager::instance()->projectInfo(project)); + QFuture<Utils::GenerateCompilationDbResult> task + = QtConcurrent::run(&Utils::generateCompilationDB, + CppModelManager::instance()->projectInfo(project)); Core::ProgressManager::addTask(task, tr("Generating Compilation DB"), "generate compilation db"); m_generatorWatcher.setFuture(task); } @@ -135,7 +137,17 @@ void ClangCodeModelPlugin::createCompilationDBButton() command->setDescription(m_generateCompilationDBAction->text()); mbuild->addAction(command, ProjectExplorer::Constants::G_BUILD_BUILD); - connect(&m_generatorWatcher, &QFutureWatcher<void>::finished, this, [this] () { + connect(&m_generatorWatcher, &QFutureWatcher<Utils::GenerateCompilationDbResult>::finished, + this, [this] () { + const Utils::GenerateCompilationDbResult result = m_generatorWatcher.result(); + QString message; + if (result.error.isEmpty()) { + message = tr("Clang compilation database generated at \"%1\".") + .arg(QDir::toNativeSeparators(result.filePath)); + } else { + message = tr("Generating clang compilation database failed: %1").arg(result.error); + } + Core::MessageManager::write(message, Core::MessageManager::Flash); m_generateCompilationDBAction->setEnabled( isDBGenerationEnabled(ProjectExplorer::SessionManager::startupProject())); }); diff --git a/src/plugins/clangcodemodel/clangcodemodelplugin.h b/src/plugins/clangcodemodel/clangcodemodelplugin.h index 375007f9c7..47316d46dd 100644 --- a/src/plugins/clangcodemodel/clangcodemodelplugin.h +++ b/src/plugins/clangcodemodel/clangcodemodelplugin.h @@ -26,6 +26,7 @@ #pragma once #include "clangmodelmanagersupport.h" +#include "clangutils.h" #include <extensionsystem/iplugin.h> @@ -54,8 +55,8 @@ private: void createCompilationDBButton(); ClangModelManagerSupportProvider m_modelManagerSupportProvider; - Utils::ParameterAction *m_generateCompilationDBAction = nullptr; - QFutureWatcher<void> m_generatorWatcher; + ::Utils::ParameterAction *m_generateCompilationDBAction = nullptr; + QFutureWatcher<Utils::GenerateCompilationDbResult> m_generatorWatcher; #ifdef WITH_TESTS QList<QObject *> createTestObjects() const override; #endif diff --git a/src/plugins/clangcodemodel/clangutils.cpp b/src/plugins/clangcodemodel/clangutils.cpp index fa42dedf2d..fb06e9c384 100644 --- a/src/plugins/clangcodemodel/clangutils.cpp +++ b/src/plugins/clangcodemodel/clangutils.cpp @@ -386,18 +386,22 @@ static QJsonObject createFileObject(const ::Utils::FileName &buildDir, return fileObject; } -void generateCompilationDB(CppTools::ProjectInfo projectInfo) +GenerateCompilationDbResult generateCompilationDB(CppTools::ProjectInfo projectInfo) { const ::Utils::FileName buildDir = buildDirectory(*projectInfo.project()); - QTC_ASSERT(!buildDir.isEmpty(), return;); + QTC_ASSERT(!buildDir.isEmpty(), return GenerateCompilationDbResult(QString(), + QCoreApplication::translate("ClangUtils", "Could not retrieve build directory."))); QDir dir(buildDir.toString()); if (!dir.exists()) dir.mkpath(dir.path()); QFile compileCommandsFile(buildDir.toString() + "/compile_commands.json"); const bool fileOpened = compileCommandsFile.open(QIODevice::WriteOnly | QIODevice::Truncate); - if (!fileOpened) - return; + if (!fileOpened) { + return GenerateCompilationDbResult(QString(), + QCoreApplication::translate("ClangUtils", "Could not create \"%1\": %2") + .arg(compileCommandsFile.fileName(), compileCommandsFile.errorString())); + } compileCommandsFile.write("["); for (ProjectPart::Ptr projectPart : projectInfo.projectParts()) { @@ -412,6 +416,7 @@ void generateCompilationDB(CppTools::ProjectInfo projectInfo) compileCommandsFile.write("\n]"); compileCommandsFile.close(); + return GenerateCompilationDbResult(compileCommandsFile.fileName(), QString()); } QString currentCppEditorDocumentFilePath() diff --git a/src/plugins/clangcodemodel/clangutils.h b/src/plugins/clangcodemodel/clangutils.h index 8ced14f5ad..d3d57d8dd5 100644 --- a/src/plugins/clangcodemodel/clangutils.h +++ b/src/plugins/clangcodemodel/clangutils.h @@ -70,7 +70,19 @@ QString diagnosticCategoryPrefixRemoved(const QString &text); ::Utils::CodeModelIcon::Type iconTypeForToken(const ClangBackEnd::TokenInfoContainer &token); -void generateCompilationDB(CppTools::ProjectInfo projectInfo); +class GenerateCompilationDbResult +{ +public: + GenerateCompilationDbResult() = default; + GenerateCompilationDbResult(const QString &filePath, const QString &error) + : filePath(filePath), error(error) + {} + + QString filePath; + QString error; +}; + +GenerateCompilationDbResult generateCompilationDB(CppTools::ProjectInfo projectInfo); class DiagnosticTextInfo { |