40 std::vector< OUString >
const & arguments,
66 if (defaultvalue && referenceType == 16) {
69 assert(pEnumTypeEntity);
70 o << OUString(nucleus.substr(nucleus.rfind(
'.') + 1)) <<
"_"
71 << pEnumTypeEntity->getMembers()[0].name;
75 bool bReference =
false;
77 rank > 0) && referenceType != 8 &&
84 if (bReference && referenceType == 4)
87 for (sal_Int32
i = 0;
i < rank; ++
i) {
88 o << ((options.
shortnames) ?
"css::uno::Sequence< " :
89 "::com::sun::star::uno::Sequence< ");
92 o << ((options.
shortnames) ?
"css::uno::Reference< " :
93 "::com::sun::star::uno::Reference< ");
102 if (!arguments.empty()) {
104 for (std::vector< OUString >::const_iterator
i(arguments.begin());
105 i != arguments.end(); ++
i)
107 if (
i != arguments.begin())
115 for (sal_Int32
i = 0;
i < rank; ++
i)
118 if (bReference && referenceType > 1)
128 short referenceType,
bool defaultvalue)
132 std::vector< OUString > arguments;
135 name,
true, &nucleus, &rank, &arguments, &entity);
137 o, options,
manager, sort, nucleus, rank, arguments, entity,
138 referenceType, defaultvalue);
146 std::vector< OUString >
const & arguments)
148 bool previous =
false;
155 if (!ent2->getDirectBase().isEmpty()) {
158 ent2->getDirectBase(), &baseEnt);
160 o, options,
manager, baseSort, baseEnt,
161 ent2->getDirectBase(), std::vector< OUString >());
163 for (
const auto& rMember : ent2->getDirectMembers())
172 u2b(rMember.name),
"param");
182 for (
const auto& rMember : ent2->getMembers())
188 if (rMember.parameterized) {
195 u2b(rMember.name),
"param");
205 for (
const auto& rMember : ent2->getMembers())
211 if (rMember.parameterized) {
212 auto j = std::find(ent2->getTypeParameters().begin(),
213 ent2->getTypeParameters().end(), rMember.type);
214 if (j != ent2->getTypeParameters().end()) {
215 o << arguments[j - ent2->getTypeParameters().begin()];
222 u2b(rMember.name),
"param");
231 if (!ent2->getDirectBase().isEmpty()) {
234 ent2->getDirectBase(), &baseEnt);
236 o, options,
manager, baseSort, baseEnt,
237 ent2->getDirectBase(), std::vector< OUString >());
239 for (
const auto& rMember : ent2->getDirectMembers())
248 u2b(rMember.name),
"param");
254 OUString::Concat(
"unexpected entity \"") +
name
255 +
"\" in call to skeletonmaker::cpp::printConstructorParameters");
265 std::vector< OUString >
const & arguments)
267 o <<
"public " << OUString(
name.substr(
name.rfind(
'.') + 1)) <<
'(';
269 o, options,
manager, sort, entity,
name, arguments);
276 std::vector< unoidl::InterfaceTypeEntity::Method::Parameter >
const &
280 for (std::vector< unoidl::InterfaceTypeEntity::Method::Parameter >::
281 const_iterator
i(parameters.begin());
282 i != parameters.end(); ++
i)
284 if (
i != parameters.begin()) {
307 std::vector< OUString >
const & exceptions)
309 o << ((options.
shortnames) ?
" throw (css::uno::RuntimeException" :
310 " throw (::com::sun::star::uno::RuntimeException");
311 for (
const auto& rException : exceptions)
328 o <<
" BoundListeners l;\n";
333 sal_Int32
index = fieldtype.lastIndexOf(
'<');
336 bool optional =
false;
337 OStringBuffer buffer1(64);
338 OStringBuffer buffer2(64);
341 OString s(fieldtype.getToken(0,
'<',
nPos));
342 OString
t = s.copy(s.lastIndexOf(
'/')+1);
344 if (
t ==
"Optional") {
348 buffer1.append(
"the_value.IsPresent");
349 buffer2.append(
"the_value.Value");
351 buffer1.insert(0,
t);
352 buffer1.append(
".IsPresent");
353 buffer2.insert(0,
t);
354 buffer2.append(
".Value");
360 buffer1.append(
"the_value.Value");
362 buffer2.append(
"the_value.Value");
365 buffer1.insert(0,
t);
366 buffer1.append(
".Value");
368 buffer2.insert(0,
t);
369 buffer2.append(
".Value");
374 o <<
" css::uno::Any v;\n";
376 o <<
" if(" << buffer1.makeStringAndClear() <<
")\n {\n v <<= " << buffer2.makeStringAndClear() <<
";\n }\n";
378 o <<
" v <<= " << buffer2.makeStringAndClear() <<
";\n\n";
381 o <<
" prepareSet(\n OUString(\""
382 <<
attribute.name <<
"\"),\n css::uno::Any(), v, ";
384 o <<
" prepareSet(\n OUString(\""
385 <<
attribute.name <<
"\"),\n css::uno::Any(), css::uno::Any(), ";
393 o <<
" {\n osl::MutexGuard g(m_aMutex);\n m_"
394 <<
attribute.name <<
" = the_value;\n }\n";
397 o <<
" l.notify();\n";
405 OString
const & delegate, OString
const & classname,
406 OString
const & indentation,
bool defaultvalue,
407 OUString
const & propertyhelper)
411 (
name ==
"com.sun.star.lang.XComponent" ||
412 name ==
"com.sun.star.lang.XTypeProvider" ||
413 name ==
"com.sun.star.uno.XWeak" ) ) )
418 static OString
sd(
"_");
419 bool body = !delegate.isEmpty();
420 bool defaultbody = delegate ==
sd;
422 if (body && propertyhelper.getLength() > 1) {
423 if (
name ==
"com.sun.star.beans.XPropertySet") {
428 }
else if (
name ==
"com.sun.star.beans.XFastPropertySet") {
433 }
else if (
name ==
"com.sun.star.beans.XPropertyAccess") {
442 if (
name ==
"com.sun.star.lang.XServiceName") {
443 o <<
"// ::com::sun::star::lang::XServiceName:\n"
444 "OUString SAL_CALL " << classname <<
"getServiceName() "
445 "throw (css::uno::RuntimeException)\n{\n "
447 "sADDIN_SERVICENAME);\n}\n";
450 }
else if (
name ==
"com.sun.star.sheet.XAddIn") {
455 if (!generated.
contains(
"com.sun.star.lang.XLocalizable")) {
457 generated.
add(
"com.sun.star.lang.XLocalizable");
460 }
else if (
name ==
"com.sun.star.lang.XLocalizable") {
464 }
else if (
name ==
"com.sun.star.sheet.XCompatibilityNames") {
472 if (
name ==
"com.sun.star.lang.XInitialization") {
476 }
else if (
name ==
"com.sun.star.frame.XDispatch") {
480 }
else if (
name ==
"com.sun.star.frame.XDispatchProvider") {
492 "unexpected entity \"" +
name
493 +
"\" in call to skeletonmaker::cpp::printMethods");
498 if (options.
all || defaultvalue) {
499 for (
const auto& rBase : ent2->getDirectMandatoryBases())
502 o, options,
manager, rBase.name, generated, delegate, classname,
503 indentation, defaultvalue, propertyhelper);
505 if (!(ent2->getDirectAttributes().empty()
506 && ent2->getDirectMethods().empty()))
508 o << indentation <<
"// ";
513 for (
const auto& rAttr : ent2->getDirectAttributes())
521 if (!classname.isEmpty())
524 o <<
"get" << rAttr.name <<
"()";
528 if (!propertyhelper.isEmpty()) {
529 o <<
"\n{\n osl::MutexGuard g(m_aMutex);\n return m_"
530 << rAttr.name <<
";\n}\n\n";
532 o <<
"\n{\n return ";
534 o <<
"m_" << rAttr.name;
541 o <<
"\n" << indentation <<
"{\n" << indentation <<
" return "
542 << delegate <<
"get" << rAttr.name <<
"();\n"
543 << indentation <<
"}\n\n";
549 if (!rAttr.readOnly) {
554 o <<
"void SAL_CALL ";
555 if (!classname.isEmpty())
558 o <<
"set" << rAttr.name <<
'(';
564 if (!propertyhelper.isEmpty()) {
568 o <<
"\n{\n m_" << rAttr.name
569 <<
" = the_value;\n}\n\n";
575 o <<
"\n" << indentation <<
"{\n" << indentation <<
" "
576 << delegate <<
"set" << rAttr.name
577 <<
"(the_value);\n" << indentation <<
"}\n\n";
584 for (
const auto& rMethod : ent2->getDirectMethods())
592 if (!classname.isEmpty())
595 o << rMethod.name <<
'(';
602 if (rMethod.returnType !=
"void") {
603 o <<
" // TODO: Exchange the default return implementation for \""
604 << rMethod.name <<
"\" !!!\n";
605 o <<
" // Exchange the default return implementation.\n"
606 " // NOTE: Default initialized polymorphic structs "
607 "can cause problems because of\n // missing default "
608 "initialization of primitive types of some C++ compilers or"
609 "\n // different Any initialization in Java and C++ "
610 "polymorphic structs.\n return ";
614 o <<
" // TODO: Insert your implementation for \""
615 << rMethod.name <<
"\" here.";
619 o <<
"\n" << indentation <<
"{\n" << indentation <<
" ";
620 if (rMethod.returnType !=
"void")
623 o << delegate << rMethod.name <<
'(';
625 o, options,
manager, rMethod.parameters,
false);
626 o <<
");\n" << indentation <<
"}\n\n";
646 "unexpected entity \"" +
name
647 +
"\" in call to skeletonmaker::java::printConstructors");
652 for (
const auto& rConstructor : ent2->getConstructors())
657 if (rConstructor.defaultConstructor) {
661 u2b(rConstructor.name),
"method");
663 o << ((options.
shortnames) ?
"(css::uno::Reference< css" :
664 "(::com::sun::star::uno::Reference< ::com::sun::star")
665 <<
"::uno::XComponentContext > const & the_context";
666 for (
const auto& rParam : rConstructor.parameters)
672 u2b(rParam.name),
"param");
683 OUString
const & name,
685 OString
const & delegate)
688 for (
const auto& rService : entity->getDirectMandatoryBaseServices())
690 o <<
"\n// exported service " << rService.name <<
"\n";
692 o <<
"\n// end of exported service " << rService.name <<
"\n";
694 for (
const auto& rIface : entity->getDirectMandatoryBaseInterfaces())
696 o <<
"\n// supported interface " << rIface.name <<
"\n";
699 if (delegate.isEmpty()) {
700 o <<
"\n// properties of service \""<<
name <<
"\"\n";
701 for (
const auto& rProp : entity->getDirectProperties())
707 u2b(rProp.name),
"property")
717 std::vector< OUString >
const & arguments,
721 if (cppTypeSort !=
nullptr)
722 o << cppTypeSort <<
' ';
725 if (rank == 0 && nucleus ==
u"com.sun.star.uno.XInterface") {
726 o <<
"Reference< com::sun::star::uno::XInterface >";
729 o, options,
manager, sort, nucleus, rank, arguments, entity, 0,
737 OString
const & type, OString
const & delegate)
742 b2u(
type),
false, &nucleus, &rank,
nullptr,
nullptr);
745 if (!delegate.isEmpty()) {
758 o <<
" sequence type";
764 o <<
" interface type";
772 o <<
" simple struct type";
776 o <<
" polymorphic struct type template";
780 o <<
" instantiated polymorphic struct type";
788 o <<
" exception type";
796 o <<
" single-inheritance--based service";
800 o <<
"IDL accumulation-based service";
804 o <<
" inheritance-based singleton";
808 o <<
"IDL service-based singleton";
812 o <<
"IDL constant group";
820 o <<
" \"" <<
type <<
"\" ";
822 std::vector< OUString > arguments;
825 b2u(
type),
true, &nucleus, &rank, &arguments, &entity);
829 o, options,
manager, sort, nucleus, rank, arguments, entity,
836 o, options,
manager, sort, nucleus, rank, arguments, entity,
nullptr);
844 o, options,
manager, sort, nucleus, rank, arguments, entity,
846 if (nucleus ==
"com.sun.star.uno.XInterface") {
851 o <<
"; " << (options.
all ?
"all" :
"direct") <<
" methods:\n";
855 o, options,
manager, nucleus, generated, delegate,
862 o, options,
manager, sort, nucleus, rank, arguments, entity,
869 o, options,
manager, sort, nucleus, rank, arguments, entity,
871 o <<
"; full constructor:\n";
874 entity, nucleus, arguments);
879 o, options,
manager, sort, nucleus, rank, arguments, entity,
881 o <<
"; full constructor:\n";
885 entity, nucleus, arguments);
890 o, options,
manager, sort, nucleus, rank, arguments, entity,
891 "class template instantiation");
892 o <<
"; full constructor:\n";
896 entity, nucleus, arguments);
901 o, options,
manager, sort, nucleus, rank, arguments, entity,
908 o, options,
manager, sort, nucleus, rank, arguments, entity,
915 o, options,
manager, sort, nucleus, rank, arguments, entity,
917 o <<
"; full constructor:\n";
920 entity, nucleus, arguments);
926 o, options,
manager, sort, nucleus, rank, arguments, entity,
928 o <<
"; construction methods:\n";
940 o << (
"does not map to C++\n"
941 "// the service members are generated instead\n");
951 o, options,
manager, sort, nucleus, rank, arguments, entity,
953 o <<
"; get method:\nstatic ";
959 o <<
" get(::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > const & context);\n";
963 o <<
"does not map to C++\n";
bool contains(OString const &type) const
void add(OString const &type)
rtl::Reference< ParseManager > manager
@ InstantiatedPolymorphicStruct
@ InterfaceBasedSingleton
@ SingleInterfaceBasedService
@ PolymorphicStructTemplate
@ AccumulationBasedService
OString translateUnoToCppIdentifier(OString const &unoIdentifier, std::string_view prefix, IdentifierTranslationMode transmode, OString const *forbidden)
OString translateUnoToCppType(codemaker::UnoType::Sort sort, std::u16string_view nucleus)
OString scopedCppName(OString const &type, bool ns_alias)
OString convertString(OUString const &string)
void generateXPropertyAccessBodies(std::ostream &o, const OString &classname, const OString &propertyhelper)
static void printSetPropertyMixinBody(std::ostream &o, unoidl::InterfaceTypeEntity::Attribute const &attribute)
static void printMapsToCppType(std::ostream &o, ProgramOptions const &options, rtl::Reference< TypeManager > const &manager, codemaker::UnoType::Sort sort, std::u16string_view nucleus, sal_Int32 rank, std::vector< OUString > const &arguments, rtl::Reference< unoidl::Entity > const &entity, const char *cppTypeSort)
static 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)
static bool printConstructorParameters(std::ostream &o, ProgramOptions const &options, rtl::Reference< TypeManager > const &manager, codemaker::UnoType::Sort sort, rtl::Reference< unoidl::Entity > const &entity, std::u16string_view name, std::vector< OUString > const &arguments)
void generateXCompatibilityNamesBodies(std::ostream &o, const OString &classname)
static void printType(std::ostream &o, ProgramOptions const &options, rtl::Reference< TypeManager > const &manager, codemaker::UnoType::Sort sort, std::u16string_view nucleus, sal_Int32 rank, std::vector< OUString > const &arguments, rtl::Reference< unoidl::Entity > const &entity, short referenceType, bool defaultvalue)
static void printConstructors(std::ostream &o, ProgramOptions const &options, rtl::Reference< TypeManager > const &manager, OUString const &name)
static void printConstructor(std::ostream &o, ProgramOptions const &options, rtl::Reference< TypeManager > const &manager, codemaker::UnoType::Sort sort, rtl::Reference< unoidl::Entity > const &entity, std::u16string_view name, std::vector< OUString > const &arguments)
void generateXInitialization(std::ostream &o, const OString &classname)
void generateXFastPropertySetBodies(std::ostream &o, const OString &classname, const OString &propertyhelper)
void generateXPropertySetBodies(std::ostream &o, const OString &classname, const OString &propertyhelper)
void generateXLocalizable(std::ostream &o, const OString &classname)
void generateDocumentation(std::ostream &o, ProgramOptions const &options, rtl::Reference< TypeManager > const &manager, OString const &type, OString const &delegate)
void generateXAddInBodies(std::ostream &o, const OString &classname)
void generateXDispatch(std::ostream &o, const OString &classname, const ProtocolCmdMap &protocolCmdMap)
void printMethods(std::ostream &o, ProgramOptions const &options, rtl::Reference< TypeManager > const &manager, OUString const &name, codemaker::GeneratedTypeSet &generated, OString const &delegate, OString const &classname, OString const &indentation, bool defaultvalue, OUString const &propertyhelper)
static void printExceptionSpecification(std::ostream &o, ProgramOptions const &options, rtl::Reference< TypeManager > const &manager, std::vector< OUString > const &exceptions)
static void printMethodParameters(std::ostream &o, ProgramOptions const &options, rtl::Reference< TypeManager > const &manager, std::vector< unoidl::InterfaceTypeEntity::Method::Parameter > const ¶meters, bool withType)
void generateXDispatchProvider(std::ostream &o, const OString &classname, const ProtocolCmdMap &protocolCmdMap)
unoidl::AccumulationBasedServiceEntity::Property::Attributes checkAdditionalPropertyFlags(unoidl::InterfaceTypeEntity::Attribute const &attribute)
ProtocolCmdMap protocolCmdMap
OUString b2u(std::string_view s)
OString u2b(std::u16string_view s)