aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs
diff options
context:
space:
mode:
authorDavid Schulz <david.schulz@qt.io>2021-05-18 09:47:07 +0200
committerDavid Schulz <david.schulz@qt.io>2021-05-18 14:30:53 +0000
commita13aef759edbf99b0a5eb3680432b947721573c9 (patch)
treed4f0a5db95ad769641fb648731ec9b29f6cc5c49 /src/libs
parent013bf6a743b1de229c029f7108ecd55442670599 (diff)
Utils: filepathify fileutils
Change-Id: Ic9048369f64d793f5f567cdb0c715488fb5a4ff6 Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Diffstat (limited to 'src/libs')
-rw-r--r--src/libs/advanceddockingsystem/dockmanager.cpp2
-rw-r--r--src/libs/qmljs/qmljsplugindumper.cpp2
-rw-r--r--src/libs/utils/fileutils.cpp52
-rw-r--r--src/libs/utils/fileutils.h20
-rw-r--r--src/libs/utils/json.cpp2
-rw-r--r--src/libs/utils/persistentsettings.cpp2
-rw-r--r--src/libs/utils/textfileformat.cpp6
7 files changed, 46 insertions, 40 deletions
diff --git a/src/libs/advanceddockingsystem/dockmanager.cpp b/src/libs/advanceddockingsystem/dockmanager.cpp
index 7ae018b912..bbb4a3b615 100644
--- a/src/libs/advanceddockingsystem/dockmanager.cpp
+++ b/src/libs/advanceddockingsystem/dockmanager.cpp
@@ -961,7 +961,7 @@ namespace ADS
QDir tmp;
tmp.mkpath(fileName.toFileInfo().path());
- Utils::FileSaver fileSaver(fileName.toString(), QIODevice::Text);
+ Utils::FileSaver fileSaver(fileName, QIODevice::Text);
if (!fileSaver.hasError())
fileSaver.write(data);
diff --git a/src/libs/qmljs/qmljsplugindumper.cpp b/src/libs/qmljs/qmljsplugindumper.cpp
index 730743f890..a98f7550d6 100644
--- a/src/libs/qmljs/qmljsplugindumper.cpp
+++ b/src/libs/qmljs/qmljsplugindumper.cpp
@@ -370,7 +370,7 @@ QFuture<PluginDumper::QmlTypeDescription> PluginDumper::loadQmlTypeDescription(c
for (const QString &p: paths) {
Utils::FileReader reader;
- if (!reader.fetch(p, QFile::Text)) {
+ if (!reader.fetch(Utils::FilePath::fromString(p), QFile::Text)) {
result.errors += reader.errorString();
continue;
}
diff --git a/src/libs/utils/fileutils.cpp b/src/libs/utils/fileutils.cpp
index 1551daddd4..6f028feeed 100644
--- a/src/libs/utils/fileutils.cpp
+++ b/src/libs/utils/fileutils.cpp
@@ -450,35 +450,41 @@ QByteArray FileUtils::fileId(const FilePath &fileName)
QByteArray FileReader::fetchQrc(const QString &fileName)
{
- QTC_ASSERT(fileName.startsWith(QLatin1Char(':')), return QByteArray());
+ QTC_ASSERT(fileName.startsWith(':'), return QByteArray());
QFile file(fileName);
bool ok = file.open(QIODevice::ReadOnly);
QTC_ASSERT(ok, qWarning() << fileName << "not there!"; return QByteArray());
return file.readAll();
}
-bool FileReader::fetch(const QString &fileName, QIODevice::OpenMode mode)
+bool FileReader::fetch(const FilePath &filePath, QIODevice::OpenMode mode)
{
QTC_ASSERT(!(mode & ~(QIODevice::ReadOnly | QIODevice::Text)), return false);
- QFile file(fileName);
+ if (filePath.needsDevice()) {
+ // TODO: add error handling to FilePath::fileContents
+ m_data = filePath.fileContents();
+ return true;
+ }
+
+ QFile file(filePath.toString());
if (!file.open(QIODevice::ReadOnly | mode)) {
m_errorString = tr("Cannot open %1 for reading: %2").arg(
- QDir::toNativeSeparators(fileName), file.errorString());
+ filePath.toUserOutput(), file.errorString());
return false;
}
m_data = file.readAll();
if (file.error() != QFile::NoError) {
m_errorString = tr("Cannot read %1: %2").arg(
- QDir::toNativeSeparators(fileName), file.errorString());
+ filePath.toUserOutput(), file.errorString());
return false;
}
return true;
}
-bool FileReader::fetch(const QString &fileName, QIODevice::OpenMode mode, QString *errorString)
+bool FileReader::fetch(const FilePath &filePath, QIODevice::OpenMode mode, QString *errorString)
{
- if (fetch(fileName, mode))
+ if (fetch(filePath, mode))
return true;
if (errorString)
*errorString = m_errorString;
@@ -486,9 +492,9 @@ bool FileReader::fetch(const QString &fileName, QIODevice::OpenMode mode, QStrin
}
#ifdef QT_GUI_LIB
-bool FileReader::fetch(const QString &fileName, QIODevice::OpenMode mode, QWidget *parent)
+bool FileReader::fetch(const FilePath &filePath, QIODevice::OpenMode mode, QWidget *parent)
{
- if (fetch(fileName, mode))
+ if (fetch(filePath, mode))
return true;
if (parent)
QMessageBox::critical(parent, tr("File Error"), m_errorString);
@@ -545,11 +551,10 @@ bool FileSaverBase::setResult(bool ok)
{
if (!ok && !m_hasError) {
if (!m_file->errorString().isEmpty()) {
- m_errorString = tr("Cannot write file %1: %2").arg(
- QDir::toNativeSeparators(m_fileName), m_file->errorString());
+ m_errorString = tr("Cannot write file %1: %2")
+ .arg(m_filePath.toUserOutput(), m_file->errorString());
} else {
- m_errorString = tr("Cannot write file %1. Disk full?").arg(
- QDir::toNativeSeparators(m_fileName));
+ m_errorString = tr("Cannot write file %1. Disk full?").arg(m_filePath.toUserOutput());
}
m_hasError = true;
}
@@ -573,9 +578,9 @@ bool FileSaverBase::setResult(QXmlStreamWriter *stream)
}
-FileSaver::FileSaver(const QString &filename, QIODevice::OpenMode mode)
+FileSaver::FileSaver(const FilePath &filePath, QIODevice::OpenMode mode)
{
- m_fileName = filename;
+ m_filePath = filePath;
// Workaround an assert in Qt -- and provide a useful error message, too:
if (HostOsInfo::isWindowsHost()) {
// Taken from: https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx
@@ -583,24 +588,25 @@ FileSaver::FileSaver(const QString &filename, QIODevice::OpenMode mode)
= {"CON", "PRN", "AUX", "NUL",
"COM1", "COM2", "COM3", "COM4", "COM5", "COM6", "COM7", "COM8", "COM9",
"LPT1", "LPT2", "LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8", "LPT9"};
- const QString fn = QFileInfo(filename).baseName().toUpper();
+ const QString fn = filePath.toFileInfo().baseName().toUpper();
if (reservedNames.contains(fn)) {
- m_errorString = tr("%1: Is a reserved filename on Windows. Cannot save.").arg(filename);
+ m_errorString = tr("%1: Is a reserved filename on Windows. Cannot save.")
+ .arg(filePath.toString());
m_hasError = true;
return;
}
}
if (mode & (QIODevice::ReadOnly | QIODevice::Append)) {
- m_file.reset(new QFile{filename});
+ m_file.reset(new QFile{filePath.toString()});
m_isSafe = false;
} else {
- m_file.reset(new SaveFile{filename});
+ m_file.reset(new SaveFile{filePath.toString()});
m_isSafe = true;
}
if (!m_file->open(QIODevice::WriteOnly | mode)) {
- QString err = QFile::exists(filename) ?
+ QString err = filePath.exists() ?
tr("Cannot overwrite file %1: %2") : tr("Cannot create file %1: %2");
- m_errorString = err.arg(QDir::toNativeSeparators(filename), m_file->errorString());
+ m_errorString = err.arg(filePath.toUserOutput(), m_file->errorString());
m_hasError = true;
}
}
@@ -634,14 +640,14 @@ TempFileSaver::TempFileSaver(const QString &templ)
tempFile->errorString());
m_hasError = true;
}
- m_fileName = tempFile->fileName();
+ m_filePath = FilePath::fromString(tempFile->fileName());
}
TempFileSaver::~TempFileSaver()
{
m_file.reset();
if (m_autoRemove)
- QFile::remove(m_fileName);
+ QFile::remove(m_filePath.toString());
}
/*! \class Utils::FilePath
diff --git a/src/libs/utils/fileutils.h b/src/libs/utils/fileutils.h
index 77e52eedaa..2240c81e44 100644
--- a/src/libs/utils/fileutils.h
+++ b/src/libs/utils/fileutils.h
@@ -281,14 +281,14 @@ class QTCREATOR_UTILS_EXPORT FileReader
Q_DECLARE_TR_FUNCTIONS(Utils::FileUtils) // sic!
public:
static QByteArray fetchQrc(const QString &fileName); // Only for internal resources
- bool fetch(const QString &fileName, QIODevice::OpenMode mode = QIODevice::NotOpen); // QIODevice::ReadOnly is implicit
- bool fetch(const QString &fileName, QIODevice::OpenMode mode, QString *errorString);
- bool fetch(const QString &fileName, QString *errorString)
- { return fetch(fileName, QIODevice::NotOpen, errorString); }
+ bool fetch(const FilePath &filePath, QIODevice::OpenMode mode = QIODevice::NotOpen); // QIODevice::ReadOnly is implicit
+ bool fetch(const FilePath &filePath, QIODevice::OpenMode mode, QString *errorString);
+ bool fetch(const FilePath &filePath, QString *errorString)
+ { return fetch(filePath, QIODevice::NotOpen, errorString); }
#ifdef QT_GUI_LIB
- bool fetch(const QString &fileName, QIODevice::OpenMode mode, QWidget *parent);
- bool fetch(const QString &fileName, QWidget *parent)
- { return fetch(fileName, QIODevice::NotOpen, parent); }
+ bool fetch(const FilePath &filePath, QIODevice::OpenMode mode, QWidget *parent);
+ bool fetch(const FilePath &filePath, QWidget *parent)
+ { return fetch(filePath, QIODevice::NotOpen, parent); }
#endif // QT_GUI_LIB
const QByteArray &data() const { return m_data; }
const QString &errorString() const { return m_errorString; }
@@ -304,7 +304,7 @@ public:
FileSaverBase();
virtual ~FileSaverBase();
- QString fileName() const { return m_fileName; }
+ FilePath filePath() const { return m_filePath; }
bool hasError() const { return m_hasError; }
QString errorString() const { return m_errorString; }
virtual bool finalize();
@@ -324,7 +324,7 @@ public:
protected:
std::unique_ptr<QFile> m_file;
- QString m_fileName;
+ FilePath m_filePath;
QString m_errorString;
bool m_hasError = false;
@@ -337,7 +337,7 @@ class QTCREATOR_UTILS_EXPORT FileSaver : public FileSaverBase
Q_DECLARE_TR_FUNCTIONS(Utils::FileUtils) // sic!
public:
// QIODevice::WriteOnly is implicit
- explicit FileSaver(const QString &filename, QIODevice::OpenMode mode = QIODevice::NotOpen);
+ explicit FileSaver(const FilePath &filePath, QIODevice::OpenMode mode = QIODevice::NotOpen);
bool finalize() override;
using FileSaverBase::finalize;
diff --git a/src/libs/utils/json.cpp b/src/libs/utils/json.cpp
index ff2b5a5948..2d8a8ae75f 100644
--- a/src/libs/utils/json.cpp
+++ b/src/libs/utils/json.cpp
@@ -734,7 +734,7 @@ JsonSchema *JsonSchemaManager::schemaByName(const QString &baseName) const
JsonSchema *JsonSchemaManager::parseSchema(const QString &schemaFileName) const
{
FileReader reader;
- if (reader.fetch(schemaFileName, QIODevice::Text)) {
+ if (reader.fetch(FilePath::fromString(schemaFileName), QIODevice::Text)) {
const QString &contents = QString::fromUtf8(reader.data());
JsonValue *json = JsonValue::create(contents, &m_pool);
if (json && json->kind() == JsonValue::Object)
diff --git a/src/libs/utils/persistentsettings.cpp b/src/libs/utils/persistentsettings.cpp
index 6b5946ecf8..eda01977de 100644
--- a/src/libs/utils/persistentsettings.cpp
+++ b/src/libs/utils/persistentsettings.cpp
@@ -465,7 +465,7 @@ bool PersistentSettingsWriter::write(const QVariantMap &data, QString *errorStri
{
QDir tmp;
tmp.mkpath(m_fileName.toFileInfo().path());
- FileSaver saver(m_fileName.toString(), QIODevice::Text);
+ FileSaver saver(m_fileName, QIODevice::Text);
if (!saver.hasError()) {
const Context ctx;
QXmlStreamWriter w(saver.file());
diff --git a/src/libs/utils/textfileformat.cpp b/src/libs/utils/textfileformat.cpp
index 150ac8198b..c06bf5dc38 100644
--- a/src/libs/utils/textfileformat.cpp
+++ b/src/libs/utils/textfileformat.cpp
@@ -208,7 +208,7 @@ TextFileFormat::ReadResult readTextFile(const FilePath &filePath, const QTextCod
QByteArray data;
try {
FileReader reader;
- if (!reader.fetch(filePath.toString(), errorString))
+ if (!reader.fetch(filePath, errorString))
return TextFileFormat::ReadIOError;
data = reader.data();
} catch (const std::bad_alloc &) {
@@ -274,7 +274,7 @@ TextFileFormat::ReadResult TextFileFormat::readFileUTF8(const FilePath &filePath
QByteArray data;
try {
FileReader reader;
- if (!reader.fetch(filePath.toString(), errorString))
+ if (!reader.fetch(filePath, errorString))
return TextFileFormat::ReadIOError;
data = reader.data();
} catch (const std::bad_alloc &) {
@@ -313,7 +313,7 @@ bool TextFileFormat::writeFile(const FilePath &filePath, QString plainText, QStr
if (lineTerminationMode == CRLFLineTerminator)
plainText.replace(QLatin1Char('\n'), QLatin1String("\r\n"));
- FileSaver saver(filePath.toString(), fileMode);
+ FileSaver saver(filePath, fileMode);
if (!saver.hasError()) {
if (hasUtf8Bom && codec->name() == "UTF-8")
saver.write("\xef\xbb\xbf", 3);