summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikolai Kosjar <nikolai.kosjar@theqtcompany.com>2014-11-07 11:32:40 +0100
committerNikolai Kosjar <nikolai.kosjar@theqtcompany.com>2014-11-07 12:40:56 +0200
commitb6a50a1a4c46b6b935a2b56c0f7362f324f2f35f (patch)
tree752f02629cc7fd3fea3af0a6bf9e4a0d90e508e1
parent2f3666a3f05bfe5e71241b55ce72e913d547f2a4 (diff)
downloadqt-creator-b6a50a1a4c46b6b935a2b56c0f7362f324f2f35f.tar.gz
Use updated ProjectInfo
...that actually make us use the ProjectInfo with updated CompilerCallData. Change-Id: Ieee298b3db64159f3faa02231921275e4466bcb5 Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
-rw-r--r--plugins/clangstaticanalyzer/clangstaticanalyzerruncontrolfactory.cpp10
-rw-r--r--plugins/clangstaticanalyzer/clangstaticanalyzertool.cpp30
-rw-r--r--plugins/clangstaticanalyzer/clangstaticanalyzertool.h6
3 files changed, 29 insertions, 17 deletions
diff --git a/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrolfactory.cpp b/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrolfactory.cpp
index df683464db..94f7f27163 100644
--- a/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrolfactory.cpp
+++ b/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrolfactory.cpp
@@ -71,19 +71,19 @@ RunControl *ClangStaticAnalyzerRunControlFactory::create(RunConfiguration *runCo
Q_UNUSED(runMode);
using namespace CppTools;
- const ProjectInfo projectInfoAtAnalyzerStart = m_tool->projectInfo();
- QTC_ASSERT(projectInfoAtAnalyzerStart.isValid(), return 0);
+ const ProjectInfo projectInfoBeforeBuild = m_tool->projectInfoBeforeBuild();
+ QTC_ASSERT(projectInfoBeforeBuild.isValid(), return 0);
Project *project = SessionManager::startupProject();
QTC_ASSERT(project, return 0);
- const ProjectInfo projectInfoNow = CppModelManager::instance()->projectInfo(project);
+ const ProjectInfo projectInfoAfterBuild = CppModelManager::instance()->projectInfo(project);
- if (projectInfoNow.configurationOrFilesChanged(projectInfoAtAnalyzerStart)) {
+ if (projectInfoAfterBuild.configurationOrFilesChanged(projectInfoBeforeBuild)) {
// If it's more than a release/debug build configuration change, e.g.
// a version control checkout, files might be not valid C++ anymore
// or even gone, so better stop here.
- m_tool->resetCursorAndProjectInfo();
+ m_tool->resetCursorAndProjectInfoBeforeBuild();
if (errorMessage) {
*errorMessage = tr(
"The project configuration changed since the start of the Clang Static Analyzer. "
diff --git a/plugins/clangstaticanalyzer/clangstaticanalyzertool.cpp b/plugins/clangstaticanalyzer/clangstaticanalyzertool.cpp
index 591e8da4ce..5042267776 100644
--- a/plugins/clangstaticanalyzer/clangstaticanalyzertool.cpp
+++ b/plugins/clangstaticanalyzer/clangstaticanalyzertool.cpp
@@ -135,10 +135,21 @@ AnalyzerRunControl *ClangStaticAnalyzerTool::createRunControl(
ProjectExplorer::RunConfiguration *runConfiguration)
{
QTC_ASSERT(runConfiguration, return 0);
- QTC_ASSERT(m_projectInfo.isValid(), return 0);
+ QTC_ASSERT(m_projectInfoBeforeBuild.isValid(), return 0);
- ClangStaticAnalyzerRunControl *engine = new ClangStaticAnalyzerRunControl(sp, runConfiguration,
- m_projectInfo);
+ // Some projects provides CompilerCallData once a build is finished,
+ // so pass on the updated Project Info unless no configuration change
+ // (defines/includes/files) happened.
+ Project *project = SessionManager::startupProject();
+ QTC_ASSERT(project, return 0);
+ const CppTools::ProjectInfo projectInfoAfterBuild
+ = CppTools::CppModelManager::instance()->projectInfo(project);
+ QTC_ASSERT(!projectInfoAfterBuild.configurationOrFilesChanged(m_projectInfoBeforeBuild),
+ return 0);
+ m_projectInfoBeforeBuild = CppTools::ProjectInfo();
+
+ ClangStaticAnalyzerRunControl *engine
+ = new ClangStaticAnalyzerRunControl(sp, runConfiguration, projectInfoAfterBuild);
connect(engine, &ClangStaticAnalyzerRunControl::starting,
this, &ClangStaticAnalyzerTool::onEngineIsStarting);
connect(engine, &ClangStaticAnalyzerRunControl::newDiagnosticsAvailable,
@@ -196,19 +207,20 @@ void ClangStaticAnalyzerTool::startTool(StartMode mode)
setBusyCursor(true);
Project *project = SessionManager::startupProject();
QTC_ASSERT(project, return);
+ m_projectInfoBeforeBuild = CppTools::CppModelManager::instance()->projectInfo(project);
+ QTC_ASSERT(m_projectInfoBeforeBuild.isValid(), return);
ProjectExplorerPlugin::instance()->runProject(project, runMode());
- m_projectInfo = CppTools::CppModelManager::instance()->projectInfo(project);
}
-CppTools::ProjectInfo ClangStaticAnalyzerTool::projectInfo() const
+CppTools::ProjectInfo ClangStaticAnalyzerTool::projectInfoBeforeBuild() const
{
- return m_projectInfo;
+ return m_projectInfoBeforeBuild;
}
-void ClangStaticAnalyzerTool::resetCursorAndProjectInfo()
+void ClangStaticAnalyzerTool::resetCursorAndProjectInfoBeforeBuild()
{
setBusyCursor(false);
- m_projectInfo = CppTools::ProjectInfo();
+ m_projectInfoBeforeBuild = CppTools::ProjectInfo();
}
void ClangStaticAnalyzerTool::onEngineIsStarting()
@@ -228,7 +240,7 @@ void ClangStaticAnalyzerTool::onEngineFinished()
QTC_ASSERT(m_goNext, return);
QTC_ASSERT(m_diagnosticModel, return);
- resetCursorAndProjectInfo();
+ resetCursorAndProjectInfoBeforeBuild();
const int issuesFound = m_diagnosticModel->rowCount();
m_goBack->setEnabled(issuesFound > 1);
diff --git a/plugins/clangstaticanalyzer/clangstaticanalyzertool.h b/plugins/clangstaticanalyzer/clangstaticanalyzertool.h
index f049740d89..8f3bb1f196 100644
--- a/plugins/clangstaticanalyzer/clangstaticanalyzertool.h
+++ b/plugins/clangstaticanalyzer/clangstaticanalyzertool.h
@@ -37,8 +37,8 @@ class ClangStaticAnalyzerTool : public Analyzer::IAnalyzerTool
public:
explicit ClangStaticAnalyzerTool(QObject *parent = 0);
- CppTools::ProjectInfo projectInfo() const;
- void resetCursorAndProjectInfo();
+ CppTools::ProjectInfo projectInfoBeforeBuild() const;
+ void resetCursorAndProjectInfoBeforeBuild();
private:
QWidget *createWidgets();
@@ -53,7 +53,7 @@ private:
void setBusyCursor(bool busy);
private:
- CppTools::ProjectInfo m_projectInfo;
+ CppTools::ProjectInfo m_projectInfoBeforeBuild;
ClangStaticAnalyzerDiagnosticModel *m_diagnosticModel;
Analyzer::DetailedErrorView *m_diagnosticView;