ProjectNodes: Sprinkle QTC_ASSERT over code looking at parentFolderNode

Not checking the parentFolderNode triggered a crash elsewhere already, so
double check other uses of parentFolderNode and use QTC_ASSERT to make sure
no nullptr is going to be accessed.

This is necessary now that we have a forest of project trees and no longer
have a sessionnode anymore.

Change-Id: Ibc380c2ec9b12b983e709d2eeb03a8b741fe1058
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
Tobias Hunger
2017-05-09 12:19:13 +02:00
parent f603a115d0
commit 18537a5594
5 changed files with 10 additions and 4 deletions

View File

@@ -3323,6 +3323,7 @@ void ProjectExplorerPlugin::renameFile(Node *node, const QString &newFilePath)
{
const QString oldFilePath = node->filePath().toFileInfo().absoluteFilePath();
FolderNode *folderNode = node->parentFolderNode();
QTC_ASSERT(folderNode, return);
const QString projectFileName = folderNode->managingProject()->filePath().fileName();
if (oldFilePath == newFilePath)

View File

@@ -84,9 +84,11 @@ bool QmakePriFileNode::supportsAction(ProjectAction action, Node *node) const
const FolderNode *folderNode = this;
const QmakeProFileNode *proFileNode;
while (!(proFileNode = dynamic_cast<const QmakeProFileNode*>(folderNode)))
while (!(proFileNode = dynamic_cast<const QmakeProFileNode*>(folderNode))) {
folderNode = folderNode->parentFolderNode();
Q_ASSERT(proFileNode);
QTC_ASSERT(folderNode, return false);
}
QTC_ASSERT(proFileNode, return false);
const QmakeProFile *pro = proFileNode->proFile();
switch (pro ? pro->projectType() : ProjectType::Invalid) {

View File

@@ -611,6 +611,7 @@ QStringList QmakeProject::filesGeneratedFrom(const QString &input) const
if (const FileNode *file = fileNodeOf(rootProjectNode(), FileName::fromString(input))) {
const QmakeProFileNode *pro = static_cast<QmakeProFileNode *>(file->parentFolderNode());
QTC_ASSERT(pro, return {});
if (const QmakeProFile *proFile = pro->proFile())
return Utils::transform(proFile->generatedFiles(FileName::fromString(pro->buildDir()),
file->filePath(), file->fileType()),

View File

@@ -287,6 +287,7 @@ void ResourceEditorPlugin::removeFileContextMenu()
QTC_ASSERT(rfn, return);
QString path = rfn->filePath().toString();
FolderNode *parent = rfn->parentFolderNode();
QTC_ASSERT(parent, return);
if (!parent->removeFiles(QStringList() << path))
QMessageBox::warning(Core::ICore::mainWindow(),
tr("File Removal Failed"),

View File

@@ -70,8 +70,9 @@ public:
{
if (type == TypePermissions)
return true;
auto newNode = new ResourceTopLevelNode(m_node->filePath(), false, m_node->contents(),
m_node->parentFolderNode());
FolderNode *parent = m_node->parentFolderNode();
QTC_ASSERT(parent, return false);
auto newNode = new ResourceTopLevelNode(m_node->filePath(), false, m_node->contents(), parent);
m_node->parentFolderNode()->replaceSubtree(m_node, newNode);
return true;
}