summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVille Nummela <ville.nummela@jolla.com>2019-06-18 14:39:38 +0300
committerChristian Kandeler <christian.kandeler@qt.io>2019-06-25 11:53:58 +0000
commit63e418024225f104c7bc51110ac2b12dec4d23ba (patch)
tree216c7561f1dcc90ee0559340713dad6f6dcbced3
parent90ad2797eba573b275514ba487a787cf4036842b (diff)
downloadqt-creator-63e418024225f104c7bc51110ac2b12dec4d23ba.tar.gz
ProjectExplorer: Add special handling for removing files
... from a project which are pulled in via wildcards. Such files cannot be removed from a project file, because they are not listed verbatim. This kind of failure should not be reported to the user if the file is also deleted, as the file list will have the correct state after the next reparse. Fixes: QTCREATORBUG-22586 Done-with: Christian Kandeler <christian.kandeler@qt.io> Change-Id: I3dc66fe9a6594be7d0b86f46d830cd099ee49fd7 Reviewed-by: hjk <hjk@qt.io>
-rw-r--r--src/plugins/genericprojectmanager/genericproject.cpp6
-rw-r--r--src/plugins/nim/project/nimprojectnode.cpp6
-rw-r--r--src/plugins/nim/project/nimprojectnode.h3
-rw-r--r--src/plugins/projectexplorer/foldernavigationwidget.cpp7
-rw-r--r--src/plugins/projectexplorer/projectexplorer.cpp7
-rw-r--r--src/plugins/projectexplorer/projectmodels.cpp5
-rw-r--r--src/plugins/projectexplorer/projectnodes.cpp13
-rw-r--r--src/plugins/projectexplorer/projectnodes.h8
-rw-r--r--src/plugins/pythoneditor/pythoneditorplugin.cpp8
-rw-r--r--src/plugins/qbsprojectmanager/qbsnodes.cpp14
-rw-r--r--src/plugins/qbsprojectmanager/qbsnodes.h6
-rw-r--r--src/plugins/qbsprojectmanager/qbsproject.cpp47
-rw-r--r--src/plugins/qbsprojectmanager/qbsproject.h4
-rw-r--r--src/plugins/qmakeprojectmanager/qmakenodes.cpp24
-rw-r--r--src/plugins/qmakeprojectmanager/qmakenodes.h3
-rw-r--r--src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp8
-rw-r--r--src/plugins/qmakeprojectmanager/qmakeparsernodes.h2
-rw-r--r--src/plugins/resourceeditor/resourceeditorplugin.cpp2
-rw-r--r--src/plugins/resourceeditor/resourcenode.cpp18
-rw-r--r--src/plugins/resourceeditor/resourcenode.h6
20 files changed, 138 insertions, 59 deletions
diff --git a/src/plugins/genericprojectmanager/genericproject.cpp b/src/plugins/genericprojectmanager/genericproject.cpp
index faeb2cf702..9b8fbc9e12 100644
--- a/src/plugins/genericprojectmanager/genericproject.cpp
+++ b/src/plugins/genericprojectmanager/genericproject.cpp
@@ -143,9 +143,11 @@ public:
return m_project->addFiles(filePaths);
}
- bool removeFiles(const QStringList &filePaths, QStringList * = nullptr) override
+ RemovedFilesFromProject removeFiles(const QStringList &filePaths,
+ QStringList * = nullptr) override
{
- return m_project->removeFiles(filePaths);
+ return m_project->removeFiles(filePaths) ? RemovedFilesFromProject::Ok
+ : RemovedFilesFromProject::Error;
}
bool renameFile(const QString &filePath, const QString &newFilePath) override
diff --git a/src/plugins/nim/project/nimprojectnode.cpp b/src/plugins/nim/project/nimprojectnode.cpp
index 6a6385b67e..85a0d1c460 100644
--- a/src/plugins/nim/project/nimprojectnode.cpp
+++ b/src/plugins/nim/project/nimprojectnode.cpp
@@ -56,9 +56,11 @@ bool NimProjectNode::addFiles(const QStringList &filePaths, QStringList *)
return m_project.addFiles(filePaths);
}
-bool NimProjectNode::removeFiles(const QStringList &filePaths, QStringList *)
+RemovedFilesFromProject NimProjectNode::removeFiles(const QStringList &filePaths,
+ QStringList *)
{
- return m_project.removeFiles(filePaths);
+ return m_project.removeFiles(filePaths) ? RemovedFilesFromProject::Ok
+ : RemovedFilesFromProject::Error;
}
bool NimProjectNode::deleteFiles(const QStringList &)
diff --git a/src/plugins/nim/project/nimprojectnode.h b/src/plugins/nim/project/nimprojectnode.h
index 6a950bdf4f..f26285c517 100644
--- a/src/plugins/nim/project/nimprojectnode.h
+++ b/src/plugins/nim/project/nimprojectnode.h
@@ -40,7 +40,8 @@ public:
bool supportsAction(ProjectExplorer::ProjectAction action, const Node *node) const override;
bool addFiles(const QStringList &filePaths, QStringList *) override;
- bool removeFiles(const QStringList &filePaths, QStringList *) override;
+ ProjectExplorer::RemovedFilesFromProject removeFiles(const QStringList &filePaths,
+ QStringList *) override;
bool deleteFiles(const QStringList &) override;
bool renameFile(const QString &filePath, const QString &newFilePath) override;
diff --git a/src/plugins/projectexplorer/foldernavigationwidget.cpp b/src/plugins/projectexplorer/foldernavigationwidget.cpp
index 6ff9c9719a..817167523e 100644
--- a/src/plugins/projectexplorer/foldernavigationwidget.cpp
+++ b/src/plugins/projectexplorer/foldernavigationwidget.cpp
@@ -554,10 +554,9 @@ void FolderNavigationWidget::removeCurrentItem()
const QVector<FolderNode *> folderNodes = removableFolderNodes(
Utils::FilePath::fromString(filePath));
const QVector<FolderNode *> failedNodes = Utils::filtered(folderNodes,
- [filePath](FolderNode *folder) {
- return !folder->removeFiles(
- {filePath});
- });
+ [filePath](FolderNode *folder) {
+ return folder->removeFiles({filePath}) != RemovedFilesFromProject::Ok;
+ });
Core::FileChangeBlocker changeGuard(filePath);
Core::FileUtils::removeFile(filePath, true /*delete from disk*/);
if (!failedNodes.isEmpty()) {
diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp
index 867e53af13..a4aa2f0ddb 100644
--- a/src/plugins/projectexplorer/projectexplorer.cpp
+++ b/src/plugins/projectexplorer/projectexplorer.cpp
@@ -3642,7 +3642,12 @@ void ProjectExplorerPluginPrivate::removeFile()
FolderNode *folderNode = currentNode->asFileNode()->parentFolderNode();
QTC_ASSERT(folderNode, return);
- if (!folderNode->removeFiles(QStringList(filePath.toString()))) {
+ const RemovedFilesFromProject status
+ = folderNode->removeFiles(QStringList(filePath.toString()));
+ const bool success = status == RemovedFilesFromProject::Ok
+ || (status == RemovedFilesFromProject::Wildcard
+ && removeFileDialog.isDeleteFileChecked());
+ if (!success) {
QMessageBox::warning(ICore::mainWindow(), tr("Removing File Failed"),
tr("Could not remove file %1 from project %2.")
.arg(filePath.toUserOutput())
diff --git a/src/plugins/projectexplorer/projectmodels.cpp b/src/plugins/projectexplorer/projectmodels.cpp
index c2c02b1d02..839f021f2b 100644
--- a/src/plugins/projectexplorer/projectmodels.cpp
+++ b/src/plugins/projectexplorer/projectmodels.cpp
@@ -685,7 +685,10 @@ bool FlatModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int r
if (vcsAddPossible && !targetVcs.vcs->vcsAdd(targetFile))
failedVcsOp << targetFile;
}
- sourceProjectNode->removeFiles(filesToRemove, &failedRemoveFromProject);
+ const RemovedFilesFromProject result
+ = sourceProjectNode->removeFiles(filesToRemove, &failedRemoveFromProject);
+ if (result == RemovedFilesFromProject::Wildcard)
+ failedRemoveFromProject.clear();
targetProjectNode->addFiles(filesToAdd, &failedAddToProject);
break;
}
diff --git a/src/plugins/projectexplorer/projectnodes.cpp b/src/plugins/projectexplorer/projectnodes.cpp
index cad8be108b..9407af7be6 100644
--- a/src/plugins/projectexplorer/projectnodes.cpp
+++ b/src/plugins/projectexplorer/projectnodes.cpp
@@ -705,12 +705,12 @@ bool FolderNode::addFiles(const QStringList &filePaths, QStringList *notAdded)
return false;
}
-bool FolderNode::removeFiles(const QStringList &filePaths, QStringList *notRemoved)
+RemovedFilesFromProject FolderNode::removeFiles(const QStringList &filePaths,
+ QStringList *notRemoved)
{
- ProjectNode *pn = managingProject();
- if (pn)
+ if (ProjectNode * const pn = managingProject())
return pn->removeFiles(filePaths, notRemoved);
- return false;
+ return RemovedFilesFromProject::Error;
}
bool FolderNode::deleteFiles(const QStringList &filePaths)
@@ -848,11 +848,12 @@ bool ProjectNode::addFiles(const QStringList &filePaths, QStringList *notAdded)
return false;
}
-bool ProjectNode::removeFiles(const QStringList &filePaths, QStringList *notRemoved)
+RemovedFilesFromProject ProjectNode::removeFiles(const QStringList &filePaths,
+ QStringList *notRemoved)
{
Q_UNUSED(filePaths)
Q_UNUSED(notRemoved)
- return false;
+ return RemovedFilesFromProject::Error;
}
bool ProjectNode::deleteFiles(const QStringList &filePaths)
diff --git a/src/plugins/projectexplorer/projectnodes.h b/src/plugins/projectexplorer/projectnodes.h
index e6afdda038..2d1968affe 100644
--- a/src/plugins/projectexplorer/projectnodes.h
+++ b/src/plugins/projectexplorer/projectnodes.h
@@ -84,6 +84,8 @@ enum ProjectAction {
HideFolderActions,
};
+enum class RemovedFilesFromProject { Ok, Wildcard, Error };
+
class FileNode;
class FolderNode;
class ProjectNode;
@@ -262,7 +264,8 @@ public:
bool supportsAction(ProjectAction action, const Node *node) const override;
virtual bool addFiles(const QStringList &filePaths, QStringList *notAdded = nullptr);
- virtual bool removeFiles(const QStringList &filePaths, QStringList *notRemoved = nullptr);
+ virtual RemovedFilesFromProject removeFiles(const QStringList &filePaths,
+ QStringList *notRemoved = nullptr);
virtual bool deleteFiles(const QStringList &filePaths);
virtual bool canRenameFile(const QString &filePath, const QString &newFilePath);
virtual bool renameFile(const QString &filePath, const QString &newFilePath);
@@ -338,7 +341,8 @@ public:
bool showInSimpleTree() const override { return true; }
bool addFiles(const QStringList &filePaths, QStringList *notAdded = nullptr) override;
- bool removeFiles(const QStringList &filePaths, QStringList *notRemoved = nullptr) override;
+ RemovedFilesFromProject removeFiles(const QStringList &filePaths,
+ QStringList *notRemoved = nullptr) override;
bool deleteFiles(const QStringList &filePaths) override;
bool canRenameFile(const QString &filePath, const QString &newFilePath) override;
bool renameFile(const QString &filePath, const QString &newFilePath) override;
diff --git a/src/plugins/pythoneditor/pythoneditorplugin.cpp b/src/plugins/pythoneditor/pythoneditorplugin.cpp
index 8dd87ebbda..bae2a90f7b 100644
--- a/src/plugins/pythoneditor/pythoneditorplugin.cpp
+++ b/src/plugins/pythoneditor/pythoneditorplugin.cpp
@@ -123,7 +123,8 @@ public:
bool supportsAction(ProjectAction action, const Node *node) const override;
bool addFiles(const QStringList &filePaths, QStringList *) override;
- bool removeFiles(const QStringList &filePaths, QStringList *) override;
+ ProjectExplorer::RemovedFilesFromProject removeFiles(const QStringList &filePaths,
+ QStringList *) override;
bool deleteFiles(const QStringList &) override;
bool renameFile(const QString &filePath, const QString &newFilePath) override;
@@ -692,9 +693,10 @@ bool PythonProjectNode::addFiles(const QStringList &filePaths, QStringList *)
return m_project->addFiles(filePaths);
}
-bool PythonProjectNode::removeFiles(const QStringList &filePaths, QStringList *)
+RemovedFilesFromProject PythonProjectNode::removeFiles(const QStringList &filePaths, QStringList *)
{
- return m_project->removeFiles(filePaths);
+ return m_project->removeFiles(filePaths) ? RemovedFilesFromProject::Ok
+ : RemovedFilesFromProject::Error;
}
bool PythonProjectNode::deleteFiles(const QStringList &)
diff --git a/src/plugins/qbsprojectmanager/qbsnodes.cpp b/src/plugins/qbsprojectmanager/qbsnodes.cpp
index aff90d75bc..285ad6710b 100644
--- a/src/plugins/qbsprojectmanager/qbsnodes.cpp
+++ b/src/plugins/qbsprojectmanager/qbsnodes.cpp
@@ -276,7 +276,8 @@ bool QbsGroupNode::addFiles(const QStringList &filePaths, QStringList *notAdded)
m_qbsGroupData, notAdded);
}
-bool QbsGroupNode::removeFiles(const QStringList &filePaths, QStringList *notRemoved)
+RemovedFilesFromProject QbsGroupNode::removeFiles(const QStringList &filePaths,
+ QStringList *notRemoved)
{
QStringList notRemovedDummy;
if (!notRemoved)
@@ -285,13 +286,13 @@ bool QbsGroupNode::removeFiles(const QStringList &filePaths, QStringList *notRem
const QbsProjectNode *prjNode = parentQbsProjectNode(this);
if (!prjNode || !prjNode->qbsProject().isValid()) {
*notRemoved += filePaths;
- return false;
+ return RemovedFilesFromProject::Error;
}
const QbsProductNode *prdNode = parentQbsProductNode(this);
if (!prdNode || !prdNode->qbsProductData().isValid()) {
*notRemoved += filePaths;
- return false;
+ return RemovedFilesFromProject::Error;
}
return prjNode->project()->removeFilesFromProduct(filePaths, prdNode->qbsProductData(),
@@ -361,7 +362,8 @@ bool QbsProductNode::addFiles(const QStringList &filePaths, QStringList *notAdde
QTC_ASSERT(false, return false);
}
-bool QbsProductNode::removeFiles(const QStringList &filePaths, QStringList *notRemoved)
+RemovedFilesFromProject QbsProductNode::removeFiles(const QStringList &filePaths,
+ QStringList *notRemoved)
{
QStringList notRemovedDummy;
if (!notRemoved)
@@ -370,7 +372,7 @@ bool QbsProductNode::removeFiles(const QStringList &filePaths, QStringList *notR
const QbsProjectNode *prjNode = parentQbsProjectNode(this);
if (!prjNode || !prjNode->qbsProject().isValid()) {
*notRemoved += filePaths;
- return false;
+ return RemovedFilesFromProject::Error;
}
qbs::GroupData grp = findMainQbsGroup(m_qbsProductData);
@@ -379,7 +381,7 @@ bool QbsProductNode::removeFiles(const QStringList &filePaths, QStringList *notR
notRemoved);
}
- QTC_ASSERT(false, return false);
+ QTC_ASSERT(false, return RemovedFilesFromProject::Error);
}
bool QbsProductNode::renameFile(const QString &filePath, const QString &newFilePath)
diff --git a/src/plugins/qbsprojectmanager/qbsnodes.h b/src/plugins/qbsprojectmanager/qbsnodes.h
index 6927c00db2..f01f65a030 100644
--- a/src/plugins/qbsprojectmanager/qbsnodes.h
+++ b/src/plugins/qbsprojectmanager/qbsnodes.h
@@ -47,7 +47,8 @@ public:
bool showInSimpleTree() const final { return false; }
bool supportsAction(ProjectExplorer::ProjectAction action, const Node *node) const final;
bool addFiles(const QStringList &filePaths, QStringList *notAdded = nullptr) override;
- bool removeFiles(const QStringList &filePaths, QStringList *notRemoved = nullptr) override;
+ ProjectExplorer::RemovedFilesFromProject removeFiles(const QStringList &filePaths,
+ QStringList *notRemoved = nullptr) override;
bool renameFile(const QString &filePath, const QString &newFilePath) override;
private:
@@ -68,7 +69,8 @@ public:
bool supportsAction(ProjectExplorer::ProjectAction action, const Node *node) const final;
bool addFiles(const QStringList &filePaths, QStringList *notAdded = nullptr) override;
- bool removeFiles(const QStringList &filePaths, QStringList *notRemoved = nullptr) override;
+ ProjectExplorer::RemovedFilesFromProject removeFiles(const QStringList &filePaths,
+ QStringList *notRemoved = nullptr) override;
bool renameFile(const QString &filePath, const QString &newFilePath) override;
void build() override;
QStringList targetApplications() const override;
diff --git a/src/plugins/qbsprojectmanager/qbsproject.cpp b/src/plugins/qbsprojectmanager/qbsproject.cpp
index 788d8bc9f9..9bbbff8912 100644
--- a/src/plugins/qbsprojectmanager/qbsproject.cpp
+++ b/src/plugins/qbsprojectmanager/qbsproject.cpp
@@ -296,31 +296,50 @@ bool QbsProject::addFilesToProduct(const QStringList &filePaths,
return notAdded->isEmpty();
}
-bool QbsProject::removeFilesFromProduct(const QStringList &filePaths,
- const qbs::ProductData productData,
- const qbs::GroupData groupData,
- QStringList *notRemoved)
+RemovedFilesFromProject QbsProject::removeFilesFromProduct(const QStringList &filePaths,
+ const qbs::ProductData &productData,
+ const qbs::GroupData &groupData,
+ QStringList *notRemoved)
{
- QTC_ASSERT(m_qbsProject.isValid(), return false);
- QStringList allPaths = groupData.allFilePaths();
+ QTC_ASSERT(m_qbsProject.isValid(), return RemovedFilesFromProject::Error);
+
+ const QList<qbs::ArtifactData> allWildcardsInGroup = groupData.sourceArtifactsFromWildcards();
+ QStringList wildcardFiles;
+ QStringList nonWildcardFiles;
+ for (const QString &filePath : filePaths) {
+ if (contains(allWildcardsInGroup, [filePath](const qbs::ArtifactData &artifact) {
+ return artifact.filePath() == filePath; })) {
+ wildcardFiles << filePath;
+ } else {
+ nonWildcardFiles << filePath;
+ }
+ }
const QString productFilePath = productData.location().filePath();
ChangeExpector expector(productFilePath, m_qbsDocuments);
ensureWriteableQbsFile(productFilePath);
- foreach (const QString &path, filePaths) {
- qbs::ErrorInfo err
- = m_qbsProject.removeFiles(productData, groupData, QStringList() << path);
+ for (const QString &path : qAsConst(nonWildcardFiles)) {
+ const qbs::ErrorInfo err = m_qbsProject.removeFiles(productData, groupData, {path});
if (err.hasError()) {
MessageManager::write(err.toString());
*notRemoved += path;
- } else {
- allPaths.removeOne(path);
}
}
+
if (notRemoved->count() != filePaths.count()) {
m_projectData = m_qbsProject.projectData();
delayedUpdateAfterParse();
}
- return notRemoved->isEmpty();
+
+ const bool success = notRemoved->isEmpty();
+ if (!wildcardFiles.isEmpty()) {
+ *notRemoved += wildcardFiles;
+ delayParsing();
+ }
+ if (!success)
+ return RemovedFilesFromProject::Error;
+ if (!wildcardFiles.isEmpty())
+ return RemovedFilesFromProject::Wildcard;
+ return RemovedFilesFromProject::Ok;
}
bool QbsProject::renameFileInProduct(const QString &oldPath, const QString &newPath,
@@ -330,8 +349,10 @@ bool QbsProject::renameFileInProduct(const QString &oldPath, const QString &newP
if (newPath.isEmpty())
return false;
QStringList dummy;
- if (!removeFilesFromProduct(QStringList(oldPath), productData, groupData, &dummy))
+ if (removeFilesFromProduct(QStringList(oldPath), productData, groupData, &dummy)
+ != RemovedFilesFromProject::Ok) {
return false;
+ }
qbs::ProductData newProductData;
foreach (const qbs::ProductData &p, m_projectData.allProducts()) {
if (uniqueProductName(p) == uniqueProductName(productData)) {
diff --git a/src/plugins/qbsprojectmanager/qbsproject.h b/src/plugins/qbsprojectmanager/qbsproject.h
index f186bb2c13..8489cd708a 100644
--- a/src/plugins/qbsprojectmanager/qbsproject.h
+++ b/src/plugins/qbsprojectmanager/qbsproject.h
@@ -67,8 +67,8 @@ public:
// for shared data.
bool addFilesToProduct(const QStringList &filePaths, const qbs::ProductData productData,
const qbs::GroupData groupData, QStringList *notAdded);
- bool removeFilesFromProduct(const QStringList &filePaths,
- const qbs::ProductData productData, const qbs::GroupData groupData,
+ ProjectExplorer::RemovedFilesFromProject removeFilesFromProduct(const QStringList &filePaths,
+ const qbs::ProductData &productData, const qbs::GroupData &groupData,
QStringList *notRemoved);
bool renameFileInProduct(const QString &oldPath,
const QString &newPath, const qbs::ProductData productData,
diff --git a/src/plugins/qmakeprojectmanager/qmakenodes.cpp b/src/plugins/qmakeprojectmanager/qmakenodes.cpp
index 984be6e96c..8c8d5d5d7a 100644
--- a/src/plugins/qmakeprojectmanager/qmakenodes.cpp
+++ b/src/plugins/qmakeprojectmanager/qmakenodes.cpp
@@ -195,10 +195,28 @@ bool QmakePriFileNode::addFiles(const QStringList &filePaths, QStringList *notAd
return pri->addFiles(actualFilePaths, notAdded);
}
-bool QmakePriFileNode::removeFiles(const QStringList &filePaths, QStringList *notRemoved)
+RemovedFilesFromProject QmakePriFileNode::removeFiles(const QStringList &filePaths,
+ QStringList *notRemoved)
{
- QmakePriFile *pri = priFile();
- return pri ? pri->removeFiles(filePaths, notRemoved) : false;
+ QmakePriFile * const pri = priFile();
+ if (!pri)
+ return RemovedFilesFromProject::Error;
+ QStringList wildcardFiles;
+ QStringList nonWildcardFiles;
+ for (const QString &file : filePaths) {
+ if (pri->proFile()->isFileFromWildcard(file))
+ wildcardFiles << file;
+ else
+ nonWildcardFiles << file;
+ }
+ const bool success = pri->removeFiles(nonWildcardFiles, notRemoved);
+ if (notRemoved)
+ *notRemoved += wildcardFiles;
+ if (!success)
+ return RemovedFilesFromProject::Error;
+ if (!wildcardFiles.isEmpty())
+ return RemovedFilesFromProject::Wildcard;
+ return RemovedFilesFromProject::Ok;
}
bool QmakePriFileNode::deleteFiles(const QStringList &filePaths)
diff --git a/src/plugins/qmakeprojectmanager/qmakenodes.h b/src/plugins/qmakeprojectmanager/qmakenodes.h
index 55ae8aaad1..7d9138615e 100644
--- a/src/plugins/qmakeprojectmanager/qmakenodes.h
+++ b/src/plugins/qmakeprojectmanager/qmakenodes.h
@@ -56,7 +56,8 @@ public:
QStringList subProjectFileNamePatterns() const override;
bool addFiles(const QStringList &filePaths, QStringList *notAdded = nullptr) override;
- bool removeFiles(const QStringList &filePaths, QStringList *notRemoved = nullptr) override;
+ ProjectExplorer::RemovedFilesFromProject removeFiles(const QStringList &filePaths,
+ QStringList *notRemoved = nullptr) override;
bool deleteFiles(const QStringList &filePaths) override;
bool canRenameFile(const QString &filePath, const QString &newFilePath) override;
bool renameFile(const QString &filePath, const QString &newFilePath) override;
diff --git a/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp b/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp
index c646513e68..b9dd48d49e 100644
--- a/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp
+++ b/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp
@@ -1255,6 +1255,14 @@ void QmakeProFile::asyncUpdate()
m_parseFutureWatcher.setFuture(future);
}
+bool QmakeProFile::isFileFromWildcard(const QString &filePath) const
+{
+ const QFileInfo fileInfo(filePath);
+ const auto directoryIterator = m_wildcardDirectoryContents.constFind(fileInfo.path());
+ return (directoryIterator != m_wildcardDirectoryContents.end()
+ && directoryIterator.value().contains(fileInfo.fileName()));
+}
+
QmakeEvalInput QmakeProFile::evalInput() const
{
QmakeEvalInput input;
diff --git a/src/plugins/qmakeprojectmanager/qmakeparsernodes.h b/src/plugins/qmakeprojectmanager/qmakeparsernodes.h
index 1387760145..601400f47b 100644
--- a/src/plugins/qmakeprojectmanager/qmakeparsernodes.h
+++ b/src/plugins/qmakeprojectmanager/qmakeparsernodes.h
@@ -328,6 +328,8 @@ public:
void asyncUpdate();
+ bool isFileFromWildcard(const QString &filePath) const;
+
private:
void setParseInProgress(bool b);
void setValidParseRecursive(bool b);
diff --git a/src/plugins/resourceeditor/resourceeditorplugin.cpp b/src/plugins/resourceeditor/resourceeditorplugin.cpp
index 7a5aedc434..1af724504b 100644
--- a/src/plugins/resourceeditor/resourceeditorplugin.cpp
+++ b/src/plugins/resourceeditor/resourceeditorplugin.cpp
@@ -284,7 +284,7 @@ void ResourceEditorPlugin::removeFileContextMenu()
QString path = rfn->filePath().toString();
FolderNode *parent = rfn->parentFolderNode();
QTC_ASSERT(parent, return);
- if (!parent->removeFiles(QStringList() << path))
+ if (parent->removeFiles(QStringList() << path) != RemovedFilesFromProject::Ok)
QMessageBox::warning(Core::ICore::mainWindow(),
tr("File Removal Failed"),
tr("Removing file %1 from the project failed.").arg(path));
diff --git a/src/plugins/resourceeditor/resourcenode.cpp b/src/plugins/resourceeditor/resourcenode.cpp
index 0395c607b4..8444b07068 100644
--- a/src/plugins/resourceeditor/resourcenode.cpp
+++ b/src/plugins/resourceeditor/resourcenode.cpp
@@ -162,7 +162,8 @@ public:
bool supportsAction(ProjectAction, const Node *node) const final;
bool addFiles(const QStringList &filePaths, QStringList *notAdded) final;
- bool removeFiles(const QStringList &filePaths, QStringList *notRemoved) final;
+ RemovedFilesFromProject removeFiles(const QStringList &filePaths,
+ QStringList *notRemoved) final;
bool canRenameFile(const QString &filePath, const QString &newFilePath) override;
bool renameFile(const QString &filePath, const QString &newFilePath) final;
@@ -206,7 +207,8 @@ bool SimpleResourceFolderNode::addFiles(const QStringList &filePaths, QStringLis
return addFilesToResource(m_topLevelNode->filePath(), filePaths, notAdded, m_prefix, m_lang);
}
-bool SimpleResourceFolderNode::removeFiles(const QStringList &filePaths, QStringList *notRemoved)
+RemovedFilesFromProject SimpleResourceFolderNode::removeFiles(const QStringList &filePaths,
+ QStringList *notRemoved)
{
return prefixNode()->removeFiles(filePaths, notRemoved);
}
@@ -373,7 +375,8 @@ bool ResourceTopLevelNode::addFiles(const QStringList &filePaths, QStringList *n
return addFilesToResource(filePath(), filePaths, notAdded, QLatin1String("/"), QString());
}
-bool ResourceTopLevelNode::removeFiles(const QStringList &filePaths, QStringList *notRemoved)
+RemovedFilesFromProject ResourceTopLevelNode::removeFiles(const QStringList &filePaths,
+ QStringList *notRemoved)
{
return parentFolderNode()->removeFiles(filePaths, notRemoved);
}
@@ -495,16 +498,17 @@ bool ResourceFolderNode::addFiles(const QStringList &filePaths, QStringList *not
return addFilesToResource(m_topLevelNode->filePath(), filePaths, notAdded, m_prefix, m_lang);
}
-bool ResourceFolderNode::removeFiles(const QStringList &filePaths, QStringList *notRemoved)
+RemovedFilesFromProject ResourceFolderNode::removeFiles(const QStringList &filePaths,
+ QStringList *notRemoved)
{
if (notRemoved)
*notRemoved = filePaths;
ResourceFile file(m_topLevelNode->filePath().toString());
if (file.load() != IDocument::OpenResult::Success)
- return false;
+ return RemovedFilesFromProject::Error;
int index = file.indexOfPrefix(m_prefix, m_lang);
if (index == -1)
- return false;
+ return RemovedFilesFromProject::Error;
for (int j = 0; j < file.fileCount(index); ++j) {
QString fileName = file.file(index, j);
if (!filePaths.contains(fileName))
@@ -517,7 +521,7 @@ bool ResourceFolderNode::removeFiles(const QStringList &filePaths, QStringList *
FileChangeBlocker changeGuard(m_topLevelNode->filePath().toString());
file.save();
- return true;
+ return RemovedFilesFromProject::Ok;
}
// QTCREATORBUG-15280
diff --git a/src/plugins/resourceeditor/resourcenode.h b/src/plugins/resourceeditor/resourcenode.h
index 181172a7fe..daa0442bd9 100644
--- a/src/plugins/resourceeditor/resourcenode.h
+++ b/src/plugins/resourceeditor/resourcenode.h
@@ -43,7 +43,8 @@ public:
bool supportsAction(ProjectExplorer::ProjectAction action, const Node *node) const override;
bool addFiles(const QStringList &filePaths, QStringList *notAdded) override;
- bool removeFiles(const QStringList &filePaths, QStringList *notRemoved) override;
+ ProjectExplorer::RemovedFilesFromProject removeFiles(const QStringList &filePaths,
+ QStringList *notRemoved) override;
bool addPrefix(const QString &prefix, const QString &lang);
bool removePrefix(const QString &prefix, const QString &lang);
@@ -70,7 +71,8 @@ public:
QString displayName() const override;
bool addFiles(const QStringList &filePaths, QStringList *notAdded) override;
- bool removeFiles(const QStringList &filePaths, QStringList *notRemoved) override;
+ ProjectExplorer::RemovedFilesFromProject removeFiles(const QStringList &filePaths,
+ QStringList *notRemoved) override;
bool canRenameFile(const QString &filePath, const QString &newFilePath) override;
bool renameFile(const QString &filePath, const QString &newFilePath) override;