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 <christian.stenger@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
hjk
2022-11-30 13:59:42 +01:00
parent a09e87b3d3
commit e4c49b720e
6 changed files with 5 additions and 30 deletions

View File

@@ -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;

View File

@@ -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;

View File

@@ -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();

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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)