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);
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. "

View File

@@ -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);

View File

@@ -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;