aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/clangcodemodel
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2019-03-13 17:58:06 +0100
committerChristian Kandeler <christian.kandeler@qt.io>2019-03-15 09:55:21 +0000
commit3a58c4652eb3c1707d74129f89585b4706d4c577 (patch)
tree27d180e6de28878ca1ac22a6c43a32b9317d4e28 /src/plugins/clangcodemodel
parentec9d35f237e88e01cdde03b3cdd4c24cc9dd624f (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.cpp18
-rw-r--r--src/plugins/clangcodemodel/clangcodemodelplugin.h5
-rw-r--r--src/plugins/clangcodemodel/clangutils.cpp13
-rw-r--r--src/plugins/clangcodemodel/clangutils.h14
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
{