[Libreoffice-commits] core.git: 2 commits - codemaker/inc codemaker/source stoc/source unodevtools/source

Stephan Bergmann sbergman at redhat.com
Tue Apr 16 05:16:17 PDT 2013


 codemaker/inc/codemaker/codemaker.hxx                 |    6 
 codemaker/inc/codemaker/commoncpp.hxx                 |    3 
 codemaker/source/codemaker/codemaker.cxx              |   87 -
 codemaker/source/commoncpp/commoncpp.cxx              |   32 
 stoc/source/registry_tdprovider/methoddescription.cxx |    2 
 unodevtools/source/skeletonmaker/cppcompskeleton.cxx  |  119 --
 unodevtools/source/skeletonmaker/cpptypemaker.cxx     |  945 +++++++++---------
 unodevtools/source/skeletonmaker/javacompskeleton.cxx |   87 -
 unodevtools/source/skeletonmaker/javatypemaker.cxx    |  930 +++++++++--------
 unodevtools/source/skeletonmaker/skeletoncommon.cxx   |  614 +++++------
 unodevtools/source/skeletonmaker/skeletoncommon.hxx   |   58 -
 unodevtools/source/skeletonmaker/skeletoncpp.hxx      |   76 -
 unodevtools/source/skeletonmaker/skeletonjava.hxx     |   63 -
 unodevtools/source/skeletonmaker/skeletonmaker.cxx    |   25 
 14 files changed, 1460 insertions(+), 1587 deletions(-)

New commits:
commit e46564a0a6a74da90785a1b910d33e2b5bfdcfd9
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Tue Apr 16 13:52:02 2013 +0200

    rhbz#867808 Do not throw RuntimeException by pointer
    
    Change-Id: I22b7d3d642e7ee0488d6b726a331d328065bbee7

diff --git a/stoc/source/registry_tdprovider/methoddescription.cxx b/stoc/source/registry_tdprovider/methoddescription.cxx
index b51b3dd..80e0cc5 100644
--- a/stoc/source/registry_tdprovider/methoddescription.cxx
+++ b/stoc/source/registry_tdprovider/methoddescription.cxx
@@ -90,7 +90,7 @@ css::uno::Reference< css::reflection::XTypeDescription > Parameter::getType()
             m_manager->getByHierarchicalName(m_typeName),
             css::uno::UNO_QUERY_THROW);
     } catch (const css::container::NoSuchElementException & e) {
-        throw new css::uno::RuntimeException(
+        throw css::uno::RuntimeException(
             (OUString(
                     "com.sun.star.container.NoSuchElementException: ")
              + e.Message),
commit 30a7c6ba6b95ade8e59f9e28108470165dc9a175
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Tue Apr 16 13:48:49 2013 +0200

    WIP: Experimental new binary type.rdb format
    
    Make uno-skeletonmaker work on top of unoidl/ instead of registry/.
    
    These changes have only been tested so far rather lightly.  Basic
    uno-skeletonmaker still works, but more thorough testing of the various input
    flags is needed.
    
    Change-Id: Id7f3aee863a10f8c649325db2d6f34a4057f70ff

diff --git a/codemaker/inc/codemaker/codemaker.hxx b/codemaker/inc/codemaker/codemaker.hxx
index a1c3a14..c952c36 100644
--- a/codemaker/inc/codemaker/codemaker.hxx
+++ b/codemaker/inc/codemaker/codemaker.hxx
@@ -38,12 +38,6 @@ namespace codemaker {
 
 rtl::OString convertString(rtl::OUString const & string);
 
-codemaker::UnoType::Sort decomposeAndResolve(
-    rtl::Reference< TypeManager > const & manager, rtl::OString const & type,
-    bool resolveTypedefs, bool allowVoid, bool allowExtraEntities,
-    RTTypeClass * typeClass, rtl::OString * name, sal_Int32 * rank,
-    std::vector< rtl::OString > * arguments);
-
 }
 
 #endif // INCLUDED_CODEMAKER_CODEMAKER_HXX
diff --git a/codemaker/inc/codemaker/commoncpp.hxx b/codemaker/inc/codemaker/commoncpp.hxx
index 3cfd713..9eafb91 100644
--- a/codemaker/inc/codemaker/commoncpp.hxx
+++ b/codemaker/inc/codemaker/commoncpp.hxx
@@ -36,8 +36,7 @@ namespace codemaker { namespace cpp {
 rtl::OString scopedCppName(rtl::OString const & type, bool ns_alias=true);
 
 rtl::OString translateUnoToCppType(
-    codemaker::UnoType::Sort sort, RTTypeClass typeClass,
-    rtl::OString const & nucleus, bool shortname);
+    codemaker::UnoType::Sort sort, rtl::OUString const & nucleus);
 
 enum IdentifierTranslationMode {
     ITM_GLOBAL,
diff --git a/codemaker/source/codemaker/codemaker.cxx b/codemaker/source/codemaker/codemaker.cxx
index 2ed28e1..c9f7e0b 100644
--- a/codemaker/source/codemaker/codemaker.cxx
+++ b/codemaker/source/codemaker/codemaker.cxx
@@ -62,93 +62,6 @@ rtl::OString convertString(rtl::OUString const & string) {
     return s;
 }
 
-codemaker::UnoType::Sort decomposeAndResolve(
-    rtl::Reference< TypeManager > const & manager, rtl::OString const & type,
-    bool resolveTypedefs, bool allowVoid, bool allowExtraEntities,
-    RTTypeClass * typeClass, rtl::OString * name, sal_Int32 * rank,
-    std::vector< rtl::OString > * arguments)
-{
-    OSL_ASSERT(typeClass != 0 && name != 0 && rank != 0 && arguments != 0);
-    *rank = 0;
-    for (rtl::OString t(type);;) {
-        sal_Int32 n = 0;
-        *name = codemaker::UnoType::decompose(t, &n, arguments);
-        if (n > SAL_MAX_INT32 - *rank) {
-            throw CannotDumpException("Bad type information: " + b2u(type));
-            //TODO
-        }
-        *rank += n;
-        if (n > 0) {
-            allowVoid = false;
-            allowExtraEntities = false;
-        }
-        codemaker::UnoType::Sort sort = codemaker::UnoType::getSort(*name);
-        switch (sort) {
-        case codemaker::UnoType::SORT_VOID:
-            if (!allowVoid) {
-                throw CannotDumpException("Bad type information: " + b2u(type));
-                //TODO
-            }
-        default:
-            checkNoTypeArguments(*arguments);
-            *typeClass = RT_TYPE_INVALID;
-            return sort;
-
-        case codemaker::UnoType::SORT_COMPLEX:
-            typereg::Reader reader(manager->getTypeReader(*name));
-            *typeClass = reader.getTypeClass();
-            switch (*typeClass) {
-            case RT_TYPE_ENUM:
-            case RT_TYPE_INTERFACE:
-                checkNoTypeArguments(*arguments);
-                return sort;
-
-            case RT_TYPE_STRUCT:
-                if (!(allowExtraEntities && arguments->empty())
-                    && (arguments->size() > SAL_MAX_UINT16
-                        || (static_cast< sal_uInt16 >(arguments->size())
-                            != reader.getReferenceCount())))
-                {
-                    throw CannotDumpException("Bad type information: " + b2u(type));
-                    //TODO
-                }
-                return sort;
-
-            case RT_TYPE_MODULE:
-            case RT_TYPE_EXCEPTION:
-            case RT_TYPE_SERVICE:
-            case RT_TYPE_SINGLETON:
-            case RT_TYPE_CONSTANTS:
-                if (!allowExtraEntities) {
-                    throw CannotDumpException("Bad type information: " + b2u(type));
-                    //TODO
-                }
-                checkNoTypeArguments(*arguments);
-                //TODO: check reader for consistency
-                return sort;
-
-            case RT_TYPE_TYPEDEF:
-                checkNoTypeArguments(*arguments);
-                if (reader.getSuperTypeCount() == 1
-                    && reader.getFieldCount() == 0
-                    && reader.getMethodCount() == 0
-                    && reader.getReferenceCount() == 0)
-                {
-                    if (resolveTypedefs) {
-                        t = convertString(reader.getSuperTypeName(0));
-                        continue;
-                    } else {
-                        return sort;
-                    }
-                }
-            default:
-                throw CannotDumpException("Bad type information: " + b2u(type));
-                //TODO
-            }
-        }
-    }
-}
-
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/codemaker/source/commoncpp/commoncpp.cxx b/codemaker/source/commoncpp/commoncpp.cxx
index 6f53040..295488d 100644
--- a/codemaker/source/commoncpp/commoncpp.cxx
+++ b/codemaker/source/commoncpp/commoncpp.cxx
@@ -67,36 +67,26 @@ OString scopedCppName(OString const & type, bool ns_alias)
 
 
 OString translateUnoToCppType(
-    codemaker::UnoType::Sort sort, RTTypeClass typeClass,
-    OString const & nucleus, bool shortname)
+    codemaker::UnoType::Sort sort, OUString const & nucleus)
 {
     OStringBuffer buf;
-    if (sort == codemaker::UnoType::SORT_COMPLEX) {
-        if (typeClass == RT_TYPE_INTERFACE
-            && nucleus == OString("com/sun/star/uno/XInterface"))
-        {
-            buf.append("::com::sun::star::uno::XInterface");
-        } else {
-            //TODO: check that nucleus is a valid (UTF-8) identifier
-            buf.append(nucleus);
-        }
-    } else {
+    if (sort <= codemaker::UnoType::SORT_ANY) {
         static char const * const cppTypes[codemaker::UnoType::SORT_ANY + 1] = {
             "void", "::sal_Bool", "::sal_Int8", "::sal_Int16", "::sal_uInt16",
             "::sal_Int32", "::sal_uInt32", "::sal_Int64", "::sal_uInt64",
             "float", "double", "::sal_Unicode", "rtl::OUString",
             "::com::sun::star::uno::Type", "::com::sun::star::uno::Any" };
         buf.append(cppTypes[sort]);
+    } else {
+        if (sort == codemaker::UnoType::SORT_INTERFACE_TYPE
+            && nucleus == "com.sun.star.uno.XInterface")
+        {
+            buf.append("::com::sun::star::uno::XInterface");
+        } else {
+            //TODO: check that nucleus is a valid (UTF-8) identifier
+            buf.append(u2b(nucleus));
+        }
     }
-
-    if (shortname) {
-        OString s(buf.makeStringAndClear());
-        if (s.indexOf("::com::sun::star") == 0)
-            return s.replaceAt(0, 16, "css");
-        else
-            return s;
-    }
-
     return buf.makeStringAndClear();
 }
 
diff --git a/unodevtools/source/skeletonmaker/cppcompskeleton.cxx b/unodevtools/source/skeletonmaker/cppcompskeleton.cxx
index bfea9a0..41ef203 100644
--- a/unodevtools/source/skeletonmaker/cppcompskeleton.cxx
+++ b/unodevtools/source/skeletonmaker/cppcompskeleton.cxx
@@ -30,8 +30,8 @@ using namespace ::codemaker::cpp;
 namespace skeletonmaker { namespace cpp {
 
 void generateIncludes(std::ostream & o,
-         const boost::unordered_set< OString, OStringHash >& interfaces,
-         OString propertyhelper, bool serviceobject,
+         const std::set< OUString >& interfaces,
+         OUString propertyhelper, bool serviceobject,
          bool supportxcomponent)
 {
     o << "#include \"sal/config.h\"\n";
@@ -55,7 +55,7 @@ void generateIncludes(std::ostream & o,
             o << "#include \"cppuhelper/propertysetmixin.hxx\"\n";
     }
 
-    boost::unordered_set< OString, OStringHash >::const_iterator iter = interfaces.begin();
+    std::set< OUString >::const_iterator iter = interfaces.begin();
     while (iter != interfaces.end())
     {
         o << "#include \""
@@ -138,7 +138,7 @@ OString generateCompHelperDeclaration(std::ostream & o,
 void generateCompHelperDefinition(std::ostream & o,
          const OString & implname,
          const OString & classname,
-         const boost::unordered_set< OString, OStringHash >& services)
+         const std::set< OUString >& services)
 {
     OString nm;
     short nbrackets = generateNamespace(o, implname, true, nm);
@@ -151,12 +151,12 @@ void generateCompHelperDefinition(std::ostream & o,
         "_getSupportedServiceNames()\n{\n    css::uno::Sequence< "
       << "::rtl::OUString >" << " s(" << services.size() << ");\n";
 
-    boost::unordered_set< OString, OStringHash >::const_iterator iter = services.begin();
+    std::set< OUString >::const_iterator iter = services.begin();
     short i=0;
     while (iter != services.end())
     {
         o << "    s[" << i++ << "] = ::rtl::OUString(\""
-          << (*iter).replace('/','.') << "\");\n";
+          << *iter << "\");\n";
         ++iter;
     }
     o << "    return s;\n}\n\n";
@@ -500,7 +500,7 @@ void generateXDispatchProvider(std::ostream& o,
 void generateAddinConstructorAndHelper(std::ostream& o,
          ProgramOptions const & options,
          rtl::Reference< TypeManager > const & manager, const OString & classname,
-         const boost::unordered_set< OString, OStringHash >& interfaces)
+         const std::set< OUString >& interfaces)
 {
     o << classname << "::" << classname
       << "(css::uno::Reference< css::uno::XComponentContext > const & context) :\n"
@@ -582,18 +582,13 @@ void generateMemberInitialization(std::ostream& o,
         for (AttributeInfo::const_iterator i(members.begin());
              i != members.end(); ++i)
         {
-            RTTypeClass typeClass;
-            OString type(i->second.first.replace('.','/'));
-            OString name;
             sal_Int32 rank;
-            std::vector< OString > arguments;
-            codemaker::UnoType::Sort sort = codemaker::decomposeAndResolve(
-                manager, type, true, true, true, &typeClass, &name, &rank,
-                &arguments);
-
-            if (sort <= codemaker::UnoType::SORT_CHAR && rank == 0) {
-                o << ",\n    m_" << i->first << "(";
-                printType(o, options, manager, type, 16, true);
+            if ((manager->decompose(i->type, true, 0, &rank, 0, 0)
+                 <= codemaker::UnoType::SORT_CHAR)
+                && rank == 0)
+            {
+                o << ",\n    m_" << i->name << "(";
+                printType(o, options, manager, i->type, 16, true);
                 o << ")";
             }
         }
@@ -609,9 +604,8 @@ void generateMemberDeclaration(std::ostream& o,
          i != members.end(); ++i)
     {
         o << "    ";
-        printType(o, options, manager, i->second.first.replace('.','/'),
-                  1, false);
-        o << " m_" << i->first << ";\n";
+        printType(o, options, manager, i->type, 1, false);
+        o << " m_" << i->name << ";\n";
     }
 }
 
@@ -619,11 +613,11 @@ OString generateClassDefinition(std::ostream& o,
          ProgramOptions const & options,
          rtl::Reference< TypeManager > const & manager,
          OString const & classname,
-         boost::unordered_set< OString, OStringHash > const & interfaces,
+         std::set< OUString > const & interfaces,
          AttributeInfo const & properties,
          AttributeInfo const & attributes,
-         boost::unordered_set< OString, OStringHash > const & propinterfaces,
-         OString const & propertyhelper, bool supportxcomponent)
+         std::set< OUString > const & propinterfaces,
+         OUString const & propertyhelper, bool supportxcomponent)
 {
     OStringBuffer parentname(64);
     o << "class " << classname << ":\n";
@@ -641,11 +635,10 @@ OString generateClassDefinition(std::ostream& o,
             o << "    public ::cppu::WeakImplHelper" << interfaces.size() << "<";
         }
 
-        boost::unordered_set< OString, OStringHash >::const_iterator iter =
-            interfaces.begin();
+        std::set< OUString >::const_iterator iter = interfaces.begin();
         while (iter != interfaces.end())
         {
-            o << "\n        " << scopedCppName(*iter);
+            o << "\n        " << scopedCppName(u2b(*iter));
             ++iter;
             if (iter != interfaces.end())
                 o << ",";
@@ -656,7 +649,7 @@ OString generateClassDefinition(std::ostream& o,
 
     if (propertyhelper.getLength() > 1) {
         o << ",\n    public ::cppu::PropertySetMixin< "
-          << scopedCppName(propertyhelper) << " >";
+          << scopedCppName(u2b(propertyhelper)) << " >";
     }
 
     o << "\n{\npublic:\n"
@@ -682,11 +675,10 @@ OString generateClassDefinition(std::ostream& o,
         OStringBuffer buffer(256);
         buffer.append(parentname.toString());
         buffer.append("< ");
-        boost::unordered_set< OString, OStringHash >::const_iterator iter =
-            interfaces.begin();
+        std::set< OUString >::const_iterator iter = interfaces.begin();
         while (iter != interfaces.end())
         {
-            buffer.append(scopedCppName(*iter));
+            buffer.append(scopedCppName(u2b(*iter)));
             ++iter;
             if (iter != interfaces.end())
                 buffer.append(", ");
@@ -700,13 +692,11 @@ OString generateClassDefinition(std::ostream& o,
           << parent << "::release(); }\n\n";
     }
 
-    boost::unordered_set< OString, OStringHash >::const_iterator it =
-        interfaces.begin();
+    std::set< OUString >::const_iterator it = interfaces.begin();
     codemaker::GeneratedTypeSet generated;
     while (it != interfaces.end())
     {
-        typereg::Reader reader(manager->getTypeReader((*it).replace('.','/')));
-        printMethods(o, options, manager, reader, generated, "", "", "    ",
+        printMethods(o, options, manager, *it, generated, "", "", "    ",
                      true, propertyhelper);
         ++it;
     }
@@ -794,10 +784,9 @@ OString generateClassDefinition(std::ostream& o,
           << "(css::uno::Reference< css::uno::XComponentContext > const & context) :\n";
         if (supportxcomponent) {
             o << "    ::cppu::WeakComponentImplHelper" << interfaces.size() << "<";
-            boost::unordered_set< OString, OStringHash >::const_iterator iter =
-                interfaces.begin();
+            std::set< OUString >::const_iterator iter = interfaces.begin();
             while (iter != interfaces.end()) {
-                o << "\n        " << scopedCppName(*iter);
+                o << "\n        " << scopedCppName(u2b(*iter));
                 ++iter;
                 if (iter != interfaces.end())
                     o << ",";
@@ -807,7 +796,7 @@ OString generateClassDefinition(std::ostream& o,
         }
         if (propertyhelper.getLength() > 1) {
             o << "    ::cppu::PropertySetMixin< "
-              << scopedCppName(propertyhelper) << " >(\n"
+              << scopedCppName(u2b(propertyhelper)) << " >(\n"
               << "        context, static_cast< Implements >(\n            ";
             OStringBuffer buffer(128);
             if (propinterfaces.find("com/sun/star/beans/XPropertySet")
@@ -881,22 +870,20 @@ void generateXServiceInfoBodies(std::ostream& o,
 void generateMethodBodies(std::ostream& o,
         ProgramOptions const & options,
         rtl::Reference< TypeManager > const & manager,
-        boost::unordered_set< OString, OStringHash > const & interfaces,
+        std::set< OUString > const & interfaces,
         OString const & classname,
         OString const & comphelpernamespace,
-        OString const & propertyhelper)
+        OUString const & propertyhelper)
 {
     OString name(classname.concat("::"));
-    boost::unordered_set< OString, OStringHash >::const_iterator iter =
-        interfaces.begin();
+    std::set< OUString >::const_iterator iter = interfaces.begin();
     codemaker::GeneratedTypeSet generated;
     while (iter != interfaces.end()) {
         if ( (*iter).equals("com.sun.star.lang.XServiceInfo") ) {
             generateXServiceInfoBodies(o, name, comphelpernamespace);
-            generated.add(*iter);
+            generated.add(u2b(*iter));
         } else {
-            typereg::Reader reader(manager->getTypeReader((*iter).replace('.','/')));
-            printMethods(o, options, manager, reader, generated, "_",
+            printMethods(o, options, manager, *iter, generated, "_",
                          name, "", true, propertyhelper);
         }
         ++iter;
@@ -906,10 +893,10 @@ void generateMethodBodies(std::ostream& o,
 void generateQueryInterface(std::ostream& o,
                             ProgramOptions const & options,
                             rtl::Reference< TypeManager > const & manager,
-                            const boost::unordered_set< OString, OStringHash >& interfaces,
+                            const std::set< OUString >& interfaces,
                             OString const & parentname,
                             OString const & classname,
-                            OString const & propertyhelper)
+                            OUString const & propertyhelper)
 {
     if (propertyhelper.isEmpty())
         return;
@@ -924,11 +911,10 @@ void generateQueryInterface(std::ostream& o,
         o << "css::uno::Any a(";
 
     o   << parentname << "<";
-    boost::unordered_set< OString, OStringHash >::const_iterator iter =
-        interfaces.begin();
+    std::set< OUString >::const_iterator iter = interfaces.begin();
     while (iter != interfaces.end())
     {
-        o << "\n        " << scopedCppName(*iter);
+        o << "\n        " << scopedCppName(u2b(*iter));
         ++iter;
         if (iter != interfaces.end())
             o << ",";
@@ -945,8 +931,7 @@ void generateQueryInterface(std::ostream& o,
             o << "::cppu::OPropertySetHelper::queryInterface(type));\n";
         } else {
             o << "::cppu::PropertySetMixin<\n            ";
-            printType(o, options, manager, propertyhelper.replace('.', '/'),
-                      0, false);
+            printType(o, options, manager, propertyhelper, 0, false);
             o << " >::queryInterface(\n               type));\n";
         }
     }
@@ -963,17 +948,17 @@ void generateSkeleton(ProgramOptions const & options,
         return;
     }
 
-    boost::unordered_set< OString, OStringHash > interfaces;
-    boost::unordered_set< OString, OStringHash > services;
+    std::set< OUString > interfaces;
+    std::set< OUString > services;
     AttributeInfo properties;
     AttributeInfo attributes;
-    boost::unordered_set< OString, OStringHash > propinterfaces;
+    std::set< OUString > propinterfaces;
     bool serviceobject = false;
     bool supportxcomponent = false;
 
     std::vector< OString >::const_iterator iter = types.begin();
     while (iter != types.end()) {
-        checkType(manager, *iter, interfaces, services, properties);
+        checkType(manager, b2u(*iter), interfaces, services, properties);
         ++iter;
     }
 
@@ -992,7 +977,7 @@ void generateSkeleton(ProgramOptions const & options,
     if (!services.empty())
         serviceobject = true;
 
-    OString propertyhelper = checkPropertyHelper(
+    OUString propertyhelper = checkPropertyHelper(
         options, manager, services, interfaces, attributes, propinterfaces);
 
     checkDefaultInterfaces(interfaces, services, propertyhelper);
@@ -1095,22 +1080,22 @@ void generateCalcAddin(ProgramOptions const & options,
                        rtl::Reference< TypeManager > const & manager,
                        std::vector< OString > const & types)
 {
-    boost::unordered_set< OString, OStringHash > interfaces;
-    boost::unordered_set< OString, OStringHash > services;
+    std::set< OUString > interfaces;
+    std::set< OUString > services;
     AttributeInfo properties;
     AttributeInfo attributes;
-    boost::unordered_set< OString, OStringHash > propinterfaces;
+    std::set< OUString > propinterfaces;
     bool serviceobject = false;
     bool supportxcomponent = false;
 
 
     std::vector< OString >::const_iterator iter = types.begin();
     while (iter != types.end()) {
-        checkType(manager, *iter, interfaces, services, properties);
+        checkType(manager, b2u(*iter), interfaces, services, properties);
         ++iter;
     }
 
-    OString sAddinService;
+    OUString sAddinService;
     if (services.size() != 1) {
         throw CannotDumpException(
             "for calc add-in components one and only one service type is necessary!"
@@ -1119,10 +1104,10 @@ void generateCalcAddin(ProgramOptions const & options,
 
 
     // get the one and only add-in service for later use
-    boost::unordered_set< OString, OStringHash >::const_iterator iter2 = services.begin();
-    sAddinService = (*iter2).replace('/', '.');
+    std::set< OUString >::const_iterator iter2 = services.begin();
+    sAddinService = *iter2;
     if (sAddinService.equals("com.sun.star.sheet.AddIn")) {
-        sAddinService = (*(++iter2)).replace('/', '.');
+        sAddinService = *(++iter2);
     }
 
     // if backwardcompatible==true the AddIn service needs to be added to the
@@ -1142,7 +1127,7 @@ void generateCalcAddin(ProgramOptions const & options,
         }
     }
 
-    OString propertyhelper = checkPropertyHelper(
+    OUString propertyhelper = checkPropertyHelper(
         options, manager, services, interfaces, attributes, propinterfaces);
 
     if (!propertyhelper.isEmpty())
diff --git a/unodevtools/source/skeletonmaker/cpptypemaker.cxx b/unodevtools/source/skeletonmaker/cpptypemaker.cxx
index 5d2c3fd..9461815 100644
--- a/unodevtools/source/skeletonmaker/cpptypemaker.cxx
+++ b/unodevtools/source/skeletonmaker/cpptypemaker.cxx
@@ -27,16 +27,16 @@ using namespace ::codemaker::cpp;
 
 namespace skeletonmaker { namespace cpp {
 
-void printType(std::ostream & o,
-    ProgramOptions const & options, rtl::Reference< TypeManager > const & manager,
-    codemaker::UnoType::Sort sort, RTTypeClass typeClass,
-    OString const & name, sal_Int32 rank,
-    std::vector< OString > const & arguments, short referenceType,
+void printType(
+    std::ostream & o, ProgramOptions const & options,
+    rtl::Reference< TypeManager > const & manager,
+    codemaker::UnoType::Sort sort, OUString const & nucleus, sal_Int32 rank,
+    std::vector< OUString > const & arguments,
+    rtl::Reference< unoidl::Entity > const & entity, short referenceType,
     bool defaultvalue)
 {
     if (defaultvalue && rank == 0 && sort <= codemaker::UnoType::SORT_CHAR) {
-        switch (sort)
-        {
+        switch (sort) {
         case codemaker::UnoType::SORT_BOOLEAN:
             o << "sal_False";
             return;
@@ -52,28 +52,23 @@ void printType(std::ostream & o,
         case codemaker::UnoType::SORT_DOUBLE:
             o << "0";
             return;
-        case codemaker::UnoType::SORT_VOID:
-        case codemaker::UnoType::SORT_STRING:
-        case codemaker::UnoType::SORT_TYPE:
-        case codemaker::UnoType::SORT_ANY:
-        case codemaker::UnoType::SORT_COMPLEX: default: //TODO
+        default:
             break;
         }
     }
 
     if (defaultvalue && referenceType == 16) {
-        if (typeClass == RT_TYPE_ENUM) {
-            typereg::Reader reader(manager->getTypeReader(name));
-            o << name.copy(name.lastIndexOf('/'))
-              << "_"
-              << codemaker::convertString(reader.getFieldName(0));
+        if (sort == codemaker::UnoType::SORT_ENUM_TYPE) {
+            o << nucleus.copy(nucleus.lastIndexOf('.') + 1) << "_"
+              << dynamic_cast< unoidl::EnumTypeEntity * >(entity.get())->
+                getMembers()[0].name;
         }
         return;
     }
     bool bReference = false;
     if (((sort > codemaker::UnoType::SORT_CHAR ||
           rank > 0) && referenceType != 8 &&
-         !(typeClass == RT_TYPE_ENUM && referenceType == 4 && rank == 0)) ||
+         !(sort == codemaker::UnoType::SORT_ENUM_TYPE && referenceType == 4 && rank == 0)) ||
         (sort <= codemaker::UnoType::SORT_CHAR && referenceType == 2))
     {
         bReference = true;
@@ -86,21 +81,20 @@ void printType(std::ostream & o,
         o << ((options.shortnames) ? "css::uno::Sequence< " :
               "::com::sun::star::uno::Sequence< ");
     }
-    if (typeClass == RT_TYPE_INTERFACE && referenceType > 0) {
+    if (sort == codemaker::UnoType::SORT_INTERFACE_TYPE && referenceType > 0) {
         o << ((options.shortnames) ? "css::uno::Reference< " :
               "::com::sun::star::uno::Reference< ");
     }
 
-    o << scopedCppName(codemaker::cpp::translateUnoToCppType(
-                           sort, typeClass, name, false),
+    o << scopedCppName(codemaker::cpp::translateUnoToCppType(sort, nucleus),
                        options.shortnames && referenceType > 0);
 
-    if (typeClass == RT_TYPE_INTERFACE && referenceType > 0)
+    if (sort == codemaker::UnoType::SORT_INTERFACE_TYPE && referenceType > 0)
         o << " >";
 
     if (!arguments.empty()) {
         o << "< ";
-        for (std::vector< OString >::const_iterator i(arguments.begin());
+        for (std::vector< OUString >::const_iterator i(arguments.begin());
              i != arguments.end(); ++i)
         {
             if (i != arguments.begin())
@@ -121,153 +115,229 @@ void printType(std::ostream & o,
         o << "()";
 }
 
-void printType(std::ostream & o,
-    ProgramOptions const & options, rtl::Reference< TypeManager > const & manager,
-    OString const & type, short referenceType, bool defaultvalue)
+void printType(
+    std::ostream & o, ProgramOptions const & options,
+    rtl::Reference< TypeManager > const & manager, OUString const & name,
+    short referenceType, bool defaultvalue)
 {
-    RTTypeClass typeClass;
-    OString name;
+    OUString nucleus;
     sal_Int32 rank;
-    std::vector< OString > arguments;
-    codemaker::UnoType::Sort sort = codemaker::decomposeAndResolve(
-        manager, type, true, true, true, &typeClass, &name, &rank, &arguments);
-    printType(o,
-        options, manager, sort, typeClass, name, rank, arguments,
+    std::vector< OUString > arguments;
+    rtl::Reference< unoidl::Entity > entity;
+    codemaker::UnoType::Sort sort = manager->decompose(
+        name, true, &nucleus, &rank, &arguments, &entity);
+    printType(
+        o, options, manager, sort, nucleus, rank, arguments, entity,
         referenceType, defaultvalue);
 }
 
-bool printConstructorParameters(std::ostream & o,
-    ProgramOptions const & options, rtl::Reference< TypeManager > const & manager,
-    typereg::Reader const & reader, typereg::Reader const & outerReader,
-    std::vector< OString > const & arguments)
+bool printConstructorParameters(
+    std::ostream & o, ProgramOptions const & options,
+    rtl::Reference< TypeManager > const & manager,
+    codemaker::UnoType::Sort sort,
+    rtl::Reference< unoidl::Entity > const & entity, OUString const & name,
+    std::vector< OUString > const & arguments)
 {
     bool previous = false;
-    if (reader.getSuperTypeCount() != 0) {
-        OString super(
-            codemaker::convertString(reader.getSuperTypeName(0)));
-        typereg::Reader superReader(manager->getTypeReader(super));
-        if (!superReader.isValid())
-            throw CannotDumpException("Bad type library entity " + b2u(super));
-
-        previous = printConstructorParameters(o,
-            options, manager, superReader, outerReader, arguments);
-    }
-    for (sal_uInt16 i = 0; i < reader.getFieldCount(); ++i) {
-        if (previous)
-            o << ", ";
-        else
-            previous = true;
-
-        if ((reader.getFieldFlags(i) & RT_ACCESS_PARAMETERIZED_TYPE) == 0) {
-            printType(o, options, manager,
-                      codemaker::convertString(reader.getFieldTypeName(i)), 4);
-        } else if (arguments.empty()) {
-            // ToDo !
-            // o << "com::sun::star::uno::Any";
-        } else {
-            sal_uInt16 tparam = 0;
-            while (outerReader.getReferenceTypeName(tparam)
-                   != reader.getFieldTypeName(i))
+    switch (sort) {
+    case codemaker::UnoType::SORT_PLAIN_STRUCT_TYPE:
+        {
+            rtl::Reference< unoidl::PlainStructTypeEntity > ent2(
+                dynamic_cast< unoidl::PlainStructTypeEntity * >(entity.get()));
+            assert(ent2.is());
+            if (!ent2->getDirectBase().isEmpty()) {
+                rtl::Reference< unoidl::Entity > baseEnt;
+                codemaker::UnoType::Sort baseSort = manager->getSort(
+                    ent2->getDirectBase(), &baseEnt);
+                previous = printConstructorParameters(
+                    o, options, manager, baseSort, baseEnt,
+                    ent2->getDirectBase(), std::vector< OUString >());
+            }
+            for (std::vector< unoidl::PlainStructTypeEntity::Member >::
+                     const_iterator i(ent2->getDirectMembers().begin());
+                 i != ent2->getDirectMembers().end(); ++i)
             {
-                ++tparam;
-                OSL_ASSERT(tparam < outerReader.getReferenceCount());
+                if (previous) {
+                    o << ", ";
+                }
+                previous = true;
+                printType(o, options, manager, i->type, 4);
+                o << ' '
+                  << codemaker::cpp::translateUnoToCppIdentifier(
+                      u2b(i->name), "param");
             }
-            // assume std::vector< OString >::size_type is at least as
-            // large as sal_uInt16:
-            printType(o, options, manager, arguments[tparam], 4);
+            break;
         }
-        o << ' '
-          << (codemaker::cpp::translateUnoToCppIdentifier(
-                  codemaker::convertString(reader.getFieldName(i)),
-                  "param").
-              getStr());
+    case codemaker::UnoType::SORT_POLYMORPHIC_STRUCT_TYPE_TEMPLATE:
+        {
+            rtl::Reference< unoidl::PolymorphicStructTypeTemplateEntity > ent2(
+                dynamic_cast< unoidl::PolymorphicStructTypeTemplateEntity * >(
+                    entity.get()));
+            assert(ent2.is());
+            for (std::vector<
+                     unoidl::PolymorphicStructTypeTemplateEntity::Member >::
+                     const_iterator i(ent2->getMembers().begin());
+                 i != ent2->getMembers().end(); ++i)
+            {
+                if (previous) {
+                    o << ", ";
+                }
+                previous = true;
+                if (i->parameterized) {
+                    o << i->type;
+                } else {
+                    printType(o, options, manager, i->type, 4);
+                }
+                o << ' '
+                  << codemaker::cpp::translateUnoToCppIdentifier(
+                      u2b(i->name), "param");
+            }
+            break;
+        }
+    case codemaker::UnoType::SORT_INSTANTIATED_POLYMORPHIC_STRUCT_TYPE:
+        {
+            rtl::Reference< unoidl::PolymorphicStructTypeTemplateEntity > ent2(
+                dynamic_cast< unoidl::PolymorphicStructTypeTemplateEntity * >(
+                    entity.get()));
+            assert(ent2.is());
+            for (std::vector<
+                     unoidl::PolymorphicStructTypeTemplateEntity::Member >::
+                     const_iterator i(ent2->getMembers().begin());
+                 i != ent2->getMembers().end(); ++i)
+            {
+                if (previous) {
+                    o << ", ";
+                }
+                previous = true;
+                if (i->parameterized) {
+                    for (std::vector< OUString >::const_iterator j(
+                             ent2->getTypeParameters().begin());
+                         j != ent2->getTypeParameters().end(); ++j)
+                    {
+                        if (i->type == *j) {
+                            o << arguments[
+                                j - ent2->getTypeParameters().begin()];
+                            break;
+                        }
+                    }
+                } else {
+                    printType(o, options, manager, i->type, 4);
+                }
+                o << ' '
+                  << codemaker::cpp::translateUnoToCppIdentifier(
+                      u2b(i->name), "param");
+            }
+            break;
+        }
+    case codemaker::UnoType::SORT_EXCEPTION_TYPE:
+        {
+            rtl::Reference< unoidl::ExceptionTypeEntity > ent2(
+                dynamic_cast< unoidl::ExceptionTypeEntity * >(entity.get()));
+            assert(ent2.is());
+            if (!ent2->getDirectBase().isEmpty()) {
+                rtl::Reference< unoidl::Entity > baseEnt;
+                codemaker::UnoType::Sort baseSort = manager->getSort(
+                    ent2->getDirectBase(), &baseEnt);
+                previous = printConstructorParameters(
+                    o, options, manager, baseSort, baseEnt,
+                    ent2->getDirectBase(), std::vector< OUString >());
+            }
+            for (std::vector< unoidl::ExceptionTypeEntity::Member >::
+                     const_iterator i(ent2->getDirectMembers().begin());
+                 i != ent2->getDirectMembers().end(); ++i)
+            {
+                if (previous) {
+                    o << ", ";
+                }
+                previous = true;
+                printType(o, options, manager, i->type, 4);
+                o << ' '
+                  << codemaker::cpp::translateUnoToCppIdentifier(
+                      u2b(i->name), "param");
+            }
+            break;
+        }
+    default:
+        throw CannotDumpException(
+            "unexpected entity \"" + name
+            + "\" in call to skeletonmaker::cpp::printConstructorParameters");
     }
     return previous;
 }
 
-void printConstructor(std::ostream & o,
-    ProgramOptions const & options, rtl::Reference< TypeManager > const & manager,
-    typereg::Reader const & reader,
-    std::vector< OString > const & arguments)
+void printConstructor(
+    std::ostream & o, ProgramOptions const & options,
+    rtl::Reference< TypeManager > const & manager,
+    codemaker::UnoType::Sort sort,
+    rtl::Reference< unoidl::Entity > const & entity, OUString const & name,
+    std::vector< OUString > const & arguments)
 {
-    OString type(codemaker::convertString(reader.getTypeName()));
-    o << "public ";
-    o << type.copy(type.lastIndexOf('/') + 1) << '(';
-    printConstructorParameters(o, options, manager, reader, reader,
-                               arguments);
+    o << "public " << name.copy(name.lastIndexOf('.') + 1) << '(';
+    printConstructorParameters(
+        o, options, manager, sort, entity, name, arguments);
     o << ");\n";
 }
 
-void printMethodParameters(std::ostream & o,
-    ProgramOptions const & options, rtl::Reference< TypeManager > const & manager,
-    typereg::Reader const & reader, sal_uInt16 method, bool previous,
-    bool withtype)
+void printMethodParameters(
+    std::ostream & o, ProgramOptions const & options,
+    rtl::Reference< TypeManager > const & manager,
+    std::vector< unoidl::InterfaceTypeEntity::Method::Parameter > const &
+        parameters,
+    bool withType)
 {
-    short referenceType = 4;
-    for (sal_uInt16 i = 0; i < reader.getMethodParameterCount(method); ++i) {
-        if (previous)
+    for (std::vector< unoidl::InterfaceTypeEntity::Method::Parameter >::
+             const_iterator i(parameters.begin());
+         i != parameters.end(); ++i)
+    {
+        if (i != parameters.begin()) {
             o << ", ";
-
-        previous = true;
-
-        if (reader.getMethodParameterFlags(method, i) == RT_PARAM_OUT
-            || reader.getMethodParameterFlags(method, i) == RT_PARAM_INOUT)
-        {
-            referenceType = 2;
-        } else {
-            referenceType = 4;
         }
-
-        if (withtype) {
-            printType(o, options, manager,
-                codemaker::convertString(
-                    reader.getMethodParameterTypeName(method, i)),
-                         referenceType);
+        if (withType) {
+            short referenceType;
+            if (i->direction
+                == unoidl::InterfaceTypeEntity::Method::Parameter::DIRECTION_IN)
+            {
+                referenceType = 4;
+            } else {
+                referenceType = 2;
+            }
+            printType(o, options, manager, i->type, referenceType);
             o << ' ';
         }
-
-        o << (codemaker::cpp::translateUnoToCppIdentifier(
-                  codemaker::convertString(
-                      reader.getMethodParameterName(method, i)),
-                  "param").
-              getStr());
+        o << codemaker::cpp::translateUnoToCppIdentifier(u2b(i->name), "param");
     }
 }
 
-void printExceptionSpecification(std::ostream & o,
-    ProgramOptions const & options, rtl::Reference< TypeManager > const & manager,
-    typereg::Reader const & reader, sal_uInt16 method)
+void printExceptionSpecification(
+    std::ostream & o,
+    ProgramOptions const & options,
+    rtl::Reference< TypeManager > const & manager,
+    std::vector< OUString > const & exceptions)
 {
     o << ((options.shortnames) ? " throw (css::uno::RuntimeException" :
           " throw (::com::sun::star::uno::RuntimeException");
-    if (reader.getMethodExceptionCount(method) > 0) {
-        for (sal_uInt16 i = 0; i < reader.getMethodExceptionCount(method); ++i) {
-            o << ", ";
-            printType(o, options, manager,
-                codemaker::convertString(
-                    reader.getMethodExceptionTypeName(method, i)), 1);
-        }
+    for (std::vector< OUString >::const_iterator i(exceptions.begin());
+         i != exceptions.end(); ++i)
+    {
+        o << ", ";
+        printType(o, options, manager, *i, 1);
     }
     o << ")";
 }
 
-void printSetPropertyMixinBody(std::ostream & o,
-                               typereg::Reader const & reader,
-                               sal_uInt16 field,
-                               sal_uInt16 method)
+void printSetPropertyMixinBody(
+    std::ostream & o, unoidl::InterfaceTypeEntity::Attribute const & attribute)
 {
-    RTFieldAccess propFlags = checkAdditionalPropertyFlags(reader, field, method);
-    OString fieldname = codemaker::convertString(reader.getFieldName(field));
-    bool bound = (reader.getFieldFlags(field) & RT_ACCESS_BOUND ? true : false);
+    unoidl::AccumulationBasedServiceEntity::Property::Attributes propFlags
+        = checkAdditionalPropertyFlags(attribute);
 
     o << "\n{\n";
 
-    if (bound)
+    if (attribute.bound)
         o << "    BoundListeners l;\n";
 
-    if (propFlags & RT_ACCESS_CONSTRAINED) {
-        OString fieldtype = codemaker::convertString(
-                                reader.getFieldTypeName(field));
+    if (propFlags & unoidl::AccumulationBasedServiceEntity::Property::ATTRIBUTE_CONSTRAINED) {
+        OString fieldtype = codemaker::convertString(attribute.type);
 
         sal_Int32 index = fieldtype.lastIndexOf('<');
         sal_Int32 nPos=0;
@@ -319,21 +389,21 @@ void printSetPropertyMixinBody(std::ostream & o,
         }
 
         o << "    prepareSet(\n        rtl::OUString(\""
-          << fieldname << "\"),\n        css::uno::Any(), v, ";
+          << attribute.name << "\"),\n        css::uno::Any(), v, ";
     } else {
         o << "    prepareSet(\n        rtl::OUString(\""
-          << fieldname << "\"),\n        css::uno::Any(), css::uno::Any(), ";
+          << attribute.name << "\"),\n        css::uno::Any(), css::uno::Any(), ";
     }
 
-    if (bound)
+    if (attribute.bound)
         o << "&l);\n";
     else
         o << "0);\n";
 
     o << "    {\n        osl::MutexGuard g(m_aMutex);\n        m_"
-      << fieldname << " = the_value;\n    }\n";
+      << attribute.name << " = the_value;\n    }\n";
 
-    if (bound)
+    if (attribute.bound)
         o << "    l.notify();\n";
 
     o  << "}\n\n";
@@ -368,17 +438,16 @@ void generateXDispatchProvider(std::ostream& o,
 
 void printMethods(std::ostream & o,
     ProgramOptions const & options, rtl::Reference< TypeManager > const & manager,
-    typereg::Reader const & reader, codemaker::GeneratedTypeSet & generated,
+    OUString const & name, codemaker::GeneratedTypeSet & generated,
     OString const & delegate, OString const & classname,
     OString const & indentation, bool defaultvalue,
-    OString const & propertyhelper)
+    OUString const & propertyhelper)
 {
-    OString type(codemaker::convertString(reader.getTypeName()));
-    if (generated.contains(type) || type.equals("com/sun/star/uno/XInterface") ||
+    if (generated.contains(u2b(name)) || name == "com.sun.star.uno.XInterface" ||
         (defaultvalue &&
-         ( type.equals("com/sun/star/lang/XComponent") ||
-           type.equals("com/sun/star/lang/XTypeProvider") ||
-           type.equals("com/sun/star/uno/XWeak")) ) )
+         ( name == "com.sun.star.lang.XComponent" ||
+           name == "com.sun.star.lang.XTypeProvider" ||
+           name == "com.sun.star.uno.XWeak" ) ) )
     {
         return;
     }
@@ -388,147 +457,137 @@ void printMethods(std::ostream & o,
     bool defaultbody = ((delegate.equals(sd)) ? true : false);
 
     if (body && propertyhelper.getLength() > 1) {
-        if ( type.equals("com/sun/star/beans/XPropertySet")) {
-            generated.add(type);
+        if (name == "com.sun.star.beans.XPropertySet") {
+            generated.add(u2b(name));
             generateXPropertySetBodies(
-                o, classname, scopedCppName(propertyhelper));
+                o, classname, scopedCppName(u2b(propertyhelper)));
             return;
-        } else if ( type.equals("com/sun/star/beans/XFastPropertySet")) {
-            generated.add(type);
+        } else if (name == "com.sun.star.beans.XFastPropertySet") {
+            generated.add(u2b(name));
             generateXFastPropertySetBodies(
-                o, classname, scopedCppName(propertyhelper));
+                o, classname, scopedCppName(u2b(propertyhelper)));
             return;
-        } else if ( type.equals("com/sun/star/beans/XPropertyAccess")) {
-            generated.add(type);
+        } else if (name == "com.sun.star.beans.XPropertyAccess") {
+            generated.add(u2b(name));
             generateXPropertyAccessBodies(
-                o, classname, scopedCppName(propertyhelper));
+                o, classname, scopedCppName(u2b(propertyhelper)));
             return;
         }
     }
 
     if (body && options.componenttype == 2) {
-        if (type.equals("com/sun/star/lang/XServiceName")) {
+        if (name == "com.sun.star.lang.XServiceName") {
             o << "// ::com::sun::star::lang::XServiceName:\n"
                 "::rtl::OUString SAL_CALL " << classname << "getServiceName() "
                 "throw (css::uno::RuntimeException)\n{\n    "
                 "return ::rtl::OUString("
                 "sADDIN_SERVICENAME);\n}\n";
-            generated.add(type);
+            generated.add(u2b(name));
             return;
-        } else if (type.equals("com/sun/star/sheet/XAddIn")) {
+        } else if (name == "com.sun.star.sheet.XAddIn") {
             generateXAddInBodies(o, classname);
-            generated.add(type);
+            generated.add(u2b(name));
 
             // special handling of XLocalizable -> parent of XAddIn
-            if (!generated.contains("com/sun/star/lang/XLocalizable")) {
+            if (!generated.contains("com.sun.star.lang.XLocalizable")) {
                 generateXLocalizable(o, classname);
-                generated.add("com/sun/star/lang/XLocalizable");
+                generated.add("com.sun.star.lang.XLocalizable");
             }
             return;
-        } else if (type.equals("com/sun/star/lang/XLocalizable")) {
+        } else if (name == "com.sun.star.lang.XLocalizable") {
             generateXLocalizable(o, classname);
-            generated.add(type);
+            generated.add(u2b(name));
             return;
-        } else if (type.equals("com/sun/star/sheet/XCompatibilityNames")) {
+        } else if (name == "com.sun.star.sheet.XCompatibilityNames") {
             generateXCompatibilityNamesBodies(o, classname);
-            generated.add(type);
+            generated.add(u2b(name));
             return;
         }
     }
 
     if (body && options.componenttype == 3) {
-        if (type.equals("com/sun/star/lang/XInitialization")) {
+        if (name == "com.sun.star.lang.XInitialization") {
             generateXInitialization(o, classname);
-            generated.add(type);
+            generated.add(u2b(name));
             return;
-        } else if (type.equals("com/sun/star/frame/XDispatch")) {
+        } else if (name == "com.sun.star.frame.XDispatch") {
             generateXDispatch(o, classname, options.protocolCmdMap);
-            generated.add(type);
+            generated.add(u2b(name));
             return;
-        } else if (type.equals("com/sun/star/frame/XDispatchProvider")) {
+        } else if (name == "com.sun.star.frame.XDispatchProvider") {
             generateXDispatchProvider(o, classname, options.protocolCmdMap);
-            generated.add(type);
+            generated.add(u2b(name));
             return;
         }
     }
 
-    generated.add(type);
+    generated.add(u2b(name));
+    rtl::Reference< unoidl::Entity > ent;
+    if (manager->getSort(name, &ent) != codemaker::UnoType::SORT_INTERFACE_TYPE)
+    {
+        throw CannotDumpException(
+            "unexpected entity \"" + name
+            + "\" in call to skeletonmaker::cpp::printMethods");
+    }
+    rtl::Reference< unoidl::InterfaceTypeEntity > ent2(
+        dynamic_cast< unoidl::InterfaceTypeEntity * >(ent.get()));
+    assert(ent2.is());
     if (options.all || defaultvalue) {
-        for (sal_uInt16 i = 0; i < reader.getSuperTypeCount(); ++i) {
-            typereg::Reader super(
-                manager->getTypeReader(
-                    codemaker::convertString(
-                        reader.getSuperTypeName(i))));
-            if (!super.isValid()) {
-                throw CannotDumpException(
-                    "Bad type library entity " + reader.getSuperTypeName(i));
-            }
-
-            printMethods(o, options, manager, super, generated, delegate,
-                            classname, indentation, defaultvalue, propertyhelper);
+        for (std::vector< OUString >::const_iterator i(
+                 ent2->getDirectMandatoryBases().begin());
+             i != ent2->getDirectMandatoryBases().end(); ++i)
+        {
+            printMethods(
+                o, options, manager, *i, generated, delegate, classname,
+                indentation, defaultvalue, propertyhelper);
         }
-
-        if (reader.getFieldCount() > 0 || reader.getMethodCount() > 0) {
+        if (!(ent2->getDirectAttributes().empty()
+              && ent2->getDirectMethods().empty()))
+        {
             o << indentation << "// ";
-            printType(o, options, manager, type, 0);
+            printType(o, options, manager, name, 0);
             o << ":\n";
         }
     }
-    sal_uInt16 method = 0;
-    for (sal_uInt16 i = 0; i < reader.getFieldCount(); ++i) {
+    for (std::vector< unoidl::InterfaceTypeEntity::Attribute >::const_iterator
+             i(ent2->getDirectAttributes().begin());
+         i != ent2->getDirectAttributes().end(); ++i)
+    {
         o << indentation;
         if (!body)
             o << "virtual ";
 
-        printType(o, options, manager,
-                  codemaker::convertString(reader.getFieldTypeName(i)), 1);
+        printType(o, options, manager, i->type, 1);
         o << " SAL_CALL ";
         if (!classname.isEmpty())
             o << classname;
 
-        o << "get"
-          << codemaker::convertString(reader.getFieldName(i)).getStr()
-          << "()";
-        if (method < reader.getMethodCount()
-            && reader.getMethodFlags(method) == RT_MODE_ATTRIBUTE_GET
-            && reader.getMethodName(method) == reader.getFieldName(i))
-        {
-            printExceptionSpecification(o, options, manager, reader, method++);
-        } else {
-            o << ((options.shortnames) ? " throw (css::uno::RuntimeException)" :
-                  " throw (::com::sun::star::uno::RuntimeException)");
-        }
+        o << "get" << i->name << "()";
+        printExceptionSpecification(o, options, manager, i->getExceptions);
         if (body) {
             if (defaultbody) {
                 if (!propertyhelper.isEmpty()) {
                     o << "\n{\n    osl::MutexGuard g(m_aMutex);\n    return m_"
-                      << codemaker::convertString(reader.getFieldName(i)).getStr()
-                      << ";\n}\n\n";
+                      << i->name << ";\n}\n\n";
                 } else {
                     o << "\n{\n    return ";
                     if (options.componenttype == 1) {
-                        o << "m_"
-                          << codemaker::convertString(
-                              reader.getFieldName(i)).getStr();
+                        o << "m_" << i->name;
                     } else {
-                        printType(o, options, manager,
-                                  codemaker::convertString(
-                                      reader.getFieldTypeName(i)),
-                                  8, true);
+                        printType(o, options, manager, i->type, 8, true);
                     }
                     o << ";\n}\n\n";
                 }
             } else {
                 o << "\n" << indentation << "{\n" << indentation << "    return "
-                  << delegate.getStr() << "get"
-                  << codemaker::convertString(reader.getFieldName(i)).getStr()
-                  << "();\n" << indentation << "}\n\n";
+                  << delegate.getStr() << "get" << i->name << "();\n"
+                  << indentation << "}\n\n";
             }
         } else {
             o << ";\n";
         }
 
-        if ((reader.getFieldFlags(i) & RT_ACCESS_READONLY) == 0) {
+        if (!i->readOnly) {
             o << indentation;
             if (!body)
                 o << "virtual ";
@@ -537,30 +596,17 @@ void printMethods(std::ostream & o,
             if (!classname.isEmpty())
                 o << classname;
 
-            o << "set"
-              << (codemaker::convertString(reader.getFieldName(i)).getStr())
-              << '(';
-            printType(o, options, manager,
-                      codemaker::convertString(reader.getFieldTypeName(i)), 4);
+            o << "set" << i->name << '(';
+            printType(o, options, manager, i->type, 4);
             o << " the_value)";
-            if (method < reader.getMethodCount()
-                && reader.getMethodFlags(method) == RT_MODE_ATTRIBUTE_SET
-                && reader.getMethodName(method) == reader.getFieldName(i))
-            {
-                printExceptionSpecification(o, options, manager, reader, method++);
-            } else {
-                o << ((options.shortnames) ? " throw (css::uno::RuntimeException)" :
-                      " throw (::com::sun::star::uno::RuntimeException)");
-            }
+            printExceptionSpecification(o, options, manager, i->setExceptions);
             if (body) {
                 if (defaultbody) {
                     if (!propertyhelper.isEmpty()) {
-                        printSetPropertyMixinBody(o, reader, i, method);
+                        printSetPropertyMixinBody(o, *i);
                     } else {
                         if (options.componenttype == 1) {
-                            o << "\n{\n    m_"
-                              << codemaker::convertString(
-                                  reader.getFieldName(i)).getStr()
+                            o << "\n{\n    m_" << i->name
                               << " = the_value;\n}\n\n";
                         } else {
                             o << "\n{\n\n}\n\n";
@@ -568,8 +614,7 @@ void printMethods(std::ostream & o,
                     }
                 } else {
                     o << "\n" << indentation << "{\n" << indentation << "    "
-                      << delegate.getStr() << "set"
-                      << codemaker::convertString(reader.getFieldName(i)).getStr()
+                      << delegate.getStr() << "set" << i->name
                       << "(the_value);\n" << indentation << "}\n\n";
                 }
             } else {
@@ -577,57 +622,50 @@ void printMethods(std::ostream & o,
             }
         }
     }
-    for (; method < reader.getMethodCount(); ++method) {
+    for (std::vector< unoidl::InterfaceTypeEntity::Method >::const_iterator i(
+             ent2->getDirectMethods().begin());
+         i != ent2->getDirectMethods().end(); ++i)
+    {
         o << indentation;
         if (!body)
             o << "virtual ";
 
-        printType(o, options, manager,
-                  codemaker::convertString(
-                      reader.getMethodReturnTypeName(method)), 1);
+        printType(o, options, manager, i->returnType, 1);
         o << " SAL_CALL ";
         if (!classname.isEmpty())
             o << classname;
 
-        const OString methodName(codemaker::convertString(reader.getMethodName(method)));
-
-        o << methodName << '(';
-        printMethodParameters(o, options, manager, reader, method, false, true);
+        o << i->name << '(';
+        printMethodParameters(o, options, manager, i->parameters, true);
         o << ')';
-        printExceptionSpecification(o, options, manager, reader, method);
+        printExceptionSpecification(o, options, manager, i->exceptions);
         if (body) {
-            static OUString s("void");
             if (defaultbody) {
                 o << "\n{\n";
-                if (!reader.getMethodReturnTypeName(method).equals(s)) {
+                if (i->returnType != "void") {
                     o << "    // TODO: Exchange the default return implementation for \""
-                      << methodName << "\" !!!\n";
+                      << i->name << "\" !!!\n";
                     o << "    // Exchange the default return implementation.\n"
                         "    // NOTE: Default initialized polymorphic structs "
                         "can cause problems because of\n    // missing default "
                         "initialization of primitive types of some C++ compilers or"
                         "\n    // different Any initialization in Java and C++ "
                         "polymorphic structs.\n    return ";
-                    printType(o, options, manager,
-                        codemaker::convertString(
-                            reader.getMethodReturnTypeName(method)), 8, true);
+                    printType(o, options, manager, i->returnType, 8, true);
                     o << ";";
                 } else {
                     o << "    // TODO: Insert your implementation for \""
-                      << methodName << "\" here.";
+                      << i->name << "\" here.";
                 }
                 o << "\n}\n\n";
             } else {
                 o << "\n" << indentation << "{\n" << indentation << "    ";
-                if (!reader.getMethodReturnTypeName(method).equals(s))
+                if (i->returnType != "void")
                     o << "return ";
 
-                o << delegate.getStr()
-                  << (codemaker::convertString(
-                          reader.getMethodName(method)).getStr())
-                  << '(';
-                printMethodParameters(o, options, manager, reader, method,
-                                      false, false);
+                o << delegate.getStr() << i->name << '(';
+                printMethodParameters(
+                    o, options, manager, i->parameters, false);
                 o << ");\n" << indentation << "}\n\n";
             }
         } else {
@@ -635,92 +673,115 @@ void printMethods(std::ostream & o,
         }
     }
 
-    if (method > 0 && !body)
+    if (!body)
         o << "\n";
 }
 
-void printConstructionMethods(std::ostream & o,
-    ProgramOptions const & options, rtl::Reference< TypeManager > const & manager,
-    typereg::Reader const & reader)
+void printConstructors(
+    std::ostream & o, ProgramOptions const & options,
+    rtl::Reference< TypeManager > const & manager, OUString const & name)
 {
-    for (sal_uInt16 i = 0; i < reader.getMethodCount(); ++i) {
+    rtl::Reference< unoidl::Entity > ent;
+    if (manager->getSort(name, &ent)
+        != codemaker::UnoType::SORT_SINGLE_INTERFACE_BASED_SERVICE)
+    {
+        throw CannotDumpException(
+            "unexpected entity \"" + name
+            + "\" in call to skeletonmaker::java::printConstructors");
+    }
+    rtl::Reference< unoidl::SingleInterfaceBasedServiceEntity > ent2(
+        dynamic_cast< unoidl::SingleInterfaceBasedServiceEntity * >(ent.get()));
+    assert(ent2.is());
+    for (std::vector< unoidl::SingleInterfaceBasedServiceEntity::Constructor >::
+             const_iterator i(ent2->getConstructors().begin());
+         i != ent2->getConstructors().end(); ++i)
+    {
         o << "static ";
-        printType(o,
-            options, manager,
-            codemaker::convertString(reader.getSuperTypeName(0)), 1);
+        printType(o, options, manager, ent2->getBase(), 1);
         o << ' ';
-        if (reader.getMethodName(i).isEmpty()) {
+        if (i->defaultConstructor) {
             o << "create";
         } else {
-            o << (codemaker::cpp::translateUnoToCppIdentifier(
-                      codemaker::convertString(reader.getMethodName(i)),
-                      "method").
-                  getStr());
+            o << codemaker::cpp::translateUnoToCppIdentifier(
+                u2b(i->name), "method");
         }
         o << ((options.shortnames) ? "(css::uno::Reference< css" :
               "(::com::sun::star::uno::Reference< ::com::sun::star")
           << "::uno::XComponentContext > const & the_context";
-        printMethodParameters(o, options, manager, reader, i,
-                              true, true);
+        for (std::vector<
+                 unoidl::SingleInterfaceBasedServiceEntity::Constructor::
+                 Parameter >::const_iterator j(i->parameters.begin());
+             j != i->parameters.end(); ++j)
+        {
+            o << ", ";
+            printType(o, options, manager, j->type, 4);
+            o << ' '
+              << codemaker::cpp::translateUnoToCppIdentifier(
+                  u2b(j->name), "param");
+        }
         o << ')';
-        printExceptionSpecification(o, options, manager, reader, i);
+        printExceptionSpecification(o, options, manager, i->exceptions);
         o << ";\n";
     }
 }
 
-void printServiceMembers(std::ostream & o,
-    ProgramOptions const & options, rtl::Reference< TypeManager > const & manager,
-    typereg::Reader const & reader, OString const & type,
+void printServiceMembers(
+    std::ostream & o, ProgramOptions const & options,
+    rtl::Reference< TypeManager > const & manager,
+    OUString const & name,
+    rtl::Reference< unoidl::AccumulationBasedServiceEntity > const & entity,
     OString const & delegate)
 {
-    for (sal_uInt16 i = 0; i < reader.getReferenceCount(); ++i) {
-        OString referenceType(
-            codemaker::convertString(
-                reader.getReferenceTypeName(i)).replace('/', '.'));
-
-        if ( reader.getReferenceSort(i) == RT_REF_SUPPORTS ) {
-            o << "\n// supported interface " << referenceType.getStr() << "\n";
-            generateDocumentation(o, options, manager, referenceType, delegate);
-        } else if ( reader.getReferenceSort(i) == RT_REF_EXPORTS ) {
-            o << "\n// exported service " << referenceType.getStr() << "\n";
-            generateDocumentation(o, options, manager, referenceType, delegate);
-            o << "\n// end of exported service " << referenceType.getStr() << "\n";
-        }
+    assert(entity.is());
+    for (std::vector< OUString >::const_iterator i(
+             entity->getDirectMandatoryBaseServices().begin());
+         i != entity->getDirectMandatoryBaseServices().end(); ++i)
+    {
+        o << "\n// exported service " << *i << "\n";
+        generateDocumentation(o, options, manager, u2b(*i), delegate);
+        o << "\n// end of exported service " << *i << "\n";
+    }
+    for (std::vector< OUString >::const_iterator i(
+             entity->getDirectMandatoryBaseInterfaces().begin());
+         i != entity->getDirectMandatoryBaseInterfaces().end(); ++i)
+    {
+        o << "\n// supported interface " << *i << "\n";
+        generateDocumentation(o, options, manager, u2b(*i), delegate);
     }
-
     if (delegate.isEmpty()) {
-        o << "\n// properties of service \""<< type.getStr() << "\"\n";
-        for (sal_uInt16 i = 0; i < reader.getFieldCount(); ++i) {
-            OString fieldName(
-                codemaker::convertString(reader.getFieldName(i)));
-            OString fieldType(
-                codemaker::convertString(reader.getFieldTypeName(i)));
-
+        o << "\n// properties of service \""<< name << "\"\n";
+        for (std::vector< unoidl::AccumulationBasedServiceEntity::Property >::
+                 const_iterator i(entity->getDirectProperties().begin());
+             i != entity->getDirectProperties().end(); ++i)
+        {
             o << "// private ";
-            printType(o, options, manager, fieldType, 1);
+            printType(o, options, manager, i->type, 1);
             o << " "
               << codemaker::cpp::translateUnoToCppIdentifier(
-                  fieldName, "property").getStr()
+                  u2b(i->name), "property")
               << ";\n";
         }
     }
 }
 
-void printMapsToCppType(std::ostream & o,
-    ProgramOptions const & options, rtl::Reference< TypeManager > const & manager,
-    codemaker::UnoType::Sort sort, RTTypeClass typeClass,
-    OString const & name, sal_Int32 rank,
-    std::vector< OString > const & arguments, const char * cppTypeSort)
+void printMapsToCppType(
+    std::ostream & o, ProgramOptions const & options,
+    rtl::Reference< TypeManager > const & manager,
+    codemaker::UnoType::Sort sort, OUString const & nucleus, sal_Int32 rank,
+    std::vector< OUString > const & arguments,
+    rtl::Reference< unoidl::Entity > const & entity, const char * cppTypeSort)
 {
     o << "maps to C++ ";
     if (cppTypeSort != 0)
         o << cppTypeSort << ' ';
 
     o << "type \"";
-    if (rank == 0 && name == "com/sun/star/uno/XInterface") {
+    if (rank == 0 && nucleus == "com.sun.star.uno.XInterface") {
         o << "Reference< com::sun::star::uno::XInterface >";
     } else {
-        printType(o, options, manager, sort, typeClass, name, rank, arguments, 0);
+        printType(
+            o, options, manager, sort, nucleus, rank, arguments, entity, 0,
+            false);
     }
     o << '"';
 }
@@ -729,88 +790,79 @@ void generateDocumentation(std::ostream & o,
     ProgramOptions const & options, rtl::Reference< TypeManager > const & manager,
     OString const & type, OString const & delegate)
 {
-    if (type.indexOf('/') >= 0)
-        throw CannotDumpException("Illegal type name " + b2u(type));
-
-    OString binType(type.replace('.', '/'));
-    RTTypeClass typeClass;
-    OString name;
+    OUString nucleus;
     sal_Int32 rank;
-    std::vector< OString > arguments;
-    codemaker::UnoType::Sort sort = decomposeResolveAndCheck(
-        manager, binType, false, true, true, &typeClass, &name, &rank,
-        &arguments);
+    codemaker::UnoType::Sort sort = manager->decompose(
+        b2u(type), false, &nucleus, &rank, 0, 0);
 
-    bool comment=true;
+    bool comment = true;
     if (!delegate.isEmpty()) {
-        if (typeClass != RT_TYPE_INTERFACE &&
-            typeClass != RT_TYPE_SERVICE )
+        if (sort != codemaker::UnoType::SORT_INTERFACE_TYPE &&
+            sort != codemaker::UnoType::SORT_SINGLE_INTERFACE_BASED_SERVICE &&
+            sort != codemaker::UnoType::SORT_ACCUMULATION_BASED_SERVICE )
         {
             return;
         }
-        comment=false;
+        comment = false;
     }
 
     if (comment) {
         o << "\n// UNO";
-        if (rank > 0) {
+        if (rank != 0) {
             o << " sequence type";
-        } else if (sort != codemaker::UnoType::SORT_COMPLEX) {
+        } else if (sort <= codemaker::UnoType::SORT_ANY) {
             o << " simple type";
         } else {
-            typereg::Reader reader(manager->getTypeReader(name));
-            if (!reader.isValid())
-                throw CannotDumpException("Bad type library entity " + b2u(name));
-
-            switch (typeClass)
-            {
-            case RT_TYPE_INTERFACE:
+            switch (sort) {
+            case codemaker::UnoType::SORT_INTERFACE_TYPE:
                 o << " interface type";
                 break;
 
-            case RT_TYPE_MODULE:
+            case codemaker::UnoType::SORT_MODULE:
                 o << "IDL module";
                 break;
 
-            case RT_TYPE_STRUCT:
-                if (reader.getReferenceCount() == 0)
-                    o << " simple struct type";
-                else if (arguments.empty())
-                    o << " polymorphic struct type template";
-                else
-                    o << " instantiated polymorphic struct type";
+            case codemaker::UnoType::SORT_PLAIN_STRUCT_TYPE:
+                o << " simple struct type";
                 break;
 
-            case RT_TYPE_ENUM:
+            case codemaker::UnoType::SORT_POLYMORPHIC_STRUCT_TYPE_TEMPLATE:
+                o << " polymorphic struct type template";
+                break;
+
+            case codemaker::UnoType::SORT_INSTANTIATED_POLYMORPHIC_STRUCT_TYPE:
+                o << " instantiated polymorphic struct type";
+                break;
+
+            case codemaker::UnoType::SORT_ENUM_TYPE:
                 o << " enum type";
                 break;
 
-            case RT_TYPE_EXCEPTION:
+            case codemaker::UnoType::SORT_EXCEPTION_TYPE:
                 o << " exception type";
                 break;
 
-            case RT_TYPE_TYPEDEF:
+            case codemaker::UnoType::SORT_TYPEDEF:
                 o << "IDL typedef";
                 break;
 
-            case RT_TYPE_SERVICE:
-                if (reader.getSuperTypeCount() > 0)
-                    o << " single-inheritance--based service";
-                else
-                    o << "IDL accumulation-based service";
+            case codemaker::UnoType::SORT_SINGLE_INTERFACE_BASED_SERVICE:
+                o << " single-inheritance--based service";
+                break;
+
+            case codemaker::UnoType::SORT_ACCUMULATION_BASED_SERVICE:
+                o << "IDL accumulation-based service";
+                break;
+
+            case codemaker::UnoType::SORT_INTERFACE_BASED_SINGLETON:
+                o << " inheritance-based singleton";
                 break;
 
-            case RT_TYPE_SINGLETON:
-                if ((manager->getTypeReader(
-                         codemaker::convertString(
-                             reader.getSuperTypeName(0))).getTypeClass())
-                    == RT_TYPE_INTERFACE)
-                    o << " inheritance-based singleton";
-                else
-                    o << "IDL service-based singleton";
+            case codemaker::UnoType::SORT_SERVICE_BASED_SINGLETON:
+                o << "IDL service-based singleton";
                 break;
 
-            case RT_TYPE_CONSTANTS:
+            case codemaker::UnoType::SORT_CONSTANT_GROUP:
                 o << "IDL constant group";
                 break;
 
@@ -819,36 +871,33 @@ void generateDocumentation(std::ostream & o,
                 break;
             }
         }
-        o << " \"" << type.getStr() << "\" ";
+        o << " \"" << type << "\" ";
     }
-    sort = codemaker::decomposeAndResolve(
-        manager, binType, true, true, true, &typeClass, &name, &rank,
-        &arguments);
-    if (rank > 0) {
+    std::vector< OUString > arguments;
+    rtl::Reference< unoidl::Entity > entity;
+    sort = manager->decompose(
+        b2u(type), true, &nucleus, &rank, &arguments, &entity);
+    if (rank != 0) {
         if (comment) {
-            printMapsToCppType(o,
-                options, manager, sort, typeClass, name, rank, arguments, "array");
+            printMapsToCppType(
+                o, options, manager, sort, nucleus, rank, arguments, entity,
+                "array");
             o << '\n';
         }
-    } else if (sort != codemaker::UnoType::SORT_COMPLEX) {
+    } else if (sort <= codemaker::UnoType::SORT_ANY) {
         if (comment) {
-            printMapsToCppType(o,
-                options, manager, sort, typeClass, name, rank, arguments, 0);
+            printMapsToCppType(
+                o, options, manager, sort, nucleus, rank, arguments, entity, 0);
             o << '\n';
         }
     } else {
-        typereg::Reader reader(manager->getTypeReader(name));
-        if (!reader.isValid())
-            throw CannotDumpException("Bad type library entity " + b2u(name));
-
-        switch (typeClass)
-        {
-        case RT_TYPE_INTERFACE:
+        switch (sort) {
+        case codemaker::UnoType::SORT_INTERFACE_TYPE:
             if (comment)
-                printMapsToCppType(o,
-                    options, manager, sort, typeClass, name, rank, arguments,
+                printMapsToCppType(
+                    o, options, manager, sort, nucleus, rank, arguments, entity,
                     "interface");
-            if (name == "com/sun/star/uno/XInterface") {
+            if (nucleus == "com.sun.star.uno.XInterface") {
                 if (comment)
                     o << '\n';
             } else {
@@ -856,96 +905,116 @@ void generateDocumentation(std::ostream & o,
                     o << "; " << (options.all ? "all" : "direct") << " methods:\n";
 
                 codemaker::GeneratedTypeSet generated;
-                printMethods(o, options, manager, reader, generated,
-                             delegate, options.implname, "");
+                printMethods(
+                    o, options, manager, nucleus, generated, delegate,
+                    options.implname, "");
             }
             break;
 
-        case RT_TYPE_MODULE:
-            printMapsToCppType(o,
-                options, manager, sort, typeClass, name, rank, arguments,
+        case codemaker::UnoType::SORT_MODULE:
+            printMapsToCppType(
+                o, options, manager, sort, nucleus, rank, arguments, entity,
                 "namespace");
             o << '\n';
             break;
 
-        case RT_TYPE_STRUCT:
-            if (reader.getReferenceCount() == 0) {
-                printMapsToCppType(o,
-                    options, manager, sort, typeClass, name, rank, arguments,
-                    "class");
-            } else if (arguments.empty()) {
-                printMapsToCppType(o,
-                    options, manager, sort, typeClass, name, rank, arguments,
-                    options.java5 ? "generic class" : "class");
-            } else {
-                printMapsToCppType(o,
-                    options, manager, sort, typeClass, name, rank, arguments,
-                    options.java5 ? "generic class instantiation" : "class");
-            }
+        case codemaker::UnoType::SORT_PLAIN_STRUCT_TYPE:
+            printMapsToCppType(
+                o, options, manager, sort, nucleus, rank, arguments, entity,
+                "class");
+            o << "; full constructor:\n";
+            printConstructor(
+                o, options, manager, codemaker::UnoType::SORT_PLAIN_STRUCT_TYPE,
+                entity, nucleus, arguments);
+            break;
+
+        case codemaker::UnoType::SORT_POLYMORPHIC_STRUCT_TYPE_TEMPLATE:
+            printMapsToCppType(
+                o, options, manager, sort, nucleus, rank, arguments, entity,
+                options.java5 ? "generic class" : "class");
+            o << "; full constructor:\n";
+            printConstructor(
+                o, options, manager,
+                codemaker::UnoType::SORT_POLYMORPHIC_STRUCT_TYPE_TEMPLATE,
+                entity, nucleus, arguments);
+            break;
+
+        case codemaker::UnoType::SORT_INSTANTIATED_POLYMORPHIC_STRUCT_TYPE:
+            printMapsToCppType(
+                o, options, manager, sort, nucleus, rank, arguments, entity,
+                options.java5 ? "generic class instantiation" : "class");
             o << "; full constructor:\n";
-            printConstructor(o, options, manager, reader, arguments);
+            printConstructor(
+                o, options, manager,
+                codemaker::UnoType::SORT_INSTANTIATED_POLYMORPHIC_STRUCT_TYPE,
+                entity, nucleus, arguments);
             break;
 
-        case RT_TYPE_ENUM:
-            printMapsToCppType(o,
-                options, manager, sort, typeClass, name, rank, arguments,
+        case codemaker::UnoType::SORT_ENUM_TYPE:
+            printMapsToCppType(
+                o, options, manager, sort, nucleus, rank, arguments, entity,
                 "enum");
             o << '\n';
             break;
 
-        case RT_TYPE_CONSTANTS:
-            printMapsToCppType(o,
-                options, manager, sort, typeClass, name, rank, arguments,
+        case codemaker::UnoType::SORT_CONSTANT_GROUP:
+            printMapsToCppType(
+                o, options, manager, sort, nucleus, rank, arguments, entity,
                 "namespace");
             o << '\n';
             break;
 
-        case RT_TYPE_EXCEPTION:
-            printMapsToCppType(o,
-                options, manager, sort, typeClass, name, rank, arguments,
+        case codemaker::UnoType::SORT_EXCEPTION_TYPE:
+            printMapsToCppType(
+                o, options, manager, sort, nucleus, rank, arguments, entity,
                 "exception class");
             o << "; full constructor:\n";
-            printConstructor(o, options, manager, reader, arguments);
+            printConstructor(
+                o, options, manager, codemaker::UnoType::SORT_EXCEPTION_TYPE,
+                entity, nucleus, arguments);
             break;
 
-        case RT_TYPE_SERVICE:
-            if (reader.getSuperTypeCount() > 0) {
-                if (comment) {
-                    printMapsToCppType(o, options, manager, sort, typeClass,
-                                       name, rank, arguments, "class");
-                    o << "; construction methods:\n";
-                    printConstructionMethods(o, options, manager, reader);
-                }
-
-                OString super(
-                    codemaker::convertString(
-                        reader.getSuperTypeName(0)).replace('/', '.'));
-                generateDocumentation(o, options, manager, super, delegate);
-            } else {
-                if (comment)
-                    o << ("does not map to C++\n"
-                          "// the service members are generated instead\n");
-                printServiceMembers(o, options, manager, reader, type, delegate);
+        case codemaker::UnoType::SORT_SINGLE_INTERFACE_BASED_SERVICE:
+            if (comment) {
+                printMapsToCppType(
+                    o, options, manager, sort, nucleus, rank, arguments, entity,
+                    "class");
+                o << "; construction methods:\n";
+                printConstructors(o, options, manager, nucleus);
             }
+            generateDocumentation(
+                o, options, manager,
+                u2b(dynamic_cast< unoidl::SingleInterfaceBasedServiceEntity * >(
+                        entity.get())->getBase()),
+                delegate);
             break;
 
-        case RT_TYPE_SINGLETON:
-            if (reader.getSuperTypeCount() > 0 &&
-                ((manager->getTypeReader(
-                     codemaker::convertString(
-                         reader.getSuperTypeName(0))).
-                    getTypeClass()) == RT_TYPE_INTERFACE) )
-            {
-                printMapsToCppType(o, options, manager, sort, typeClass,
-                                   name, rank, arguments,
-                    "class");
-                o << "; get method:\nstatic ";
-                printType(o, options, manager,
-                          codemaker::convertString(reader.getSuperTypeName(0)), 1);
-                o << " get(::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > const & context);\n";
-            } else {
-                o << "does not map to C++\n";
-            }
+        case codemaker::UnoType::SORT_ACCUMULATION_BASED_SERVICE:
+            if (comment)
+                o << ("does not map to C++\n"
+                      "// the service members are generated instead\n");
+            printServiceMembers(
+                o, options, manager, nucleus,
+                dynamic_cast< unoidl::AccumulationBasedServiceEntity * >(
+                    entity.get()),
+                delegate);
+            break;
+
+        case codemaker::UnoType::SORT_INTERFACE_BASED_SINGLETON:
+            printMapsToCppType(
+                o, options, manager, sort, nucleus, rank, arguments, entity,
+                "class");
+            o << "; get method:\nstatic ";
+            printType(
+                o, options, manager,
+                dynamic_cast< unoidl::InterfaceBasedSingletonEntity * >(
+                    entity.get())->getBase(),
+                1);
+            o << " get(::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > const & context);\n";
+            break;
+
+        case codemaker::UnoType::SORT_SERVICE_BASED_SINGLETON:
+            o << "does not map to C++\n";
             break;
 
         default:
diff --git a/unodevtools/source/skeletonmaker/javacompskeleton.cxx b/unodevtools/source/skeletonmaker/javacompskeleton.cxx
index 2e9efed..339dbad 100644
--- a/unodevtools/source/skeletonmaker/javacompskeleton.cxx
+++ b/unodevtools/source/skeletonmaker/javacompskeleton.cxx
@@ -37,7 +37,7 @@ void generatePackage(std::ostream & o, const OString & implname)
 }
 
 void generateImports(std::ostream & o, ProgramOptions const & options,
-         const OString & propertyhelper,
+         const OUString & propertyhelper,
          bool serviceobject, bool supportxcomponent)
 {
     if (options.componenttype == 3)
@@ -183,7 +183,9 @@ void generateXPropertyAccessBodies(std::ostream& o)
 }
 
 
-bool checkAttribute(OStringBuffer& attributeValue, sal_uInt16 attribute)
+bool checkAttribute(
+    OStringBuffer& attributeValue,
+    unoidl::AccumulationBasedServiceEntity::Property::Attributes attribute)
 {
     bool cast = false;
     sal_uInt16 attributes[9] = {
@@ -254,15 +256,15 @@ void registerProperties(std::ostream& o,
         for (AttributeInfo::const_iterator i(properties.begin());
              i != properties.end(); ++i)
         {
-            if (i->second.second > 0) {
-                cast = checkAttribute(attributeValue, i->second.second);
+            if (i->attributes != 0) {
+                cast = checkAttribute(attributeValue, i->attributes);
             } else {
                 cast = true;
                 attributeValue.append('0');
             }
 
-            o << indentation << "registerProperty(\"" << i->first
-              << "\", \"m_" << i->first << "\",\n"
+            o << indentation << "registerProperty(\"" << i->name
+              << "\", \"m_" << i->name << "\",\n"
               << indentation << "      ";
             if (cast)
                 o << "(short)";
@@ -504,29 +506,28 @@ void generateXDispatchProviderBodies(std::ostream& o, ProgramOptions const & opt
 void generateMethodBodies(std::ostream& o,
          ProgramOptions const & options,
          rtl::Reference< TypeManager > const & manager,
-         const boost::unordered_set< OString, OStringHash >& interfaces,
+         const std::set< OUString >& interfaces,
          const OString& indentation, bool usepropertymixin)
 {
-    boost::unordered_set< OString, OStringHash >::const_iterator iter =
-        interfaces.begin();
+    std::set< OUString >::const_iterator iter = interfaces.begin();
     codemaker::GeneratedTypeSet generated;
     while (iter != interfaces.end()) {
-        OString type(*iter);
+        OUString type(*iter);
         ++iter;
         if (type.equals("com.sun.star.lang.XServiceInfo")) {
             generateXServiceInfoBodies(o);
-            generated.add(type);
+            generated.add(u2b(type));
         } else {
             if (options.componenttype == 2) {
                 if (type.equals("com.sun.star.lang.XServiceName")) {
                     o << "    // com.sun.star.lang.XServiceName:\n"
                         "    public String getServiceName() {\n"
                         "        return sADDIN_SERVICENAME;\n    }\n";
-                    generated.add(type);
+                    generated.add(u2b(type));
                     continue;
                 } else if (type.equals("com.sun.star.sheet.XAddIn")) {
                     generateXAddInBodies(o, options);
-                    generated.add(type);
+                    generated.add(u2b(type));
 
                     // special handling of XLocalizable -> parent of XAddIn
                     if (!generated.contains("com.sun.star.lang.XLocalizable")) {
@@ -536,31 +537,30 @@ void generateMethodBodies(std::ostream& o,
                     continue;
                 } else if (type.equals("com.sun.star.lang.XLocalizable")) {
                     generateXLocalizableBodies(o);
-                    generated.add(type);
+                    generated.add(u2b(type));
                     continue;
                 } else if (type.equals("com.sun.star.sheet.XCompatibilityNames")) {
                     generateXCompatibilityNamesBodies(o);
-                    generated.add(type);
+                    generated.add(u2b(type));
                     continue;
                 }
             }
             if (options.componenttype == 3) {
                 if (type.equals("com.sun.star.lang.XInitialization")) {
                     generateXInitializationBodies(o);
-                    generated.add(type);
+                    generated.add(u2b(type));
                     continue;
                 } else if (type.equals("com.sun.star.frame.XDispatch")) {
                     generateXDispatchBodies(o, options);
-                    generated.add(type);
+                    generated.add(u2b(type));
                     continue;
                 } else if (type.equals("com.sun.star.frame.XDispatchProvider")) {
                     generateXDispatchProviderBodies(o, options);
-                    generated.add(type);
+                    generated.add(u2b(type));
                     continue;
                 }
             }
-            typereg::Reader reader(manager->getTypeReader(type.replace('.','/')));
-            printMethods(o, options, manager, reader, generated, "_",
+            printMethods(o, options, manager, type, generated, "_",
                          indentation, true, usepropertymixin);
         }
     }
@@ -576,8 +576,8 @@ static const char* propcomment=
 void generateAddinConstructorAndHelper(std::ostream& o,
          ProgramOptions const & options,
          rtl::Reference< TypeManager > const & manager, const OString & classname,
-         const boost::unordered_set< OString, OStringHash >& services,
-         const boost::unordered_set< OString, OStringHash >& interfaces)
+         const std::set< OUString >& services,
+         const std::set< OUString >& interfaces)
 {
     o << "    private com.sun.star.lang.Locale m_locale = "
         "new com.sun.star.lang.Locale();\n";
@@ -591,10 +591,10 @@ void generateAddinConstructorAndHelper(std::ostream& o,
 
 
     // get the one and only add-in service for later use
-    boost::unordered_set< OString, OStringHash >::const_iterator iter = services.begin();
-    OString sAddinService = (*iter).replace('/', '.');
-    if (sAddinService.equals("com.sun.star.sheet.AddIn")) {
-        sAddinService = (*(++iter)).replace('/', '.');
+    std::set< OUString >::const_iterator iter = services.begin();
+    OUString sAddinService = *iter;
+    if (sAddinService == "com.sun.star.sheet.AddIn") {
+        sAddinService = *(++iter);
     }
 
 
@@ -722,11 +722,11 @@ void generateClassDefinition(std::ostream& o,
          ProgramOptions const & options,
          rtl::Reference< TypeManager > const & manager,
          const OString & classname,
-         const boost::unordered_set< OString, OStringHash >& services,
-         const boost::unordered_set< OString, OStringHash >& interfaces,
+         const std::set< OUString >& services,
+         const std::set< OUString >& interfaces,
          const AttributeInfo& properties,
          const AttributeInfo& attributes,
-         const OString& propertyhelper, bool supportxcomponent)
+         const OUString& propertyhelper, bool supportxcomponent)
 {
     o << "\n\npublic final class " << classname << " extends ";
 
@@ -740,8 +740,7 @@ void generateClassDefinition(std::ostream& o,
                 o << "WeakBase\n";
         }
         o << "   implements ";
-        boost::unordered_set< OString, OStringHash >::const_iterator iter =
-            interfaces.begin();
+        std::set< OUString >::const_iterator iter = interfaces.begin();
         while (iter != interfaces.end()) {
             o << (*iter);
             ++iter;
@@ -767,8 +766,7 @@ void generateClassDefinition(std::ostream& o,
 
     if (!services.empty()) {
         o << "    private static final String[] m_serviceNames = {\n";
-        boost::unordered_set< OString, OStringHash >::const_iterator iter =
-            services.begin();
+        std::set< OUString >::const_iterator iter = services.begin();
         while (iter != services.end()) {
             o << "        \"" << (*iter).replace('/','.') << "\"";
             ++iter;
@@ -786,9 +784,8 @@ void generateClassDefinition(std::ostream& o,
         o << "    // properties\n";
         while (iter != properties.end()) {
             o << "    protected ";
-            printType(o, options, manager, iter->second.first.replace('.','/'),
-                      false, false);
-            o << " m_" << iter->first << ";\n";
+            printType(o, options, manager, iter->type, false, false);
+            o << " m_" << iter->name << ";\n";
             ++iter;
         }
     } else if (!attributes.empty()) {
@@ -797,11 +794,9 @@ void generateClassDefinition(std::ostream& o,
         o << "    // attributes\n";
         while (iter != attributes.end()) {
             o << "    private ";
-            printType(o, options, manager, iter->second.first.replace('.','/'),
-                      false, false);
-            o << " m_" << iter->first << " = ";
-            printType(o, options, manager, iter->second.first.replace('.','/'),
-                      false, true);
+            printType(o, options, manager, iter->type, false, false);
+            o << " m_" << iter->name << " = ";
+            printType(o, options, manager, iter->type, false, true);
             o <<";\n";
             ++iter;
         }
@@ -843,17 +838,17 @@ void generateSkeleton(ProgramOptions const & options,
                       rtl::Reference< TypeManager > const & manager,
                       std::vector< OString > const & types)
 {
-    boost::unordered_set< OString, OStringHash > interfaces;
-    boost::unordered_set< OString, OStringHash > services;
+    std::set< OUString > interfaces;
+    std::set< OUString > services;
     AttributeInfo properties;
     AttributeInfo attributes;
-    boost::unordered_set< OString, OStringHash > propinterfaces;
+    std::set< OUString > propinterfaces;
     bool serviceobject = false;
     bool supportxcomponent = false;
 
     std::vector< OString >::const_iterator iter = types.begin();
     while (iter != types.end()) {
-        checkType(manager, *iter, interfaces, services, properties);
+        checkType(manager, b2u(*iter), interfaces, services, properties);
         ++iter;
     }
 
@@ -898,7 +893,7 @@ void generateSkeleton(ProgramOptions const & options,
     if (!services.empty())
         serviceobject = true;
 
-    OString propertyhelper = checkPropertyHelper(
+    OUString propertyhelper = checkPropertyHelper(
         options, manager, services, interfaces, attributes, propinterfaces);
     checkDefaultInterfaces(interfaces, services, propertyhelper);
 
diff --git a/unodevtools/source/skeletonmaker/javatypemaker.cxx b/unodevtools/source/skeletonmaker/javatypemaker.cxx
index 08761ac..0d24942 100644
--- a/unodevtools/source/skeletonmaker/javatypemaker.cxx
+++ b/unodevtools/source/skeletonmaker/javatypemaker.cxx
@@ -17,6 +17,10 @@
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
 
+#include "sal/config.h"
+
+#include <cstring>
+
 #include "codemaker/commonjava.hxx"
 
 #include "skeletoncommon.hxx"
@@ -26,21 +30,15 @@ using namespace ::rtl;
 
 namespace skeletonmaker { namespace java {
 
-void printType(std::ostream & o,
-               ProgramOptions const & options, rtl::Reference< TypeManager > const & manager,
-               OString const & type, bool referenceType,
-               bool defaultvalue);
-
-void printType(std::ostream & o,
-               ProgramOptions const & options, rtl::Reference< TypeManager > const & manager,
-               codemaker::UnoType::Sort sort, RTTypeClass typeClass,
-               OString const & name, sal_Int32 rank,
-               std::vector< OString > const & arguments, bool referenceType,
-               bool defaultvalue)
+void printType(
+    std::ostream & o, ProgramOptions const & options,
+    rtl::Reference< TypeManager > const & manager,
+    codemaker::UnoType::Sort sort, OUString const & nucleus, sal_Int32 rank,
+    std::vector< OUString > const & arguments, bool referenceType,
+    bool defaultvalue)
 {
-    if ( defaultvalue && rank == 0 && sort <= codemaker::UnoType::SORT_CHAR ) {
-        switch (sort)
-        {
+    if (defaultvalue && rank == 0 && sort <= codemaker::UnoType::SORT_CHAR) {
+        switch (sort) {
         case codemaker::UnoType::SORT_BOOLEAN:
             o << "false";
             return;
@@ -56,217 +54,287 @@ void printType(std::ostream & o,
         case codemaker::UnoType::SORT_DOUBLE:
             o << "0";
             return;
-        case codemaker::UnoType::SORT_VOID:
-        case codemaker::UnoType::SORT_STRING:
-        case codemaker::UnoType::SORT_TYPE:
-        case codemaker::UnoType::SORT_ANY:
-        case codemaker::UnoType::SORT_COMPLEX: default: //TODO
+        default:
             break;
         }
     }
 
-    if ( defaultvalue ) {
-        if ( sort == codemaker::UnoType::SORT_COMPLEX &&
-            typeClass == RT_TYPE_INTERFACE ) {
+    if (defaultvalue) {
+        if (sort == codemaker::UnoType::SORT_INTERFACE_TYPE) {
             o << "null";
             return;
-        } else if ( sort == codemaker::UnoType::SORT_ANY && rank==0 ) {
+        } else if (sort == codemaker::UnoType::SORT_ANY && rank == 0) {
             o << "com.sun.star.uno.Any.VOID";
             return;
-        } else if ( sort == codemaker::UnoType::SORT_TYPE && rank==0 ) {
+        } else if (sort == codemaker::UnoType::SORT_TYPE && rank == 0) {
             o << "com.sun.star.uno.Type.VOID";
             return;
-        } else
-            if ( typeClass != RT_TYPE_ENUM || rank > 0 )
-                o << "new ";
+        } else if (sort != codemaker::UnoType::SORT_ENUM_TYPE || rank != 0) {
+            o << "new ";
+        }
     }
 
-    OString sType(codemaker::java::translateUnoToJavaType(
-                      sort, name, referenceType && rank==0).replace('/', '.'));
-    if ( sType.indexOf("java.lang.") == 0 )
-        sType = sType.copy(10);
-    o << sType.getStr();
-    if ( !arguments.empty() && options.java5 ) {
+    OString sType(
+        codemaker::java::translateUnoToJavaType(
+            sort, u2b(nucleus), referenceType && rank == 0));
+    if (sType.startsWith("java.lang.")) {
+        sType = sType.copy(std::strlen("java.lang."));
+    }
+    o << sType;
+    if (!arguments.empty() && options.java5) {
         o << '<';
-        for ( std::vector< OString >::const_iterator i(arguments.begin());
-              i != arguments.end(); ++i )
+        for (std::vector< OUString >::const_iterator i(arguments.begin());
+             i != arguments.end(); ++i)
         {
-            if ( i != arguments.begin() ) {
+            if (i != arguments.begin()) {
                 o << ", ";
             }
-
             printType(o, options, manager, *i, true, false);
         }
         o << '>';
     }
-    for ( sal_Int32 i = 0; i < rank; ++i ) {
-        if ( defaultvalue )
+    for (sal_Int32 i = 0; i != rank; ++i) {
+        if (defaultvalue)
             o << "[0]";
         else
             o << "[]";
     }
 
-    if ( defaultvalue && sort > codemaker::UnoType::SORT_CHAR && rank == 0 ) {
-        if ( typeClass == RT_TYPE_ENUM )
+    if (defaultvalue && sort > codemaker::UnoType::SORT_CHAR && rank == 0) {
+        if (sort == codemaker::UnoType::SORT_ENUM_TYPE)
             o << ".getDefault()";
         else
             o << "()";
     }
 }
 
-void printType(std::ostream & o,
-    ProgramOptions const & options, rtl::Reference< TypeManager > const & manager,
-    OString const & type, bool referenceType, bool defaultvalue)
+void printType(
+    std::ostream & o, ProgramOptions const & options,
+    rtl::Reference< TypeManager > const & manager, OUString const & name,
+    bool referenceType, bool defaultvalue)
 {
-    RTTypeClass typeClass;
-    OString name;
+    OUString nucleus;
     sal_Int32 rank;
-    std::vector< OString > arguments;
-    codemaker::UnoType::Sort sort = codemaker::decomposeAndResolve(
-        manager, type, true, true, true, &typeClass, &name, &rank, &arguments);
-    printType(o,
-        options, manager, sort, typeClass, name, rank, arguments,
-        referenceType, defaultvalue);
+    std::vector< OUString > arguments;
+    codemaker::UnoType::Sort sort = manager->decompose(
+        name, true, &nucleus, &rank, &arguments, 0);
+    printType(
+        o, options, manager, sort, nucleus, rank, arguments, referenceType,
+        defaultvalue);
 }
 
-bool printConstructorParameters(std::ostream & o,
-    ProgramOptions const & options, rtl::Reference< TypeManager > const & manager,
-    typereg::Reader const & reader, typereg::Reader const & outerReader,
-    std::vector< OString > const & arguments)
+bool printConstructorParameters(
+    std::ostream & o, ProgramOptions const & options,
+    rtl::Reference< TypeManager > const & manager,
+    codemaker::UnoType::Sort sort,
+    rtl::Reference< unoidl::Entity > const & entity, OUString const & name,
+    std::vector< OUString > const & arguments)
 {
     bool previous = false;
-    if ( reader.getSuperTypeCount() != 0 ) {
-        OString super(
-            codemaker::convertString(reader.getSuperTypeName(0)));
-        typereg::Reader superReader(manager->getTypeReader(super));
-        if ( !superReader.isValid() ) {
-            throw CannotDumpException("Bad type library entity " + b2u(super));
+    switch (sort) {
+    case codemaker::UnoType::SORT_PLAIN_STRUCT_TYPE:
+        {
+            rtl::Reference< unoidl::PlainStructTypeEntity > ent2(
+                dynamic_cast< unoidl::PlainStructTypeEntity * >(entity.get()));
+            assert(ent2.is());
+            if (!ent2->getDirectBase().isEmpty()) {
+                rtl::Reference< unoidl::Entity > baseEnt;
+                codemaker::UnoType::Sort baseSort = manager->getSort(
+                    ent2->getDirectBase(), &baseEnt);
+                previous = printConstructorParameters(
+                    o, options, manager, baseSort, baseEnt,
+                    ent2->getDirectBase(), std::vector< OUString >());
+            }
+            for (std::vector< unoidl::PlainStructTypeEntity::Member >::
+                     const_iterator i(ent2->getDirectMembers().begin());
+                 i != ent2->getDirectMembers().end(); ++i)
+            {
+                if (previous) {
+                    o << ", ";
+                }
+                previous = true;
+                printType(o, options, manager, i->type, false);
+                o << ' '
+                  << codemaker::java::translateUnoToJavaIdentifier(
+                      u2b(i->name), "param");
+            }
+            break;
         }
-        previous = printConstructorParameters(o,
-            options, manager, superReader, outerReader, arguments);
-    }
-    for ( sal_uInt16 i = 0; i < reader.getFieldCount(); ++i ) {
-        if ( previous ) {
-            o << ", ";
+    case codemaker::UnoType::SORT_POLYMORPHIC_STRUCT_TYPE_TEMPLATE:
+        {
+            rtl::Reference< unoidl::PolymorphicStructTypeTemplateEntity > ent2(
+                dynamic_cast< unoidl::PolymorphicStructTypeTemplateEntity * >(
+                    entity.get()));
+            assert(ent2.is());
+            for (std::vector<
+                     unoidl::PolymorphicStructTypeTemplateEntity::Member >::
+                     const_iterator i(ent2->getMembers().begin());
+                 i != ent2->getMembers().end(); ++i)
+            {
+                if (previous) {
+                    o << ", ";
+                }
+                previous = true;
+                if (i->parameterized) {
+                    o << i->type;
+                } else {

... etc. - the rest is truncated


More information about the Libreoffice-commits mailing list