Files
libreoffice/unodevtools/source/skeletonmaker/skeletoncommon.cxx

673 lines
24 KiB
C++
Raw Normal View History

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2012-07-02 17:12:00 +01:00
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
2005-08-23 07:31:46 +00:00
#include "osl/thread.hxx"
2005-09-09 12:50:40 +00:00
#include "codemaker/commonjava.hxx"
#include "codemaker/commoncpp.hxx"
#include "codemaker/generatedtypeset.hxx"
#include "codemaker/global.hxx"
#include "unoidl/unoidl.hxx"
2005-09-09 12:50:40 +00:00
2005-08-23 07:31:46 +00:00
#include "skeletoncommon.hxx"
#include <cassert>
#include <iostream>
2005-09-09 12:50:40 +00:00
using namespace ::rtl;
2005-08-23 07:31:46 +00:00
using namespace ::codemaker::cpp;
namespace skeletonmaker {
[API CHANGE] WIP: Experimental new binary type.rdb format Make cppumaker work on top of unoidl/ instead of registry/, as a first step to change all the various codemakers. * API CHANGE: cppumaker no longer supports the -B switch, as that is meaningless with the new format. When reading from an old-format .rdb file, /UCR is hard-coded as the prefix now. * TODO: The new format does not yet support deprecation annotations, so the generated .hdl/.hpp files lack any SAL_DEPRECATED_INTERNALs for now. * codemaker/typemanager.hxx is extended with access to unoidl/ functionality, so the various codemakers can use registry/ and unoidl/ in parallel for now. The access to registry/ functionality will be removed. (Added small throwaway helper functions u2b/b2u to easily map between OString and OUString at the remaining seams for now.) * Includes a selective revert of ba044b1e9613ed30906a9a540b7da8392923e4e3 "remove needless forward rtl::OUString declarations" in those parts of codemaker, unodevtools, unoidl that were covered by this local work-in-progress patch; I would otherwise have hard a hard time re-applying it. * The generated .hdl/.hpp files are mostly unchanged, except for a few minor things: ** Any SAL_DEPRECATED_INTERNALs are missing (see above). ** In comprehensive getCppuType definitions, some members were erroneously classified as TypeCalss_UNKNOWN. ** In comprehensive getCppuType definitions, some unnecessary calls like ::cppu::UnoType< ::sal_Int32 >::get(); can be removed. ** For typedef sequence<X>, the .hdl file need not include X.hdl, but only needs to forward-declare it. ** Unnecessary includes for optional bases of interfaces can be removed. ** Some numbering of local variable names (sMethodName1, ...) has changed. Change-Id: Icad98f248ac15177337f1b4ab709a755a8af6238
2013-04-08 08:45:37 +02:00
void printLicenseHeader(std::ostream& o, rtl::OString const & filename)
{
sal_Int32 index = -1;
#ifdef SAL_UNX
index = filename.lastIndexOf('/');
#else
index = filename.lastIndexOf('\\');
#endif
OString shortfilename(filename);
if ( index != -1 )
shortfilename = filename.copy(index+1);
o << "/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */\n"
"/*\n"
" * This file is part of the LibreOffice project.\n"
" *\n"
" * This Source Code Form is subject to the terms of the Mozilla Public\n"
" * License, v. 2.0. If a copy of the MPL was not distributed with this\n"
" * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n"
" */\n\n";
}
bool getOutputStream(ProgramOptions const & options,
OString const & extension,
std::ostream** ppOutputStream,
OString & targetSourceFileName,
OString & tmpSourceFileName)
{
bool bStandardout = false;
if ( options.outputpath.equals("stdout") )
{
bStandardout = true;
*ppOutputStream = &std::cout;
return bStandardout;
}
targetSourceFileName = createFileNameFromType(
options.outputpath, options.implname.replace('.','/'), extension);
OString tmpDir = getTempDir(targetSourceFileName);
FileStream file;
file.createTempFile(tmpDir);
if( !file.isValid() )
{
[API CHANGE] WIP: Experimental new binary type.rdb format Make cppumaker work on top of unoidl/ instead of registry/, as a first step to change all the various codemakers. * API CHANGE: cppumaker no longer supports the -B switch, as that is meaningless with the new format. When reading from an old-format .rdb file, /UCR is hard-coded as the prefix now. * TODO: The new format does not yet support deprecation annotations, so the generated .hdl/.hpp files lack any SAL_DEPRECATED_INTERNALs for now. * codemaker/typemanager.hxx is extended with access to unoidl/ functionality, so the various codemakers can use registry/ and unoidl/ in parallel for now. The access to registry/ functionality will be removed. (Added small throwaway helper functions u2b/b2u to easily map between OString and OUString at the remaining seams for now.) * Includes a selective revert of ba044b1e9613ed30906a9a540b7da8392923e4e3 "remove needless forward rtl::OUString declarations" in those parts of codemaker, unodevtools, unoidl that were covered by this local work-in-progress patch; I would otherwise have hard a hard time re-applying it. * The generated .hdl/.hpp files are mostly unchanged, except for a few minor things: ** Any SAL_DEPRECATED_INTERNALs are missing (see above). ** In comprehensive getCppuType definitions, some members were erroneously classified as TypeCalss_UNKNOWN. ** In comprehensive getCppuType definitions, some unnecessary calls like ::cppu::UnoType< ::sal_Int32 >::get(); can be removed. ** For typedef sequence<X>, the .hdl file need not include X.hdl, but only needs to forward-declare it. ** Unnecessary includes for optional bases of interfaces can be removed. ** Some numbering of local variable names (sMethodName1, ...) has changed. Change-Id: Icad98f248ac15177337f1b4ab709a755a8af6238
2013-04-08 08:45:37 +02:00
throw CannotDumpException(
"cannot open " + b2u(targetSourceFileName) + " for writing");
} else {
tmpSourceFileName = file.getName();
}
file.close();
*ppOutputStream = new std::ofstream(tmpSourceFileName.getStr(),
std::ios_base::binary);
return bStandardout;
}
bool containsAttribute(AttributeInfo& attributes, OUString const & attrname)
{
for ( AttributeInfo::const_iterator i(attributes.begin());
i != attributes.end(); ++i ) {
if ( (*i).name == attrname ) {
return true;
}
}
return false;
}
2005-09-09 12:50:40 +00:00
// collect attributes including inherited attributes
void checkAttributes(rtl::Reference< TypeManager > const & manager,
OUString const & name,
AttributeInfo& attributes,
std::set< OUString >& propinterfaces)
2005-09-09 12:50:40 +00:00
{
if ( name == "com.sun.star.beans.XPropertySet" ||
name == "com.sun.star.beans.XFastPropertySet" ||
name == "com.sun.star.beans.XPropertyAccess" )
2005-09-09 12:50:40 +00:00
{
propinterfaces.insert(name);
2005-09-09 12:50:40 +00:00
}
rtl::Reference< unoidl::Entity > ent;
switch (manager->getSort(name, &ent)) {
case codemaker::UnoType::SORT_INTERFACE_TYPE:
{
rtl::Reference< unoidl::InterfaceTypeEntity > ent2(
dynamic_cast< unoidl::InterfaceTypeEntity * >(ent.get()));
assert(ent2.is());
for (std::vector< unoidl::AnnotatedReference >::const_iterator i(
ent2->getDirectMandatoryBases().begin());
i != ent2->getDirectMandatoryBases().end(); ++i)
{
checkAttributes(manager, i->name, attributes, propinterfaces);
}
for (std::vector< unoidl::InterfaceTypeEntity::Attribute >::
const_iterator i(ent2->getDirectAttributes().begin());
i != ent2->getDirectAttributes().end(); ++i)
{
if (!containsAttribute(attributes, i->name)) {
attributes.push_back(
unoidl::AccumulationBasedServiceEntity::Property(
i->name,
i->type,
(unoidl::AccumulationBasedServiceEntity::Property::
Attributes(
((i->bound
? (unoidl::AccumulationBasedServiceEntity::
Property::ATTRIBUTE_BOUND)
: 0)
| (i->readOnly
? (unoidl::AccumulationBasedServiceEntity::
Property::ATTRIBUTE_READ_ONLY)
: 0)))),
std::vector< OUString >()));
}
}
break;
2005-09-09 12:50:40 +00:00
}
case codemaker::UnoType::SORT_ACCUMULATION_BASED_SERVICE:
{
rtl::Reference< unoidl::AccumulationBasedServiceEntity > ent2(
dynamic_cast< unoidl::AccumulationBasedServiceEntity * >(
ent.get()));
assert(ent2.is());
for (std::vector< unoidl::AnnotatedReference >::const_iterator i(
ent2->getDirectMandatoryBaseServices().begin());
i != ent2->getDirectMandatoryBaseServices().end(); ++i)
{
checkAttributes(manager, i->name, attributes, propinterfaces);
}
for (std::vector< unoidl::AnnotatedReference >::const_iterator i(
ent2->getDirectMandatoryBaseInterfaces().begin());
i != ent2->getDirectMandatoryBaseInterfaces().end(); ++i)
{
checkAttributes(manager, i->name, attributes, propinterfaces);
}
for (std::vector<
unoidl::AccumulationBasedServiceEntity::Property >::
const_iterator i(ent2->getDirectProperties().begin());
i != ent2->getDirectProperties().end(); ++i)
{
if (!containsAttribute(attributes, i->name)) {
attributes.push_back(*i);
}
}
break;
}
default:
throw CannotDumpException(
"unexpected entity \"" + name
+ "\" in call to skeletonmaker::checkAttributes");
2005-09-09 12:50:40 +00:00
}
}
void checkType(rtl::Reference< TypeManager > const & manager,
OUString const & name,
std::set< OUString >& interfaceTypes,
std::set< OUString >& serviceTypes,
AttributeInfo& properties)
2005-09-09 12:50:40 +00:00
{
rtl::Reference< unoidl::Entity > ent;
switch (manager->getSort(name, &ent)) {
case codemaker::UnoType::SORT_INTERFACE_TYPE:
// com.sun.star.lang.XComponent should be also not in the list
2005-08-23 07:31:46 +00:00
// but it will be used for checking the impl helper and will be
// removed later if necessary.
if ( name == "com.sun.star.lang.XTypeProvider" ||
name == "com.sun.star.uno.XWeak" )
2005-08-23 07:31:46 +00:00
return;
if (interfaceTypes.find(name) == interfaceTypes.end()) {
interfaceTypes.insert(name);
2005-08-23 07:31:46 +00:00
}
break;
case codemaker::UnoType::SORT_SINGLE_INTERFACE_BASED_SERVICE:
if (serviceTypes.find(name) == serviceTypes.end()) {
serviceTypes.insert(name);
rtl::Reference< unoidl::SingleInterfaceBasedServiceEntity > ent2(
dynamic_cast< unoidl::SingleInterfaceBasedServiceEntity * >(
ent.get()));
assert(ent2.is());
if (interfaceTypes.find(ent2->getBase()) == interfaceTypes.end()) {
interfaceTypes.insert(ent2->getBase());
2005-09-09 12:50:40 +00:00
// check if constructors are specified, if yes automatically
// support of XInitialization. We will take care of the default
// constructor because in this case XInitialization is not
// called.
if (ent2->getConstructors().size() > 1 ||
(ent2->getConstructors().size() == 1 &&
!ent2->getConstructors()[0].defaultConstructor))
{
OUString s("com.sun.star.lang.XInitialization");
if (interfaceTypes.find(s) == interfaceTypes.end())
2005-09-09 12:50:40 +00:00
interfaceTypes.insert(s);
}
2005-08-23 07:31:46 +00:00
}
}
break;
case codemaker::UnoType::SORT_ACCUMULATION_BASED_SERVICE:
if ( serviceTypes.find(name) == serviceTypes.end() ) {
serviceTypes.insert(name);
rtl::Reference< unoidl::AccumulationBasedServiceEntity > ent2(
dynamic_cast< unoidl::AccumulationBasedServiceEntity * >(
ent.get()));
assert(ent2.is());
for (std::vector< unoidl::AnnotatedReference >::const_iterator i(
ent2->getDirectMandatoryBaseServices().begin());
i != ent2->getDirectMandatoryBaseServices().end(); ++i)
{
checkType(
manager, i->name, interfaceTypes, serviceTypes, properties);
}
for (std::vector< unoidl::AnnotatedReference >::const_iterator i(
ent2->getDirectMandatoryBaseInterfaces().begin());
i != ent2->getDirectMandatoryBaseInterfaces().end(); ++i)
{
checkType(
manager, i->name, interfaceTypes, serviceTypes, properties);
}
for (std::vector<
unoidl::AccumulationBasedServiceEntity::Property >::
const_iterator i(ent2->getDirectProperties().begin());
i != ent2->getDirectProperties().end(); ++i)
{
properties.push_back(*i);
}
}
2005-08-23 07:31:46 +00:00
break;
default:
throw CannotDumpException(
"unexpected entity \"" + name
+ "\" in call to skeletonmaker::checkType");
2005-08-23 07:31:46 +00:00
}
}
void checkDefaultInterfaces(
std::set< OUString >& interfaces,
const std::set< OUString >& services,
const OUString & propertyhelper)
2005-08-23 07:31:46 +00:00
{
if ( services.empty() ) {
2005-08-23 07:31:46 +00:00
if (interfaces.find("com.sun.star.lang.XServiceInfo") != interfaces.end())
interfaces.erase("com.sun.star.lang.XServiceInfo");
} else {
if (interfaces.find("com.sun.star.lang.XServiceInfo") == interfaces.end())
interfaces.insert("com.sun.star.lang.XServiceInfo");
}
if ( propertyhelper.equals("_") ) {
2005-09-09 12:50:40 +00:00
if (interfaces.find("com.sun.star.beans.XPropertySet")
!= interfaces.end())
2005-08-23 07:31:46 +00:00
interfaces.erase("com.sun.star.beans.XPropertySet");
2005-09-09 12:50:40 +00:00
if (interfaces.find("com.sun.star.beans.XFastPropertySet")
!= interfaces.end())
2005-08-23 07:31:46 +00:00
interfaces.erase("com.sun.star.beans.XFastPropertySet");
2005-09-09 12:50:40 +00:00
if (interfaces.find("com.sun.star.beans.XPropertyAccess")
!= interfaces.end())
2005-08-25 14:30:34 +00:00
interfaces.erase("com.sun.star.beans.XPropertyAccess");
2005-08-23 07:31:46 +00:00
}
}
bool checkServiceProperties(rtl::Reference< TypeManager > const & manager,
OUString const & name)
{
rtl::Reference< unoidl::Entity > ent;
if (manager->getSort(name, &ent)
== codemaker::UnoType::SORT_ACCUMULATION_BASED_SERVICE)
{
rtl::Reference< unoidl::AccumulationBasedServiceEntity > ent2(
dynamic_cast< unoidl::AccumulationBasedServiceEntity * >(
ent.get()));
assert(ent2.is());
if (!ent2->getDirectProperties().empty()) {
return true;
}
for (std::vector< unoidl::AnnotatedReference >::const_iterator i(
ent2->getDirectMandatoryBaseServices().begin());
i != ent2->getDirectMandatoryBaseServices().end(); ++i)
{
if (checkServiceProperties(manager, i->name)) {
return true;
}
}
}
return false;
}
OUString checkPropertyHelper(
ProgramOptions const & options,
rtl::Reference< TypeManager > const & manager,
const std::set< OUString >& services,
const std::set< OUString >& interfaces,
AttributeInfo& attributes,
std::set< OUString >& propinterfaces)
2005-08-23 07:31:46 +00:00
{
std::set< OUString >::const_iterator iter;
std::set< OUString >::const_iterator end;
if ( !services.empty() ) {
iter = services.begin();
end = services.end();
} else {
iter = interfaces.begin();
end = interfaces.end();
}
2005-08-23 07:31:46 +00:00
bool oldStyleWithProperties = false;
while ( iter != end ) {
rtl::Reference< unoidl::Entity > ent;
codemaker::UnoType::Sort sort = manager->getSort(*iter, &ent);
if ( !services.empty() ) {
if (options.supportpropertysetmixin
&& (sort
== codemaker::UnoType::SORT_SINGLE_INTERFACE_BASED_SERVICE))
{
rtl::Reference< unoidl::SingleInterfaceBasedServiceEntity >
ent2(
dynamic_cast<
unoidl::SingleInterfaceBasedServiceEntity * >(
ent.get()));
assert(ent2.is());
checkAttributes(
manager, ent2->getBase(), attributes, propinterfaces);
if (!(attributes.empty() || propinterfaces.empty())) {
return ent2->getBase();
}
} else {
oldStyleWithProperties = checkServiceProperties(manager, *iter);
}
2005-08-23 07:31:46 +00:00
} else {
checkAttributes(manager, *iter, attributes, propinterfaces);
if (!(attributes.empty() || propinterfaces.empty())) {
return *iter;
}
2005-08-23 07:31:46 +00:00
}
2011-01-07 11:10:01 +00:00
++iter;
2005-08-23 07:31:46 +00:00
}
return oldStyleWithProperties ? OUString("_") : OUString();
2005-08-23 07:31:46 +00:00
}
bool checkXComponentSupport(
rtl::Reference< TypeManager > const & manager, OUString const & name)
2005-08-23 07:31:46 +00:00
{
assert(manager.is());
if (name == "com.sun.star.lang.XComponent") {
2005-08-23 07:31:46 +00:00
return true;
}
rtl::Reference< unoidl::Entity > ent;
codemaker::UnoType::Sort sort = manager->getSort(name, &ent);
if (sort != codemaker::UnoType::SORT_INTERFACE_TYPE) {
throw CannotDumpException(
"unexpected entity \"" + name
+ "\" in call to skeletonmaker::checkXComponentSupport");
}
rtl::Reference< unoidl::InterfaceTypeEntity > ent2(
dynamic_cast< unoidl::InterfaceTypeEntity * >(ent.get()));
assert(ent2.is());
for (std::vector< unoidl::AnnotatedReference >::const_iterator i(
ent2->getDirectMandatoryBases().begin());
i != ent2->getDirectMandatoryBases().end(); ++i)
{
if (checkXComponentSupport(manager, i->name)) {
2005-08-23 07:31:46 +00:00
return true;
}
2005-08-23 07:31:46 +00:00
}
return false;
}
// if XComponent is directly specified, return true and remove it from the
// supported interfaces list
bool checkXComponentSupport(rtl::Reference< TypeManager > const & manager,
std::set< OUString >& interfaces)
2005-08-23 07:31:46 +00:00
{
if ( interfaces.empty() )
2005-08-23 07:31:46 +00:00
return false;
std::set< OUString >::const_iterator iter = interfaces.begin();
while ( iter != interfaces.end() ) {
if ( (*iter).equals("com.sun.star.lang.XComponent") ) {
2005-08-23 07:31:46 +00:00
interfaces.erase("com.sun.star.lang.XComponent");
return true;
}
if ( checkXComponentSupport(manager, *iter) )
2005-08-23 07:31:46 +00:00
return true;
2011-01-07 11:10:01 +00:00
++iter;
2005-08-23 07:31:46 +00:00
}
return false;
}
unoidl::AccumulationBasedServiceEntity::Property::Attributes
checkAdditionalPropertyFlags(
unoidl::InterfaceTypeEntity::Attribute const & attribute)
2005-09-09 12:50:40 +00:00
{
int flags = 0;
2005-09-09 12:50:40 +00:00
bool getterSupportsUnknown = false;
for (std::vector< OUString >::const_iterator i(
attribute.getExceptions.begin());
i != attribute.getExceptions.end(); ++i)
2005-09-09 12:50:40 +00:00
{
if (*i == "com.sun.star.beans.UnknownPropertyException") {
getterSupportsUnknown = true;
2005-09-09 12:50:40 +00:00
}
}
for (std::vector< OUString >::const_iterator i(
attribute.setExceptions.begin());
i != attribute.setExceptions.end(); ++i)
2005-09-09 12:50:40 +00:00
{
if (*i == "com.sun.star.beans.PropertyVetoException") {
flags |= unoidl::AccumulationBasedServiceEntity::Property::
ATTRIBUTE_CONSTRAINED;
} else if (getterSupportsUnknown
&& *i == "com.sun.star.beans.UnknownPropertyException")
{
flags |= unoidl::AccumulationBasedServiceEntity::Property::
ATTRIBUTE_OPTIONAL;
2005-09-09 12:50:40 +00:00
}
}
return unoidl::AccumulationBasedServiceEntity::Property::Attributes(flags);
2005-09-09 12:50:40 +00:00
}
// This function checks if the specified types for parameters and return
// types are allowed add-in types, for more info see the com.sun.star.sheet.AddIn
// service description
bool checkAddinType(rtl::Reference< TypeManager > const & manager,
OUString const & type, bool & bLastAny,
bool & bHasXPropertySet, bool bIsReturn)
{
assert(manager.is());
sal_Int32 rank;
codemaker::UnoType::Sort sort = manager->decompose(
type, true, 0, &rank, 0, 0);
if ( sort == codemaker::UnoType::SORT_LONG ||
sort == codemaker::UnoType::SORT_DOUBLE ||
sort == codemaker::UnoType::SORT_STRING )
{
if ( rank == 0 || rank ==2 )
return true;
}
if ( sort == codemaker::UnoType::SORT_ANY )
{
if ( rank <= 2 ) {
if ( rank ==1 ) {
if ( bIsReturn )
return false;
bLastAny = true;
}
return true;
}
}
if ( sort == codemaker::UnoType::SORT_INTERFACE_TYPE )
{
if ( bIsReturn && type == "com.sun.star.sheet.XVolatileResult" )
return true;
if ( !bIsReturn && type == "com.sun.star.table.XCellRange" )
return true;
if ( !bIsReturn && type == "com.sun.star.beans.XPropertySet" )
CWS-TOOLING: integrate CWS cmcfixes51 2008-12-08 10:12:55 +0100 cmc r264975 : #i96203# protect with ifdefs to avoid unused symbol on mac 2008-12-05 12:23:47 +0100 cmc r264898 : CWS-TOOLING: rebase CWS cmcfixes51 to trunk@264807 (milestone: DEV300:m37) 2008-12-01 14:45:17 +0100 cmc r264606 : #i76655# ehlos apparently required 2008-11-28 17:49:30 +0100 cmc r264567 : #i96655# remove newly unused method 2008-11-28 10:41:28 +0100 cmc r264531 : #i96647# better ppc-bridges flushCode impl 2008-11-27 12:58:40 +0100 cmc r264478 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 12:32:49 +0100 cmc r264476 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 12:26:02 +0100 cmc r264475 : #i96655# redundant old table export helpers 2008-11-27 11:49:06 +0100 cmc r264473 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 11:38:35 +0100 cmc r264471 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 11:14:21 +0100 cmc r264467 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 11:06:22 +0100 cmc r264464 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 10:58:18 +0100 cmc r264462 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 10:41:44 +0100 cmc r264461 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 10:19:24 +0100 cmc r264460 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 10:13:39 +0100 cmc r264459 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 10:06:14 +0100 cmc r264458 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 09:59:54 +0100 cmc r264457 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 09:52:51 +0100 cmc r264456 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 09:48:26 +0100 cmc r264454 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 09:40:20 +0100 cmc r264452 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 09:35:26 +0100 cmc r264451 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 09:31:00 +0100 cmc r264450 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 09:24:08 +0100 cmc r264449 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 00:26:15 +0100 cmc r264443 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 00:21:01 +0100 cmc r264442 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 00:09:40 +0100 cmc r264441 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 23:51:56 +0100 cmc r264440 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 23:49:09 +0100 cmc r264439 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 18:09:54 +0100 cmc r264432 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 18:07:40 +0100 cmc r264431 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 17:28:02 +0100 cmc r264429 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 17:27:39 +0100 cmc r264428 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 17:18:36 +0100 cmc r264426 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 16:22:16 +0100 cmc r264415 : #i96624# make implicit braces and brackets explicit to avoid warnings 2008-11-26 16:00:23 +0100 cmc r264409 : #i90426# remove warnings from svtools 2008-11-26 15:59:17 +0100 cmc r264408 : #i90426# remove warnings 2008-11-26 15:47:32 +0100 cmc r264404 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 14:46:57 +0100 cmc r264394 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 14:19:50 +0100 cmc r264387 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 14:15:26 +0100 cmc r264386 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 14:11:26 +0100 cmc r264384 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 13:44:23 +0100 cmc r264380 : #i96084# comfirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 13:12:24 +0100 cmc r264372 : #i96604# silence new warnings 2008-11-26 12:35:02 +0100 cmc r264369 : #i96203# make qstarter work in 3-layer land 2008-11-26 12:33:04 +0100 cmc r264368 : #i96170# ensure gtypes are up and running
2008-12-11 07:05:03 +00:00
{
if ( bHasXPropertySet ) {
return false;
} else {
bHasXPropertySet = true;
return true;
}
CWS-TOOLING: integrate CWS cmcfixes51 2008-12-08 10:12:55 +0100 cmc r264975 : #i96203# protect with ifdefs to avoid unused symbol on mac 2008-12-05 12:23:47 +0100 cmc r264898 : CWS-TOOLING: rebase CWS cmcfixes51 to trunk@264807 (milestone: DEV300:m37) 2008-12-01 14:45:17 +0100 cmc r264606 : #i76655# ehlos apparently required 2008-11-28 17:49:30 +0100 cmc r264567 : #i96655# remove newly unused method 2008-11-28 10:41:28 +0100 cmc r264531 : #i96647# better ppc-bridges flushCode impl 2008-11-27 12:58:40 +0100 cmc r264478 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 12:32:49 +0100 cmc r264476 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 12:26:02 +0100 cmc r264475 : #i96655# redundant old table export helpers 2008-11-27 11:49:06 +0100 cmc r264473 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 11:38:35 +0100 cmc r264471 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 11:14:21 +0100 cmc r264467 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 11:06:22 +0100 cmc r264464 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 10:58:18 +0100 cmc r264462 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 10:41:44 +0100 cmc r264461 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 10:19:24 +0100 cmc r264460 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 10:13:39 +0100 cmc r264459 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 10:06:14 +0100 cmc r264458 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 09:59:54 +0100 cmc r264457 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 09:52:51 +0100 cmc r264456 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 09:48:26 +0100 cmc r264454 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 09:40:20 +0100 cmc r264452 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 09:35:26 +0100 cmc r264451 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 09:31:00 +0100 cmc r264450 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 09:24:08 +0100 cmc r264449 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 00:26:15 +0100 cmc r264443 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 00:21:01 +0100 cmc r264442 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 00:09:40 +0100 cmc r264441 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 23:51:56 +0100 cmc r264440 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 23:49:09 +0100 cmc r264439 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 18:09:54 +0100 cmc r264432 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 18:07:40 +0100 cmc r264431 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 17:28:02 +0100 cmc r264429 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 17:27:39 +0100 cmc r264428 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 17:18:36 +0100 cmc r264426 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 16:22:16 +0100 cmc r264415 : #i96624# make implicit braces and brackets explicit to avoid warnings 2008-11-26 16:00:23 +0100 cmc r264409 : #i90426# remove warnings from svtools 2008-11-26 15:59:17 +0100 cmc r264408 : #i90426# remove warnings 2008-11-26 15:47:32 +0100 cmc r264404 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 14:46:57 +0100 cmc r264394 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 14:19:50 +0100 cmc r264387 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 14:15:26 +0100 cmc r264386 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 14:11:26 +0100 cmc r264384 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 13:44:23 +0100 cmc r264380 : #i96084# comfirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 13:12:24 +0100 cmc r264372 : #i96604# silence new warnings 2008-11-26 12:35:02 +0100 cmc r264369 : #i96203# make qstarter work in 3-layer land 2008-11-26 12:33:04 +0100 cmc r264368 : #i96170# ensure gtypes are up and running
2008-12-11 07:05:03 +00:00
}
}
return false;
}
void checkAddInTypes(
rtl::Reference< TypeManager > const & manager, OUString const & name,
rtl::Reference< unoidl::InterfaceTypeEntity > const & entity)
{
assert(entity.is());
bool bLastAny = false;
bool bHasXPropertySet = false;
for (std::vector< unoidl::InterfaceTypeEntity::Method >::const_iterator i(
entity->getDirectMethods().begin());
i != entity->getDirectMethods().end(); ++i)
{
if ( !checkAddinType(
manager, i->returnType, bLastAny, bHasXPropertySet, true) )
{
[API CHANGE] WIP: Experimental new binary type.rdb format Make cppumaker work on top of unoidl/ instead of registry/, as a first step to change all the various codemakers. * API CHANGE: cppumaker no longer supports the -B switch, as that is meaningless with the new format. When reading from an old-format .rdb file, /UCR is hard-coded as the prefix now. * TODO: The new format does not yet support deprecation annotations, so the generated .hdl/.hpp files lack any SAL_DEPRECATED_INTERNALs for now. * codemaker/typemanager.hxx is extended with access to unoidl/ functionality, so the various codemakers can use registry/ and unoidl/ in parallel for now. The access to registry/ functionality will be removed. (Added small throwaway helper functions u2b/b2u to easily map between OString and OUString at the remaining seams for now.) * Includes a selective revert of ba044b1e9613ed30906a9a540b7da8392923e4e3 "remove needless forward rtl::OUString declarations" in those parts of codemaker, unodevtools, unoidl that were covered by this local work-in-progress patch; I would otherwise have hard a hard time re-applying it. * The generated .hdl/.hpp files are mostly unchanged, except for a few minor things: ** Any SAL_DEPRECATED_INTERNALs are missing (see above). ** In comprehensive getCppuType definitions, some members were erroneously classified as TypeCalss_UNKNOWN. ** In comprehensive getCppuType definitions, some unnecessary calls like ::cppu::UnoType< ::sal_Int32 >::get(); can be removed. ** For typedef sequence<X>, the .hdl file need not include X.hdl, but only needs to forward-declare it. ** Unnecessary includes for optional bases of interfaces can be removed. ** Some numbering of local variable names (sMethodName1, ...) has changed. Change-Id: Icad98f248ac15177337f1b4ab709a755a8af6238
2013-04-08 08:45:37 +02:00
throw CannotDumpException(
"the return type of the calc add-in function '" + name
+ ":" + i->name
[API CHANGE] WIP: Experimental new binary type.rdb format Make cppumaker work on top of unoidl/ instead of registry/, as a first step to change all the various codemakers. * API CHANGE: cppumaker no longer supports the -B switch, as that is meaningless with the new format. When reading from an old-format .rdb file, /UCR is hard-coded as the prefix now. * TODO: The new format does not yet support deprecation annotations, so the generated .hdl/.hpp files lack any SAL_DEPRECATED_INTERNALs for now. * codemaker/typemanager.hxx is extended with access to unoidl/ functionality, so the various codemakers can use registry/ and unoidl/ in parallel for now. The access to registry/ functionality will be removed. (Added small throwaway helper functions u2b/b2u to easily map between OString and OUString at the remaining seams for now.) * Includes a selective revert of ba044b1e9613ed30906a9a540b7da8392923e4e3 "remove needless forward rtl::OUString declarations" in those parts of codemaker, unodevtools, unoidl that were covered by this local work-in-progress patch; I would otherwise have hard a hard time re-applying it. * The generated .hdl/.hpp files are mostly unchanged, except for a few minor things: ** Any SAL_DEPRECATED_INTERNALs are missing (see above). ** In comprehensive getCppuType definitions, some members were erroneously classified as TypeCalss_UNKNOWN. ** In comprehensive getCppuType definitions, some unnecessary calls like ::cppu::UnoType< ::sal_Int32 >::get(); can be removed. ** For typedef sequence<X>, the .hdl file need not include X.hdl, but only needs to forward-declare it. ** Unnecessary includes for optional bases of interfaces can be removed. ** Some numbering of local variable names (sMethodName1, ...) has changed. Change-Id: Icad98f248ac15177337f1b4ab709a755a8af6238
2013-04-08 08:45:37 +02:00
+ "' is invalid. Please check your IDL defintion.");
}
bHasXPropertySet = false;
for (std::vector< unoidl::InterfaceTypeEntity::Method::Parameter >::
const_iterator j(i->parameters.begin());
j != i->parameters.end(); ++j)
{
bLastAny = false;
if ( !checkAddinType(manager, j->type,
bLastAny, bHasXPropertySet, false) ||
bLastAny )
{
[API CHANGE] WIP: Experimental new binary type.rdb format Make cppumaker work on top of unoidl/ instead of registry/, as a first step to change all the various codemakers. * API CHANGE: cppumaker no longer supports the -B switch, as that is meaningless with the new format. When reading from an old-format .rdb file, /UCR is hard-coded as the prefix now. * TODO: The new format does not yet support deprecation annotations, so the generated .hdl/.hpp files lack any SAL_DEPRECATED_INTERNALs for now. * codemaker/typemanager.hxx is extended with access to unoidl/ functionality, so the various codemakers can use registry/ and unoidl/ in parallel for now. The access to registry/ functionality will be removed. (Added small throwaway helper functions u2b/b2u to easily map between OString and OUString at the remaining seams for now.) * Includes a selective revert of ba044b1e9613ed30906a9a540b7da8392923e4e3 "remove needless forward rtl::OUString declarations" in those parts of codemaker, unodevtools, unoidl that were covered by this local work-in-progress patch; I would otherwise have hard a hard time re-applying it. * The generated .hdl/.hpp files are mostly unchanged, except for a few minor things: ** Any SAL_DEPRECATED_INTERNALs are missing (see above). ** In comprehensive getCppuType definitions, some members were erroneously classified as TypeCalss_UNKNOWN. ** In comprehensive getCppuType definitions, some unnecessary calls like ::cppu::UnoType< ::sal_Int32 >::get(); can be removed. ** For typedef sequence<X>, the .hdl file need not include X.hdl, but only needs to forward-declare it. ** Unnecessary includes for optional bases of interfaces can be removed. ** Some numbering of local variable names (sMethodName1, ...) has changed. Change-Id: Icad98f248ac15177337f1b4ab709a755a8af6238
2013-04-08 08:45:37 +02:00
throw CannotDumpException(
"the type of the " + j->name
+ " parameter of the calc add-in function '" + name
+ ":" + i->name + "' is invalid."
[API CHANGE] WIP: Experimental new binary type.rdb format Make cppumaker work on top of unoidl/ instead of registry/, as a first step to change all the various codemakers. * API CHANGE: cppumaker no longer supports the -B switch, as that is meaningless with the new format. When reading from an old-format .rdb file, /UCR is hard-coded as the prefix now. * TODO: The new format does not yet support deprecation annotations, so the generated .hdl/.hpp files lack any SAL_DEPRECATED_INTERNALs for now. * codemaker/typemanager.hxx is extended with access to unoidl/ functionality, so the various codemakers can use registry/ and unoidl/ in parallel for now. The access to registry/ functionality will be removed. (Added small throwaway helper functions u2b/b2u to easily map between OString and OUString at the remaining seams for now.) * Includes a selective revert of ba044b1e9613ed30906a9a540b7da8392923e4e3 "remove needless forward rtl::OUString declarations" in those parts of codemaker, unodevtools, unoidl that were covered by this local work-in-progress patch; I would otherwise have hard a hard time re-applying it. * The generated .hdl/.hpp files are mostly unchanged, except for a few minor things: ** Any SAL_DEPRECATED_INTERNALs are missing (see above). ** In comprehensive getCppuType definitions, some members were erroneously classified as TypeCalss_UNKNOWN. ** In comprehensive getCppuType definitions, some unnecessary calls like ::cppu::UnoType< ::sal_Int32 >::get(); can be removed. ** For typedef sequence<X>, the .hdl file need not include X.hdl, but only needs to forward-declare it. ** Unnecessary includes for optional bases of interfaces can be removed. ** Some numbering of local variable names (sMethodName1, ...) has changed. Change-Id: Icad98f248ac15177337f1b4ab709a755a8af6238
2013-04-08 08:45:37 +02:00
+ (bLastAny
? OUString(
" The type 'sequence<any>' is allowed as last"
" parameter only.")
: OUString())
+ (bHasXPropertySet
? OUString(
" The type 'XPropertySet' is allowed only once.")
: OUString())
+ " Please check your IDL definition.");
}
}
}
}
void generateFunctionParameterMap(std::ostream& o,
ProgramOptions const & options,
rtl::Reference< TypeManager > const & manager,
OUString const & name,
::codemaker::GeneratedTypeSet & generated,
bool bFirst)
{
if ( name == "com.sun.star.uno.XInterface" ||
name == "com.sun.star.lang.XLocalizable" ||
name == "com.sun.star.lang.XServiceInfo" ||
// the next three checks becomes obsolete when configuration is used
name == "com.sun.star.sheet.XAddIn" ||
name == "com.sun.star.sheet.XCompatibilityNames" ||
name == "com.sun.star.lang.XServiceName" )
{
return;
}
rtl::Reference< unoidl::Entity > ent;
codemaker::UnoType::Sort sort = manager->getSort(name, &ent);
if (sort != codemaker::UnoType::SORT_INTERFACE_TYPE) {
throw CannotDumpException(
"unexpected entity \"" + name
+ "\" in call to skeletonmaker::generateFunctionParameterMap");
}
rtl::Reference< unoidl::InterfaceTypeEntity > ent2(
dynamic_cast< unoidl::InterfaceTypeEntity * >(ent.get()));
assert(ent2.is());
// check if the specified add-in functions supports valid types
checkAddInTypes(manager, name, ent2);
for (std::vector< unoidl::AnnotatedReference >::const_iterator i(
ent2->getDirectMandatoryBases().begin());
i != ent2->getDirectMandatoryBases().end(); ++i)
{
generateFunctionParameterMap(
o, options, manager, i->name, generated, bFirst);
}
if ( generated.contains(u2b(name)) )
return;
else
generated.add(u2b(name));
for (std::vector< unoidl::InterfaceTypeEntity::Method >::const_iterator i(
ent2->getDirectMethods().begin());
i != ent2->getDirectMethods().end(); ++i)
{
if ( bFirst ) {
if (options.language == 2) {
o << " ParamMap fpm;\n";
}
else {
o << " java.util.Hashtable< Integer, String > fpm = "
"new java.util.Hashtable< Integer, String >();\n";
}
bFirst = false;
} else
if ( options.language == 2 ) {
o << " fpm = ParamMap();\n";
}
else {
o << " fpm = new java.util.Hashtable< "
"Integer, String >();\n";
}
std::vector< unoidl::InterfaceTypeEntity::Method::Parameter >::size_type
n = 0;
for (std::vector< unoidl::InterfaceTypeEntity::Method::Parameter >::
const_iterator j(i->parameters.begin());
j != i->parameters.end(); ++j)
{
if ( options.language == 2 ) {
o << " fpm[" << n
[API CHANGE] WIP: Experimental new binary type.rdb format Make cppumaker work on top of unoidl/ instead of registry/, as a first step to change all the various codemakers. * API CHANGE: cppumaker no longer supports the -B switch, as that is meaningless with the new format. When reading from an old-format .rdb file, /UCR is hard-coded as the prefix now. * TODO: The new format does not yet support deprecation annotations, so the generated .hdl/.hpp files lack any SAL_DEPRECATED_INTERNALs for now. * codemaker/typemanager.hxx is extended with access to unoidl/ functionality, so the various codemakers can use registry/ and unoidl/ in parallel for now. The access to registry/ functionality will be removed. (Added small throwaway helper functions u2b/b2u to easily map between OString and OUString at the remaining seams for now.) * Includes a selective revert of ba044b1e9613ed30906a9a540b7da8392923e4e3 "remove needless forward rtl::OUString declarations" in those parts of codemaker, unodevtools, unoidl that were covered by this local work-in-progress patch; I would otherwise have hard a hard time re-applying it. * The generated .hdl/.hpp files are mostly unchanged, except for a few minor things: ** Any SAL_DEPRECATED_INTERNALs are missing (see above). ** In comprehensive getCppuType definitions, some members were erroneously classified as TypeCalss_UNKNOWN. ** In comprehensive getCppuType definitions, some unnecessary calls like ::cppu::UnoType< ::sal_Int32 >::get(); can be removed. ** For typedef sequence<X>, the .hdl file need not include X.hdl, but only needs to forward-declare it. ** Unnecessary includes for optional bases of interfaces can be removed. ** Some numbering of local variable names (sMethodName1, ...) has changed. Change-Id: Icad98f248ac15177337f1b4ab709a755a8af6238
2013-04-08 08:45:37 +02:00
<< "] = ::rtl::OUString(\""
<< j->name
<< "\");\n";
}
else {
o << " fpm.put(" << n << ", \""
<< j->name
<< "\");\n";
}
++n;
}
if ( options.language == 2 ) {
[API CHANGE] WIP: Experimental new binary type.rdb format Make cppumaker work on top of unoidl/ instead of registry/, as a first step to change all the various codemakers. * API CHANGE: cppumaker no longer supports the -B switch, as that is meaningless with the new format. When reading from an old-format .rdb file, /UCR is hard-coded as the prefix now. * TODO: The new format does not yet support deprecation annotations, so the generated .hdl/.hpp files lack any SAL_DEPRECATED_INTERNALs for now. * codemaker/typemanager.hxx is extended with access to unoidl/ functionality, so the various codemakers can use registry/ and unoidl/ in parallel for now. The access to registry/ functionality will be removed. (Added small throwaway helper functions u2b/b2u to easily map between OString and OUString at the remaining seams for now.) * Includes a selective revert of ba044b1e9613ed30906a9a540b7da8392923e4e3 "remove needless forward rtl::OUString declarations" in those parts of codemaker, unodevtools, unoidl that were covered by this local work-in-progress patch; I would otherwise have hard a hard time re-applying it. * The generated .hdl/.hpp files are mostly unchanged, except for a few minor things: ** Any SAL_DEPRECATED_INTERNALs are missing (see above). ** In comprehensive getCppuType definitions, some members were erroneously classified as TypeCalss_UNKNOWN. ** In comprehensive getCppuType definitions, some unnecessary calls like ::cppu::UnoType< ::sal_Int32 >::get(); can be removed. ** For typedef sequence<X>, the .hdl file need not include X.hdl, but only needs to forward-declare it. ** Unnecessary includes for optional bases of interfaces can be removed. ** Some numbering of local variable names (sMethodName1, ...) has changed. Change-Id: Icad98f248ac15177337f1b4ab709a755a8af6238
2013-04-08 08:45:37 +02:00
o << " m_functionMap[::rtl::OUString(\""
<< i->name << "\")] = fpm;\n\n";
}
else {
o << " m_functionMap.put(\"" << i->name << "\", fpm);\n\n";
}
}
}
void generateFunctionParameterMap(std::ostream& o,
ProgramOptions const & options,
rtl::Reference< TypeManager > const & manager,
const std::set< OUString >& interfaces)
{
::codemaker::GeneratedTypeSet generated;
bool bFirst = true;
std::set< OUString >::const_iterator iter = interfaces.begin();
while ( iter != interfaces.end() ) {
generateFunctionParameterMap(o, options, manager, *iter, generated, bFirst);
2011-01-07 11:10:01 +00:00
++iter;
}
}
2005-08-23 07:31:46 +00:00
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */