aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs
diff options
context:
space:
mode:
authorMarcus Tillmanns <marcus.tillmanns@qt.io>2024-05-07 08:33:02 +0200
committerMarcus Tillmanns <marcus.tillmanns@qt.io>2024-05-08 10:29:59 +0000
commit657ce51467d74462b030f0a89f74c91b5b36c662 (patch)
tree30d9992faa3f1f8346f7c5ea7c02f27b6416f7d8 /src/libs
parentaad2f6ecac5f7d7522bec7e509a2ce984a5161af (diff)
ExtensionSystem: FilePath'ify
Change IPlugin::fileName() and IPlugin::location to use FilePath instead of QString. Change-Id: If473ab1e258951735f93221cbd62c505f0727eb2 Reviewed-by: hjk <hjk@qt.io>
Diffstat (limited to 'src/libs')
-rw-r--r--src/libs/extensionsystem/plugindetailsview.cpp2
-rw-r--r--src/libs/extensionsystem/pluginmanager.cpp32
-rw-r--r--src/libs/extensionsystem/pluginmanager.h5
-rw-r--r--src/libs/extensionsystem/pluginmanager_p.h4
-rw-r--r--src/libs/extensionsystem/pluginspec.cpp26
-rw-r--r--src/libs/extensionsystem/pluginspec.h14
-rw-r--r--src/libs/extensionsystem/pluginview.cpp2
7 files changed, 45 insertions, 40 deletions
diff --git a/src/libs/extensionsystem/plugindetailsview.cpp b/src/libs/extensionsystem/plugindetailsview.cpp
index 291b385219..35e646bad7 100644
--- a/src/libs/extensionsystem/plugindetailsview.cpp
+++ b/src/libs/extensionsystem/plugindetailsview.cpp
@@ -146,7 +146,7 @@ void PluginDetailsView::update(PluginSpec *spec)
d->vendor->setText(spec->vendor());
d->component->setText(spec->category().isEmpty() ? Tr::tr("None") : spec->category());
d->url->setText(QString::fromLatin1("<a href=\"%1\">%1</a>").arg(spec->url()));
- d->location->setText(QDir::toNativeSeparators(spec->filePath()));
+ d->location->setText(spec->filePath().toUserOutput());
const QString pattern = spec->platformSpecification().pattern();
const QString platform = pattern.isEmpty() ? Tr::tr("All") : pattern;
const QString platformString = Tr::tr("%1 (current: \"%2\")")
diff --git a/src/libs/extensionsystem/pluginmanager.cpp b/src/libs/extensionsystem/pluginmanager.cpp
index 85dbf62983..718a66a727 100644
--- a/src/libs/extensionsystem/pluginmanager.cpp
+++ b/src/libs/extensionsystem/pluginmanager.cpp
@@ -443,7 +443,7 @@ FutureSynchronizer *PluginManager::futureSynchronizer()
\sa setPluginPaths()
*/
-QStringList PluginManager::pluginPaths()
+FilePaths PluginManager::pluginPaths()
{
return d->pluginPaths;
}
@@ -455,7 +455,7 @@ QStringList PluginManager::pluginPaths()
\sa pluginPaths()
\sa loadPlugins()
*/
-void PluginManager::setPluginPaths(const QStringList &paths)
+void PluginManager::setPluginPaths(const FilePaths &paths)
{
d->setPluginPaths(paths);
}
@@ -1732,7 +1732,7 @@ void PluginManagerPrivate::loadPlugin(PluginSpec *spec, PluginSpec::State destSt
/*!
\internal
*/
-void PluginManagerPrivate::setPluginPaths(const QStringList &paths)
+void PluginManagerPrivate::setPluginPaths(const FilePaths &paths)
{
qCDebug(pluginLog) << "Plugin search paths:" << paths;
qCDebug(pluginLog) << "Required IID:" << pluginIID;
@@ -1741,17 +1741,18 @@ void PluginManagerPrivate::setPluginPaths(const QStringList &paths)
readPluginPaths();
}
-static const QStringList pluginFiles(const QStringList &pluginPaths)
+static const FilePaths pluginFiles(const FilePaths &pluginPaths)
{
- QStringList pluginFiles;
- QStringList searchPaths = pluginPaths;
+ FilePaths pluginFiles;
+ FilePaths searchPaths = pluginPaths;
while (!searchPaths.isEmpty()) {
- const QDir dir(searchPaths.takeFirst());
- const QFileInfoList files = dir.entryInfoList(QDir::Files | QDir::NoSymLinks);
- const QStringList absoluteFilePaths = Utils::transform(files, &QFileInfo::absoluteFilePath);
- pluginFiles += Utils::filtered(absoluteFilePaths, [](const QString &path) { return QLibrary::isLibrary(path); });
- const QFileInfoList dirs = dir.entryInfoList(QDir::Dirs|QDir::NoDotAndDotDot);
- searchPaths += Utils::transform(dirs, &QFileInfo::absoluteFilePath);
+ const FilePath dir = searchPaths.takeFirst().absoluteFilePath();
+ const FilePaths files = dir.dirEntries(QDir::Files | QDir::NoSymLinks);
+ pluginFiles += Utils::filtered(files, [](const FilePath &path) {
+ return QLibrary::isLibrary(path.toFSPathString());
+ });
+ const FilePaths dirs = dir.dirEntries(QDir::Dirs | QDir::NoDotAndDotDot);
+ searchPaths += dirs;
}
return pluginFiles;
}
@@ -1793,11 +1794,12 @@ void PluginManagerPrivate::readPluginPaths()
QVector<PluginSpec *> newSpecs;
// from the file system
- for (const QString &pluginFile : pluginFiles(pluginPaths)) {
+ for (const FilePath &pluginFile : pluginFiles(pluginPaths)) {
expected_str<PluginSpec *> spec = readCppPluginSpec(pluginFile);
if (!spec) {
- qCInfo(pluginLog).noquote()
- << QString("Ignoring plugin \"%1\" because: %2").arg(pluginFile).arg(spec.error());
+ qCInfo(pluginLog).noquote() << QString("Ignoring plugin \"%1\" because: %2")
+ .arg(pluginFile.toUserOutput())
+ .arg(spec.error());
continue;
}
newSpecs.append(*spec);
diff --git a/src/libs/extensionsystem/pluginmanager.h b/src/libs/extensionsystem/pluginmanager.h
index b35df535b7..c5045e7187 100644
--- a/src/libs/extensionsystem/pluginmanager.h
+++ b/src/libs/extensionsystem/pluginmanager.h
@@ -6,6 +6,7 @@
#include "extensionsystem_global.h"
#include <aggregation/aggregate.h>
+#include <utils/filepath.h>
#include <utils/qtcsettings.h>
#include <QObject>
@@ -69,8 +70,8 @@ public:
static QVector<PluginSpec *> loadQueue();
static void loadPlugins();
static void loadPluginsAtRuntime(const QSet<PluginSpec *> &plugins);
- static QStringList pluginPaths();
- static void setPluginPaths(const QStringList &paths);
+ static Utils::FilePaths pluginPaths();
+ static void setPluginPaths(const Utils::FilePaths &paths);
static QString pluginIID();
static void setPluginIID(const QString &iid);
static const QVector<PluginSpec *> plugins();
diff --git a/src/libs/extensionsystem/pluginmanager_p.h b/src/libs/extensionsystem/pluginmanager_p.h
index 074400bd6d..a761614223 100644
--- a/src/libs/extensionsystem/pluginmanager_p.h
+++ b/src/libs/extensionsystem/pluginmanager_p.h
@@ -53,7 +53,7 @@ public:
void addPlugins(const QVector<PluginSpec *> &specs);
void shutdown();
- void setPluginPaths(const QStringList &paths);
+ void setPluginPaths(const Utils::FilePaths &paths);
const QVector<ExtensionSystem::PluginSpec *> loadQueue();
void loadPlugin(PluginSpec *spec, PluginSpec::State destState);
void resolveDependencies();
@@ -91,7 +91,7 @@ public:
QHash<QString, QVector<PluginSpec *>> pluginCategories;
QVector<PluginSpec *> pluginSpecs;
std::vector<TestSpec> testSpecs;
- QStringList pluginPaths;
+ Utils::FilePaths pluginPaths;
QString pluginIID;
QVector<QObject *> allObjects; // ### make this a QVector<QPointer<QObject> > > ?
QStringList defaultDisabledPlugins; // Plugins/Ignored from install settings
diff --git a/src/libs/extensionsystem/pluginspec.cpp b/src/libs/extensionsystem/pluginspec.cpp
index 3e77732328..2d492c385f 100644
--- a/src/libs/extensionsystem/pluginspec.cpp
+++ b/src/libs/extensionsystem/pluginspec.cpp
@@ -201,8 +201,8 @@ public:
QVector<ExtensionSystem::PluginDependency> dependencies;
PluginSpec::PluginArgumentDescriptions argumentDescriptions;
- QString location;
- QString filePath;
+ FilePath location;
+ FilePath filePath;
bool experimental{false};
bool deprecated{false};
@@ -491,7 +491,7 @@ PluginSpec::PluginArgumentDescriptions PluginSpec::argumentDescriptions() const
/*!
Returns the absolute path to the directory containing the plugin.
*/
-QString PluginSpec::location() const
+FilePath PluginSpec::location() const
{
return d->location;
}
@@ -499,7 +499,7 @@ QString PluginSpec::location() const
/*!
Returns the absolute path to the plugin.
*/
-QString PluginSpec::filePath() const
+FilePath PluginSpec::filePath() const
{
return d->filePath;
}
@@ -692,19 +692,20 @@ namespace {
\internal
Returns false if the file does not represent a Qt Creator plugin.
*/
-expected_str<PluginSpec *> readCppPluginSpec(const QString &fileName)
+expected_str<PluginSpec *> readCppPluginSpec(const FilePath &fileName)
{
auto spec = new CppPluginSpec;
- QFileInfo fileInfo(fileName);
- spec->setLocation(fileInfo.absolutePath());
- spec->setFilePath(fileInfo.absoluteFilePath());
+ const FilePath absPath = fileName.absoluteFilePath();
+
+ spec->setLocation(absPath.parentDir());
+ spec->setFilePath(absPath);
spec->d->loader.emplace();
if (Utils::HostOsInfo::isMacHost())
spec->d->loader->setLoadHints(QLibrary::ExportExternalSymbolsHint);
- spec->d->loader->setFileName(fileInfo.absoluteFilePath());
+ spec->d->loader->setFileName(absPath.toFSPathString());
if (spec->d->loader->fileName().isEmpty())
return make_unexpected(::ExtensionSystem::Tr::tr("Cannot open file"));
@@ -1110,12 +1111,12 @@ void PluginSpec::setState(State state)
d->state = state;
}
-void PluginSpec::setLocation(const QString &location)
+void PluginSpec::setLocation(const FilePath &location)
{
d->location = location;
}
-void PluginSpec::setFilePath(const QString &filePath)
+void PluginSpec::setFilePath(const FilePath &filePath)
{
d->filePath = filePath;
}
@@ -1142,8 +1143,7 @@ bool CppPluginSpec::loadLibrary()
return false;
}
if (d->loader && !d->loader->load()) {
- setError(QDir::toNativeSeparators(filePath()) + QString::fromLatin1(": ")
- + d->loader->errorString());
+ setError(filePath().toUserOutput() + QString::fromLatin1(": ") + d->loader->errorString());
return false;
}
auto *pluginObject = d->loader ? qobject_cast<IPlugin *>(d->loader->instance())
diff --git a/src/libs/extensionsystem/pluginspec.h b/src/libs/extensionsystem/pluginspec.h
index becb70f579..7d45fe82c1 100644
--- a/src/libs/extensionsystem/pluginspec.h
+++ b/src/libs/extensionsystem/pluginspec.h
@@ -8,6 +8,7 @@
#include "iplugin.h"
#include <utils/expected.h>
+#include <utils/filepath.h>
#include <QHash>
#include <QStaticPlugin>
@@ -120,8 +121,8 @@ public:
virtual QJsonObject metaData() const;
virtual PerformanceData &performanceData() const;
virtual PluginArgumentDescriptions argumentDescriptions() const;
- virtual QString location() const;
- virtual QString filePath() const;
+ virtual Utils::FilePath location() const;
+ virtual Utils::FilePath filePath() const;
virtual QStringList arguments() const;
virtual void setArguments(const QStringList &arguments);
virtual void addArgument(const QString &argument);
@@ -160,8 +161,8 @@ protected:
protected:
virtual void setState(State state);
- virtual void setLocation(const QString &location);
- virtual void setFilePath(const QString &filePath);
+ virtual void setLocation(const Utils::FilePath &location);
+ virtual void setFilePath(const Utils::FilePath &filePath);
virtual Utils::expected_str<void> readMetaData(const QJsonObject &metaData);
Utils::expected_str<void> reportError(const QString &error);
@@ -169,14 +170,15 @@ private:
std::unique_ptr<Internal::PluginSpecPrivate> d;
};
-EXTENSIONSYSTEM_EXPORT Utils::expected_str<PluginSpec *> readCppPluginSpec(const QString &filePath);
+EXTENSIONSYSTEM_EXPORT Utils::expected_str<PluginSpec *> readCppPluginSpec(
+ const Utils::FilePath &filePath);
EXTENSIONSYSTEM_EXPORT Utils::expected_str<PluginSpec *> readCppPluginSpec(
const QStaticPlugin &plugin);
class EXTENSIONSYSTEM_TEST_EXPORT CppPluginSpec : public PluginSpec
{
friend EXTENSIONSYSTEM_EXPORT Utils::expected_str<PluginSpec *> readCppPluginSpec(
- const QString &filePath);
+ const Utils::FilePath &filePath);
friend EXTENSIONSYSTEM_EXPORT Utils::expected_str<PluginSpec *> readCppPluginSpec(
const QStaticPlugin &plugin);
diff --git a/src/libs/extensionsystem/pluginview.cpp b/src/libs/extensionsystem/pluginview.cpp
index 07fa11c7a9..902f90aca4 100644
--- a/src/libs/extensionsystem/pluginview.cpp
+++ b/src/libs/extensionsystem/pluginview.cpp
@@ -119,7 +119,7 @@ public:
toolTip = Tr::tr("Path: %1\nPlugin is disabled by command line argument.");
else
toolTip = Tr::tr("Path: %1");
- return toolTip.arg(QDir::toNativeSeparators(m_spec->filePath()));
+ return toolTip.arg(m_spec->filePath().toUserOutput());
}
if (role == Qt::DecorationRole) {
bool ok = !m_spec->hasError();