diff options
author | Renato Araujo Oliveira Filho <renato.filho@openbossa.org> | 2011-02-04 19:08:43 -0300 |
---|---|---|
committer | Hugo Parente Lima <hugo.pl@gmail.com> | 2012-03-08 16:13:53 -0300 |
commit | cc58fbc15509bd8ed746a7ef3cb3da4cd7055894 (patch) | |
tree | 462175755f66ecd9a41824299305cee0df5774cf | |
parent | e78bd2efe4063d522effaaf6a6dc737fe8da8b79 (diff) |
Fixed signal initialization for types with namespace and types defined
by typedef.
Fixes bug #657.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
Marcelo Lira <marcelo.lira@openbossa.org>
-rw-r--r-- | generator/cppgenerator.cpp | 37 |
1 files changed, 28 insertions, 9 deletions
diff --git a/generator/cppgenerator.cpp b/generator/cppgenerator.cpp index 3d33fae13..a2b9aadd7 100644 --- a/generator/cppgenerator.cpp +++ b/generator/cppgenerator.cpp @@ -249,12 +249,12 @@ void CppGenerator::generateClass(QTextStream &s, const AbstractMetaClass *metaCl s << "#include \"" << getModuleHeaderFileName() << '"' << endl << endl; QString headerfile = fileNameForClass(metaClass); - headerfile.replace("cpp", "h"); + headerfile.replace(".cpp", ".h"); s << "#include \"" << headerfile << '"' << endl; foreach (AbstractMetaClass* innerClass, metaClass->innerClasses()) { if (shouldGenerate(innerClass)) { QString headerfile = fileNameForClass(innerClass); - headerfile.replace("cpp", "h"); + headerfile.replace(".cpp", ".h"); s << "#include \"" << headerfile << '"' << endl; } } @@ -3134,7 +3134,8 @@ void CppGenerator::writeSignalInitialization(QTextStream& s, const AbstractMetaC AbstractMetaArgument *a = cppSignal->arguments().at(i); AbstractMetaType* type = a->type(); - QString cppSignature = SBK_NORMALIZED_TYPE(qPrintable(type->cppSignature())); + + QString cppSignature = SBK_NORMALIZED_TYPE(qPrintable(type->cppSignature())); QString originalSignature = SBK_NORMALIZED_TYPE(qPrintable(type->originalTypeDescription())); if (!a->defaultValueExpression().isEmpty()) { @@ -3144,17 +3145,35 @@ void CppGenerator::writeSignalInitialization(QTextStream& s, const AbstractMetaC signatures[cppSignal->name()].append(sig); } - if ((cppSignature != originalSignature) && !knowTypes.contains(originalSignature)) { - knowTypes << originalSignature; - s << INDENT << "Shiboken::TypeResolver::createValueTypeResolver<" - << translateType(type, metaClass, ExcludeReference | ExcludeConst) << " >" - << "(\"" << skipNamespace(originalSignature) << "\"); // " << type->cppSignature() << "\n"; + QString replacedTypeName = cppSignal->typeReplaced(i+1); + QString signalTypeName; + + if (replacedTypeName.isEmpty()) + signalTypeName = skipNamespace(type->originalTypeDescription()); + else + signalTypeName = replacedTypeName; + + if ((!replacedTypeName.isEmpty() || //replace type on typessystem + (cppSignature != originalSignature)) && //used a typedef value + !knowTypes.contains(signalTypeName)) { + + knowTypes << signalTypeName; + QString originalType = translateType(type, metaClass, ExcludeReference | ExcludeConst); + bool isObjectType = originalType.endsWith('*'); + if (isObjectType) + originalType = originalType.remove(originalType.size()-1, 1); + + s << INDENT << "Shiboken::TypeResolver::" << (isObjectType ? "createObjectTypeResolver<" : "createValueTypeResolver<") + << originalType << " >" + << "(\"" << skipNamespace(signalTypeName) << "\");" << endl; } - signature += SBK_NORMALIZED_TYPE(skipNamespace(type->originalTypeDescription()).toAscii()); + + signature += SBK_NORMALIZED_TYPE(signalTypeName.toAscii()); } } else { signature = "void"; } + signatures[cppSignal->name()].append(SBK_NORMALIZED_SIGNATURE(signature.toAscii())); } } |