aboutsummaryrefslogtreecommitdiff
path: root/src/kconfig_compiler/KConfigHeaderGenerator.cpp
diff options
context:
space:
mode:
authorMéven Car <meven.car@enioka.com>2020-02-04 16:03:52 +0100
committerMéven Car <meven29@gmail.com>2020-02-04 16:09:29 +0100
commitd46739294d04c72af1e434e414e1c012d7e78a42 (patch)
tree5a227069a6a1a110cc26b788ff8a3bd99005735e /src/kconfig_compiler/KConfigHeaderGenerator.cpp
parentfd0e26ddb49122fa55bdc8f35e189c832cc138ad (diff)
downloadkconfig-d46739294d04c72af1e434e414e1c012d7e78a42.tar.gz
kconfig-d46739294d04c72af1e434e414e1c012d7e78a42.tar.bz2
Add an is<PropertyName>Immutable to know if a property is immutable
Summary: Add a utility function is<Parameter>Immutable 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
Diffstat (limited to 'src/kconfig_compiler/KConfigHeaderGenerator.cpp')
-rw-r--r--src/kconfig_compiler/KConfigHeaderGenerator.cpp44
1 files changed, 43 insertions, 1 deletions
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;