From d46739294d04c72af1e434e414e1c012d7e78a42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A9ven=20Car?= Date: Tue, 4 Feb 2020 16:03:52 +0100 Subject: Add an isImmutable to know if a property is immutable Summary: Add a utility function isImmutable to access immutability quickly. Generated classes uses them internally to avoid code redundance. Sample: ``` /** Set blocked-by-default */ void setBlockedByDefault( bool v ) { if (v != mBlockedByDefault && !isBlockedByDefaultImmutable() ) { mBlockedByDefault = v; Q_EMIT blockedByDefaultChanged(); } } /** Is blocked-by-default Immutable */ bool isBlockedByDefaultImmutable() { return isImmutable( QStringLiteral( "blockedByDefault" ) ); } ``` ``` /** Set org.kde.ActivityManager.ResourceScoringEnabled */ void setResourceScoringEnabled( bool v ) { if (!isResourceScoringEnabledImmutable() ) mResourceScoringEnabled = v; } /** Is org.kde.ActivityManager.ResourceScoringEnabled Immutable */ bool isResourceScoringEnabledImmutable() { return isImmutable( QStringLiteral( "resourceScoringEnabled" ) ); } ``` Reviewers: ervin, #frameworks, dfaure Reviewed By: ervin Subscribers: dfaure, tcanabrava, kde-frameworks-devel Tags: #frameworks Differential Revision: https://phabricator.kde.org/D26368 --- src/kconfig_compiler/KConfigHeaderGenerator.cpp | 44 ++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) (limited to 'src/kconfig_compiler/KConfigHeaderGenerator.cpp') diff --git a/src/kconfig_compiler/KConfigHeaderGenerator.cpp b/src/kconfig_compiler/KConfigHeaderGenerator.cpp index 5b828ec8..f6c39b6a 100644 --- a/src/kconfig_compiler/KConfigHeaderGenerator.cpp +++ b/src/kconfig_compiler/KConfigHeaderGenerator.cpp @@ -79,7 +79,9 @@ void KConfigHeaderGenerator::doClassDefinition() createSetters(entry); createProperties(entry, returnType); + createImmutableProperty(entry); createGetters(entry, returnType); + createImmutableGetters(entry); createDefaultValueMember(entry); createItemAcessors(entry, returnType); } @@ -172,7 +174,7 @@ void KConfigHeaderGenerator::implementChoiceEnums(const CfgEntry *entry, const C } QStringList values; - for (const auto choice : qAsConst(chlist)) { + for (const auto &choice : qAsConst(chlist)) { values.append(choices.prefix + choice.name); } @@ -415,6 +417,16 @@ void KConfigHeaderGenerator::createProperties(const CfgEntry *entry, const QStri stream() << ")\n"; } +void KConfigHeaderGenerator::createImmutableProperty(const CfgEntry *entry) +{ + if (!cfg().generateProperties) { + return; + } + stream() << whitespace(); + stream() << "Q_PROPERTY(bool " << immutableFunction(entry->name); + stream() << " CONSTANT)\n"; +} + void KConfigHeaderGenerator::createSetters(const CfgEntry *entry) { // Manipulator @@ -484,8 +496,38 @@ void KConfigHeaderGenerator::createGetters(const CfgEntry *entry, const QString } } +void KConfigHeaderGenerator::createImmutableGetters(const CfgEntry *entry) +{ + stream() << whitespace() << "/**\n"; + stream() << whitespace() << " Is " << entry->label << " Immutable\n"; + stream() << whitespace() << "*/\n"; + // Immutable + if (cfg().staticAccessors) { + stream() << whitespace() << "static\n"; + } + stream() << whitespace() << ""; + stream() << "bool " << immutableFunction(entry->name) << "("; + if (!entry->param.isEmpty()) { + stream() << " " << cppType(entry->paramType)<< " i "; + } + stream() << ")" << Const(); + // function body inline only if not using dpointer + // for BC mode + if (!cfg().dpointer) { + stream() << '\n'; + startScope(); + memberImmutableBody(entry, cfg().globalEnums); + endScope(); + stream() << '\n'; + } else { + stream() << ";\n\n"; + } +} + void KConfigHeaderGenerator::createItemAcessors(const CfgEntry *entry, const QString &returnType) { + Q_UNUSED(returnType) + // Item accessor if (!cfg().itemAccessors) { return; -- cgit v1.2.1