forked from qt-creator/qt-creator
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:
@@ -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. "
|
||||||
|
@@ -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);
|
||||||
|
@@ -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;
|
||||||
|
Reference in New Issue
Block a user