WebAssembly: Use the most recent settings access pattern

Includes delaying construction until its first actual use.

Change-Id: Ide0f7a12250c2597f45993d6ef0fb604c974a763
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
hjk
2023-07-13 18:50:58 +02:00
parent 7a4fa635cf
commit 9567f82b75
4 changed files with 33 additions and 26 deletions

View File

@@ -39,7 +39,6 @@ public:
WebAssemblyQtVersionFactory qtVersionFactory;
EmrunRunConfigurationFactory emrunRunConfigurationFactory;
EmrunRunWorkerFactory emrunRunWorkerFactory;
WebAssemblySettings settings;
};
static WebAssemblyPluginPrivate *dd = nullptr;

View File

@@ -10,6 +10,7 @@
#include "webassemblytr.h"
#include <coreplugin/icore.h>
#include <coreplugin/dialogs/ioptionspage.h>
#include <utils/aspects.h>
#include <utils/environment.h>
@@ -24,13 +25,11 @@
using namespace Utils;
namespace WebAssembly {
namespace Internal {
namespace WebAssembly::Internal {
static WebAssemblySettings *theSettings = nullptr;
WebAssemblySettings *WebAssemblySettings::instance()
WebAssemblySettings &settings()
{
static WebAssemblySettings theSettings;
return theSettings;
}
@@ -52,15 +51,9 @@ static QString environmentDisplay(const FilePath &sdkRoot)
WebAssemblySettings::WebAssemblySettings()
{
theSettings = this;
setSettingsGroup("WebAssembly");
setAutoApply(false);
setId(Id(Constants::SETTINGS_ID));
setDisplayName(Tr::tr("WebAssembly"));
setCategory(ProjectExplorer::Constants::DEVICE_SETTINGS_CATEGORY);
registerAspect(&emSdk);
emSdk.setSettingsKey("EmSdk");
emSdk.setExpectedKind(Utils::PathChooser::ExistingDirectory);
emSdk.setDefaultValue(FileUtils::homePath());
@@ -164,5 +157,20 @@ void WebAssemblySettings::updateStatus()
m_qtVersionDisplay->setVisible(WebAssemblyQtVersion::isUnsupportedQtVersionInstalled());
}
} // Internal
} // WebAssembly
// WebAssemblySettingsPage
class WebAssemblySettingsPage final : public Core::IOptionsPage
{
public:
WebAssemblySettingsPage()
{
setId(Id(Constants::SETTINGS_ID));
setDisplayName(Tr::tr("WebAssembly"));
setCategory(ProjectExplorer::Constants::DEVICE_SETTINGS_CATEGORY);
setSettingsProvider([] { return &settings(); });
}
};
const WebAssemblySettingsPage settingsPage;
} // WebAssembly::Internal

View File

@@ -3,23 +3,22 @@
#pragma once
#include <coreplugin/dialogs/ioptionspage.h>
#include <utils/aspects.h>
QT_BEGIN_NAMESPACE
class QTextBrowser;
QT_END_NAMESPACE
namespace WebAssembly {
namespace Internal {
namespace Utils { class InfoLabel; }
class WebAssemblySettings final : public Core::PagedSettings
namespace WebAssembly::Internal {
class WebAssemblySettings final : public Utils::AspectContainer
{
public:
WebAssemblySettings();
static WebAssemblySettings *instance();
Utils::FilePathAspect emSdk;
Utils::FilePathAspect emSdk{this};
private:
QWidget *m_emSdkEnvGroupBox = nullptr;
@@ -30,5 +29,6 @@ private:
void updateStatus();
};
} // namespace Internal
} // namespace WebAssmbly
WebAssemblySettings &settings();
} // WebAssmbly::Internal

View File

@@ -51,7 +51,7 @@ static void addRegisteredMinGWToEnvironment(Environment &env)
void WebAssemblyToolChain::addToEnvironment(Environment &env) const
{
const FilePath emSdk = WebAssemblySettings::instance()->emSdk();
const FilePath emSdk = settings().emSdk();
WebAssemblyEmSdk::addToEnvironment(emSdk, env);
if (env.osType() == OsTypeWindows)
addRegisteredMinGWToEnvironment(env);
@@ -95,7 +95,7 @@ const QVersionNumber &WebAssemblyToolChain::minimumSupportedEmSdkVersion()
static Toolchains doAutoDetect(const ToolchainDetector &detector)
{
const FilePath sdk = WebAssemblySettings::instance()->emSdk();
const FilePath sdk = settings().emSdk();
if (!WebAssemblyEmSdk::isValid(sdk))
return {};