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