summaryrefslogtreecommitdiff
path: root/codemaker
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2013-04-15 10:38:01 +0200
committerStephan Bergmann <sbergman@redhat.com>2013-04-15 10:38:33 +0200
commit4b73d334a9c5d8ae1fe16b2cc04100b9f333595a (patch)
tree122120f8cde247c59e4db89ec8aadcaf7f006a9d /codemaker
parent645f327ec4009eddac512958bc022a8d668a762c (diff)
Further adapt CppuType::dumpCppuGetType to using unoidl/ instead of registry/
Change-Id: Ib46d7b8934f63d88ea953707fa1fbfb51c524efd
Diffstat (limited to 'codemaker')
-rw-r--r--codemaker/source/codemaker/typemanager.cxx1
-rwxr-xr-xcodemaker/source/cppumaker/cpputype.cxx46
2 files changed, 23 insertions, 24 deletions
diff --git a/codemaker/source/codemaker/typemanager.cxx b/codemaker/source/codemaker/typemanager.cxx
index e07b55370108..5116aba904d4 100644
--- a/codemaker/source/codemaker/typemanager.cxx
+++ b/codemaker/source/codemaker/typemanager.cxx
@@ -492,6 +492,7 @@ codemaker::UnoType::Sort TypeManager::decompose(
case codemaker::UnoType::SORT_ANY:
case codemaker::UnoType::SORT_ENUM_TYPE:
case codemaker::UnoType::SORT_PLAIN_STRUCT_TYPE:
+ case codemaker::UnoType::SORT_EXCEPTION_TYPE:
case codemaker::UnoType::SORT_INTERFACE_TYPE:
if (nucleus != 0) {
*nucleus = n;
diff --git a/codemaker/source/cppumaker/cpputype.cxx b/codemaker/source/cppumaker/cpputype.cxx
index 446e1f94b91b..7540c02ed57c 100755
--- a/codemaker/source/cppumaker/cpputype.cxx
+++ b/codemaker/source/cppumaker/cpputype.cxx
@@ -162,7 +162,8 @@ public:
OUString getTypeClass(OUString const & name, bool cStyle = false);
- void dumpCppuGetType(FileStream & out, OUString const & name);
+ void dumpCppuGetType(
+ FileStream & out, OUString const & name, OUString const * ownName = 0);
sal_uInt32 getInheritedMemberCount();
@@ -799,8 +800,15 @@ void CppuType::dumpType(
}
}
-void CppuType::dumpCppuGetType(FileStream & out, OUString const & name) {
- switch (m_typeMgr->getSort(resolveOuterTypedefs(name))) {
+void CppuType::dumpCppuGetType(
+ FileStream & out, OUString const & name, OUString const * ownName)
+{
+ //TODO: What are these calls good for?
+ OUString nucleus;
+ sal_Int32 rank;
+ codemaker::UnoType::Sort sort = m_typeMgr->decompose(
+ name, true, &nucleus, &rank, 0, 0);
+ switch (rank == 0 ? sort : codemaker::UnoType::SORT_SEQUENCE_TYPE) {
case codemaker::UnoType::SORT_VOID:
case codemaker::UnoType::SORT_BOOLEAN:
case codemaker::UnoType::SORT_BYTE:
@@ -823,10 +831,16 @@ void CppuType::dumpCppuGetType(FileStream & out, OUString const & name) {
case codemaker::UnoType::SORT_INSTANTIATED_POLYMORPHIC_STRUCT_TYPE:
case codemaker::UnoType::SORT_EXCEPTION_TYPE:
case codemaker::UnoType::SORT_INTERFACE_TYPE:
- out << indent() << "::cppu::UnoType< ";
- dumpType(out, name, false, false, false, true);
- out << " >::get();\n";
+ // Take care of recursion like struct S { sequence<S> x; }:
+ if (ownName == 0 || nucleus != *ownName) {
+ out << indent() << "::cppu::UnoType< ";
+ dumpType(out, name, false, false, false, true);
+ out << " >::get();\n";
+ }
break;
+ case codemaker::UnoType::SORT_TYPEDEF:
+ assert(false); // this cannot happen
+ // fall through
default:
throw CannotDumpException(
"unexpected entity \"" + name
@@ -1984,15 +1998,7 @@ void PlainStructType::dumpComprehensiveGetCppuType(FileStream & out) {
i->type, static_cast< sal_uInt32 >(types.size()))).
second)
{
- if ((codemaker::UnoType::getSort(u2b(i->type))
- == codemaker::UnoType::SORT_COMPLEX)
- && b2u(codemaker::UnoType::decompose(u2b(i->type))) != name_)
- // take care of recursion like struct S { sequence<S> x; };
- {
- out << indent() << "::cppu::UnoType< ";
- dumpType(out, i->type, false, false, false, true);
- out << " >::get();\n";
- }
+ dumpCppuGetType(out, i->type, &name_);
// For typedefs, use the resolved type name, as there will be no
// information available about the typedef itself at runtime (the
// above getCppuType call will make available information about the
@@ -2488,15 +2494,7 @@ void PolyStructType::dumpComprehensiveGetCppuType(FileStream & out) {
i->type, static_cast< sal_uInt32 >(types.size()))).
second)
{
- if ((codemaker::UnoType::getSort(u2b(i->type))
- == codemaker::UnoType::SORT_COMPLEX)
- && b2u(codemaker::UnoType::decompose(u2b(i->type))) != name_)
- // take care of recursion like struct S { sequence<S> x; };
- {
- out << indent() << "::cppu::UnoType< ";
- dumpType(out, i->type, false, false, false, true);
- out << " >::get();\n";
- }
+ dumpCppuGetType(out, i->type, &name_);
// For typedefs, use the resolved type name, as there will be no
// information available about the typedef itself at runtime (the
// above getCppuType call will make available information about the