diff --git a/src/plugins/beautifier/beautifierplugin.cpp b/src/plugins/beautifier/beautifierplugin.cpp index d1505e74987..ade354b62c1 100644 --- a/src/plugins/beautifier/beautifierplugin.cpp +++ b/src/plugins/beautifier/beautifierplugin.cpp @@ -76,12 +76,6 @@ public: ArtisticStyle artisticStyleBeautifier; ClangFormat clangFormatBeautifier; Uncrustify uncrustifyBeautifier; - - BeautifierTool *m_tools[3] { - &artisticStyleBeautifier, - &uncrustifyBeautifier, - &clangFormatBeautifier - }; }; static BeautifierPluginPrivate *dd = nullptr; @@ -108,7 +102,7 @@ ExtensionSystem::IPlugin::ShutdownFlag BeautifierPlugin::aboutToShutdown() BeautifierPluginPrivate::BeautifierPluginPrivate() { - for (BeautifierTool *tool : m_tools) + for (BeautifierTool *tool : BeautifierTool::allTools()) generalSettings.autoFormatTools.addOption(tool->id()); updateActions(); @@ -122,7 +116,7 @@ BeautifierPluginPrivate::BeautifierPluginPrivate() void BeautifierPluginPrivate::updateActions(Core::IEditor *editor) { - for (BeautifierTool *tool : m_tools) + for (BeautifierTool *tool : BeautifierTool::allTools()) tool->updateActions(editor); } @@ -149,9 +143,10 @@ void BeautifierPluginPrivate::autoFormatOnSave(Core::IDocument *document) // Find tool to use by id and format file! const QString id = generalSettings.autoFormatTools.stringValue(); - auto tool = std::find_if(std::begin(m_tools), std::end(m_tools), + const QList &tools = BeautifierTool::allTools(); + auto tool = std::find_if(std::begin(tools), std::end(tools), [&id](const BeautifierTool *t){return t->id() == id;}); - if (tool != std::end(m_tools)) { + if (tool != std::end(tools)) { if (!(*tool)->isApplicable(document)) return; const TextEditor::Command command = (*tool)->command(); diff --git a/src/plugins/beautifier/beautifiertool.cpp b/src/plugins/beautifier/beautifiertool.cpp index a8be6a48377..6f5c4731c60 100644 --- a/src/plugins/beautifier/beautifiertool.cpp +++ b/src/plugins/beautifier/beautifiertool.cpp @@ -25,6 +25,22 @@ using namespace Utils; namespace Beautifier::Internal { +static QList &theTools() +{ + static QList tools; + return tools; +} + +BeautifierTool::BeautifierTool() +{ + theTools().append(this); +} + +const QList &BeautifierTool::allTools() +{ + return theTools(); +} + void BeautifierTool::showError(const QString &error) { Core::MessageManager::writeFlashing(Tr::tr("Error in Beautifier: %1").arg(error.trimmed())); diff --git a/src/plugins/beautifier/beautifiertool.h b/src/plugins/beautifier/beautifiertool.h index 5b2c130a7d0..f8c99aef55b 100644 --- a/src/plugins/beautifier/beautifiertool.h +++ b/src/plugins/beautifier/beautifiertool.h @@ -29,7 +29,9 @@ namespace Beautifier::Internal { class BeautifierTool : public QObject { public: - BeautifierTool() = default; + BeautifierTool(); + + static const QList &allTools(); virtual QString id() const = 0; virtual void updateActions(Core::IEditor *editor) = 0;