diff --git a/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp b/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp index 1761ec7887ea9cb0d4b6e3218efe507f6e91e8c2..fa43bf0ca33903b96862d7063f57d392da0e0864 100644 --- a/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp @@ -118,7 +118,7 @@ public: class QmakePriFileEvalResult { public: - QStringList folders; + QSet<FileName> folders; QSet<FileName> recursiveEnumerateFiles; QMap<FileType, QSet<FileName>> foundFiles; }; @@ -229,7 +229,7 @@ bool QmakePriFile::buildsFile(const FileName &fn) const QmakePriFile::~QmakePriFile() { - watchFolders(QSet<QString>()); + watchFolders( {} ); qDeleteAll(m_children); } @@ -310,26 +310,25 @@ void QmakePriFile::extractInstalls( auto *result = proToResult.value(source.proFile); if (!result) result = fallback; - result->folders << source.fileName; + result->folders.insert(FileName::fromString(source.fileName)); } } } void QmakePriFile::processValues(QmakePriFileEvalResult &result) { - result.folders.removeDuplicates(); - // Remove non existing items and non folders - QStringList::iterator it = result.folders.begin(); + auto it = result.folders.begin(); while (it != result.folders.end()) { - QFileInfo fi(*it); + QFileInfo fi((*it).toFileInfo()); if (fi.exists()) { if (fi.isDir()) { + result.recursiveEnumerateFiles += recursiveEnumerate((*it).toString()); // keep directories ++it; } else { // move files directly to recursiveEnumerateFiles - result.recursiveEnumerateFiles << FileName::fromString(*it); + result.recursiveEnumerateFiles += (*it); it = result.folders.erase(it); } } else { @@ -338,9 +337,6 @@ void QmakePriFile::processValues(QmakePriFileEvalResult &result) } } - foreach (const QString &folder, result.folders) - result.recursiveEnumerateFiles += recursiveEnumerate(folder); - for (int i = 0; i < static_cast<int>(FileType::FileTypeSize); ++i) { FileType type = static_cast<FileType>(i); QSet<FileName> &foundFiles = result.foundFiles[type]; @@ -354,7 +350,7 @@ void QmakePriFile::processValues(QmakePriFileEvalResult &result) void QmakePriFile::update(const Internal::QmakePriFileEvalResult &result) { m_recursiveEnumerateFiles = result.recursiveEnumerateFiles; - watchFolders(result.folders.toSet()); + watchFolders(result.folders); for (int i = 0; i < static_cast<int>(FileType::FileTypeSize); ++i) { const FileType type = static_cast<FileType>(i); @@ -362,20 +358,20 @@ void QmakePriFile::update(const Internal::QmakePriFileEvalResult &result) } } -void QmakePriFile::watchFolders(const QSet<QString> &folders) +void QmakePriFile::watchFolders(const QSet<FileName> &folders) { + const QSet<QString> folderStrings = + Utils::transform(folders, [] (const FileName &f) { return f.toString(); }); QSet<QString> toUnwatch = m_watchedFolders; - toUnwatch.subtract(folders); + toUnwatch.subtract(folderStrings); - QSet<QString> toWatch = folders; + QSet<QString> toWatch = folderStrings; toWatch.subtract(m_watchedFolders); - if (!toUnwatch.isEmpty()) - m_project->unwatchFolders(toUnwatch.toList(), this); - if (!toWatch.isEmpty()) - m_project->watchFolders(toWatch.toList(), this); + m_project->unwatchFolders(toUnwatch.toList(), this); + m_project->watchFolders(toWatch.toList(), this); - m_watchedFolders = folders; + m_watchedFolders = folderStrings; } bool QmakePriFile::knowsFile(const FileName &filePath) const diff --git a/src/plugins/qmakeprojectmanager/qmakeparsernodes.h b/src/plugins/qmakeprojectmanager/qmakeparsernodes.h index 527e0dbc68f6b82392b6be41d200feaf17789589..228a92876ebf55d5d39cfd12e5ee9e1565fb66ea 100644 --- a/src/plugins/qmakeprojectmanager/qmakeparsernodes.h +++ b/src/plugins/qmakeprojectmanager/qmakeparsernodes.h @@ -209,7 +209,7 @@ private: Internal::QmakePriFileEvalResult *fallback, const InstallsList &installList); static void processValues(Internal::QmakePriFileEvalResult &result); - void watchFolders(const QSet<QString> &folders); + void watchFolders(const QSet<Utils::FileName> &folders); QmakeProject *m_project = nullptr; QmakeProFile *m_qmakeProFile = nullptr;