QMakePM: Fix crash when running qmake before the project is parsed

Disable the build actions properly.

Change-Id: Id4e2906b1891fcb3387e23cb0e0a8c1f119d2426
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
This commit is contained in:
Orgad Shaneh
2017-05-25 15:11:20 +03:00
committed by Orgad Shaneh
parent 37b415379d
commit d3e4ef5868
3 changed files with 19 additions and 3 deletions

View File

@@ -258,7 +258,7 @@ bool QmakeProjectManagerPlugin::initialize(const QStringList &arguments, QString
connect(EditorManager::instance(), &EditorManager::currentEditorChanged, connect(EditorManager::instance(), &EditorManager::currentEditorChanged,
this, &QmakeProjectManagerPlugin::updateBuildFileAction); this, &QmakeProjectManagerPlugin::updateBuildFileAction);
updateRunQMakeAction(); updateActions();
return true; return true;
} }
@@ -277,9 +277,12 @@ void QmakeProjectManagerPlugin::projectChanged()
else else
m_previousStartupProject = qobject_cast<QmakeProject *>(SessionManager::startupProject()); m_previousStartupProject = qobject_cast<QmakeProject *>(SessionManager::startupProject());
if (m_previousStartupProject) if (m_previousStartupProject) {
connect(m_previousStartupProject, &Project::activeTargetChanged, connect(m_previousStartupProject, &Project::activeTargetChanged,
this, &QmakeProjectManagerPlugin::activeTargetChanged); this, &QmakeProjectManagerPlugin::activeTargetChanged);
connect(m_previousStartupProject, &QmakeProject::parsingFinished,
this, &QmakeProjectManagerPlugin::updateActions);
}
activeTargetChanged(); activeTargetChanged();
} }
@@ -299,6 +302,12 @@ void QmakeProjectManagerPlugin::activeTargetChanged()
updateRunQMakeAction(); updateRunQMakeAction();
} }
void QmakeProjectManagerPlugin::updateActions()
{
updateRunQMakeAction();
updateContextActions();
}
void QmakeProjectManagerPlugin::updateRunQMakeAction() void QmakeProjectManagerPlugin::updateRunQMakeAction()
{ {
bool enable = true; bool enable = true;
@@ -307,6 +316,7 @@ void QmakeProjectManagerPlugin::updateRunQMakeAction()
auto pro = qobject_cast<QmakeProject *>(m_previousStartupProject); auto pro = qobject_cast<QmakeProject *>(m_previousStartupProject);
m_runQMakeAction->setVisible(pro); m_runQMakeAction->setVisible(pro);
if (!pro if (!pro
|| !pro->rootProjectNode()
|| !pro->activeTarget() || !pro->activeTarget()
|| !pro->activeTarget()->activeBuildConfiguration()) || !pro->activeTarget()->activeBuildConfiguration())
enable = false; enable = false;
@@ -334,7 +344,11 @@ void QmakeProjectManagerPlugin::updateContextActions()
FileNode *fileNode = node ? node->asFileNode() : nullptr; FileNode *fileNode = node ? node->asFileNode() : nullptr;
bool buildFilePossible = subProjectNode && fileNode && (fileNode->fileType() == FileType::Source); bool buildFilePossible = subProjectNode && fileNode && (fileNode->fileType() == FileType::Source);
bool subProjectActionsVisible = qmakeProject && subProjectNode && (subProjectNode != qmakeProject->rootProjectNode()); bool subProjectActionsVisible = false;
if (qmakeProject && subProjectNode) {
if (QmakeProFileNode *rootNode = qmakeProject->rootProjectNode())
subProjectActionsVisible = subProjectNode != rootNode;
}
QString subProjectName; QString subProjectName;
if (subProjectActionsVisible) if (subProjectActionsVisible)

View File

@@ -65,6 +65,7 @@ private slots:
private: private:
void projectChanged(); void projectChanged();
void activeTargetChanged(); void activeTargetChanged();
void updateActions();
void updateRunQMakeAction(); void updateRunQMakeAction();
void updateContextActions(); void updateContextActions();
void buildStateChanged(ProjectExplorer::Project *pro); void buildStateChanged(ProjectExplorer::Project *pro);

View File

@@ -256,6 +256,7 @@ bool QMakeStep::init(QList<const BuildStep *> &earlierSteps)
QmakeProFileNode *node = static_cast<QmakeProject *>(qmakeBc->target()->project())->rootProjectNode(); QmakeProFileNode *node = static_cast<QmakeProject *>(qmakeBc->target()->project())->rootProjectNode();
if (qmakeBc->subNodeBuild()) if (qmakeBc->subNodeBuild())
node = qmakeBc->subNodeBuild(); node = qmakeBc->subNodeBuild();
QTC_ASSERT(node, return false);
QString proFile = node->filePath().toString(); QString proFile = node->filePath().toString();
QList<ProjectExplorer::Task> tasks = qtVersion->reportIssues(proFile, workingDirectory); QList<ProjectExplorer::Task> tasks = qtVersion->reportIssues(proFile, workingDirectory);