BaseQtVersion: Get rid of MacroExpanderWrapper

Apparently the reasoning for having it, i.e. make
std::unique_ptr<Utils::MacroExpander> "copyable" is not
valid anymore.

This change also fixes the leak of a MacroExpander
returned by QtVersion::createMacroExpander().

Change-Id: I811ecf2eca8e5ce3a1da267da8290ba89df66db6
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Jarek Kobus
2024-03-12 18:19:20 +01:00
parent 3529f3115d
commit 5399eff2a9

View File

@@ -249,19 +249,6 @@ static QSet<Id> versionedIds(const QVersionNumber &version)
version.majorVersion(), version.minorVersion()); version.majorVersion(), version.minorVersion());
} }
// Wrapper to make the std::unique_ptr<Utils::MacroExpander> "copyable":
class MacroExpanderWrapper
{
public:
MacroExpanderWrapper() = default;
MacroExpanderWrapper(const MacroExpanderWrapper &other) { Q_UNUSED(other) }
MacroExpanderWrapper(MacroExpanderWrapper &&other) = default;
MacroExpander *macroExpander(const QtVersion *qtversion) const;
private:
mutable std::unique_ptr<MacroExpander> m_expander;
};
enum HostBinaries { Designer, Linguist, Rcc, Uic, QScxmlc }; enum HostBinaries { Designer, Linguist, Rcc, Uic, QScxmlc };
class QtVersionPrivate class QtVersionPrivate
@@ -329,19 +316,9 @@ public:
FilePath m_qmlRuntimePath; FilePath m_qmlRuntimePath;
FilePath m_qmlplugindumpPath; FilePath m_qmlplugindumpPath;
MacroExpanderWrapper m_expander; std::unique_ptr<MacroExpander> m_expander;
}; };
///////////////
// MacroExpanderWrapper
///////////////
MacroExpander *MacroExpanderWrapper::macroExpander(const QtVersion *qtversion) const
{
if (!m_expander)
m_expander = QtVersion::createMacroExpander([qtversion]() { return qtversion; });
return m_expander.get();
}
} // Internal } // Internal
/////////////// ///////////////
@@ -1489,7 +1466,9 @@ FilePaths QtVersion::qtSoPaths() const
MacroExpander *QtVersion::macroExpander() const MacroExpander *QtVersion::macroExpander() const
{ {
return d->m_expander.macroExpander(this); if (!d->m_expander)
d->m_expander = QtVersion::createMacroExpander([this] { return this; });
return d->m_expander.get();
} }
std::unique_ptr<MacroExpander> std::unique_ptr<MacroExpander>