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();
|
const QString oldFilePath = node->filePath().toFileInfo().absoluteFilePath();
|
||||||
FolderNode *folderNode = node->parentFolderNode();
|
FolderNode *folderNode = node->parentFolderNode();
|
||||||
|
QTC_ASSERT(folderNode, return);
|
||||||
const QString projectFileName = folderNode->managingProject()->filePath().fileName();
|
const QString projectFileName = folderNode->managingProject()->filePath().fileName();
|
||||||
|
|
||||||
if (oldFilePath == newFilePath)
|
if (oldFilePath == newFilePath)
|
||||||
|
@@ -84,9 +84,11 @@ bool QmakePriFileNode::supportsAction(ProjectAction action, Node *node) const
|
|||||||
|
|
||||||
const FolderNode *folderNode = this;
|
const FolderNode *folderNode = this;
|
||||||
const QmakeProFileNode *proFileNode;
|
const QmakeProFileNode *proFileNode;
|
||||||
while (!(proFileNode = dynamic_cast<const QmakeProFileNode*>(folderNode)))
|
while (!(proFileNode = dynamic_cast<const QmakeProFileNode*>(folderNode))) {
|
||||||
folderNode = folderNode->parentFolderNode();
|
folderNode = folderNode->parentFolderNode();
|
||||||
Q_ASSERT(proFileNode);
|
QTC_ASSERT(folderNode, return false);
|
||||||
|
}
|
||||||
|
QTC_ASSERT(proFileNode, return false);
|
||||||
const QmakeProFile *pro = proFileNode->proFile();
|
const QmakeProFile *pro = proFileNode->proFile();
|
||||||
|
|
||||||
switch (pro ? pro->projectType() : ProjectType::Invalid) {
|
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))) {
|
if (const FileNode *file = fileNodeOf(rootProjectNode(), FileName::fromString(input))) {
|
||||||
const QmakeProFileNode *pro = static_cast<QmakeProFileNode *>(file->parentFolderNode());
|
const QmakeProFileNode *pro = static_cast<QmakeProFileNode *>(file->parentFolderNode());
|
||||||
|
QTC_ASSERT(pro, return {});
|
||||||
if (const QmakeProFile *proFile = pro->proFile())
|
if (const QmakeProFile *proFile = pro->proFile())
|
||||||
return Utils::transform(proFile->generatedFiles(FileName::fromString(pro->buildDir()),
|
return Utils::transform(proFile->generatedFiles(FileName::fromString(pro->buildDir()),
|
||||||
file->filePath(), file->fileType()),
|
file->filePath(), file->fileType()),
|
||||||
|
@@ -287,6 +287,7 @@ void ResourceEditorPlugin::removeFileContextMenu()
|
|||||||
QTC_ASSERT(rfn, return);
|
QTC_ASSERT(rfn, return);
|
||||||
QString path = rfn->filePath().toString();
|
QString path = rfn->filePath().toString();
|
||||||
FolderNode *parent = rfn->parentFolderNode();
|
FolderNode *parent = rfn->parentFolderNode();
|
||||||
|
QTC_ASSERT(parent, return);
|
||||||
if (!parent->removeFiles(QStringList() << path))
|
if (!parent->removeFiles(QStringList() << path))
|
||||||
QMessageBox::warning(Core::ICore::mainWindow(),
|
QMessageBox::warning(Core::ICore::mainWindow(),
|
||||||
tr("File Removal Failed"),
|
tr("File Removal Failed"),
|
||||||
|
@@ -70,8 +70,9 @@ public:
|
|||||||
{
|
{
|
||||||
if (type == TypePermissions)
|
if (type == TypePermissions)
|
||||||
return true;
|
return true;
|
||||||
auto newNode = new ResourceTopLevelNode(m_node->filePath(), false, m_node->contents(),
|
FolderNode *parent = m_node->parentFolderNode();
|
||||||
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);
|
m_node->parentFolderNode()->replaceSubtree(m_node, newNode);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user