aboutsummaryrefslogtreecommitdiffstats
path: root/headergenerator.cpp
diff options
context:
space:
mode:
authorMarcelo Lira <marcelo.lira@openbossa.org>2010-06-02 13:33:59 -0300
committerMarcelo Lira <marcelo.lira@openbossa.org>2010-06-03 08:46:38 -0300
commite2738233c5bffb1fd0ad0f44c1a930c366329faa (patch)
tree5c40c7a0b498297da24cb69d0cab971fd571271b /headergenerator.cpp
parent7bc6f1512b1febc026d81917f33b1ea90d23fe24 (diff)
Added support for protected fields when not using the "protected hack".
Tests were also added.
Diffstat (limited to 'headergenerator.cpp')
-rw-r--r--headergenerator.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/headergenerator.cpp b/headergenerator.cpp
index f43fc2cde..d696b92cb 100644
--- a/headergenerator.cpp
+++ b/headergenerator.cpp
@@ -45,6 +45,17 @@ void HeaderGenerator::writeCopyCtor(QTextStream& s, const AbstractMetaClass* met
s << INDENT << "}" << endl << endl;
}
+void HeaderGenerator::writeProtectedFieldAccessors(QTextStream& s, const AbstractMetaField* field) const
+{
+ QString fieldType = field->type()->cppSignature();
+ QString fieldName = field->enclosingClass()->qualifiedCppName() + "::" + field->name();
+
+ s << INDENT << "inline " << fieldType << ' ' << protectedFieldGetterName(field) << "()";
+ s << " { return " << fieldName << "; }" << endl;
+ s << INDENT << "inline void " << protectedFieldSetterName(field) << '(' << fieldType << " value)";
+ s << " { " << fieldName << " = value; }" << endl;
+}
+
void HeaderGenerator::generateClass(QTextStream& s, const AbstractMetaClass* metaClass)
{
ReportHandler::debugSparse("Generating header for " + metaClass->fullName());
@@ -90,6 +101,16 @@ void HeaderGenerator::generateClass(QTextStream& s, const AbstractMetaClass* met
writeFunction(s, func);
}
+#ifdef AVOID_PROTECTED_HACK
+ if (metaClass->hasProtectedFields()) {
+ foreach (AbstractMetaField* field, metaClass->fields()) {
+ if (!field->isProtected())
+ continue;
+ writeProtectedFieldAccessors(s, field);
+ }
+ }
+#endif
+
//destructor
#ifdef AVOID_PROTECTED_HACK
if (!metaClass->hasPrivateDestructor())