From e4c49b720e36b23e9b3e919d33321c84975cf596 Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 30 Nov 2022 13:59:42 +0100 Subject: [PATCH] Utils: Consolidate the isRelative/isAbsolute implementations Even if we do it wrong in corner cases, we should do it consistently. Change-Id: I68d5a6e55ede889cb44bedb46d0ea545dae7ba2c Reviewed-by: Christian Stenger Reviewed-by: Qt CI Bot Reviewed-by: --- src/libs/utils/filepath.cpp | 4 ++-- src/libs/utils/fileutils.cpp | 21 ------------------- src/libs/utils/fileutils.h | 2 -- .../mesonprojectparser.cpp | 4 +--- src/plugins/mesonprojectmanager/target.h | 2 +- .../jsonwizard/jsonfieldpage.cpp | 2 +- 6 files changed, 5 insertions(+), 30 deletions(-) diff --git a/src/libs/utils/filepath.cpp b/src/libs/utils/filepath.cpp index 79d9bb5d3e2..6b5e213fc55 100644 --- a/src/libs/utils/filepath.cpp +++ b/src/libs/utils/filepath.cpp @@ -625,7 +625,7 @@ FilePath FilePath::withExecutableSuffix() const static bool startsWithWindowsDriveLetterAndSlash(QStringView path) { - return path.size() > 2 && (path[1] == ':' && path[2] == '/' && isWindowsDriveLetter(path[0])); + return path.size() > 2 && path[1] == ':' && path[2] == '/' && isWindowsDriveLetter(path[0]); } int FilePath::rootLength(const QStringView path) @@ -1533,7 +1533,7 @@ bool FilePath::isRelativePath() const const QStringView p = pathView(); if (p.startsWith('/')) return false; - if (p.size() > 1 && isWindowsDriveLetter(p[0]) && p.at(1) == ':') + if (startsWithWindowsDriveLetterAndSlash(p)) return false; if (p.startsWith(u":/")) // QRC return false; diff --git a/src/libs/utils/fileutils.cpp b/src/libs/utils/fileutils.cpp index 6715ff731b6..069bb899691 100644 --- a/src/libs/utils/fileutils.cpp +++ b/src/libs/utils/fileutils.cpp @@ -758,27 +758,6 @@ QString FileUtils::normalizedPathName(const QString &name) #endif } -bool isRelativePathHelper(const QString &path, OsType osType) -{ - if (path.startsWith('/')) - return false; - if (osType == OsType::OsTypeWindows) { - if (path.startsWith('\\')) - return false; - // Unlike QFileInfo, this won't accept a relative path with a drive letter. - // Such paths result in a royal mess anyway ... - if (path.length() >= 3 && path.at(1) == ':' && path.at(0).isLetter() - && (path.at(2) == '/' || path.at(2) == '\\')) - return false; - } - return true; -} - -bool FileUtils::isRelativePath(const QString &path) -{ - return isRelativePathHelper(path, HostOsInfo::hostOs()); -} - FilePath FileUtils::commonPath(const FilePath &oldCommonPath, const FilePath &filePath) { FilePath newCommonPath = oldCommonPath; diff --git a/src/libs/utils/fileutils.h b/src/libs/utils/fileutils.h index f46f83d4c36..f70c3fe5744 100644 --- a/src/libs/utils/fileutils.h +++ b/src/libs/utils/fileutils.h @@ -77,8 +77,6 @@ public: static bool makeWritable(const FilePath &path); static QString normalizedPathName(const QString &name); - static bool isRelativePath(const QString &fileName); - static bool isAbsolutePath(const QString &fileName) { return !isRelativePath(fileName); } static FilePath commonPath(const FilePath &oldCommonPath, const FilePath &fileName); static FilePath commonPath(const FilePaths &paths); static FilePath homePath(); diff --git a/src/plugins/mesonprojectmanager/mesonprojectparser.cpp b/src/plugins/mesonprojectmanager/mesonprojectparser.cpp index 8ba63bc0961..de3d10f52f9 100644 --- a/src/plugins/mesonprojectmanager/mesonprojectparser.cpp +++ b/src/plugins/mesonprojectmanager/mesonprojectparser.cpp @@ -81,9 +81,7 @@ QStringList toAbsolutePath(const Utils::FilePath &refPath, QStringList &pathList std::cend(pathList), std::back_inserter(allAbs), [refPath](const QString &path) { - if (Utils::FileUtils::isAbsolutePath(path)) - return path; - return refPath.pathAppended(path).toString(); + return refPath.resolvePath(path).toString(); }); return allAbs; } diff --git a/src/plugins/mesonprojectmanager/target.h b/src/plugins/mesonprojectmanager/target.h index 8b5b5a4b8c1..c942a27b6b4 100644 --- a/src/plugins/mesonprojectmanager/target.h +++ b/src/plugins/mesonprojectmanager/target.h @@ -63,7 +63,7 @@ struct Target static inline QString fullName(const Utils::FilePath &srcDir, const Target &target) { using namespace Utils; - if (FileUtils::isAbsolutePath(target.fileName.first())) { + if (FilePath::fromString((target.fileName.first())).isAbsolutePath()) { const auto fname = target.fileName.first().split('/').last(); QString definedIn = FilePath::fromString(target.definedIn).absolutePath().toString(); return definedIn.remove(srcDir.toString()) + '/' + fname; diff --git a/src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp b/src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp index 0b67459fafd..5e454ffef1a 100644 --- a/src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp +++ b/src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp @@ -642,7 +642,7 @@ void LineEditField::setupCompletion(FancyLineEdit *lineEdit) && !isReservedName(entry.extraInfo) && !entry.extraInfo.startsWith('~') && !entry.extraInfo.contains("Anonymous:") - && !FileUtils::isAbsolutePath(entry.extraInfo); + && !FilePath::fromString(entry.extraInfo).isAbsolutePath(); const bool isBaseClassCandidate = !isReservedName(entry.displayName) && !entry.displayName.startsWith("Anonymous:"); if (isBaseClassCandidate)