Use updated ProjectInfo

...that actually make us use the ProjectInfo with updated
CompilerCallData.

Change-Id: Ieee298b3db64159f3faa02231921275e4466bcb5
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
This commit is contained in:
Nikolai Kosjar
2014-11-07 11:32:40 +01:00
parent 2f3666a3f0
commit b6a50a1a4c
3 changed files with 29 additions and 17 deletions

View File

@@ -71,19 +71,19 @@ RunControl *ClangStaticAnalyzerRunControlFactory::create(RunConfiguration *runCo
Q_UNUSED(runMode); Q_UNUSED(runMode);
using namespace CppTools; using namespace CppTools;
const ProjectInfo projectInfoAtAnalyzerStart = m_tool->projectInfo(); const ProjectInfo projectInfoBeforeBuild = m_tool->projectInfoBeforeBuild();
QTC_ASSERT(projectInfoAtAnalyzerStart.isValid(), return 0); QTC_ASSERT(projectInfoBeforeBuild.isValid(), return 0);
Project *project = SessionManager::startupProject(); Project *project = SessionManager::startupProject();
QTC_ASSERT(project, return 0); 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. // If it's more than a release/debug build configuration change, e.g.
// a version control checkout, files might be not valid C++ anymore // a version control checkout, files might be not valid C++ anymore
// or even gone, so better stop here. // or even gone, so better stop here.
m_tool->resetCursorAndProjectInfo(); m_tool->resetCursorAndProjectInfoBeforeBuild();
if (errorMessage) { if (errorMessage) {
*errorMessage = tr( *errorMessage = tr(
"The project configuration changed since the start of the Clang Static Analyzer. " "The project configuration changed since the start of the Clang Static Analyzer. "

View File

@@ -135,10 +135,21 @@ AnalyzerRunControl *ClangStaticAnalyzerTool::createRunControl(
ProjectExplorer::RunConfiguration *runConfiguration) ProjectExplorer::RunConfiguration *runConfiguration)
{ {
QTC_ASSERT(runConfiguration, return 0); 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, // Some projects provides CompilerCallData once a build is finished,
m_projectInfo); // 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, connect(engine, &ClangStaticAnalyzerRunControl::starting,
this, &ClangStaticAnalyzerTool::onEngineIsStarting); this, &ClangStaticAnalyzerTool::onEngineIsStarting);
connect(engine, &ClangStaticAnalyzerRunControl::newDiagnosticsAvailable, connect(engine, &ClangStaticAnalyzerRunControl::newDiagnosticsAvailable,
@@ -196,19 +207,20 @@ void ClangStaticAnalyzerTool::startTool(StartMode mode)
setBusyCursor(true); setBusyCursor(true);
Project *project = SessionManager::startupProject(); Project *project = SessionManager::startupProject();
QTC_ASSERT(project, return); QTC_ASSERT(project, return);
m_projectInfoBeforeBuild = CppTools::CppModelManager::instance()->projectInfo(project);
QTC_ASSERT(m_projectInfoBeforeBuild.isValid(), return);
ProjectExplorerPlugin::instance()->runProject(project, runMode()); 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); setBusyCursor(false);
m_projectInfo = CppTools::ProjectInfo(); m_projectInfoBeforeBuild = CppTools::ProjectInfo();
} }
void ClangStaticAnalyzerTool::onEngineIsStarting() void ClangStaticAnalyzerTool::onEngineIsStarting()
@@ -228,7 +240,7 @@ void ClangStaticAnalyzerTool::onEngineFinished()
QTC_ASSERT(m_goNext, return); QTC_ASSERT(m_goNext, return);
QTC_ASSERT(m_diagnosticModel, return); QTC_ASSERT(m_diagnosticModel, return);
resetCursorAndProjectInfo(); resetCursorAndProjectInfoBeforeBuild();
const int issuesFound = m_diagnosticModel->rowCount(); const int issuesFound = m_diagnosticModel->rowCount();
m_goBack->setEnabled(issuesFound > 1); m_goBack->setEnabled(issuesFound > 1);

View File

@@ -37,8 +37,8 @@ class ClangStaticAnalyzerTool : public Analyzer::IAnalyzerTool
public: public:
explicit ClangStaticAnalyzerTool(QObject *parent = 0); explicit ClangStaticAnalyzerTool(QObject *parent = 0);
CppTools::ProjectInfo projectInfo() const; CppTools::ProjectInfo projectInfoBeforeBuild() const;
void resetCursorAndProjectInfo(); void resetCursorAndProjectInfoBeforeBuild();
private: private:
QWidget *createWidgets(); QWidget *createWidgets();
@@ -53,7 +53,7 @@ private:
void setBusyCursor(bool busy); void setBusyCursor(bool busy);
private: private:
CppTools::ProjectInfo m_projectInfo; CppTools::ProjectInfo m_projectInfoBeforeBuild;
ClangStaticAnalyzerDiagnosticModel *m_diagnosticModel; ClangStaticAnalyzerDiagnosticModel *m_diagnosticModel;
Analyzer::DetailedErrorView *m_diagnosticView; Analyzer::DetailedErrorView *m_diagnosticView;