From 81bc72c8a03c77bf3a773c5034642e2952764fa5 Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Mon, 6 May 2024 11:54:53 +0200 Subject: [PATCH] Lua: Cleanup Moves LuaEngine creation into initialize() Removes uneccessary PluginLoader class Change-Id: I9eddbe4d0cba7ba3c7c1ce825ec18845de7d4654 Reviewed-by: hjk --- src/plugins/lua/CMakeLists.txt | 2 - src/plugins/lua/lua.qbs | 2 - src/plugins/lua/luaplugin.cpp | 52 +++++++++++++++++------ src/plugins/lua/luapluginloader.cpp | 64 ----------------------------- src/plugins/lua/luapluginloader.h | 30 -------------- 5 files changed, 40 insertions(+), 110 deletions(-) delete mode 100644 src/plugins/lua/luapluginloader.cpp delete mode 100644 src/plugins/lua/luapluginloader.h diff --git a/src/plugins/lua/CMakeLists.txt b/src/plugins/lua/CMakeLists.txt index 5d83f9d92ee..9663ef50813 100644 --- a/src/plugins/lua/CMakeLists.txt +++ b/src/plugins/lua/CMakeLists.txt @@ -18,8 +18,6 @@ add_qtc_plugin(Lua luaengine.cpp luaengine.h luaplugin.cpp - luapluginloader.cpp - luapluginloader.h luapluginspec.cpp luapluginspec.h luaqttypes.cpp diff --git a/src/plugins/lua/lua.qbs b/src/plugins/lua/lua.qbs index dbdf8b485af..e7f1507ba76 100644 --- a/src/plugins/lua/lua.qbs +++ b/src/plugins/lua/lua.qbs @@ -15,8 +15,6 @@ QtcPlugin { "luaengine.cpp", "luaengine.h", "luaplugin.cpp", - "luapluginloader.cpp", - "luapluginloader.h", "luapluginspec.cpp", "luapluginspec.h", "luaqttypes.cpp", diff --git a/src/plugins/lua/luaplugin.cpp b/src/plugins/lua/luaplugin.cpp index cca0f6dd340..68b151c2fd9 100644 --- a/src/plugins/lua/luaplugin.cpp +++ b/src/plugins/lua/luaplugin.cpp @@ -2,19 +2,20 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 #include "luaengine.h" -#include "luapluginloader.h" +#include "luapluginspec.h" -#include -#include +#include #include #include #include -#include #include -#include + +using namespace Core; +using namespace Utils; +using namespace ExtensionSystem; namespace Lua::Internal { @@ -30,7 +31,7 @@ void addQtModule(); void addCoreModule(); void addHookModule(); -class LuaPlugin : public ExtensionSystem::IPlugin +class LuaPlugin : public IPlugin { Q_OBJECT Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QtCreatorPlugin" FILE "Lua.json") @@ -39,13 +40,13 @@ private: std::unique_ptr m_luaEngine; public: - LuaPlugin() - : m_luaEngine(new LuaEngine()) - {} + LuaPlugin() {} ~LuaPlugin() override = default; void initialize() final { + m_luaEngine.reset(new LuaEngine()); + addAsyncModule(); addFetchModule(); addActionModule(); @@ -61,12 +62,39 @@ public: bool delayedInitialize() final { - LuaPluginLoader::instance().scan( - Utils::transform(ExtensionSystem::PluginManager::pluginPaths(), - [](const QString &path) -> QString { return path + "/lua-plugins/"; })); + scanForPlugins(transform(PluginManager::pluginPaths(), [](const QString &path) -> FilePath { + return FilePath::fromUserInput(path) / "lua-plugins"; + })); return true; } + + void scanForPlugins(const FilePaths &paths) + { + QSet plugins; + for (const FilePath &path : paths) { + const FilePaths folders = path.dirEntries( + FileFilter({}, QDir::Dirs | QDir::NoDotAndDotDot)); + + for (const FilePath &folder : folders) { + const FilePath script = folder / (folder.baseName() + ".lua"); + const expected_str result = m_luaEngine->loadPlugin(script); + + if (!result) { + qWarning() << "Failed to load plugin" << script << ":" << result.error(); + MessageManager::writeFlashing(tr("Failed to load plugin %1: %2") + .arg(script.toUserOutput()) + .arg(result.error())); + continue; + } + + plugins.insert(*result); + } + } + + PluginManager::addPlugins({plugins.begin(), plugins.end()}); + PluginManager::loadPluginsAtRuntime(plugins); + } }; } // namespace Lua::Internal diff --git a/src/plugins/lua/luapluginloader.cpp b/src/plugins/lua/luapluginloader.cpp deleted file mode 100644 index 4395599a1a7..00000000000 --- a/src/plugins/lua/luapluginloader.cpp +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright (C) 2024 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 - -#include "luapluginloader.h" - -#include "luaengine.h" -#include "luapluginspec.h" - -#include - -#include -#include - -#include -#include - -namespace Lua { - -class LuaPluginLoaderPrivate -{ -public: -}; - -LuaPluginLoader::LuaPluginLoader() - : d(std::make_unique()) -{} -LuaPluginLoader::~LuaPluginLoader() = default; - -LuaPluginLoader &LuaPluginLoader::instance() -{ - static LuaPluginLoader luaPluginLoader; - return luaPluginLoader; -} - -void LuaPluginLoader::scan(const QStringList &paths) -{ - QVector plugins; - for (const auto &path : paths) { - const auto folders = Utils::FilePath::fromUserInput(path).dirEntries( - Utils::FileFilter({}, QDir::Dirs | QDir::NoDotAndDotDot)); - - for (const auto &folder : folders) { - const auto script = folder / (folder.baseName() + ".lua"); - const Utils::expected_str result = LuaEngine::instance().loadPlugin( - script); - - if (!result) { - qWarning() << "Failed to load plugin" << script << ":" << result.error(); - Core::MessageManager::writeFlashing(tr("Failed to load plugin %1: %2") - .arg(script.toUserOutput()) - .arg(result.error())); - continue; - } - - plugins.push_back(*result); - } - } - - ExtensionSystem::PluginManager::addPlugins(plugins); - ExtensionSystem::PluginManager::loadPluginsAtRuntime( - QSet(plugins.begin(), plugins.end())); -} - -} // namespace Lua diff --git a/src/plugins/lua/luapluginloader.h b/src/plugins/lua/luapluginloader.h deleted file mode 100644 index d4bb5f41791..00000000000 --- a/src/plugins/lua/luapluginloader.h +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) 2024 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 - -#pragma once - -#include -#include - -#include - -namespace Lua { -class LuaPluginLoaderPrivate; -class LuaPluginLoader : public QObject -{ -public: - LuaPluginLoader(); - ~LuaPluginLoader(); - - static LuaPluginLoader &instance(); - - void scan(const QStringList &paths); - -signals: - void pluginLoaded(const QString &name); - -private: - std::unique_ptr d; -}; - -} // namespace Lua