diff --git a/src/libs/utils/fileutils.cpp b/src/libs/utils/fileutils.cpp index 6465b44495f..bdb649c4107 100644 --- a/src/libs/utils/fileutils.cpp +++ b/src/libs/utils/fileutils.cpp @@ -1433,6 +1433,27 @@ Environment FilePath::deviceEnvironment() const return Environment::systemEnvironment(); } +QString FilePath::formatFilePaths(const QList &files, const QString &separator) +{ + const QStringList nativeFiles = Utils::transform(files, &FilePath::toUserOutput); + return nativeFiles.join(separator); +} + +void FilePath::removeDuplicates(QList &files) +{ + // FIXME: Improve. + QStringList list = Utils::transform(files, &FilePath::toString); + list.removeDuplicates(); + files = Utils::transform(list, &FilePath::fromString); +} + +void FilePath::sort(QList &files) +{ + // FIXME: Improve. + QStringList list = Utils::transform(files, &FilePath::toString); + list.sort(); + files = Utils::transform(list, &FilePath::fromString); +} FilePath FilePath::pathAppended(const QString &path) const { @@ -1590,9 +1611,9 @@ bool FileUtils::CopyAskingForOverwrite::operator()(const QFileInfo &src, return true; } -QStringList FileUtils::CopyAskingForOverwrite::files() const +FilePaths FileUtils::CopyAskingForOverwrite::files() const { - return m_files; + return transform(m_files, &FilePath::fromString); } #endif // QT_GUI_LIB diff --git a/src/libs/utils/fileutils.h b/src/libs/utils/fileutils.h index 84dcb756784..7e83ce2ecae 100644 --- a/src/libs/utils/fileutils.h +++ b/src/libs/utils/fileutils.h @@ -223,6 +223,10 @@ public: FilePath searchOnDevice(const QList &dirs) const; Environment deviceEnvironment() const; + static QString formatFilePaths(const QList &files, const QString &separator); + static void removeDuplicates(QList &files); + static void sort(QList &files); + private: friend class ::tst_fileutils; static QString calcRelativePath(const QString &absolutePath, const QString &absoluteAnchorPath); @@ -245,7 +249,7 @@ public: CopyAskingForOverwrite(QWidget *dialogParent, const std::function &postOperation = {}); bool operator()(const QFileInfo &src, const QFileInfo &dest, QString *error); - QStringList files() const; + QList files() const; private: QWidget *m_parent; diff --git a/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp b/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp index 71fac0757cf..1896067593f 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp @@ -77,20 +77,20 @@ using namespace Utils; namespace CMakeProjectManager { namespace Internal { -static void copySourcePathsToClipboard(QStringList srcPaths, const ProjectNode *node) +static void copySourcePathsToClipboard(const FilePaths &srcPaths, const ProjectNode *node) { QClipboard *clip = QGuiApplication::clipboard(); QDir projDir{node->filePath().toFileInfo().absoluteFilePath()}; - QString data = Utils::transform(srcPaths, [projDir](const QString &path) { - return QDir::cleanPath(projDir.relativeFilePath(path)); + QString data = Utils::transform(srcPaths, [projDir](const FilePath &path) { + return QDir::cleanPath(projDir.relativeFilePath(path.toString())); }).join(" "); clip->setText(data); } -static void noAutoAdditionNotify(const QStringList &filePaths, const ProjectNode *node) +static void noAutoAdditionNotify(const FilePaths &filePaths, const ProjectNode *node) { - const QStringList srcPaths = Utils::filtered(filePaths, [](const QString& file) { + const FilePaths srcPaths = Utils::filtered(filePaths, [](const FilePath &file) { const auto mimeType = Utils::mimeTypeForFile(file).name(); return mimeType == CppTools::Constants::C_SOURCE_MIMETYPE || mimeType == CppTools::Constants::C_HEADER_MIMETYPE || @@ -307,7 +307,7 @@ bool CMakeBuildSystem::supportsAction(Node *context, ProjectAction action, const return BuildSystem::supportsAction(context, action, node); } -bool CMakeBuildSystem::addFiles(Node *context, const QStringList &filePaths, QStringList *notAdded) +bool CMakeBuildSystem::addFiles(Node *context, const FilePaths &filePaths, FilePaths *notAdded) { if (auto n = dynamic_cast(context)) { noAutoAdditionNotify(filePaths, n); @@ -322,9 +322,9 @@ bool CMakeBuildSystem::addFiles(Node *context, const QStringList &filePaths, QSt return BuildSystem::addFiles(context, filePaths, notAdded); } -QStringList CMakeBuildSystem::filesGeneratedFrom(const QString &sourceFile) const +FilePaths CMakeBuildSystem::filesGeneratedFrom(const FilePath &sourceFile) const { - QFileInfo fi(sourceFile); + QFileInfo fi = sourceFile.toFileInfo(); FilePath project = projectDirectory(); FilePath baseDirectory = FilePath::fromString(fi.absolutePath()); @@ -344,12 +344,13 @@ QStringList CMakeBuildSystem::filesGeneratedFrom(const QString &sourceFile) cons generatedFilePath += "/ui_"; generatedFilePath += fi.completeBaseName(); generatedFilePath += ".h"; - return {QDir::cleanPath(generatedFilePath)}; + return {FilePath::fromString(QDir::cleanPath(generatedFilePath))}; } if (fi.suffix() == "scxml") { generatedFilePath += "/"; generatedFilePath += QDir::cleanPath(fi.completeBaseName()); - return {generatedFilePath + ".h", generatedFilePath + ".cpp"}; + return {FilePath::fromString(generatedFilePath + ".h"), + FilePath::fromString(generatedFilePath + ".cpp")}; } // TODO: Other types will be added when adapters for their compilers become available. @@ -1173,16 +1174,13 @@ QList CMakeBuildSystem::findExtraCompilers() }); QTC_ASSERT(factory, continue); - QStringList generated = filesGeneratedFrom(file.toString()); + FilePaths generated = filesGeneratedFrom(file); qCDebug(cmakeBuildSystemLog) << "Finding Extra Compilers: generated files:" << generated; if (generated.isEmpty()) continue; - const FilePaths fileNames = transform(generated, [](const QString &s) { - return FilePath::fromString(s); - }); - extraCompilers.append(factory->create(p, file, fileNames)); + extraCompilers.append(factory->create(p, file, generated)); qCDebug(cmakeBuildSystemLog) << "Finding Extra Compilers: done with" << file.toUserOutput(); } diff --git a/src/plugins/cmakeprojectmanager/cmakebuildsystem.h b/src/plugins/cmakeprojectmanager/cmakebuildsystem.h index 40489beb442..95d31367d81 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildsystem.h +++ b/src/plugins/cmakeprojectmanager/cmakebuildsystem.h @@ -67,9 +67,9 @@ public: const ProjectExplorer::Node *node) const final; bool addFiles(ProjectExplorer::Node *context, - const QStringList &filePaths, QStringList *) final; + const Utils::FilePaths &filePaths, Utils::FilePaths *) final; - QStringList filesGeneratedFrom(const QString &sourceFile) const final; + Utils::FilePaths filesGeneratedFrom(const Utils::FilePath &sourceFile) const final; // Actions: void runCMake(); diff --git a/src/plugins/coreplugin/generatedfile.cpp b/src/plugins/coreplugin/generatedfile.cpp index 339a3cd73e4..0361122ae39 100644 --- a/src/plugins/coreplugin/generatedfile.cpp +++ b/src/plugins/coreplugin/generatedfile.cpp @@ -95,6 +95,11 @@ QString GeneratedFile::path() const return m_d->path; } +FilePath GeneratedFile::filePath() const +{ + return FilePath::fromString(m_d->path); +} + void GeneratedFile::setPath(const QString &p) { m_d->path = QDir::cleanPath(p); diff --git a/src/plugins/coreplugin/generatedfile.h b/src/plugins/coreplugin/generatedfile.h index 4caf2bf1198..9c37d9a06f2 100644 --- a/src/plugins/coreplugin/generatedfile.h +++ b/src/plugins/coreplugin/generatedfile.h @@ -32,6 +32,8 @@ #include #include +namespace Utils { class FilePath; } + namespace Core { class GeneratedFilePrivate; @@ -63,6 +65,7 @@ public: // Full path of the file should be created, or the suggested file name QString path() const; void setPath(const QString &p); + Utils::FilePath filePath() const; // Contents of the file (UTF8) QString contents() const; diff --git a/src/plugins/designer/codemodelhelpers.cpp b/src/plugins/designer/codemodelhelpers.cpp index 67adc0d5885..d04d4c87f23 100644 --- a/src/plugins/designer/codemodelhelpers.cpp +++ b/src/plugins/designer/codemodelhelpers.cpp @@ -39,6 +39,7 @@ // Debug helpers for code model. @todo: Move to some CppTools library? using namespace ProjectExplorer; +using namespace Utils; using DependencyMap = QMap; using DocumentPtr = CPlusPlus::Document::Ptr; @@ -48,19 +49,18 @@ using DocumentPtrList = QList; static const char setupUiC[] = "setupUi"; // Find the generated "ui_form.h" header of the form via project. -static QString generatedHeaderOf(const QString &uiFileName) +static FilePath generatedHeaderOf(const FilePath &uiFileName) { - if (const Project *uiProject = - SessionManager::projectForFile(Utils::FilePath::fromString(uiFileName))) { + if (const Project *uiProject = SessionManager::projectForFile(uiFileName)) { if (Target *t = uiProject->activeTarget()) { if (BuildSystem *bs = t->buildSystem()) { - QStringList files = bs->filesGeneratedFrom(uiFileName); + FilePaths files = bs->filesGeneratedFrom(uiFileName); if (!files.isEmpty()) // There should be at most one header generated from a .ui return files.front(); } } } - return QString(); + return {}; } namespace { @@ -121,7 +121,7 @@ bool navigateToSlot(const QString &uiFileName, { // Find the generated header. - const QString generatedHeaderFile = generatedHeaderOf(uiFileName); + const FilePath generatedHeaderFile = generatedHeaderOf(FilePath::fromString(uiFileName)); if (generatedHeaderFile.isEmpty()) { *errorMessage = QCoreApplication::translate("Designer", "The generated header of the form \"%1\" could not be found.\nRebuilding the project might help.").arg(uiFileName); return false; @@ -129,7 +129,7 @@ bool navigateToSlot(const QString &uiFileName, const CPlusPlus::Snapshot snapshot = CppTools::CppModelManager::instance()->snapshot(); const DocumentPtr generatedHeaderDoc = snapshot.document(generatedHeaderFile); if (!generatedHeaderDoc) { - *errorMessage = QCoreApplication::translate("Designer", "The generated header \"%1\" could not be found in the code model.\nRebuilding the project might help.").arg(generatedHeaderFile); + *errorMessage = QCoreApplication::translate("Designer", "The generated header \"%1\" could not be found in the code model.\nRebuilding the project might help.").arg(generatedHeaderFile.toUserOutput()); return false; } @@ -139,7 +139,7 @@ bool navigateToSlot(const QString &uiFileName, if (funcs.size() != 1) { *errorMessage = QString::fromLatin1( "Internal error: The function \"%1\" could not be found in %2") - .arg(QLatin1String(setupUiC), generatedHeaderFile); + .arg(QLatin1String(setupUiC), generatedHeaderFile.toUserOutput()); return false; } return true; diff --git a/src/plugins/designer/resourcehandler.cpp b/src/plugins/designer/resourcehandler.cpp index f111e8dbf8c..38e6dff6b03 100644 --- a/src/plugins/designer/resourcehandler.cpp +++ b/src/plugins/designer/resourcehandler.cpp @@ -37,6 +37,7 @@ #include using namespace ProjectExplorer; +using namespace Utils; namespace Designer { namespace Internal { @@ -142,7 +143,7 @@ void ResourceHandler::updateResourcesHelper(bool updateProjectResources) } if (!qrcPathsToBeAdded.isEmpty()) { m_handlingResources = true; - projectNodeForUiFile->addFiles(qrcPathsToBeAdded); + projectNodeForUiFile->addFiles(Utils::transform(qrcPathsToBeAdded, &FilePath::fromString)); m_handlingResources = false; projectQrcFiles += qrcPathsToBeAdded; } diff --git a/src/plugins/genericprojectmanager/genericproject.cpp b/src/plugins/genericprojectmanager/genericproject.cpp index 6539617dfa7..8887eff5573 100644 --- a/src/plugins/genericprojectmanager/genericproject.cpp +++ b/src/plugins/genericprojectmanager/genericproject.cpp @@ -135,11 +135,9 @@ public: || action == Rename; } - RemovedFilesFromProject removeFiles(Node *, const QStringList &filePaths, QStringList *) final; - bool renameFile(Node *, - const Utils::FilePath &oldFilePath, - const Utils::FilePath &newFilePath) final; - bool addFiles(Node *, const QStringList &filePaths, QStringList *) final; + RemovedFilesFromProject removeFiles(Node *, const FilePaths &filePaths, FilePaths *) final; + bool renameFile(Node *, const FilePath &oldFilePath, const FilePath &newFilePath) final; + bool addFiles(Node *, const FilePaths &filePaths, FilePaths *) final; FilePath filesFilePath() const { return ::FilePath::fromString(m_filesFileName); } @@ -157,7 +155,7 @@ public: void updateDeploymentData(); bool setFiles(const QStringList &filePaths); - void removeFiles(const QStringList &filesToRemove); + void removeFiles(const FilePaths &filesToRemove); private: QString m_filesFileName; @@ -327,8 +325,9 @@ static void insertSorted(QStringList *list, const QString &value) list->insert(it, value); } -bool GenericBuildSystem::addFiles(Node *, const QStringList &filePaths, QStringList *) +bool GenericBuildSystem::addFiles(Node *, const FilePaths &filePaths_, FilePaths *) { + const QStringList filePaths = Utils::transform(filePaths_, &FilePath::toString); const QDir baseDir(projectDirectory().toString()); QStringList newList = m_rawFileList; if (filePaths.size() > m_rawFileList.size()) { @@ -368,12 +367,12 @@ bool GenericBuildSystem::addFiles(Node *, const QStringList &filePaths, QStringL return result; } -RemovedFilesFromProject GenericBuildSystem::removeFiles(Node *, const QStringList &filePaths, QStringList *) +RemovedFilesFromProject GenericBuildSystem::removeFiles(Node *, const FilePaths &filePaths, FilePaths *) { QStringList newList = m_rawFileList; - for (const QString &filePath : filePaths) { - QHash::iterator i = m_rawListEntries.find(filePath); + for (const FilePath &filePath : filePaths) { + QHash::iterator i = m_rawListEntries.find(filePath.toString()); if (i != m_rawListEntries.end()) newList.removeOne(i.value()); } @@ -609,7 +608,7 @@ void GenericBuildSystem::updateDeploymentData() } } -void GenericBuildSystem::removeFiles(const QStringList &filesToRemove) +void GenericBuildSystem::removeFiles(const FilePaths &filesToRemove) { if (removeFiles(nullptr, filesToRemove, nullptr) == RemovedFilesFromProject::Error) { TaskHub::addTask(BuildSystemTask(Task::Error, @@ -695,7 +694,7 @@ void GenericProject::editFilesTriggered() } } -void GenericProject::removeFilesTriggered(const QStringList &filesToRemove) +void GenericProject::removeFilesTriggered(const FilePaths &filesToRemove) { if (Target *t = activeTarget()) static_cast(t->buildSystem())->removeFiles(filesToRemove); diff --git a/src/plugins/genericprojectmanager/genericproject.h b/src/plugins/genericprojectmanager/genericproject.h index 9129c1399be..429613a528e 100644 --- a/src/plugins/genericprojectmanager/genericproject.h +++ b/src/plugins/genericprojectmanager/genericproject.h @@ -38,7 +38,7 @@ public: explicit GenericProject(const Utils::FilePath &filename); void editFilesTriggered(); - void removeFilesTriggered(const QStringList &filesToRemove); + void removeFilesTriggered(const Utils::FilePaths &filesToRemove); private: RestoreResult fromMap(const QVariantMap &map, QString *errorMessage) final; diff --git a/src/plugins/genericprojectmanager/genericprojectplugin.cpp b/src/plugins/genericprojectmanager/genericprojectplugin.cpp index 983f0363f9c..fbba7a96db5 100644 --- a/src/plugins/genericprojectmanager/genericprojectplugin.cpp +++ b/src/plugins/genericprojectmanager/genericprojectplugin.cpp @@ -108,9 +108,9 @@ GenericProjectPluginPrivate::GenericProjectPluginPrivate() QTC_ASSERT(folderNode, return); const auto project = qobject_cast(folderNode->getProject()); QTC_ASSERT(project, return); - const QStringList filesToRemove = transform( + const FilePaths filesToRemove = transform( folderNode->findNodes([](const Node *node) { return node->asFileNode(); }), - [](const Node *node) { return node->filePath().toString();}); + [](const Node *node) { return node->filePath();}); project->removeFilesTriggered(filesToRemove); }); } diff --git a/src/plugins/nim/project/nimblebuildsystem.cpp b/src/plugins/nim/project/nimblebuildsystem.cpp index 54e9c9cd23c..165b217a051 100644 --- a/src/plugins/nim/project/nimblebuildsystem.cpp +++ b/src/plugins/nim/project/nimblebuildsystem.cpp @@ -245,19 +245,19 @@ bool NimbleBuildSystem::supportsAction(Node *context, ProjectAction action, cons return BuildSystem::supportsAction(context, action, node); } -bool NimbleBuildSystem::addFiles(Node *, const QStringList &filePaths, QStringList *) +bool NimbleBuildSystem::addFiles(Node *, const FilePaths &filePaths, FilePaths *) { - return m_projectScanner.addFiles(filePaths); + return m_projectScanner.addFiles(Utils::transform(filePaths, &FilePath::toString)); } RemovedFilesFromProject NimbleBuildSystem::removeFiles(Node *, - const QStringList &filePaths, - QStringList *) + const FilePaths &filePaths, + FilePaths *) { - return m_projectScanner.removeFiles(filePaths); + return m_projectScanner.removeFiles(Utils::transform(filePaths, &FilePath::toString)); } -bool NimbleBuildSystem::deleteFiles(Node *, const QStringList &) +bool NimbleBuildSystem::deleteFiles(Node *, const FilePaths &) { return true; } diff --git a/src/plugins/nim/project/nimblebuildsystem.h b/src/plugins/nim/project/nimblebuildsystem.h index 07e3c823ed9..12032a98b98 100644 --- a/src/plugins/nim/project/nimblebuildsystem.h +++ b/src/plugins/nim/project/nimblebuildsystem.h @@ -75,11 +75,11 @@ private: ProjectExplorer::ProjectAction action, const ProjectExplorer::Node *node) const override; bool addFiles(ProjectExplorer::Node *node, - const QStringList &filePaths, QStringList *) override; + const Utils::FilePaths &filePaths, Utils::FilePaths *) override; ProjectExplorer::RemovedFilesFromProject removeFiles(ProjectExplorer::Node *node, - const QStringList &filePaths, - QStringList *) override; - bool deleteFiles(ProjectExplorer::Node *, const QStringList &) override; + const Utils::FilePaths &filePaths, + Utils::FilePaths *) override; + bool deleteFiles(ProjectExplorer::Node *, const Utils::FilePaths &) override; bool renameFile(ProjectExplorer::Node *, const Utils::FilePath &oldFilePath, const Utils::FilePath &newFilePath) override; diff --git a/src/plugins/nim/project/nimbuildsystem.cpp b/src/plugins/nim/project/nimbuildsystem.cpp index b02d2131e4a..2a3612ad763 100644 --- a/src/plugins/nim/project/nimbuildsystem.cpp +++ b/src/plugins/nim/project/nimbuildsystem.cpp @@ -222,19 +222,19 @@ bool NimBuildSystem::supportsAction(Node *context, ProjectAction action, const N return BuildSystem::supportsAction(context, action, node); } -bool NimBuildSystem::addFiles(Node *, const QStringList &filePaths, QStringList *) +bool NimBuildSystem::addFiles(Node *, const FilePaths &filePaths, FilePaths *) { - return m_projectScanner.addFiles(filePaths); + return m_projectScanner.addFiles(Utils::transform(filePaths, &FilePath::toString)); } RemovedFilesFromProject NimBuildSystem::removeFiles(Node *, - const QStringList &filePaths, - QStringList *) + const FilePaths &filePaths, + FilePaths *) { - return m_projectScanner.removeFiles(filePaths); + return m_projectScanner.removeFiles(Utils::transform(filePaths, &FilePath::toString)); } -bool NimBuildSystem::deleteFiles(Node *, const QStringList &) +bool NimBuildSystem::deleteFiles(Node *, const FilePaths &) { return true; } diff --git a/src/plugins/nim/project/nimbuildsystem.h b/src/plugins/nim/project/nimbuildsystem.h index 634f475ba31..bc9e1e1a862 100644 --- a/src/plugins/nim/project/nimbuildsystem.h +++ b/src/plugins/nim/project/nimbuildsystem.h @@ -80,11 +80,11 @@ public: ProjectExplorer::ProjectAction action, const ProjectExplorer::Node *node) const final; bool addFiles(ProjectExplorer::Node *node, - const QStringList &filePaths, QStringList *) final; + const Utils::FilePaths &filePaths, Utils::FilePaths *) final; ProjectExplorer::RemovedFilesFromProject removeFiles(ProjectExplorer::Node *node, - const QStringList &filePaths, - QStringList *) override; - bool deleteFiles(ProjectExplorer::Node *, const QStringList &) final; + const Utils::FilePaths &filePaths, + Utils::FilePaths *) override; + bool deleteFiles(ProjectExplorer::Node *, const Utils::FilePaths &) final; bool renameFile(ProjectExplorer::Node *, const Utils::FilePath &oldFilePath, const Utils::FilePath &newFilePath) final; diff --git a/src/plugins/projectexplorer/buildsystem.cpp b/src/plugins/projectexplorer/buildsystem.cpp index cafe6d69540..bf351c93575 100644 --- a/src/plugins/projectexplorer/buildsystem.cpp +++ b/src/plugins/projectexplorer/buildsystem.cpp @@ -200,22 +200,22 @@ void BuildSystem::requestParseHelper(int delay) d->m_delayedParsingTimer.start(); } -bool BuildSystem::addFiles(Node *, const QStringList &filePaths, QStringList *notAdded) +bool BuildSystem::addFiles(Node *, const FilePaths &filePaths, FilePaths *notAdded) { Q_UNUSED(filePaths) Q_UNUSED(notAdded) return false; } -RemovedFilesFromProject BuildSystem::removeFiles(Node *, const QStringList &filePaths, - QStringList *notRemoved) +RemovedFilesFromProject BuildSystem::removeFiles(Node *, const FilePaths &filePaths, + FilePaths *notRemoved) { Q_UNUSED(filePaths) Q_UNUSED(notRemoved) return RemovedFilesFromProject::Error; } -bool BuildSystem::deleteFiles(Node *, const QStringList &filePaths) +bool BuildSystem::deleteFiles(Node *, const FilePaths &filePaths) { Q_UNUSED(filePaths) return false; @@ -246,7 +246,7 @@ bool BuildSystem::supportsAction(Node *, ProjectAction, const Node *) const return false; } -QStringList BuildSystem::filesGeneratedFrom(const QString &sourceFile) const +FilePaths BuildSystem::filesGeneratedFrom(const FilePath &sourceFile) const { Q_UNUSED(sourceFile) return {}; diff --git a/src/plugins/projectexplorer/buildsystem.h b/src/plugins/projectexplorer/buildsystem.h index d24c3b7eaca..f6fe4c16633 100644 --- a/src/plugins/projectexplorer/buildsystem.h +++ b/src/plugins/projectexplorer/buildsystem.h @@ -86,10 +86,13 @@ public: Utils::Environment activeParseEnvironment() const; - virtual bool addFiles(Node *context, const QStringList &filePaths, QStringList *notAdded = nullptr); - virtual RemovedFilesFromProject removeFiles(Node *context, const QStringList &filePaths, - QStringList *notRemoved = nullptr); - virtual bool deleteFiles(Node *context, const QStringList &filePaths); + virtual bool addFiles(Node *context, + const Utils::FilePaths &filePaths, + Utils::FilePaths *notAdded = nullptr); + virtual RemovedFilesFromProject removeFiles(Node *context, + const Utils::FilePaths &filePaths, + Utils::FilePaths *notRemoved = nullptr); + virtual bool deleteFiles(Node *context, const Utils::FilePaths &filePaths); virtual bool canRenameFile(Node *context, const Utils::FilePath &oldFilePath, const Utils::FilePath &newFilePath); @@ -99,7 +102,7 @@ public: virtual bool addDependencies(Node *context, const QStringList &dependencies); virtual bool supportsAction(Node *context, ProjectAction action, const Node *node) const; - virtual QStringList filesGeneratedFrom(const QString &sourceFile) const; + virtual Utils::FilePaths filesGeneratedFrom(const Utils::FilePath &sourceFile) const; virtual QVariant additionalData(Utils::Id id) const; void setDeploymentData(const DeploymentData &deploymentData); diff --git a/src/plugins/projectexplorer/foldernavigationwidget.cpp b/src/plugins/projectexplorer/foldernavigationwidget.cpp index ba74074bb9a..0b33b88309e 100644 --- a/src/plugins/projectexplorer/foldernavigationwidget.cpp +++ b/src/plugins/projectexplorer/foldernavigationwidget.cpp @@ -546,7 +546,7 @@ void FolderNavigationWidget::removeCurrentItem() const QVector folderNodes = removableFolderNodes(filePath); const QVector failedNodes = Utils::filtered(folderNodes, [filePath](FolderNode *folder) { - return folder->removeFiles({filePath.toString()}) != RemovedFilesFromProject::Ok; + return folder->removeFiles({filePath}) != RemovedFilesFromProject::Ok; }); Core::FileChangeBlocker changeGuard(filePath); Core::FileUtils::removeFiles({filePath}, true /*delete from disk*/); diff --git a/src/plugins/projectexplorer/jsonwizard/jsonsummarypage.cpp b/src/plugins/projectexplorer/jsonwizard/jsonsummarypage.cpp index 688b8618ed4..f23d8fb3d92 100644 --- a/src/plugins/projectexplorer/jsonwizard/jsonsummarypage.cpp +++ b/src/plugins/projectexplorer/jsonwizard/jsonsummarypage.cpp @@ -45,6 +45,7 @@ #include using namespace Core; +using namespace Utils; static char KEY_SELECTED_PROJECT[] = "SelectedProject"; static char KEY_SELECTED_NODE[] = "SelectedFolderNode"; @@ -198,15 +199,14 @@ void JsonSummaryPage::addToProject(const JsonWizard::GeneratorFiles &files) } m_wizard->removeAttributeFromAllFiles(GeneratedFile::OpenProjectAttribute); } else { - QStringList filePaths = Utils::transform(files, [](const JsonWizard::GeneratorFile &f) { - return f.file.path(); + FilePaths filePaths = Utils::transform(files, [](const JsonWizard::GeneratorFile &f) { + return f.file.filePath(); }); if (!folder->addFiles(filePaths)) { - QStringList nativeFilePaths = Utils::transform(filePaths, &QDir::toNativeSeparators); QMessageBox::critical(wizard(), tr("Failed to Add to Project"), tr("Failed to add one or more files to project\n\"%1\" (%2).") .arg(folder->filePath().toUserOutput(), - nativeFilePaths.join(QLatin1String(", ")))); + FilePath::formatFilePaths(filePaths, ", "))); return; } const QStringList dependencies = m_wizard->stringValue("Dependencies") diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index a6e7046c098..7077678e229 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -3593,7 +3593,8 @@ void ProjectExplorerPluginPrivate::handleAddExistingFiles() if (fileNames.isEmpty()) return; - ProjectExplorerPlugin::addExistingFiles(folderNode, fileNames); + ProjectExplorerPlugin::addExistingFiles(folderNode, + Utils::transform(fileNames, &FilePath::fromString)); } void ProjectExplorerPluginPrivate::addExistingDirectory() @@ -3608,32 +3609,30 @@ void ProjectExplorerPluginPrivate::addExistingDirectory() dialog.setAddFileFilter({}); if (dialog.exec() == QDialog::Accepted) - ProjectExplorerPlugin::addExistingFiles(folderNode, Utils::transform(dialog.selectedFiles(), &Utils::FilePath::toString)); + ProjectExplorerPlugin::addExistingFiles(folderNode, dialog.selectedFiles()); } -void ProjectExplorerPlugin::addExistingFiles(FolderNode *folderNode, const QStringList &filePaths) +void ProjectExplorerPlugin::addExistingFiles(FolderNode *folderNode, const FilePaths &filePaths) { // can happen when project is not yet parsed or finished parsing while the dialog was open: if (!folderNode || !ProjectTree::hasNode(folderNode)) return; const QString dir = folderNode->directory(); - QStringList fileNames = filePaths; - QStringList notAdded; + FilePaths fileNames = filePaths; + FilePaths notAdded; folderNode->addFiles(fileNames, ¬Added); if (!notAdded.isEmpty()) { const QString message = tr("Could not add following files to project %1:") .arg(folderNode->managingProject()->displayName()) + QLatin1Char('\n'); - const QStringList nativeFiles - = Utils::transform(notAdded, &QDir::toNativeSeparators); QMessageBox::warning(ICore::dialogParent(), tr("Adding Files to Project Failed"), - message + nativeFiles.join(QLatin1Char('\n'))); + message + FilePath::formatFilePaths(notAdded, "\n")); fileNames = Utils::filtered(fileNames, - [¬Added](const QString &f) { return !notAdded.contains(f); }); + [¬Added](const FilePath &f) { return !notAdded.contains(f); }); } - VcsManager::promptToAdd(dir, fileNames); + VcsManager::promptToAdd(dir, Utils::transform(fileNames, &FilePath::toString)); } void ProjectExplorerPluginPrivate::removeProject() @@ -3752,8 +3751,7 @@ void ProjectExplorerPluginPrivate::removeFile() QTC_ASSERT(folderNode, return); const Utils::FilePath ¤tFilePath = file.second; - const RemovedFilesFromProject status - = folderNode->removeFiles(QStringList(currentFilePath.toString())); + const RemovedFilesFromProject status = folderNode->removeFiles({currentFilePath}); const bool success = status == RemovedFilesFromProject::Ok || (status == RemovedFilesFromProject::Wildcard && removeFileDialog.isDeleteFileChecked()); @@ -3810,7 +3808,7 @@ void ProjectExplorerPluginPrivate::duplicateFile() QDir::toNativeSeparators(newFilePath), sourceFile.errorString())); return; } - if (!folderNode->addFiles(QStringList(newFilePath))) { + if (!folderNode->addFiles({FilePath::fromString(newFilePath)})) { QMessageBox::critical(ICore::dialogParent(), tr("Duplicating File Failed"), tr("Failed to add new file \"%1\" to the project.") .arg(QDir::toNativeSeparators(newFilePath))); @@ -3826,12 +3824,12 @@ void ProjectExplorerPluginPrivate::deleteFile() FileNode *fileNode = currentNode->asFileNode(); - QString filePath = currentNode->filePath().toString(); + FilePath filePath = currentNode->filePath(); QMessageBox::StandardButton button = QMessageBox::question(ICore::dialogParent(), tr("Delete File"), tr("Delete %1 from file system?") - .arg(QDir::toNativeSeparators(filePath)), + .arg(filePath.toUserOutput()), QMessageBox::Yes | QMessageBox::No); if (button != QMessageBox::Yes) return; @@ -3839,19 +3837,18 @@ void ProjectExplorerPluginPrivate::deleteFile() FolderNode *folderNode = fileNode->parentFolderNode(); QTC_ASSERT(folderNode, return); - folderNode->deleteFiles(QStringList(filePath)); + folderNode->deleteFiles({filePath}); FileChangeBlocker changeGuard(currentNode->filePath()); if (IVersionControl *vc = - VcsManager::findVersionControlForDirectory(QFileInfo(filePath).absolutePath())) { - vc->vcsDelete(filePath); + VcsManager::findVersionControlForDirectory(filePath.absolutePath().toString())) { + vc->vcsDelete(filePath.toString()); } - QFile file(filePath); - if (file.exists()) { - if (!file.remove()) + if (filePath.exists()) { + if (!filePath.removeFile()) QMessageBox::warning(ICore::dialogParent(), tr("Deleting File Failed"), tr("Could not delete file %1.") - .arg(QDir::toNativeSeparators(filePath))); + .arg(filePath.toUserOutput())); } } diff --git a/src/plugins/projectexplorer/projectexplorer.h b/src/plugins/projectexplorer/projectexplorer.h index 74527bbd964..aad380c85b7 100644 --- a/src/plugins/projectexplorer/projectexplorer.h +++ b/src/plugins/projectexplorer/projectexplorer.h @@ -163,7 +163,7 @@ public: static QList> runningRunControlProcesses(); static QList allRunControls(); - static void addExistingFiles(FolderNode *folderNode, const QStringList &filePaths); + static void addExistingFiles(FolderNode *folderNode, const Utils::FilePaths &filePaths); static void initiateInlineRenaming(); diff --git a/src/plugins/projectexplorer/projectfilewizardextension.cpp b/src/plugins/projectexplorer/projectfilewizardextension.cpp index 730d4585160..d3cae0aed3d 100644 --- a/src/plugins/projectexplorer/projectfilewizardextension.cpp +++ b/src/plugins/projectexplorer/projectfilewizardextension.cpp @@ -217,10 +217,11 @@ bool ProjectFileWizardExtension::processProject( } *removeOpenProjectAttribute = true; } else { - QStringList filePaths = Utils::transform(files, &GeneratedFile::path); + FilePaths filePaths = Utils::transform(files, &GeneratedFile::filePath); if (!folder->addFiles(filePaths)) { - *errorMessage = tr("Failed to add one or more files to project\n\"%1\" (%2)."). - arg(folder->filePath().toUserOutput(), filePaths.join(QLatin1Char(','))); + *errorMessage = tr("Failed to add one or more files to project\n\"%1\" (%2).") + .arg(folder->filePath().toUserOutput()) + .arg(FilePath::formatFilePaths(filePaths, ",")); return false; } } @@ -257,7 +258,7 @@ void ProjectFileWizardExtension::applyCodeStyle(GeneratedFile *file) const Indenter *indenter = nullptr; if (factory) { indenter = factory->createIndenter(&doc); - indenter->setFileName(Utils::FilePath::fromString(file->path())); + indenter->setFileName(file->filePath()); } if (!indenter) indenter = new TextIndenter(&doc); diff --git a/src/plugins/projectexplorer/projectmodels.cpp b/src/plugins/projectexplorer/projectmodels.cpp index 0565edcc523..8cf78d2850e 100644 --- a/src/plugins/projectexplorer/projectmodels.cpp +++ b/src/plugins/projectexplorer/projectmodels.cpp @@ -717,8 +717,8 @@ bool FlatModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int r return true; // Some helper functions for the file operations. - const auto targetFilePath = [&targetDir](const QString &sourceFilePath) { - return targetDir.pathAppended(QFileInfo(sourceFilePath).fileName()).toString(); + const auto targetFilePath = [&targetDir](const FilePath &sourceFilePath) { + return targetDir.pathAppended(sourceFilePath.fileName()); }; struct VcsInfo { @@ -741,25 +741,23 @@ bool FlatModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int r }; // Now do the actual work. - const QStringList sourceFiles = transform(fileNodes, [](const Node *n) { - return n->filePath().toString(); - }); - QStringList failedRemoveFromProject; - QStringList failedAddToProject; - QStringList failedCopyOrMove; - QStringList failedDelete; - QStringList failedVcsOp; + const FilePaths sourceFiles = transform(fileNodes, [](const Node *n) { return n->filePath(); }); + FilePaths failedRemoveFromProject; + FilePaths failedAddToProject; + FilePaths failedCopyOrMove; + FilePaths failedDelete; + FilePaths failedVcsOp; switch (dlg.dropAction()) { case DropAction::CopyWithFiles: { - QStringList filesToAdd; + FilePaths filesToAdd; Core::IVersionControl * const vcs = Core::VcsManager::findVersionControlForDirectory( targetDir.toString()); const bool addToVcs = vcs && vcs->supportsOperation(Core::IVersionControl::AddOperation); - for (const QString &sourceFile : sourceFiles) { - const QString targetFile = targetFilePath(sourceFile); - if (QFile::copy(sourceFile, targetFile)) { + for (const FilePath &sourceFile : sourceFiles) { + const FilePath targetFile = targetFilePath(sourceFile); + if (sourceFile.copyFile(targetFile)) { filesToAdd << targetFile; - if (addToVcs && !vcs->vcsAdd(targetFile)) + if (addToVcs && !vcs->vcsAdd(targetFile.toString())) failedVcsOp << targetFile; } else { failedCopyOrMove << sourceFile; @@ -772,17 +770,17 @@ bool FlatModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int r targetProjectNode->addFiles(sourceFiles, &failedAddToProject); break; case DropAction::MoveWithFiles: { - QStringList filesToAdd; - QStringList filesToRemove; + FilePaths filesToAdd; + FilePaths filesToRemove; const VcsInfo targetVcs = vcsInfoForFile(targetDir.toString()); const bool vcsAddPossible = targetVcs.vcs && targetVcs.vcs->supportsOperation(Core::IVersionControl::AddOperation); - for (const QString &sourceFile : sourceFiles) { - const QString targetFile = targetFilePath(sourceFile); - const VcsInfo sourceVcs = vcsInfoForFile(sourceFile); + for (const FilePath &sourceFile : sourceFiles) { + const FilePath targetFile = targetFilePath(sourceFile); + const VcsInfo sourceVcs = vcsInfoForFile(sourceFile.toString()); if (sourceVcs.vcs && targetVcs.vcs && sourceVcs == targetVcs && sourceVcs.vcs->supportsOperation(Core::IVersionControl::MoveOperation)) { - if (sourceVcs.vcs->vcsMove(sourceFile, targetFile)) { + if (sourceVcs.vcs->vcsMove(sourceFile.toString(), targetFile.toString())) { filesToAdd << targetFile; filesToRemove << sourceFile; } else { @@ -790,21 +788,21 @@ bool FlatModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int r } continue; } - if (!QFile::copy(sourceFile, targetFile)) { + if (!sourceFile.copyFile(targetFile)) { failedCopyOrMove << sourceFile; continue; } filesToAdd << targetFile; filesToRemove << sourceFile; - Core::FileChangeBlocker changeGuard(FilePath::fromString(sourceFile)); + Core::FileChangeBlocker changeGuard(sourceFile); if (sourceVcs.vcs && sourceVcs.vcs->supportsOperation( Core::IVersionControl::DeleteOperation) - && !sourceVcs.vcs->vcsDelete(sourceFile)) { + && !sourceVcs.vcs->vcsDelete(sourceFile.toString())) { failedVcsOp << sourceFile; } - if (QFile::exists(sourceFile) && !QFile::remove(sourceFile)) + if (sourceFile.exists() && !sourceFile.removeFile()) failedDelete << sourceFile; - if (vcsAddPossible && !targetVcs.vcs->vcsAdd(targetFile)) + if (vcsAddPossible && !targetVcs.vcs->vcsAdd(targetFile.toString())) failedVcsOp << targetFile; } const RemovedFilesFromProject result @@ -821,9 +819,8 @@ bool FlatModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int r } // Summary for the user in case anything went wrong. - const auto makeUserFileList = [](const QStringList &files) { - return transform(files, [](const QString &f) { return QDir::toNativeSeparators(f); }) - .join("\n "); + const auto makeUserFileList = [](const FilePaths &files) { + return FilePath::formatFilePaths(files, "\n "); }; if (!failedAddToProject.empty() || !failedRemoveFromProject.empty() || !failedCopyOrMove.empty() || !failedDelete.empty() || !failedVcsOp.empty()) { diff --git a/src/plugins/projectexplorer/projectnodes.cpp b/src/plugins/projectexplorer/projectnodes.cpp index b160a479791..54f5dc4290e 100644 --- a/src/plugins/projectexplorer/projectnodes.cpp +++ b/src/plugins/projectexplorer/projectnodes.cpp @@ -54,6 +54,8 @@ #include +using namespace Utils; + namespace ProjectExplorer { QHash DirectoryIcon::m_cache; @@ -741,7 +743,7 @@ bool FolderNode::supportsAction(ProjectAction action, const Node *node) const return parentFolder && parentFolder->supportsAction(action, node); } -bool FolderNode::addFiles(const QStringList &filePaths, QStringList *notAdded) +bool FolderNode::addFiles(const FilePaths &filePaths, FilePaths *notAdded) { ProjectNode *pn = managingProject(); if (pn) @@ -749,15 +751,14 @@ bool FolderNode::addFiles(const QStringList &filePaths, QStringList *notAdded) return false; } -RemovedFilesFromProject FolderNode::removeFiles(const QStringList &filePaths, - QStringList *notRemoved) +RemovedFilesFromProject FolderNode::removeFiles(const FilePaths &filePaths, FilePaths *notRemoved) { if (ProjectNode * const pn = managingProject()) return pn->removeFiles(filePaths, notRemoved); return RemovedFilesFromProject::Error; } -bool FolderNode::deleteFiles(const QStringList &filePaths) +bool FolderNode::deleteFiles(const FilePaths &filePaths) { ProjectNode *pn = managingProject(); if (pn) @@ -885,22 +886,21 @@ bool ProjectNode::removeSubProject(const QString &proFilePath) return false; } -bool ProjectNode::addFiles(const QStringList &filePaths, QStringList *notAdded) +bool ProjectNode::addFiles(const FilePaths &filePaths, FilePaths *notAdded) { if (BuildSystem *bs = buildSystem()) return bs->addFiles(this, filePaths, notAdded); return false; } -RemovedFilesFromProject ProjectNode::removeFiles(const QStringList &filePaths, - QStringList *notRemoved) +RemovedFilesFromProject ProjectNode::removeFiles(const FilePaths &filePaths, FilePaths *notRemoved) { if (BuildSystem *bs = buildSystem()) return bs->removeFiles(this, filePaths, notRemoved); return RemovedFilesFromProject::Error; } -bool ProjectNode::deleteFiles(const QStringList &filePaths) +bool ProjectNode::deleteFiles(const FilePaths &filePaths) { if (BuildSystem *bs = buildSystem()) return bs->deleteFiles(this, filePaths); diff --git a/src/plugins/projectexplorer/projectnodes.h b/src/plugins/projectexplorer/projectnodes.h index b739a93f1ca..85fed71431d 100644 --- a/src/plugins/projectexplorer/projectnodes.h +++ b/src/plugins/projectexplorer/projectnodes.h @@ -298,10 +298,10 @@ public: bool supportsAction(ProjectAction action, const Node *node) const override; - virtual bool addFiles(const QStringList &filePaths, QStringList *notAdded = nullptr); - virtual RemovedFilesFromProject removeFiles(const QStringList &filePaths, - QStringList *notRemoved = nullptr); - virtual bool deleteFiles(const QStringList &filePaths); + virtual bool addFiles(const Utils::FilePaths &filePaths, Utils::FilePaths *notAdded = nullptr); + virtual RemovedFilesFromProject removeFiles(const Utils::FilePaths &filePaths, + Utils::FilePaths *notRemoved = nullptr); + virtual bool deleteFiles(const Utils::FilePaths &filePaths); virtual bool canRenameFile(const Utils::FilePath &oldFilePath, const Utils::FilePath &newFilePath); virtual bool renameFile(const Utils::FilePath &oldFilePath, const Utils::FilePath &newFilePath); @@ -382,10 +382,10 @@ public: bool isProjectNodeType() const override { return true; } bool showInSimpleTree() const override { return true; } - bool addFiles(const QStringList &filePaths, QStringList *notAdded = nullptr) final; - RemovedFilesFromProject removeFiles(const QStringList &filePaths, - QStringList *notRemoved = nullptr) final; - bool deleteFiles(const QStringList &filePaths) final; + bool addFiles(const Utils::FilePaths &filePaths, Utils::FilePaths *notAdded = nullptr) final; + RemovedFilesFromProject removeFiles(const Utils::FilePaths &filePaths, + Utils::FilePaths *notRemoved = nullptr) final; + bool deleteFiles(const Utils::FilePaths &filePaths) final; bool canRenameFile(const Utils::FilePath &oldFilePath, const Utils::FilePath &newFilePath) final; bool renameFile(const Utils::FilePath &oldFilePath, const Utils::FilePath &newFilePath) final; bool addDependencies(const QStringList &dependencies) final; diff --git a/src/plugins/python/pythonproject.cpp b/src/plugins/python/pythonproject.cpp index e453d5c366d..890bcd10fb6 100644 --- a/src/plugins/python/pythonproject.cpp +++ b/src/plugins/python/pythonproject.cpp @@ -63,9 +63,9 @@ public: explicit PythonBuildSystem(Target *target); bool supportsAction(Node *context, ProjectAction action, const Node *node) const override; - bool addFiles(Node *, const QStringList &filePaths, QStringList *) override; - RemovedFilesFromProject removeFiles(Node *, const QStringList &filePaths, QStringList *) override; - bool deleteFiles(Node *, const QStringList &) override; + bool addFiles(Node *, const Utils::FilePaths &filePaths, Utils::FilePaths *) override; + RemovedFilesFromProject removeFiles(Node *, const Utils::FilePaths &filePaths, Utils::FilePaths *) override; + bool deleteFiles(Node *, const Utils::FilePaths &) override; bool renameFile(Node *, const Utils::FilePath &oldFilePath, const Utils::FilePath &newFilePath) override; @@ -349,23 +349,23 @@ bool PythonBuildSystem::writePyProjectFile(const QString &fileName, QString &con return true; } -bool PythonBuildSystem::addFiles(Node *, const QStringList &filePaths, QStringList *) +bool PythonBuildSystem::addFiles(Node *, const FilePaths &filePaths, FilePaths *) { QStringList newList = m_rawFileList; const QDir baseDir(projectDirectory().toString()); - for (const QString &filePath : filePaths) - newList.append(baseDir.relativeFilePath(filePath)); + for (const FilePath &filePath : filePaths) + newList.append(baseDir.relativeFilePath(filePath.toString())); return saveRawFileList(newList); } -RemovedFilesFromProject PythonBuildSystem::removeFiles(Node *, const QStringList &filePaths, QStringList *) +RemovedFilesFromProject PythonBuildSystem::removeFiles(Node *, const FilePaths &filePaths, FilePaths *) { QStringList newList = m_rawFileList; - for (const QString &filePath : filePaths) { - const QHash::iterator i = m_rawListEntries.find(filePath); + for (const FilePath &filePath : filePaths) { + const QHash::iterator i = m_rawListEntries.find(filePath.toString()); if (i != m_rawListEntries.end()) newList.removeOne(i.value()); } @@ -375,7 +375,7 @@ RemovedFilesFromProject PythonBuildSystem::removeFiles(Node *, const QStringList return res ? RemovedFilesFromProject::Ok : RemovedFilesFromProject::Error; } -bool PythonBuildSystem::deleteFiles(Node *, const QStringList &) +bool PythonBuildSystem::deleteFiles(Node *, const FilePaths &) { return true; } diff --git a/src/plugins/qbsprojectmanager/qbsproject.cpp b/src/plugins/qbsprojectmanager/qbsproject.cpp index 1de06cedaf1..3df9afa518b 100644 --- a/src/plugins/qbsprojectmanager/qbsproject.cpp +++ b/src/plugins/qbsprojectmanager/qbsproject.cpp @@ -245,10 +245,10 @@ bool QbsBuildSystem::supportsAction(Node *context, ProjectAction action, const N return supportsNodeAction(action, node); } -bool QbsBuildSystem::addFiles(Node *context, const QStringList &filePaths, QStringList *notAdded) +bool QbsBuildSystem::addFiles(Node *context, const FilePaths &filePaths, FilePaths *notAdded) { if (auto n = dynamic_cast(context)) { - QStringList notAddedDummy; + FilePaths notAddedDummy; if (!notAdded) notAdded = ¬AddedDummy; @@ -258,7 +258,7 @@ bool QbsBuildSystem::addFiles(Node *context, const QStringList &filePaths, QStri } if (auto n = dynamic_cast(context)) { - QStringList notAddedDummy; + FilePaths notAddedDummy; if (!notAdded) notAdded = ¬AddedDummy; return addFilesToProduct(filePaths, n->productData(), n->mainGroup(), notAdded); @@ -267,11 +267,11 @@ bool QbsBuildSystem::addFiles(Node *context, const QStringList &filePaths, QStri return BuildSystem::addFiles(context, filePaths, notAdded); } -RemovedFilesFromProject QbsBuildSystem::removeFiles(Node *context, const QStringList &filePaths, - QStringList *notRemoved) +RemovedFilesFromProject QbsBuildSystem::removeFiles(Node *context, const FilePaths &filePaths, + FilePaths *notRemoved) { if (auto n = dynamic_cast(context)) { - QStringList notRemovedDummy; + FilePaths notRemovedDummy; if (!notRemoved) notRemoved = ¬RemovedDummy; const QbsProductNode * const prdNode = parentQbsProductNode(n); @@ -281,7 +281,7 @@ RemovedFilesFromProject QbsBuildSystem::removeFiles(Node *context, const QString } if (auto n = dynamic_cast(context)) { - QStringList notRemovedDummy; + FilePaths notRemovedDummy; if (!notRemoved) notRemoved = ¬RemovedDummy; return removeFilesFromProduct(filePaths, n->productData(), n->mainGroup(), notRemoved); @@ -335,9 +335,9 @@ ProjectExplorer::DeploymentKnowledge QbsProject::deploymentKnowledge() const return DeploymentKnowledge::Perfect; } -QStringList QbsBuildSystem::filesGeneratedFrom(const QString &sourceFile) const +FilePaths QbsBuildSystem::filesGeneratedFrom(const FilePath &sourceFile) const { - return session()->filesGeneratedFrom(sourceFile); + return transform(session()->filesGeneratedFrom(sourceFile.toString()), &FilePath::fromString); } bool QbsBuildSystem::isProjectEditable() const @@ -367,40 +367,40 @@ bool QbsBuildSystem::ensureWriteableQbsFile(const QString &file) } bool QbsBuildSystem::addFilesToProduct( - const QStringList &filePaths, + const FilePaths &filePaths, const QJsonObject &product, const QJsonObject &group, - QStringList *notAdded) + FilePaths *notAdded) { const QString groupFilePath = group.value("location").toObject().value("file-path").toString(); ensureWriteableQbsFile(groupFilePath); const FileChangeResult result = session()->addFiles( - filePaths, + Utils::transform(filePaths, &FilePath::toString), product.value("full-display-name").toString(), group.value("name").toString()); if (result.error().hasError()) { MessageManager::writeDisrupting(result.error().toString()); - *notAdded = result.failedFiles(); + *notAdded = Utils::transform(result.failedFiles(), &FilePath::fromString); } return notAdded->isEmpty(); } RemovedFilesFromProject QbsBuildSystem::removeFilesFromProduct( - const QStringList &filePaths, + const FilePaths &filePaths, const QJsonObject &product, const QJsonObject &group, - QStringList *notRemoved) + FilePaths *notRemoved) { const auto allWildcardsInGroup = transform( group.value("source-artifacts-from-wildcards").toArray(), [](const QJsonValue &v) { return v.toObject().value("file-path").toString(); }); - QStringList wildcardFiles; + FilePaths wildcardFiles; QStringList nonWildcardFiles; - for (const QString &filePath : filePaths) { - if (allWildcardsInGroup.contains(filePath)) + for (const FilePath &filePath : filePaths) { + if (allWildcardsInGroup.contains(filePath.toString())) wildcardFiles << filePath; else - nonWildcardFiles << filePath; + nonWildcardFiles << filePath.toString(); } const QString groupFilePath = group.value("location") @@ -411,7 +411,7 @@ RemovedFilesFromProject QbsBuildSystem::removeFilesFromProduct( product.value("name").toString(), group.value("name").toString()); - *notRemoved = result.failedFiles(); + *notRemoved = Utils::transform(result.failedFiles(), &FilePath::fromString); if (result.error().hasError()) MessageManager::writeDisrupting(result.error().toString()); const bool success = notRemoved->isEmpty(); @@ -432,12 +432,12 @@ bool QbsBuildSystem::renameFileInProduct( { if (newPath.isEmpty()) return false; - QStringList dummy; - if (removeFilesFromProduct(QStringList(oldPath), product, group, &dummy) + FilePaths dummy; + if (removeFilesFromProduct({FilePath::fromString(oldPath)}, product, group, &dummy) != RemovedFilesFromProject::Ok) { return false; } - return addFilesToProduct(QStringList(newPath), product, group, &dummy); + return addFilesToProduct({FilePath::fromString(newPath)}, product, group, &dummy); } QString QbsBuildSystem::profile() const diff --git a/src/plugins/qbsprojectmanager/qbsproject.h b/src/plugins/qbsprojectmanager/qbsproject.h index b7f216c210f..3810a1f4377 100644 --- a/src/plugins/qbsprojectmanager/qbsproject.h +++ b/src/plugins/qbsprojectmanager/qbsproject.h @@ -84,26 +84,26 @@ public: ProjectExplorer::ProjectAction action, const ProjectExplorer::Node *node) const final; bool addFiles(ProjectExplorer::Node *context, - const QStringList &filePaths, - QStringList *notAdded = nullptr) final; + const Utils::FilePaths &filePaths, + Utils::FilePaths *notAdded = nullptr) final; ProjectExplorer::RemovedFilesFromProject removeFiles(ProjectExplorer::Node *context, - const QStringList &filePaths, - QStringList *notRemoved = nullptr) final; + const Utils::FilePaths &filePaths, + Utils::FilePaths *notRemoved = nullptr) final; bool renameFile(ProjectExplorer::Node *context, const Utils::FilePath &oldFilePath, const Utils::FilePath &newFilePath) final; - QStringList filesGeneratedFrom(const QString &sourceFile) const final; + Utils::FilePaths filesGeneratedFrom(const Utils::FilePath &sourceFile) const final; QVariant additionalData(Utils::Id id) const final; bool isProjectEditable() const; - bool addFilesToProduct(const QStringList &filePaths, + bool addFilesToProduct(const Utils::FilePaths &filePaths, const QJsonObject &product, const QJsonObject &group, - QStringList *notAdded); - ProjectExplorer::RemovedFilesFromProject removeFilesFromProduct(const QStringList &filePaths, + Utils::FilePaths *notAdded); + ProjectExplorer::RemovedFilesFromProject removeFilesFromProduct(const Utils::FilePaths &filePaths, const QJsonObject &product, const QJsonObject &group, - QStringList *notRemoved); + Utils::FilePaths *notRemoved); bool renameFileInProduct(const QString &oldPath, const QString &newPath, const QJsonObject &product, const QJsonObject &group); diff --git a/src/plugins/qmakeprojectmanager/qmakenodes.cpp b/src/plugins/qmakeprojectmanager/qmakenodes.cpp index da1f89f4eee..cb4222db973 100644 --- a/src/plugins/qmakeprojectmanager/qmakenodes.cpp +++ b/src/plugins/qmakeprojectmanager/qmakenodes.cpp @@ -192,14 +192,14 @@ QStringList QmakePriFileNode::subProjectFileNamePatterns() const return QStringList("*.pro"); } -bool QmakeBuildSystem::addFiles(Node *context, const QStringList &filePaths, QStringList *notAdded) +bool QmakeBuildSystem::addFiles(Node *context, const FilePaths &filePaths, FilePaths *notAdded) { if (auto n = dynamic_cast(context)) { QmakePriFile *pri = n->priFile(); if (!pri) return false; QList matchingNodes = n->findNodes([filePaths](const Node *nn) { - return nn->asFileNode() && filePaths.contains(nn->filePath().toString()); + return nn->asFileNode() && filePaths.contains(nn->filePath()); }); matchingNodes = filtered(matchingNodes, [](const Node *n) { for (const Node *parent = n->parentFolderNode(); parent; @@ -209,11 +209,11 @@ bool QmakeBuildSystem::addFiles(Node *context, const QStringList &filePaths, QSt } return true; }); - QStringList alreadyPresentFiles = transform(matchingNodes, - [](const Node *n) { return n->filePath().toString(); }); - alreadyPresentFiles.removeDuplicates(); - QStringList actualFilePaths = filePaths; - for (const QString &e : alreadyPresentFiles) + FilePaths alreadyPresentFiles = transform(matchingNodes, [](const Node *n) { return n->filePath(); }); + FilePath::removeDuplicates(alreadyPresentFiles); + + FilePaths actualFilePaths = filePaths; + for (const FilePath &e : alreadyPresentFiles) actualFilePaths.removeOne(e); if (notAdded) *notAdded = alreadyPresentFiles; @@ -226,17 +226,17 @@ bool QmakeBuildSystem::addFiles(Node *context, const QStringList &filePaths, QSt return BuildSystem::addFiles(context, filePaths, notAdded); } -RemovedFilesFromProject QmakeBuildSystem::removeFiles(Node *context, const QStringList &filePaths, - QStringList *notRemoved) +RemovedFilesFromProject QmakeBuildSystem::removeFiles(Node *context, const FilePaths &filePaths, + FilePaths *notRemoved) { if (auto n = dynamic_cast(context)) { QmakePriFile * const pri = n->priFile(); if (!pri) return RemovedFilesFromProject::Error; - QStringList wildcardFiles; - QStringList nonWildcardFiles; - for (const QString &file : filePaths) { - if (pri->proFile()->isFileFromWildcard(file)) + FilePaths wildcardFiles; + FilePaths nonWildcardFiles; + for (const FilePath &file : filePaths) { + if (pri->proFile()->isFileFromWildcard(file.toString())) wildcardFiles << file; else nonWildcardFiles << file; @@ -254,7 +254,7 @@ RemovedFilesFromProject QmakeBuildSystem::removeFiles(Node *context, const QStri return BuildSystem::removeFiles(context, filePaths, notRemoved); } -bool QmakeBuildSystem::deleteFiles(Node *context, const QStringList &filePaths) +bool QmakeBuildSystem::deleteFiles(Node *context, const FilePaths &filePaths) { if (auto n = dynamic_cast(context)) { QmakePriFile *pri = n->priFile(); diff --git a/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp b/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp index f7d03e0a3c3..3bed8f42e95 100644 --- a/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp @@ -505,25 +505,25 @@ bool QmakePriFile::canAddSubProject(const QString &proFilePath) const return false; } -static QString simplifyProFilePath(const QString &proFilePath) +static FilePath simplifyProFilePath(const FilePath &proFilePath) { // if proFilePath is like: _path_/projectName/projectName.pro // we simplify it to: _path_/projectName - QFileInfo fi(proFilePath); + QFileInfo fi = proFilePath.toFileInfo(); // FIXME const QString parentPath = fi.absolutePath(); QFileInfo parentFi(parentPath); if (parentFi.fileName() == fi.completeBaseName()) - return parentPath; + return FilePath::fromString(parentPath); return proFilePath; } bool QmakePriFile::addSubProject(const QString &proFile) { - QStringList uniqueProFilePaths; + FilePaths uniqueProFilePaths; if (!m_recursiveEnumerateFiles.contains(FilePath::fromString(proFile))) - uniqueProFilePaths.append(simplifyProFilePath(proFile)); + uniqueProFilePaths.append(simplifyProFilePath(FilePath::fromString(proFile))); - QStringList failedFiles; + FilePaths failedFiles; changeFiles(QLatin1String(Constants::PROFILE_MIMETYPE), uniqueProFilePaths, &failedFiles, AddToProFile); return failedFiles.isEmpty(); @@ -531,57 +531,57 @@ bool QmakePriFile::addSubProject(const QString &proFile) bool QmakePriFile::removeSubProjects(const QString &proFilePath) { - QStringList failedOriginalFiles; - changeFiles(QLatin1String(Constants::PROFILE_MIMETYPE), QStringList(proFilePath), &failedOriginalFiles, RemoveFromProFile); + FilePaths failedOriginalFiles; + changeFiles(QLatin1String(Constants::PROFILE_MIMETYPE), {FilePath::fromString(proFilePath)}, &failedOriginalFiles, RemoveFromProFile); - QStringList simplifiedProFiles = Utils::transform(failedOriginalFiles, &simplifyProFilePath); + FilePaths simplifiedProFiles = Utils::transform(failedOriginalFiles, &simplifyProFilePath); - QStringList failedSimplifiedFiles; + FilePaths failedSimplifiedFiles; changeFiles(QLatin1String(Constants::PROFILE_MIMETYPE), simplifiedProFiles, &failedSimplifiedFiles, RemoveFromProFile); return failedSimplifiedFiles.isEmpty(); } -bool QmakePriFile::addFiles(const QStringList &filePaths, QStringList *notAdded) +bool QmakePriFile::addFiles(const FilePaths &filePaths, FilePaths *notAdded) { // If a file is already referenced in the .pro file then we don't add them. // That ignores scopes and which variable was used to reference the file // So it's obviously a bit limited, but in those cases you need to edit the // project files manually anyway. - using TypeFileMap = QMap; + using TypeFileMap = QMap; // Split into lists by file type and bulk-add them. TypeFileMap typeFileMap; - foreach (const QString &file, filePaths) { + for (const FilePath &file : filePaths) { const Utils::MimeType mt = Utils::mimeTypeForFile(file); typeFileMap[mt.name()] << file; } - QStringList failedFiles; + FilePaths failedFiles; foreach (const QString &type, typeFileMap.keys()) { - const QStringList typeFiles = typeFileMap.value(type); - QStringList qrcFiles; // the list of qrc files referenced from ui files + const FilePaths typeFiles = typeFileMap.value(type); + FilePaths qrcFiles; // the list of qrc files referenced from ui files if (type == QLatin1String(ProjectExplorer::Constants::RESOURCE_MIMETYPE)) { - foreach (const QString &formFile, typeFiles) { - QStringList resourceFiles = formResources(formFile); - foreach (const QString &resourceFile, resourceFiles) + for (const FilePath &formFile : typeFiles) { + const FilePaths resourceFiles = formResources(formFile); + for (const FilePath &resourceFile : resourceFiles) if (!qrcFiles.contains(resourceFile)) qrcFiles.append(resourceFile); } } - QStringList uniqueQrcFiles; - foreach (const QString &file, qrcFiles) { - if (!m_recursiveEnumerateFiles.contains(FilePath::fromString(file))) + FilePaths uniqueQrcFiles; + for (const FilePath &file : qAsConst(qrcFiles)) { + if (!m_recursiveEnumerateFiles.contains(file)) uniqueQrcFiles.append(file); } - QStringList uniqueFilePaths; - foreach (const QString &file, typeFiles) { - if (!m_recursiveEnumerateFiles.contains(FilePath::fromString(file))) + FilePaths uniqueFilePaths; + for (const FilePath &file : typeFiles) { + if (!m_recursiveEnumerateFiles.contains(file)) uniqueFilePaths.append(file); } - uniqueFilePaths.sort(); + FilePath::sort(uniqueFilePaths); changeFiles(type, uniqueFilePaths, &failedFiles, AddToProFile); if (notAdded) @@ -593,19 +593,18 @@ bool QmakePriFile::addFiles(const QStringList &filePaths, QStringList *notAdded) return failedFiles.isEmpty(); } -bool QmakePriFile::removeFiles(const QStringList &filePaths, - QStringList *notRemoved) +bool QmakePriFile::removeFiles(const FilePaths &filePaths, FilePaths *notRemoved) { - QStringList failedFiles; - using TypeFileMap = QMap; + FilePaths failedFiles; + using TypeFileMap = QMap; // Split into lists by file type and bulk-add them. TypeFileMap typeFileMap; - foreach (const QString &file, filePaths) { + for (const FilePath &file : filePaths) { const Utils::MimeType mt = Utils::mimeTypeForFile(file); typeFileMap[mt.name()] << file; } foreach (const QString &type, typeFileMap.keys()) { - const QStringList typeFiles = typeFileMap.value(type); + const FilePaths typeFiles = typeFileMap.value(type); changeFiles(type, typeFiles, &failedFiles, RemoveFromProFile); if (notRemoved) *notRemoved = failedFiles; @@ -613,7 +612,7 @@ bool QmakePriFile::removeFiles(const QStringList &filePaths, return failedFiles.isEmpty(); } -bool QmakePriFile::deleteFiles(const QStringList &filePaths) +bool QmakePriFile::deleteFiles(const FilePaths &filePaths) { removeFiles(filePaths); return true; @@ -705,16 +704,16 @@ bool QmakePriFile::saveModifiedEditors() return true; } -QStringList QmakePriFile::formResources(const QString &formFile) const +FilePaths QmakePriFile::formResources(const FilePath &formFile) const { QStringList resourceFiles; - QFile file(formFile); + QFile file(formFile.toString()); if (!file.open(QIODevice::ReadOnly)) - return resourceFiles; + return {}; QXmlStreamReader reader(&file); - QFileInfo fi(formFile); + QFileInfo fi(formFile.toString()); QDir formDir = fi.absoluteDir(); while (!reader.atEnd()) { reader.readNext(); @@ -737,7 +736,7 @@ QStringList QmakePriFile::formResources(const QString &formFile) const if (reader.hasError()) qWarning() << "Could not read form file:" << formFile; - return resourceFiles; + return Utils::transform(resourceFiles, &FilePath::fromString); } bool QmakePriFile::ensureWriteableProFile(const QString &file) @@ -855,9 +854,9 @@ bool QmakePriFile::renameFile(const FilePath &oldFilePath, const FilePath &newFi } void QmakePriFile::changeFiles(const QString &mimeType, - const QStringList &filePaths, - QStringList *notChanged, - ChangeType change, Change mode) + const FilePaths &filePaths, + FilePaths *notChanged, + ChangeType change, Change mode) { if (filePaths.isEmpty()) return; @@ -879,12 +878,18 @@ void QmakePriFile::changeFiles(const QString &mimeType, << filePaths << "change type:" << int(change) << "mode:" << int(mode); if (change == AddToProFile) { // Use the first variable for adding. - ProWriter::addFiles(includeFile, &lines, filePaths, varNameForAdding(mimeType), + ProWriter::addFiles(includeFile, &lines, + Utils::transform(filePaths, &FilePath::toString), + varNameForAdding(mimeType), continuationIndent()); notChanged->clear(); } else { // RemoveFromProFile QDir priFileDir = QDir(m_qmakeProFile->directoryPath().toString()); - *notChanged = ProWriter::removeFiles(includeFile, &lines, priFileDir, filePaths, varNamesForRemoving()); + *notChanged = Utils::transform( + ProWriter::removeFiles(includeFile, &lines, priFileDir, + Utils::transform(filePaths, &FilePath::toString), + varNamesForRemoving()), + &FilePath::fromString); } // save file diff --git a/src/plugins/qmakeprojectmanager/qmakeparsernodes.h b/src/plugins/qmakeprojectmanager/qmakeparsernodes.h index b3e2dc4c579..836c04e5890 100644 --- a/src/plugins/qmakeprojectmanager/qmakeparsernodes.h +++ b/src/plugins/qmakeprojectmanager/qmakeparsernodes.h @@ -162,9 +162,9 @@ public: bool addSubProject(const QString &proFile); bool removeSubProjects(const QString &proFilePath); - bool addFiles(const QStringList &filePaths, QStringList *notAdded = nullptr); - bool removeFiles(const QStringList &filePaths, QStringList *notRemoved = nullptr); - bool deleteFiles(const QStringList &filePaths); + bool addFiles(const Utils::FilePaths &filePaths, Utils::FilePaths *notAdded = nullptr); + bool removeFiles(const Utils::FilePaths &filePaths, Utils::FilePaths *notRemoved = nullptr); + bool deleteFiles(const Utils::FilePaths &filePaths); bool canRenameFile(const Utils::FilePath &oldFilePath, const Utils::FilePath &newFilePath); bool renameFile(const Utils::FilePath &oldFilePath, const Utils::FilePath &newFilePath); bool addDependencies(const QStringList &dependencies); @@ -205,8 +205,8 @@ protected: enum class Change { Save, TestOnly }; bool renameFile(const Utils::FilePath &oldFilePath, const Utils::FilePath &newFilePath, Change mode); void changeFiles(const QString &mimeType, - const QStringList &filePaths, - QStringList *notChanged, + const Utils::FilePaths &filePaths, + Utils::FilePaths *notChanged, ChangeType change, Change mode = Change::Save); @@ -221,7 +221,7 @@ private: static QPair readProFileFromContents(const QString &contents); void save(const QStringList &lines); bool saveModifiedEditors(); - QStringList formResources(const QString &formFile) const; + Utils::FilePaths formResources(const Utils::FilePath &formFile) const; static QStringList baseVPaths(QtSupport::ProFileReader *reader, const QString &projectDir, const QString &buildDir); static QStringList fullVPaths(const QStringList &baseVPaths, QtSupport::ProFileReader *reader, const QString &qmakeVariable, const QString &projectDir); static void extractSources(QHash proToResult, diff --git a/src/plugins/qmakeprojectmanager/qmakeproject.cpp b/src/plugins/qmakeprojectmanager/qmakeproject.cpp index 82a403bfd0d..35be824145d 100644 --- a/src/plugins/qmakeprojectmanager/qmakeproject.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeproject.cpp @@ -1470,18 +1470,17 @@ void QmakeBuildSystem::triggerParsing() asyncUpdate(); } -QStringList QmakeBuildSystem::filesGeneratedFrom(const QString &input) const +FilePaths QmakeBuildSystem::filesGeneratedFrom(const FilePath &input) const { if (!project()->rootProjectNode()) return {}; - if (const FileNode *file = fileNodeOf(project()->rootProjectNode(), FilePath::fromString(input))) { + if (const FileNode *file = fileNodeOf(project()->rootProjectNode(), input)) { const QmakeProFileNode *pro = dynamic_cast(file->parentFolderNode()); QTC_ASSERT(pro, return {}); if (const QmakeProFile *proFile = pro->proFile()) - return Utils::transform(proFile->generatedFiles(buildDir(pro->filePath()), - file->filePath(), file->fileType()), - &FilePath::toString); + return proFile->generatedFiles(buildDir(pro->filePath()), + file->filePath(), file->fileType()); } return {}; } diff --git a/src/plugins/qmakeprojectmanager/qmakeproject.h b/src/plugins/qmakeprojectmanager/qmakeproject.h index 369b8c03415..3fe9543c810 100644 --- a/src/plugins/qmakeprojectmanager/qmakeproject.h +++ b/src/plugins/qmakeprojectmanager/qmakeproject.h @@ -90,13 +90,13 @@ public: const ProjectExplorer::Node *node) const override; bool addFiles(ProjectExplorer::Node *context, - const QStringList &filePaths, - QStringList *notAdded = nullptr) override; + const Utils::FilePaths &filePaths, + Utils::FilePaths *notAdded = nullptr) override; ProjectExplorer::RemovedFilesFromProject removeFiles(ProjectExplorer::Node *context, - const QStringList &filePaths, - QStringList *notRemoved = nullptr) override; + const Utils::FilePaths &filePaths, + Utils::FilePaths *notRemoved = nullptr) override; bool deleteFiles(ProjectExplorer::Node *context, - const QStringList &filePaths) override; + const Utils::FilePaths &filePaths) override; bool canRenameFile(ProjectExplorer::Node *context, const Utils::FilePath &oldFilePath, const Utils::FilePath &newFilePath) override; @@ -107,7 +107,7 @@ public: const QStringList &dependencies) override; void triggerParsing() final; - QStringList filesGeneratedFrom(const QString &file) const final; + Utils::FilePaths filesGeneratedFrom(const Utils::FilePath &file) const final; QVariant additionalData(Utils::Id id) const final; void asyncUpdate(); diff --git a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp index 3b02f268816..84ea59531bc 100644 --- a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp +++ b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp @@ -1016,7 +1016,7 @@ static bool addFilesToProject(const QStringList &fileNames, const QString &defau if (node) { ProjectExplorer::FolderNode *containingFolder = node->parentFolderNode(); if (containingFolder) - containingFolder->addFiles(QStringList(filePair.second)); + containingFolder->addFiles({Utils::FilePath::fromString(filePair.second)}); } } else { allSuccessful = false; diff --git a/src/plugins/qmldesigner/documentmanager.cpp b/src/plugins/qmldesigner/documentmanager.cpp index d8a8048aaf8..42f74b5086d 100644 --- a/src/plugins/qmldesigner/documentmanager.cpp +++ b/src/plugins/qmldesigner/documentmanager.cpp @@ -474,7 +474,7 @@ bool DocumentManager::addResourceFileToIsoProject(const QString &resourceFilePro if (!projectNode) return false; - if (!projectNode->addFiles({resourceFilePath})) { + if (!projectNode->addFiles({Utils::FilePath::fromString(resourceFilePath)})) { qCWarning(documentManagerLog) << "Failed to add resource file to" << projectNode->displayName(); return false; } diff --git a/src/plugins/qmljseditor/qmljscomponentfromobjectdef.cpp b/src/plugins/qmljseditor/qmljscomponentfromobjectdef.cpp index 644313488d7..d1bd31d8661 100644 --- a/src/plugins/qmljseditor/qmljscomponentfromobjectdef.cpp +++ b/src/plugins/qmljseditor/qmljscomponentfromobjectdef.cpp @@ -53,6 +53,7 @@ using namespace QmlJS::AST; using QmlJS::SourceLocation; using namespace QmlJSTools; +using namespace Utils; namespace QmlJSEditor { @@ -198,7 +199,7 @@ public: if (oldFileNode) { ProjectExplorer::FolderNode *containingFolder = oldFileNode->parentFolderNode(); if (containingFolder) - containingFolder->addFiles(QStringList(newFileName)); + containingFolder->addFiles({FilePath::fromString(newFileName)}); } } diff --git a/src/plugins/qmlprojectmanager/qmlproject.cpp b/src/plugins/qmlprojectmanager/qmlproject.cpp index bc830a28327..62675f764b1 100644 --- a/src/plugins/qmlprojectmanager/qmlproject.cpp +++ b/src/plugins/qmlprojectmanager/qmlproject.cpp @@ -500,20 +500,20 @@ bool QmlBuildSystem::forceFreeType() const return false; } -bool QmlBuildSystem::addFiles(Node *context, const QStringList &filePaths, QStringList *) +bool QmlBuildSystem::addFiles(Node *context, const FilePaths &filePaths, FilePaths *) { if (!dynamic_cast(context)) return false; - QStringList toAdd; - foreach (const QString &filePath, filePaths) { - if (!m_projectItem.data()->matchesFile(filePath)) + FilePaths toAdd; + for (const FilePath &filePath : filePaths) { + if (!m_projectItem.data()->matchesFile(filePath.toString())) toAdd << filePaths; } return toAdd.isEmpty(); } -bool QmlBuildSystem::deleteFiles(Node *context, const QStringList &filePaths) +bool QmlBuildSystem::deleteFiles(Node *context, const FilePaths &filePaths) { if (dynamic_cast(context)) return true; diff --git a/src/plugins/qmlprojectmanager/qmlproject.h b/src/plugins/qmlprojectmanager/qmlproject.h index 002982e5897..ac620004c4e 100644 --- a/src/plugins/qmlprojectmanager/qmlproject.h +++ b/src/plugins/qmlprojectmanager/qmlproject.h @@ -54,9 +54,9 @@ public: ProjectExplorer::ProjectAction action, const ProjectExplorer::Node *node) const override; bool addFiles(ProjectExplorer::Node *context, - const QStringList &filePaths, QStringList *notAdded = nullptr) override; + const Utils::FilePaths &filePaths, Utils::FilePaths *notAdded = nullptr) override; bool deleteFiles(ProjectExplorer::Node *context, - const QStringList &filePaths) override; + const Utils::FilePaths &filePaths) override; bool renameFile(ProjectExplorer::Node *context, const Utils::FilePath &oldFilePath, const Utils::FilePath &newFilePath) override; diff --git a/src/plugins/resourceeditor/resourceeditorplugin.cpp b/src/plugins/resourceeditor/resourceeditorplugin.cpp index 19fa120d585..924e0f767aa 100644 --- a/src/plugins/resourceeditor/resourceeditorplugin.cpp +++ b/src/plugins/resourceeditor/resourceeditorplugin.cpp @@ -59,6 +59,7 @@ #include using namespace ProjectExplorer; +using namespace Utils; namespace ResourceEditor { namespace Internal { @@ -322,18 +323,18 @@ void ResourceEditorPluginPrivate::removeFileContextMenu() { auto rfn = dynamic_cast(ProjectTree::currentNode()); QTC_ASSERT(rfn, return); - QString path = rfn->filePath().toString(); + FilePath path = rfn->filePath(); FolderNode *parent = rfn->parentFolderNode(); QTC_ASSERT(parent, return); - if (parent->removeFiles(QStringList() << path) != RemovedFilesFromProject::Ok) + if (parent->removeFiles({path}) != RemovedFilesFromProject::Ok) QMessageBox::warning(Core::ICore::dialogParent(), tr("File Removal Failed"), - tr("Removing file %1 from the project failed.").arg(path)); + tr("Removing file %1 from the project failed.").arg(path.toUserOutput())); } void ResourceEditorPluginPrivate::openEditorContextMenu() { - Core::EditorManager::openEditor(ProjectTree::currentNode()->filePath().toString()); + Core::EditorManager::openEditor(ProjectTree::currentNode()->filePath()); } void ResourceEditorPluginPrivate::copyPathContextMenu() diff --git a/src/plugins/resourceeditor/resourcenode.cpp b/src/plugins/resourceeditor/resourcenode.cpp index dd2265693fe..e2d051960f0 100644 --- a/src/plugins/resourceeditor/resourcenode.cpp +++ b/src/plugins/resourceeditor/resourcenode.cpp @@ -133,8 +133,8 @@ static bool hasPriority(const QStringList &files) } static bool addFilesToResource(const FilePath &resourceFile, - const QStringList &filePaths, - QStringList *notAdded, + const FilePaths &filePaths, + FilePaths *notAdded, const QString &prefix, const QString &lang) { @@ -151,12 +151,12 @@ static bool addFilesToResource(const FilePath &resourceFile, if (notAdded) notAdded->clear(); - foreach (const QString &path, filePaths) { - if (file.contains(index, path)) { + for (const FilePath &path : filePaths) { + if (file.contains(index, path.toString())) { if (notAdded) *notAdded << path; } else { - file.addFile(index, path); + file.addFile(index, path.toString()); } } @@ -174,9 +174,9 @@ public: ResourceTopLevelNode *topLevel, ResourceFolderNode *prefixNode); bool supportsAction(ProjectAction, const Node *node) const final; - bool addFiles(const QStringList &filePaths, QStringList *notAdded) final; - RemovedFilesFromProject removeFiles(const QStringList &filePaths, - QStringList *notRemoved) final; + bool addFiles(const Utils::FilePaths &filePaths, Utils::FilePaths *notAdded) final; + RemovedFilesFromProject removeFiles(const Utils::FilePaths &filePaths, + Utils::FilePaths *notRemoved) final; bool canRenameFile(const Utils::FilePath &oldFilePath, const Utils::FilePath &newFilePath) override; bool renameFile(const Utils::FilePath &oldFilePath, const Utils::FilePath &newFilePath) final; @@ -215,13 +215,13 @@ bool SimpleResourceFolderNode::supportsAction(ProjectAction action, const Node * || action == InheritedFromParent; // Do not add to list of projects when adding new file } -bool SimpleResourceFolderNode::addFiles(const QStringList &filePaths, QStringList *notAdded) +bool SimpleResourceFolderNode::addFiles(const FilePaths &filePaths, FilePaths *notAdded) { return addFilesToResource(m_topLevelNode->filePath(), filePaths, notAdded, m_prefix, m_lang); } -RemovedFilesFromProject SimpleResourceFolderNode::removeFiles(const QStringList &filePaths, - QStringList *notRemoved) +RemovedFilesFromProject SimpleResourceFolderNode::removeFiles(const FilePaths &filePaths, + FilePaths *notRemoved) { return prefixNode()->removeFiles(filePaths, notRemoved); } @@ -385,13 +385,13 @@ bool ResourceTopLevelNode::supportsAction(ProjectAction action, const Node *node || action == Rename; } -bool ResourceTopLevelNode::addFiles(const QStringList &filePaths, QStringList *notAdded) +bool ResourceTopLevelNode::addFiles(const FilePaths &filePaths, FilePaths *notAdded) { - return addFilesToResource(filePath(), filePaths, notAdded, QLatin1String("/"), QString()); + return addFilesToResource(filePath(), filePaths, notAdded, "/", QString()); } -RemovedFilesFromProject ResourceTopLevelNode::removeFiles(const QStringList &filePaths, - QStringList *notRemoved) +RemovedFilesFromProject ResourceTopLevelNode::removeFiles(const FilePaths &filePaths, + FilePaths *notRemoved) { return parentFolderNode()->removeFiles(filePaths, notRemoved); } @@ -498,13 +498,13 @@ bool ResourceFolderNode::supportsAction(ProjectAction action, const Node *node) || action == HidePathActions; // hides open terminal etc. } -bool ResourceFolderNode::addFiles(const QStringList &filePaths, QStringList *notAdded) +bool ResourceFolderNode::addFiles(const FilePaths &filePaths, FilePaths *notAdded) { return addFilesToResource(m_topLevelNode->filePath(), filePaths, notAdded, m_prefix, m_lang); } -RemovedFilesFromProject ResourceFolderNode::removeFiles(const QStringList &filePaths, - QStringList *notRemoved) +RemovedFilesFromProject ResourceFolderNode::removeFiles(const FilePaths &filePaths, + FilePaths *notRemoved) { if (notRemoved) *notRemoved = filePaths; @@ -516,10 +516,10 @@ RemovedFilesFromProject ResourceFolderNode::removeFiles(const QStringList &fileP return RemovedFilesFromProject::Error; for (int j = 0; j < file.fileCount(index); ++j) { QString fileName = file.file(index, j); - if (!filePaths.contains(fileName)) + if (!filePaths.contains(FilePath::fromString(fileName))) continue; if (notRemoved) - notRemoved->removeOne(fileName); + notRemoved->removeOne(FilePath::fromString(fileName)); file.removeFile(index, j); --j; } diff --git a/src/plugins/resourceeditor/resourcenode.h b/src/plugins/resourceeditor/resourcenode.h index d73da8db86e..3a140d46b26 100644 --- a/src/plugins/resourceeditor/resourcenode.h +++ b/src/plugins/resourceeditor/resourcenode.h @@ -42,9 +42,9 @@ public: void addInternalNodes(); bool supportsAction(ProjectExplorer::ProjectAction action, const Node *node) const override; - bool addFiles(const QStringList &filePaths, QStringList *notAdded) override; - ProjectExplorer::RemovedFilesFromProject removeFiles(const QStringList &filePaths, - QStringList *notRemoved) override; + bool addFiles(const Utils::FilePaths &filePaths, Utils::FilePaths *notAdded) override; + ProjectExplorer::RemovedFilesFromProject removeFiles(const Utils::FilePaths &filePaths, + Utils::FilePaths *notRemoved) override; bool addPrefix(const QString &prefix, const QString &lang); bool removePrefix(const QString &prefix, const QString &lang); @@ -70,9 +70,9 @@ public: QString displayName() const override; - bool addFiles(const QStringList &filePaths, QStringList *notAdded) override; - ProjectExplorer::RemovedFilesFromProject removeFiles(const QStringList &filePaths, - QStringList *notRemoved) override; + bool addFiles(const Utils::FilePaths &filePaths, Utils::FilePaths *notAdded) override; + ProjectExplorer::RemovedFilesFromProject removeFiles(const Utils::FilePaths &filePaths, + Utils::FilePaths *notRemoved) override; bool canRenameFile(const Utils::FilePath &oldFilePath, const Utils::FilePath &newFilePath) override; bool renameFile(const Utils::FilePath &oldFilePath, const Utils::FilePath &newFilePath) override; diff --git a/src/plugins/valgrind/suppressiondialog.cpp b/src/plugins/valgrind/suppressiondialog.cpp index 21683db3eb4..4f5b427f099 100644 --- a/src/plugins/valgrind/suppressiondialog.cpp +++ b/src/plugins/valgrind/suppressiondialog.cpp @@ -210,7 +210,7 @@ void SuppressionDialog::accept() if (!ProjectExplorer::SessionManager::projectForFile(path)) { for (ProjectExplorer::Project *p : ProjectExplorer::SessionManager::projects()) { if (path.startsWith(p->projectDirectory().toString())) { - p->rootProjectNode()->addFiles({path.toString()}); + p->rootProjectNode()->addFiles({path}); break; } }