From cd4e6504dfbdface00037625f0cedda511e6d839 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Gr=C3=A4=C3=9Flin?= Date: Wed, 16 Nov 2016 14:59:28 +0100 Subject: Generate an instance with KSharedConfig::Ptr for singleton and arg Summary: In case a kcfg with arg="true" was used and singleton the static instance method only accepted a QString config name. This made it impossible to combine a singleton config with an already existing and open KSharedConfig::Ptr. With this change an overloaded instance method is added which takes a KSharedConfig::Ptr as argument. The private ctor, though, only takes a KSharedConfig::Ptr and the instance method taking a QString argument uses KSharedConfig::openConfig on the config file name. This provides full API compatibility and at the same time allows to use KSharedConfig in addition to the arg name based variant. Test Plan: kconfigcompiler tests still pass and a config with singleton and arg="true" generates the code as I need it Reviewers: #frameworks Differential Revision: https://phabricator.kde.org/D3386 --- src/kconfig_compiler/kconfig_compiler.cpp | 33 ++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) (limited to 'src/kconfig_compiler/kconfig_compiler.cpp') diff --git a/src/kconfig_compiler/kconfig_compiler.cpp b/src/kconfig_compiler/kconfig_compiler.cpp index 121bea4f..99ecff7d 100644 --- a/src/kconfig_compiler/kconfig_compiler.cpp +++ b/src/kconfig_compiler/kconfig_compiler.cpp @@ -1893,6 +1893,7 @@ int main(int argc, char **argv) h << " static " << cfg.className << " *self();" << endl; if (cfgFileNameArg) { h << " static void instance(const QString& cfgfilename);" << endl; + h << " static void instance(KSharedConfig::Ptr config);" << endl; } } @@ -2115,7 +2116,7 @@ int main(int argc, char **argv) if (cfg.singleton) { h << " " << cfg.className << "("; if (cfgFileNameArg) { - h << "const QString& arg"; + h << "KSharedConfig::Ptr config"; } h << ");" << endl; h << " friend class " << cfg.className << "Helper;" << endl << endl; @@ -2320,15 +2321,25 @@ int main(int argc, char **argv) cpp << "}" << endl << endl; if (cfgFileNameArg) { - cpp << "void " << cfg.className << "::instance(const QString& cfgfilename)" << endl; - cpp << "{" << endl; - cpp << " if (s_global" << cfg.className << "()->q) {" << endl; - cpp << " qDebug() << \"" << cfg.className << "::instance called after the first use - ignoring\";" << endl; - cpp << " return;" << endl; - cpp << " }" << endl; - cpp << " new " << cfg.className << "(cfgfilename);" << endl; - cpp << " s_global" << cfg.className << "()->q->read();" << endl; - cpp << "}" << endl << endl; + auto instance = [&cfg, &cpp] (const QString &type, const QString arg, bool wrap) { + cpp << "void " << cfg.className << "::instance(" << type << " " << arg << ")" << endl; + cpp << "{" << endl; + cpp << " if (s_global" << cfg.className << "()->q) {" << endl; + cpp << " qDebug() << \"" << cfg.className << "::instance called after the first use - ignoring\";" << endl; + cpp << " return;" << endl; + cpp << " }" << endl; + cpp << " new " << cfg.className << "("; + if (wrap) { + cpp << "KSharedConfig::openConfig(" << arg << ")"; + } else { + cpp << arg; + } + cpp << ");" << endl; + cpp << " s_global" << cfg.className << "()->q->read();" << endl; + cpp << "}" << endl << endl; + }; + instance(QStringLiteral("const QString&"), QStringLiteral("cfgfilename"), true); + instance(QStringLiteral("KSharedConfig::Ptr"), QStringLiteral("config"), false); } } @@ -2339,7 +2350,7 @@ int main(int argc, char **argv) // Constructor cpp << cfg.className << "::" << cfg.className << "( "; if (cfgFileNameArg) { - if (!cfg.singleton && ! cfg.forceStringFilename) { + if (! cfg.forceStringFilename) { cpp << " KSharedConfig::Ptr config"; } else { cpp << " const QString& config"; -- cgit v1.2.1