[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