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);
|
||||
|
||||
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. "
|
||||
|
@@ -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);
|
||||
|
@@ -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;
|
||||
|
Reference in New Issue
Block a user