diff options
-rw-r--r-- | codemaker/source/bonobowrappermaker/corbamaker.cxx | 239 | ||||
-rw-r--r-- | codemaker/source/bonobowrappermaker/corbaoptions.cxx | 259 | ||||
-rw-r--r-- | codemaker/source/bonobowrappermaker/corbaoptions.hxx | 54 | ||||
-rw-r--r-- | codemaker/source/bonobowrappermaker/corbatype.cxx | 2784 | ||||
-rw-r--r-- | codemaker/source/bonobowrappermaker/corbatype.hxx | 312 | ||||
-rw-r--r-- | codemaker/source/bonobowrappermaker/makefile.mk | 62 |
6 files changed, 0 insertions, 3710 deletions
diff --git a/codemaker/source/bonobowrappermaker/corbamaker.cxx b/codemaker/source/bonobowrappermaker/corbamaker.cxx deleted file mode 100644 index 85221b53f9ec..000000000000 --- a/codemaker/source/bonobowrappermaker/corbamaker.cxx +++ /dev/null @@ -1,239 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_codemaker.hxx" - -#include <stdio.h> - -#include "sal/main.h" - -#include <codemaker/typemanager.hxx> -#include <codemaker/dependency.hxx> - -#include "corbaoptions.hxx" -#include "corbatype.hxx" - -using namespace rtl; - -sal_Bool produceAllTypes(const OString& typeName, - TypeManager& typeMgr, - TypeDependency& typeDependencies, - CorbaOptions* pOptions, - sal_Bool bFullScope, - FileStream& o, - TypeSet* pAllreadyDumped, - TypeSet* generatedConversion) - - throw( CannotDumpException ) -{ - if (!produceType(typeName, typeMgr, typeDependencies, pOptions, o, pAllreadyDumped, generatedConversion)) - { - fprintf(stderr, "%s ERROR: %s\n", - pOptions->getProgramName().getStr(), - OString("cannot dump Type '" + typeName + "'").getStr()); - exit(99); - } - - RegistryKey typeKey = typeMgr.getTypeKey(typeName); - RegistryKeyNames subKeys; - - if (typeKey.getKeyNames(OUString(), subKeys)) - return sal_False; - - OString tmpName; - for (sal_uInt32 i=0; i < subKeys.getLength(); i++) - { - tmpName = OUStringToOString(subKeys.getElement(i), RTL_TEXTENCODING_UTF8); - - if (pOptions->isValid("-B")) - tmpName = tmpName.copy(tmpName.indexOf('/', 1) + 1); - else - tmpName = tmpName.copy(1); - - if (bFullScope) - { - if (!produceAllTypes(tmpName, typeMgr, typeDependencies, pOptions, sal_True, o, pAllreadyDumped, generatedConversion)) - return sal_False; - } else - { - if (!produceType(tmpName, typeMgr, typeDependencies, pOptions, o, pAllreadyDumped, generatedConversion)) - return sal_False; - } - } - - return sal_True; -} - -SAL_IMPLEMENT_MAIN_WITH_ARGS(argc, argv) -{ - CorbaOptions options; - - try - { - if (!options.initOptions(argc, argv)) - { - exit(1); - } - } - catch( IllegalArgument& e) - { - fprintf(stderr, "Illegal option: %s\n", e.m_message.getStr()); - exit(99); - } - - RegistryTypeManager typeMgr; - TypeDependency typeDependencies; - - if (!typeMgr.init(!options.isValid("-T"), options.getInputFiles())) - { - fprintf(stderr, "%s : init registries failed, check your registry files.\n", options.getProgramName().getStr()); - exit(99); - } - - if (options.isValid("-B")) - { - typeMgr.setBase(options.getOption("-B")); - } - - try - { - TypeSet generatedConversion; - FileStream cppFile; - OString outPath; - if (options.isValid("-O")) - outPath = options.getOption("-O"); - - cppFile.open(outPath); - - if(!cppFile.isValid()) - { - OString message("cannot open "); - message += outPath + " for writing"; - throw CannotDumpException(message); - } - - if (options.isValid("-H")) - { - OString corbaHeader = options.getOption("-H"); - - cppFile << "#include <" - << corbaHeader - << ">\n\n"; - - CorbaType::dumpDefaultHxxIncludes(cppFile); - cppFile << "\n"; - } - - if (options.isValid("-T")) - { - OString tOption(options.getOption("-T")); - - OString typeName, tmpName; - sal_Bool ret = sal_False; - sal_Int32 nIndex = 0; - do - { - typeName = tOption.getToken(0, ';', nIndex); - - sal_Int32 nPos = typeName.lastIndexOf( '.' ); - tmpName = typeName.copy( nPos != -1 ? nPos+1 : 0 ); - if (tmpName == "*") - { - // produce this type and his scope, but the scope is not recursively generated. - if (typeName.equals("*")) - { - tmpName = "/"; - } else - { - tmpName = typeName.copy(0, typeName.lastIndexOf('.')).replace('.', '/'); - if (tmpName.getLength() == 0) - tmpName = "/"; - else - tmpName.replace('.', '/'); - } - ret = produceAllTypes(tmpName, typeMgr, typeDependencies, &options, sal_False, cppFile, NULL, &generatedConversion); - } else - { - // produce only this type - ret = produceType(typeName.replace('.', '/'), typeMgr, typeDependencies, &options, cppFile, NULL, &generatedConversion); - } - - if (!ret) - { - fprintf(stderr, "%s ERROR: %s\n", - options.getProgramName().getStr(), - OString("cannot dump Type '" + typeName + "'").getStr()); - exit(99); - } - } while( nIndex != -1 ); - } else - { - // produce all types - if (!produceAllTypes("/", typeMgr, typeDependencies, &options, sal_True, cppFile, NULL, &generatedConversion)) - { - fprintf(stderr, "%s ERROR: %s\n", - options.getProgramName().getStr(), - "an error occurs while dumping all types."); - exit(99); - } - } - - cppFile << "namespace bonobobridge {\n" - << "const ConversionInfo* get_conversion_functions() {\n" - << " static ConversionInfo allFunctions[" << generatedConversion.size()+1<< "] = {\n"; - - for (TypeSet::iterator iter = generatedConversion.begin(); iter != generatedConversion.end(); iter++) - { - cppFile << " {\"" << (*iter).getStr() << "\"" - << ", &TC_" << (*iter).replace('/','_').getStr() << "_struct" - << ", sizeof(" << (*iter).replace('/','_').getStr() << ")" - << ", convert_b2u_" << (*iter).replace('/','_').getStr() - << ", convert_u2b_" << (*iter).replace('/','_').getStr() - << " },\n"; - } - - cppFile << " {NULL, NULL, 0 , NULL, NULL} };\n" - << " return allFunctions;\n" - << "}\n" - << "}; // namespace bonobobridge\n"; - - cppFile.close(); - } - catch( CannotDumpException& e) - { - fprintf(stderr, "%s ERROR: %s\n", - options.getProgramName().getStr(), - e.m_message.getStr()); - exit(99); - } - - return 0; -} - - diff --git a/codemaker/source/bonobowrappermaker/corbaoptions.cxx b/codemaker/source/bonobowrappermaker/corbaoptions.cxx deleted file mode 100644 index e8d5362dd1f0..000000000000 --- a/codemaker/source/bonobowrappermaker/corbaoptions.cxx +++ /dev/null @@ -1,259 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_codemaker.hxx" -#include <stdio.h> - -#include "corbaoptions.hxx" - -using namespace rtl; - -sal_Bool CorbaOptions::initOptions(int ac, char* av[], sal_Bool bCmdFile) - throw( IllegalArgument ) -{ - sal_Bool ret = sal_True; - sal_uInt16 i=0; - - if (!bCmdFile) - { - bCmdFile = sal_True; - - m_program = av[0]; - - if (ac < 2) - { - fprintf(stderr, "%s", prepareHelp().getStr()); - ret = sal_False; - } - - i = 1; - } else - { - i = 0; - } - - char *s=NULL; - for (i; i < ac; i++) - { - if (av[i][0] == '-') - { - switch (av[i][1]) - { - case 'O': - if (av[i][2] == '\0') - { - if (i < ac - 1 && av[i+1][0] != '-') - { - i++; - s = av[i]; - } else - { - OString tmp("'-O', please check"); - if (i <= ac - 1) - { - tmp += " your input '" + OString(av[i+1]) + "'"; - } - - throw IllegalArgument(tmp); - } - } else - { - s = av[i] + 2; - } - - m_options["-O"] = OString(s); - break; - case 'H': - if (av[i][2] == '\0') - { - if (i < ac - 1 && av[i+1][0] != '-') - { - i++; - s = av[i]; - } else - { - OString tmp("'-H', please check"); - if (i <= ac - 1) - { - tmp += " your input '" + OString(av[i+1]) + "'"; - } - - throw IllegalArgument(tmp); - } - } else - { - s = av[i] + 2; - } - - m_options["-H"] = OString(s); - break; - case 'B': - if (av[i][2] == '\0') - { - if (i < ac - 1 && av[i+1][0] != '-') - { - i++; - s = av[i]; - } else - { - OString tmp("'-B', please check"); - if (i <= ac - 1) - { - tmp += " your input '" + OString(av[i+1]) + "'"; - } - - throw IllegalArgument(tmp); - } - } else - { - s = av[i] + 2; - } - - m_options["-B"] = OString(s); - break; - case 'T': - if (av[i][2] == '\0') - { - if (i < ac - 1 && av[i+1][0] != '-') - { - i++; - s = av[i]; - } else - { - OString tmp("'-T', please check"); - if (i <= ac - 1) - { - tmp += " your input '" + OString(av[i+1]) + "'"; - } - - throw IllegalArgument(tmp); - } - } else - { - s = av[i] + 2; - } - - if (m_options.count("-T") > 0) - { - OString tmp(m_options["-T"]); - tmp = tmp + ";" + s; - m_options["-T"] = tmp; - } else - { - m_options["-T"] = OString(s); - } - break; - case 'G': - if (av[i][2] != '\0') - { - OString tmp("'-G', please check"); - if (i <= ac - 1) - { - tmp += " your input '" + OString(av[i]) + "'"; - } - - throw IllegalArgument(tmp); - } - - m_options["-G"] = OString(""); - break; - default: - throw IllegalArgument("the option is unknown" + OString(av[i])); - break; - } - } else - { - if (av[i][0] == '@') - { - FILE* cmdFile = fopen(av[i]+1, "r"); - if( cmdFile == NULL ) - { - fprintf(stderr, "%s", prepareHelp().getStr()); - ret = sal_False; - } else - { - int rargc=0; - char* rargv[512]; - char buffer[512]; - - while ( fscanf(cmdFile, "%s", buffer) != EOF ) - { - rargv[rargc]= strdup(buffer); - rargc++; - } - fclose(cmdFile); - - ret = initOptions(rargc, rargv, bCmdFile); - - for (long i=0; i < rargc; i++) - { - free(rargv[i]); - } - } - } else - { - m_inputFiles.push_back(av[i]); - } - } - } - printf("-T: %s\n", m_options["-T"].getStr()); - - return ret; -} - -OString CorbaOptions::prepareHelp() -{ - OString help("\nusing: "); - help += m_program + " [-options] file_1 ... file_n\nOptions:\n"; - help += " -O<file> = file name for the generated output.\n"; - help += " The output directory tree is generated under this directory.\n"; - help += " -T<name> = name specifies a type or a list of types. The output for this\n"; - help += " [t1;...] type is generated. If no '-T' option is specified,\n"; - help += " then output for all types is generated.\n"; - help += " Example: 'com.sun.star.uno.XInterface' is a valid type.\n"; - help += " -B<name> = name specifies the base node. All types are searched under this\n"; - help += " node. Default is the root '/' of the registry files.\n"; - help += " -G = generate only target files which does not exists.\n"; - help += " -H<header> = include CORBA generated <header>.\n"; - help += prepareVersion(); - - return help; -} - -OString CorbaOptions::prepareVersion() -{ - OString version("\nSun Microsystems (R) "); - version += m_program + " Version 2.0\n\n"; - - return version; -} - - - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/codemaker/source/bonobowrappermaker/corbaoptions.hxx b/codemaker/source/bonobowrappermaker/corbaoptions.hxx deleted file mode 100644 index 59cdf9e238db..000000000000 --- a/codemaker/source/bonobowrappermaker/corbaoptions.hxx +++ /dev/null @@ -1,54 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _CORBAMAKER_CPPUOPTIONS_HXX_ -#define _CORBAMAKER_CPPUOPTIONS_HXX_ - -#include <codemaker/options.hxx> - -class CorbaOptions : public Options -{ -public: - CorbaOptions() - : Options() {} - - ~CorbaOptions() {} - - sal_Bool initOptions(int ac, char* av[], sal_Bool bCmdFile=sal_False) - throw( IllegalArgument ); - - ::rtl::OString prepareHelp(); - - ::rtl::OString prepareVersion(); - -protected: -}; - -#endif // _CORBAMAKER_CPPUOPTIONS_HXX_ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/codemaker/source/bonobowrappermaker/corbatype.cxx b/codemaker/source/bonobowrappermaker/corbatype.cxx deleted file mode 100644 index 9b1716e6daa6..000000000000 --- a/codemaker/source/bonobowrappermaker/corbatype.cxx +++ /dev/null @@ -1,2784 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_codemaker.hxx" - -#include <stdio.h> -#include <rtl/alloc.h> -#include <rtl/ustring.hxx> -#include <rtl/strbuf.hxx> - -#include "corbatype.hxx" -#include "corbaoptions.hxx" - -#include <hash_set> -#include <list> - -using namespace rtl; - - -//************************************************************************* -// CorbaType -//************************************************************************* -CorbaType::CorbaType(TypeReader& typeReader, - const OString& typeName, - const TypeManager& typeMgr, - const TypeDependency& typeDependencies, - TypeSet* generatedConversions) - : m_inheritedMemberCount(0) - , m_indentLength(0) - , m_typeName(typeName) - , m_reader(typeReader) - , m_typeMgr((TypeManager&)typeMgr) - , m_dependencies(typeDependencies) - , m_generatedConversions(generatedConversions) -{ - sal_Int32 i = typeName.lastIndexOf('/'); - m_name = typeName.copy( i != -1 ? i+1 : 0 ); -} - -CorbaType::~CorbaType() -{ - -} - -sal_Bool CorbaType::isNestedTypeByName(const ::rtl::OString& type) -{ - sal_Bool ret = sal_False; - - sal_Int32 i = type.lastIndexOf('/'); - - if (i >= 0) - { - OString outerTypeName(type.copy(0, i)); - ret = (m_typeMgr.getTypeClass(outerTypeName) == RT_TYPE_INTERFACE); - } - - return ret; -} - -sal_Bool CorbaType::dump(CorbaOptions* pOptions, FileStream& o, TypeSet* allreadyDumped) - throw( CannotDumpException ) -{ - sal_Bool ret = sal_False; - - ret = dumpConversionFunctions(o, allreadyDumped); - - return ret; -} - -sal_Bool CorbaType::dumpDependedTypes(CorbaOptions* pOptions, FileStream& o, TypeSet* allreadyDumped) - throw( CannotDumpException ) -{ - sal_Bool ret = sal_True; - - TypeUsingSet usingSet(m_dependencies.getDependencies(m_typeName)); - - TypeUsingSet::const_iterator iter = usingSet.begin(); - OString typeName; - sal_uInt32 index = 0; - while (iter != usingSet.end()) - { - typeName = (*iter).m_type; - if ((index = typeName.lastIndexOf(']')) > 0) - typeName = typeName.copy(index + 1); - - if (getUnoBaseType(typeName).getLength() == 0) - { - if (!produceType(typeName, - m_typeMgr, - m_dependencies, - pOptions, - o, allreadyDumped, m_generatedConversions)) - { - fprintf(stderr, "%s ERROR: %s\n", - pOptions->getProgramName().getStr(), - OString("cannot dump Type '" + typeName + "'").getStr()); - exit(99); - } - } - ++iter; - } - - return ret; -} - -sal_Bool CorbaType::dumpConversionFunctions(FileStream& o, TypeSet* allreadyDumped) - throw( CannotDumpException ) -{ - if (m_typeName.lastIndexOf(']') < 0) - { - dumpInclude(o, allreadyDumped, m_typeName, "hpp", sal_False); - dumpDepIncludes(o, allreadyDumped, m_typeName, "hpp"); - - dumpFunctions(o); - } - - return sal_True; -} - - -void CorbaType::dumpDefaultHxxIncludes(FileStream& o) -{ - o << "#ifndef _OSL_MUTEX_HXX_\n" - << "#include <osl/mutex.hxx>\n" - << "#endif\n\n"; - - o << "#ifndef _RTL_USTRING_HXX_\n" - << "#include <rtl/ustring.hxx>\n" - << "#endif\n\n"; - - o << "#ifndef _COM_SUN_STAR_UNO_TYPE_HXX_\n" - << "#include <com/sun/star/uno/Type.hxx>\n" - << "#endif\n"; - - o << "#ifndef _COM_SUN_STAR_UNO_ANY_HXX_\n" - << "#include <com/sun/star/uno/Any.hxx>\n" - << "#endif\n"; - - o << "#ifndef _COM_SUN_STAR_UNO_REFERENCE_HXX_\n" - << "#include <com/sun/star/uno/Reference.hxx>\n" - << "#endif\n"; - - o << "#ifndef _COM_SUN_STAR_UNO_XINTERFACE_HPP_\n" - << "#include <com/sun/star/uno/XInterface.hpp>\n" - << "#endif\n"; - - o << "#ifndef _BONOBO_NULLINTERFACE_HPP_\n" - << "#include <Bonobo/NullInterface.hpp>\n" - << "#endif\n"; - - o << "#ifndef _COM_SUN_STAR_UNO_EXCEPTION_HPP_\n" - << "#include <com/sun/star/uno/Exception.hpp>\n" - << "#endif\n"; - - o << "#ifndef _COM_SUN_STAR_UNO_RUNTIMEEXCEPTION_HPP_\n" - << "#include <com/sun/star/uno/RuntimeException.hpp>\n" - << "#endif\n"; - - o << "#ifndef _COM_SUN_STAR_UNO_SEQUENCE_HXX_\n" - << "#include <com/sun/star/uno/Sequence.hxx>\n" - << "#endif\n"; -} - - -void CorbaType::dumpInclude(FileStream& o, TypeSet* allreadyDumped, const OString& typeName, sal_Char* prefix, sal_Bool bExtended, sal_Bool bCaseSensitive) -{ - OString realTypeName = checkRealBaseType( typeName ); - - if (!isNestedTypeByName(typeName) && - (BT_INVALID == isBaseType(realTypeName)) && - !realTypeName.equals("Bonobo/NullInterface") && - !realTypeName.equals("com/sun/star/uno/XInterface") && - !realTypeName.equals("com/sun/star/uno/TypeClass") && - !realTypeName.equals("com/sun/star/uno/Type") && - !realTypeName.equals("com/sun/star/uno/Exception") && - !realTypeName.equals("com/sun/star/uno/RuntimeException")) - { - TypeSet::const_iterator iter = allreadyDumped->find(realTypeName); - - if (iter == allreadyDumped->end()) - { - allreadyDumped->insert(realTypeName); - - sal_uInt32 length = 3+ m_typeName.getLength() + strlen(prefix); - - if (bExtended) - length += m_name.getLength() + 1; - - OStringBuffer tmpBuf(length); - - tmpBuf.append('_'); - tmpBuf.append(typeName); - tmpBuf.append('_'); - if (bExtended) - { - tmpBuf.append(m_name); - tmpBuf.append('_'); - } - tmpBuf.append(prefix); - tmpBuf.append('_'); - - OString tmp(tmpBuf.makeStringAndClear().replace('/', '_').toAsciiUpperCase()); - - length = 1 + typeName.getLength() + strlen(prefix); - if (bExtended) - length += m_name.getLength() + 1; - - tmpBuf.ensureCapacity(length); - tmpBuf.append(typeName); - if (bExtended) - { - tmpBuf.append('/'); - tmpBuf.append(m_name); - } - tmpBuf.append('.'); - tmpBuf.append(prefix); - - o << "#ifndef " << tmp << "\n#include <"; - if (bCaseSensitive) - { - o << tmpBuf.makeStringAndClear(); - } else - { - o << tmpBuf.makeStringAndClear(); - } - - o << ">\n"; - o << "#endif\n"; - - o << "namespace bonobobridge {\n\n"; - - std::list<OString> nestedTypes; - - do - { - if ((realTypeName.lastIndexOf(']') < 0) && - (BT_INVALID == isBaseType(realTypeName)) && - !realTypeName.equals("Bonobo/NullInterface") && - !realTypeName.equals("com/sun/star/uno/XInterface") && - !realTypeName.equals("com/sun/star/uno/TypeClass") && - !realTypeName.equals("com/sun/star/uno/Type") && - !realTypeName.equals("com/sun/star/uno/Exception") && - !realTypeName.equals("com/sun/star/uno/RuntimeException") && - !realTypeName.equals("com/sun/star/uno/TypeClass")) - { - o << "inline sal_Bool cpp_convert_b2u("; - dumpUnoType(o, realTypeName, sal_False, sal_True); - o << " u, "; - dumpCorbaType(o, realTypeName, sal_True, sal_True); - o << " b, const ::vos::ORef< ::bonobobridge::Bridge >& bridge);\n"; - o << "inline sal_Bool cpp_convert_u2b("; - dumpCorbaType(o, realTypeName, sal_False, sal_True); - o << " b, "; - dumpUnoType(o, realTypeName, sal_True, sal_True); - o << " u, const ::vos::ORef< ::bonobobridge::Bridge >& bridge);\n"; - } - - RegistryKey key = m_typeMgr.getTypeKey(realTypeName); - RegistryKeyNames nestedTypeNames; - key.getKeyNames(OUString(), nestedTypeNames); - for (sal_uInt32 i = 0; i < nestedTypeNames.getLength(); i++) - { - OString nTypeName(OUStringToOString(nestedTypeNames.getElement(i), RTL_TEXTENCODING_UTF8)); - - nTypeName = checkRealBaseType(nTypeName.copy(5)); - - if (BT_INVALID == isBaseType(nTypeName)) - { - allreadyDumped->insert(nTypeName); - nestedTypes.push_back(nTypeName); - } - } - - if (nestedTypes.size() > 0) - { - realTypeName = nestedTypes.front(); - nestedTypes.pop_front(); - } - else - { - realTypeName = ""; - } - } - while (realTypeName.getLength() > 0); - - o << "}; // namespace bonobobridge\n"; - } - } -} - -void CorbaType::dumpDepIncludes(FileStream& o, TypeSet* allreadyDumped, const OString& typeName, sal_Char* prefix) -{ - TypeUsingSet usingSet(m_dependencies.getDependencies(typeName)); - - TypeUsingSet::const_iterator iter = usingSet.begin(); - - OString sPrefix(OString(prefix).toAsciiUpperCase()); - sal_Bool bSequenceDumped = sal_False; - sal_Bool bInterfaceDumped = sal_False; - sal_uInt32 index = 0; - sal_uInt32 seqNum = 0; - OString relType; - while (iter != usingSet.end()) - { - index = (*iter).m_type.lastIndexOf(']'); - seqNum = (index > 0 ? ((index+1) / 2) : 0); - - relType = (*iter).m_type; - if (index > 0) - relType = relType.copy(index+1); - - if (!isNestedTypeByName(relType)) - { - OString defPrefix("HXX"); - if (sPrefix.equals("HDL")) - defPrefix = "H"; - - if (seqNum > 0 && !bSequenceDumped) - { - bSequenceDumped = sal_True; - } - - if (getUnoBaseType(relType).getLength() == 0 && - m_typeName != relType) - { - if (m_typeMgr.getTypeClass(relType) == RT_TYPE_INTERFACE - && sPrefix.equals("HDL")) - { - if (!bInterfaceDumped) - { - bInterfaceDumped = sal_True; - } - - if (!((*iter).m_use & TYPEUSE_SUPER)) - { - o << "\n"; - dumpNameSpace(o, sal_True, sal_False, relType); - o << "\nclass " << scopedName(m_typeName, relType, sal_True) << ";\n"; - dumpNameSpace(o, sal_False, sal_False, relType); - o << "\n\n"; - } else - { - dumpInclude(o, allreadyDumped, relType, prefix); - } - } else - { - dumpInclude(o, allreadyDumped, relType, prefix); - } - } - } - ++iter; - } -} - -void CorbaType::dumpNameSpace(FileStream& o, sal_Bool bOpen, sal_Bool bFull, const OString& type) -{ - OString typeName(type); - sal_Bool bOneLine = sal_True; - if (typeName.getLength() == 0) - { - typeName = m_typeName; - bOneLine = sal_False; - } - - if (typeName == "/") - return; - - if (typeName.indexOf( '/' ) == -1 && !bFull) - return; - - if (!bFull) - typeName = typeName.copy( 0, typeName.lastIndexOf( '/' ) ); - - if (bOpen) - { - sal_Int32 nIndex = 0; - do - { - o << "namespace " << typeName.getToken(0, '/', nIndex); - if (bOneLine) - o << " { "; - else - o << "\n{\n"; - } while( nIndex != -1 ); - } else - { - sal_Int32 nPos = 0; - do - { - nPos = typeName.lastIndexOf( '/' ); - o << "}"; - if( bOneLine ) - o << " "; - else - o << " // " << typeName.copy( nPos+1 ) << "\n"; - if( nPos != -1 ) - typeName = typeName.copy( 0, nPos ); - } while( nPos != -1 ); - } -} - - -sal_uInt32 CorbaType::getMemberCount() -{ - sal_uInt32 count = m_reader.getMethodCount(); - - sal_uInt32 fieldCount = m_reader.getFieldCount(); - RTFieldAccess access = RT_ACCESS_INVALID; - for (sal_uInt16 i=0; i < fieldCount; i++) - { - access = m_reader.getFieldAccess(i); - - if (access != RT_ACCESS_CONST && access != RT_ACCESS_INVALID) - count++; - } - return count; -} - -sal_uInt32 CorbaType::checkInheritedMemberCount(const TypeReader* pReader) -{ - sal_Bool bSelfCheck = sal_True; - if (!pReader) - { - bSelfCheck = sal_False; - pReader = &m_reader; - } - - sal_uInt32 count = 0; - OString superType(pReader->getSuperTypeName()); - if (superType.getLength() > 0) - { - TypeReader aSuperReader(m_typeMgr.getTypeReader(superType)); - if ( aSuperReader.isValid() ) - { - count = checkInheritedMemberCount(&aSuperReader); - } - } - - if (bSelfCheck) - { - count += pReader->getMethodCount(); - sal_uInt32 fieldCount = pReader->getFieldCount(); - RTFieldAccess access = RT_ACCESS_INVALID; - for (sal_uInt16 i=0; i < fieldCount; i++) - { - access = pReader->getFieldAccess(i); - - if (access != RT_ACCESS_CONST && access != RT_ACCESS_INVALID) - count++; - } - } - - return count; -} - -sal_uInt32 CorbaType::getInheritedMemberCount() -{ - if (m_inheritedMemberCount == 0) - { - m_inheritedMemberCount = checkInheritedMemberCount(0); - } - - return m_inheritedMemberCount; -} - -OString CorbaType::getTypeClass(const OString& type, sal_Bool bCStyle) -{ - OString typeName = (type.getLength() > 0 ? type : m_typeName); - RTTypeClass rtTypeClass = RT_TYPE_INVALID; - - if (type.getLength() > 0) - { - typeName = type; - rtTypeClass = m_typeMgr.getTypeClass(typeName); - } else - { - typeName = m_typeName; - rtTypeClass = m_reader.getTypeClass(); - } - - if (typeName.lastIndexOf(']') > 0) - return bCStyle ? "typelib_TypeClass_SEQUENCE" : "::com::sun::star::uno::TypeClass_SEQUENCE"; - - switch (rtTypeClass) - { - case RT_TYPE_INTERFACE: - return bCStyle ? "typelib_TypeClass_INTERFACE" : "::com::sun::star::uno::TypeClass_INTERFACE"; - break; - case RT_TYPE_MODULE: - return bCStyle ? "typelib_TypeClass_MODULE" : "::com::sun::star::uno::TypeClass_MODULE"; - break; - case RT_TYPE_STRUCT: - return bCStyle ? "typelib_TypeClass_STRUCT" : "::com::sun::star::uno::TypeClass_STRUCT"; - break; - case RT_TYPE_ENUM: - return bCStyle ? "typelib_TypeClass_ENUM" : "::com::sun::star::uno::TypeClass_ENUM"; - break; - case RT_TYPE_EXCEPTION: - return bCStyle ? "typelib_TypeClass_EXCEPTION" : "::com::sun::star::uno::TypeClass_EXCEPTION"; - break; - case RT_TYPE_TYPEDEF: - { - OString realType = checkRealBaseType( typeName ); - return getTypeClass( realType, bCStyle ); - } -// return bCStyle ? "typelib_TypeClass_TYPEDEF" : "::com::sun::star::uno::TypeClass_TYPEDEF"; - break; - case RT_TYPE_SERVICE: - return bCStyle ? "typelib_TypeClass_SERVICE" : "::com::sun::star::uno::TypeClass_SERVICE"; - break; - case RT_TYPE_INVALID: - { - if (type.equals("long")) - return bCStyle ? "typelib_TypeClass_LONG" : "::com::sun::star::uno::TypeClass_LONG"; - if (type.equals("short")) - return bCStyle ? "typelib_TypeClass_SHORT" : "::com::sun::star::uno::TypeClass_SHORT"; - if (type.equals("hyper")) - return bCStyle ? "typelib_TypeClass_HYPER" : "::com::sun::star::uno::TypeClass_HYPER"; - if (type.equals("string")) - return bCStyle ? "typelib_TypeClass_STRING" : "::com::sun::star::uno::TypeClass_STRING"; - if (type.equals("boolean")) - return bCStyle ? "typelib_TypeClass_BOOLEAN" : "::com::sun::star::uno::TypeClass_BOOLEAN"; - if (type.equals("char")) - return bCStyle ? "typelib_TypeClass_CHAR" : "::com::sun::star::uno::TypeClass_CHAR"; - if (type.equals("byte")) - return bCStyle ? "typelib_TypeClass_BYTE" : "::com::sun::star::uno::TypeClass_BYTE"; - if (type.equals("any")) - return bCStyle ? "typelib_TypeClass_ANY" : "::com::sun::star::uno::TypeClass_ANY"; - if (type.equals("type")) - return bCStyle ? "typelib_TypeClass_TYPE" : "::com::sun::star::uno::TypeClass_TYPE"; - if (type.equals("float")) - return bCStyle ? "typelib_TypeClass_FLOAT" : "::com::sun::star::uno::TypeClass_FLOAT"; - if (type.equals("double")) - return bCStyle ? "typelib_TypeClass_DOUBLE" : "::com::sun::star::uno::TypeClass_DOUBLE"; - if (type.equals("void")) - return bCStyle ? "typelib_TypeClass_VOID" : "::com::sun::star::uno::TypeClass_VOID"; - if (type.equals("unsigned long")) - return bCStyle ? "typelib_TypeClass_UNSIGNED_LONG" : "::com::sun::star::uno::TypeClass_UNSIGNED_LONG"; - if (type.equals("unsigned short")) - return bCStyle ? "typelib_TypeClass_UNSIGNED_SHORT" : "::com::sun::star::uno::TypeClass_UNSIGNED_SHORT"; - if (type.equals("unsigned hyper")) - return bCStyle ? "typelib_TypeClass_UNSIGNED_HYPER" : "::com::sun::star::uno::TypeClass_UNSIGNED_HYPER"; - } - break; - } - - return bCStyle ? "typelib_TypeClass_UNKNOWN" : "::com::sun::star::uno::TypeClass_UNKNOWN"; -} - -OString CorbaType::printUnoType(const OString& type, sal_Bool bConst, sal_Bool bRef, sal_Bool bNative) - throw( CannotDumpException ) -{ - OStringBuffer ret(1024); - OString sType(checkRealBaseType(type, sal_True)); - sal_uInt32 index = sType.lastIndexOf(']'); - sal_uInt32 seqNum = (index > 0 ? ((index+1) / 2) : 0); - - OString relType = (index > 0 ? (sType).copy(index+1) : type); - - RTTypeClass typeClass = m_typeMgr.getTypeClass(relType); - - if (bConst) ret.append("const "); - - sal_uInt32 i; - for (i=0; i < seqNum; i++) - { - ret.append("::com::sun::star::uno::Sequence< "); - } - - switch (typeClass) - { - case RT_TYPE_INTERFACE: - if (bNative) - ret.append(scopedName(m_typeName, relType)); - else - ret.append("::com::sun::star::uno::Reference< ").append(scopedName(m_typeName, relType)).append(" >"); - break; - case RT_TYPE_INVALID: - { - OString tmp(getUnoBaseType(relType)); - if (tmp.getLength() > 0) - { - ret.append(getUnoBaseType(relType)); - } else - throw CannotDumpException("Unknown type '" + relType + "', incomplete type library. ("+type+")"); - } - break; - case RT_TYPE_STRUCT: - case RT_TYPE_ENUM: - case RT_TYPE_TYPEDEF: - case RT_TYPE_EXCEPTION: - ret.append(scopedName(m_typeName, relType)); - break; - } - - for (i=0; i < seqNum; i++) - { - ret.append(" >"); - } - - if (bRef) ret.append("&"); - return ret.makeStringAndClear(); -} - -void CorbaType::dumpUnoType(FileStream& o, const OString& type, - sal_Bool bConst, sal_Bool bRef, sal_Bool bNative) - throw( CannotDumpException ) -{ - OString ret = printUnoType(type, bConst, bRef, bNative); - o << ret; -} - -OString CorbaType::printCorbaType(const OString& type, sal_Bool bConst, sal_Bool bRef) - throw( CannotDumpException ) -{ - OStringBuffer ret(1024); - - OString sType(type); - - sal_uInt32 index = sType.lastIndexOf(']'); - sal_uInt32 seqNum = (index > 0 ? ((index+1) / 2) : 0); - - OString relType = (index > 0 ? (sType).copy(index+1) : type); - - RTTypeClass typeClass = m_typeMgr.getTypeClass(relType); - - if (relType.equals("com/sun/star/uno/XInterface")) - relType = "Bonobo/Unknown"; - - if (relType.equals("com/sun/star/uno/TypeClass")) - relType = "CORBA_TypeCode"; - - if (relType.equals("com/sun/star/uno/RuntimeException")) - relType = "CORBA_SystemException"; - - if (relType.equals("com/sun/star/uno/Exception")) - relType = "CORBA_any"; - - if (bConst) ret.append("const "); - - - sal_uInt32 i; - for (i=0; i < seqNum; i++) - { - ret.append("CORBA_sequence_"); - } - - switch (typeClass) - { - case RT_TYPE_INTERFACE: - ret.append(relType.replace('/', '_')); - break; - case RT_TYPE_INVALID: - { - OString tmp(getUnoBaseType(relType)); - if (tmp.getLength() > 0) - ret.append(getCorbaBaseType(relType)); - else - throw CannotDumpException("Unknown type '" + relType + "', incomplete type library. ("+type+")"); - } - break; - case RT_TYPE_STRUCT: - case RT_TYPE_ENUM: - case RT_TYPE_TYPEDEF: - case RT_TYPE_EXCEPTION: - ret.append(relType.replace('/', '_')); - break; - } - - if (bRef) ret.append("&"); - - return ret.makeStringAndClear(); -} - -sal_Bool CorbaType::isPassedAsPointer(const OString& type) -{ - sal_Bool ret = sal_False; - - OString sType(checkSpecialCorbaType(type)); - - sal_Int32 index = sType.lastIndexOf(']'); - sal_Int32 seqNum = (index > 0 ? ((index+1) / 2) : 0); - - OString relType = (index > 0 ? (sType).copy(index+1) : type); - - if (index > 0) - { - OString fakeTest; - - sal_Int32 j = type.lastIndexOf('/'); - if (j >= 0) - fakeTest = type.copy(0, j+1)+"_faked_array_"+type.copy(j+1); - else - fakeTest = "_faked_array_"+sType; - - TypeReader fakeTestReader = m_typeMgr.getTypeReader(fakeTest); - - if (fakeTestReader.isValid()) - ret = sal_False; - else - ret = sal_True; - } - else - { - RTTypeClass typeClass = m_typeMgr.getTypeClass(sType); - - switch (typeClass) - { - case RT_TYPE_STRUCT: - case RT_TYPE_EXCEPTION: - ret = sal_True; - break; - - case RT_TYPE_INTERFACE: - case RT_TYPE_ENUM: - case RT_TYPE_INVALID: - if (sType.equals("any")) - ret = sal_True; - else - ret = sal_False; - break; - } - } - - return ret; -} - -sal_Bool CorbaType::isDerivedFromUnknown(const ::rtl::OString& typeName) -{ - sal_Bool ret = sal_True; - if (typeName.getLength() == 0) - ret = sal_False; - else if (typeName.equals("Bonobo/NullInterface")) - ret = sal_False; - else if (typeName.equals("com/sun/star/uno/XInterface")) - ret = sal_True; - else - { - TypeReader reader(m_typeMgr.getTypeReader(typeName)); - if (reader.isValid()) - ret = isDerivedFromUnknown(reader.getSuperTypeName()); - else - ret = sal_False; - } - return ret; -} - - -sal_Bool CorbaType::isArray(const OString& type) -{ - sal_Bool ret = sal_False; - - OString sType(checkSpecialCorbaType(type)); - - sal_Int32 index = sType.lastIndexOf(']'); - sal_Int32 seqNum = (index > 0 ? ((index+1) / 2) : 0); - - OString relType = (index > 0 ? (sType).copy(index+1) : type); - - if (index > 0) - { - OString fakeTest; - - sal_Int32 j = type.lastIndexOf('/'); - if (j >= 0) - fakeTest = type.copy(0, j+1)+"_faked_array_"+type.copy(j+1); - else - fakeTest = "_faked_array_"+sType; - - TypeReader fakeTestReader = m_typeMgr.getTypeReader(fakeTest); - - if (fakeTestReader.isValid()) - ret = sal_True; - } - - return ret; -} - -OString CorbaType::printCorbaParameter(const OString& type, sal_Bool bOut) - throw( CannotDumpException ) -{ - OStringBuffer ret(1024); - - OString sType(type); - sal_Int32 index = sType.lastIndexOf(']'); - sal_Int32 seqNum = (index > 0 ? ((index+1) / 2) : 0); - - OString relType = (index > 0 ? (sType).copy(index+1) : type); - - RTTypeClass typeClass = m_typeMgr.getTypeClass(relType); - - if (relType.equals("Bonobo/NullInterface")) - relType = "CORBA_Object"; - - if (relType.equals("com/sun/star/uno/XInterface")) - relType = "Bonobo/Unknown"; - - if (relType.equals("com/sun/star/uno/TypeClass")) - relType = "CORBA_TypeCode"; - - if (relType.equals("com/sun/star/uno/RuntimeException")) - relType = "CORBA_SystemException"; - - if (relType.equals("com/sun/star/uno/Exception")) - relType = "CORBA_any"; - - int i; - for (i=0; i < seqNum; i++) - { - ret.append("CORBA_sequence_"); - } - - switch (typeClass) - { - case RT_TYPE_INTERFACE: - ret.append(relType.replace('/', '_')); - break; - case RT_TYPE_INVALID: - { - OString tmp(getUnoBaseType(relType)); - if (tmp.getLength() > 0) - { - ret.append(getCorbaBaseType(relType)); - } else - throw CannotDumpException("Unknown type '" + relType + "', incomplete type library. ("+type+")"); - } - break; - case RT_TYPE_STRUCT: - case RT_TYPE_EXCEPTION: - case RT_TYPE_ENUM: - case RT_TYPE_TYPEDEF: - ret.append(relType.replace('/', '_')); - break; - } - - return ret.makeStringAndClear(); -} - -void CorbaType::dumpCorbaType(FileStream& o, const OString& type, - sal_Bool bConst, sal_Bool bRef) - throw( CannotDumpException ) -{ - OString ret = printCorbaType(type, bConst, bRef); - o << ret; -} - -OString CorbaType::getUnoBaseType(const OString& type) -{ - if (type.equals("long")) - return "sal_Int32"; - if (type.equals("short")) - return "sal_Int16"; - if (type.equals("hyper")) - return "sal_Int64"; - if (type.equals("string")) - return "::rtl::OUString"; - if (type.equals("boolean")) - return "sal_Bool"; - if (type.equals("char")) - return "sal_Unicode"; - if (type.equals("byte")) - return "sal_Int8"; - if (type.equals("any")) - return "::com::sun::star::uno::Any"; - if (type.equals("type")) - return "::com::sun::star::uno::Type"; - if (type.equals("float")) - return "float"; - if (type.equals("double")) - return "double"; - if (type.equals("octet")) - return "sal_Int8"; - if (type.equals("void")) - return type; - if (type.equals("unsigned long")) - return "sal_uInt32"; - if (type.equals("unsigned short")) - return "sal_uInt16"; - if (type.equals("unsigned hyper")) - return "sal_uInt64"; - - return OString(); -} - -OString CorbaType::getCorbaBaseType(const OString& type) -{ - if (type.equals("long")) - return "CORBA_long"; - if (type.equals("short")) - return "CORBA_short"; - if (type.equals("hyper")) - return "CORBA_long_long"; - if (type.equals("string")) - return "CORBA_char*"; - if (type.equals("boolean")) - return "CORBA_boolean"; - if (type.equals("char")) - return "CORBA_char"; - if (type.equals("byte")) - return "CORBA_octet"; - if (type.equals("any")) - return "CORBA_any"; - if (type.equals("type")) - return "CORBA_TypeCode"; - if (type.equals("float")) - return "CORBA_float"; - if (type.equals("double")) - return "CORBA_double"; - if (type.equals("octet")) - return "CORBA_octet"; - if (type.equals("void")) - return type; - if (type.equals("unsigned long")) - return "CORBA_unsigned_long"; - if (type.equals("unsigned short")) - return "CORBA_unsigned_short"; - if (type.equals("unsigned hyper")) - return "CORBA_unsigned_long_long"; - - return OString(); -} - - -void CorbaType::dumpTypeInit(FileStream& o, const OString& typeName) -{ - OString type(checkSpecialCorbaType(typeName)); - - BASETYPE baseType = isBaseType(type); - - switch (baseType) - { - case BT_BOOLEAN: - o << "(sal_False)"; - return; - break; - case BT_ANY: - case BT_STRING: - o << "()"; - return; - break; - case BT_INVALID: - break; - default: - o << "(("; - dumpUnoType(o, type); - o << ")" << "0)"; - return; - } - - RTTypeClass typeClass = m_typeMgr.getTypeClass(type); - - if (typeClass == RT_TYPE_ENUM) - { - RegistryTypeReaderLoader aReaderLoader; - - if (aReaderLoader.isLoaded()) - { - TypeReader reader(m_typeMgr.getTypeReader(type)); - - if ( reader.isValid() ) - { - sal_Int32 nPos = type.lastIndexOf( '/' ); - o << "(" << shortScopedName("", type, sal_False) - << "::" << type.copy( nPos != -1 ? nPos+1 : 0 ) - << "_" << reader.getFieldName(0) << ")"; - return; - } - } - } - - o << "()"; -} - -BASETYPE CorbaType::isBaseType(const OString& type) -{ - if (type.equals("long")) - return BT_LONG; - if (type.equals("short")) - return BT_SHORT; - if (type.equals("hyper")) - return BT_HYPER; - if (type.equals("string")) - return BT_STRING; - if (type.equals("boolean")) - return BT_BOOLEAN; - if (type.equals("char")) - return BT_CHAR; - if (type.equals("byte")) - return BT_BYTE; - if (type.equals("any")) - return BT_ANY; - if (type.equals("float")) - return BT_FLOAT; - if (type.equals("double")) - return BT_DOUBLE; - if (type.equals("void")) - return BT_VOID; - if (type.equals("unsigned long")) - return BT_UNSIGNED_LONG; - if (type.equals("unsigned short")) - return BT_UNSIGNED_SHORT; - if (type.equals("unsigned hyper")) - return BT_UNSIGNED_HYPER; - - return BT_INVALID; -} - -OString CorbaType::typeToIdentifier(const OString& type) -{ - sal_uInt32 index = type.lastIndexOf(']'); - sal_uInt32 seqNum = (index > 0 ? ((index+1) / 2) : 0); - - OString relType = (index > 0 ? ((OString)type).copy(index+1) : type); - OString sIdentifier; - - while( seqNum > 0 ) - { - sIdentifier += OString("seq"); - - if ( --seqNum == 0 ) - { - sIdentifier += OString("_"); - } - } - - if ( isBaseType(relType) ) - { - sIdentifier += relType.replace(' ', '_'); - } else - { - sIdentifier += relType.replace('/', '_'); - } - - - return sIdentifier; -} - -OString CorbaType::checkSpecialCorbaType(const OString& type) -{ - OString baseType(type); - - RegistryTypeReaderLoader & rReaderLoader = getRegistryTypeReaderLoader(); - - RegistryKey key; - sal_uInt8* pBuffer=NULL; - RTTypeClass typeClass; - sal_Bool isTypeDef = (m_typeMgr.getTypeClass(baseType) == RT_TYPE_TYPEDEF); - TypeReader reader; - - while (isTypeDef) - { - reader = m_typeMgr.getTypeReader(baseType); - - if (reader.isValid()) - { - typeClass = reader.getTypeClass(); - - if (typeClass == RT_TYPE_TYPEDEF) - baseType = reader.getSuperTypeName(); - else - isTypeDef = sal_False; - } else - break; - } - - return baseType; -} - -OString CorbaType::checkRealBaseType(const OString& type, sal_Bool bResolveTypeOnly) -{ - sal_uInt32 index = type.lastIndexOf(']'); - OString baseType = (index > 0 ? ((OString)type).copy(index+1) : type); - OString seqPrefix = (index > 0 ? ((OString)type).copy(0, index+1) : OString()); - - RegistryTypeReaderLoader & rReaderLoader = getRegistryTypeReaderLoader(); - - RegistryKey key; - sal_uInt8* pBuffer=NULL; - RTTypeClass typeClass; - sal_Bool mustBeChecked = (m_typeMgr.getTypeClass(baseType) == RT_TYPE_TYPEDEF); - TypeReader reader; - - while (mustBeChecked) - { - reader = m_typeMgr.getTypeReader(baseType); - - if (reader.isValid()) - { - typeClass = reader.getTypeClass(); - - if (typeClass == RT_TYPE_TYPEDEF) - { - baseType = reader.getSuperTypeName(); - index = baseType.lastIndexOf(']'); - if (index > 0) - { - seqPrefix += baseType.copy(0, index+1); - baseType = baseType.copy(index+1); - } - } else - mustBeChecked = sal_False; - } else - break; - } - - if ( bResolveTypeOnly ) - baseType = seqPrefix + baseType; - - return baseType; -} - - -void CorbaType::inc(sal_uInt32 num) -{ - m_indentLength += num; -} - -void CorbaType::dec(sal_uInt32 num) -{ - if (m_indentLength - num < 0) - m_indentLength = 0; - else - m_indentLength -= num; -} - -OString CorbaType::indent() -{ - OStringBuffer tmp(m_indentLength); - - for (sal_uInt32 i=0; i < m_indentLength; i++) - { - tmp.append(' '); - } - return tmp.makeStringAndClear(); -} - -OString CorbaType::indent(sal_uInt32 num) -{ - OStringBuffer tmp(m_indentLength + num); - - for (sal_uInt32 i=0; i < m_indentLength + num; i++) - { - tmp.append(' '); - } - return tmp.makeStringAndClear(); -} - -//************************************************************************* -// InterfaceType -//************************************************************************* -InterfaceType::InterfaceType(TypeReader& typeReader, - const OString& typeName, - const TypeManager& typeMgr, - const TypeDependency& typeDependencies, - TypeSet* generatedConversions) - : CorbaType(typeReader, typeName, typeMgr, typeDependencies, generatedConversions) -{ - m_inheritedMemberCount = 0; - m_hasAttributes = sal_False; - m_hasMethods = sal_False; -} - -InterfaceType::~InterfaceType() -{ - -} - - -void InterfaceType::dumpUnoMethods(FileStream& o, sal_Bool bDeclOnly, sal_Bool bDelegateToSuper) -{ - OString superName(m_reader.getSuperTypeName()); - if (bDeclOnly && - !superName.equals("Bonobo/NullInterface") && - !superName.equals("com/sun/star/uno/XInterface")) - { - TypeReader reader(m_typeMgr.getTypeReader(superName)); - InterfaceType iType(reader, superName, m_typeMgr, TypeDependency(), m_generatedConversions); - iType.inc(); - iType.dumpUnoMethods(o, bDeclOnly, sal_True); - } - - sal_uInt32 methodCount = m_reader.getMethodCount(); - sal_Bool first=sal_True; - - OString methodName, returnType, paramType, paramName; - sal_uInt32 paramCount = 0; - sal_uInt32 excCount = 0; - RTMethodMode methodMode = RT_MODE_INVALID; - RTParamMode paramMode = RT_PARAM_INVALID; - - sal_Bool bRef = sal_False; - sal_Bool bConst = sal_False; - sal_Bool bWithRunTimeExcp = sal_True; - - for (sal_uInt16 i=0; i < methodCount; i++) - { - methodName = m_reader.getMethodName(i); - returnType = m_reader.getMethodReturnType(i); - paramCount = m_reader.getMethodParamCount(i); - excCount = m_reader.getMethodExcCount(i); - methodMode = m_reader.getMethodMode(i); - - if ( methodName.equals("acquire") || methodName.equals("release") ) - bWithRunTimeExcp = sal_False; - - if (first) - { - first = sal_False; - o << "\n" << indent() << "// Methods\n"; - } - - o << indent(); - if (bDeclOnly) - o << "virtual "; - dumpUnoType(o, returnType); - o << " SAL_CALL "; - if (!bDeclOnly) - { - o << "bonobobridge::BonoboWrapper_"; - dumpCorbaType(o, m_typeName, sal_False, sal_False); - o << "::"; - } - - o << methodName << "( "; - - sal_uInt16 j; - for (j=0; j < paramCount; j++) - { - paramName = m_reader.getMethodParamName(i, j); - paramType = m_reader.getMethodParamType(i, j); - paramMode = m_reader.getMethodParamMode(i, j); - - switch (paramMode) - { - case RT_PARAM_IN: - { - OString relType = checkSpecialCorbaType(paramType); - if (m_typeMgr.getTypeClass(relType) == RT_TYPE_ENUM || - (isBaseType(relType) && !relType.equals("string") && !relType.equals("any"))) - { - bConst = sal_False; - bRef = sal_False; - } else - { - bConst = sal_True; - bRef = sal_True; - } - break; - } - case RT_PARAM_OUT: - case RT_PARAM_INOUT: - bConst = sal_False; - bRef = sal_True; - break; - } - - dumpUnoType(o, paramType, bConst, bRef); - o << " " << paramName; - - if (j+1 < paramCount) o << ", "; - } - o << " )"; - - o << " throw("; - OString excpName; - for (j=0; j < excCount; j++) - { - excpName = m_reader.getMethodExcType(i, j); - if (excpName != "com/sun/star/uno/RuntimeException") - o << scopedName(m_typeName, excpName); - if (bWithRunTimeExcp) - o << ", "; - } - - if ( bWithRunTimeExcp ) - { - o << " ::com::sun::star::uno::RuntimeException"; - } - - if (bDeclOnly && bDelegateToSuper) - { - o << " ) {\n"; - if (returnType.equals("void")) - o << indent() << " "; - else - o << indent() << " return "; - o << "BonoboWrapper_"; - dumpCorbaType(o, m_typeName, sal_False, sal_False); - o << "::" << methodName << "( "; - for (j = 0; j < paramCount; j++) - { - paramName = m_reader.getMethodParamName(i, j); - o << paramName; - if (j < (paramCount-1)) - o << ", "; - } - o << " );\n" - << indent() << "}\n"; - } - else if (!bDeclOnly) - { - o << " ) {\n"; - - OStringBuffer preBuffer(1024); - OStringBuffer callBuffer(1024); - OStringBuffer postBuffer(1024); - - callBuffer.append(" "); - - if (!returnType.equals("void")) - { - preBuffer.append(" "); - preBuffer.append(printCorbaParameter(returnType)); - if (isPassedAsPointer(returnType)) - preBuffer.append("*"); - preBuffer.append(" _b_ret;\n"); - preBuffer.append(" "); - preBuffer.append(printUnoType(returnType, sal_False, sal_False)); - preBuffer.append(" _u_ret;\n"); - - callBuffer.append("_b_ret = "); - } - - callBuffer.append(printCorbaType(m_typeName, sal_False, sal_False)); - callBuffer.append("_"); - if (methodName.indexOf("_reserved_identifier_") == 0) - callBuffer.append(methodName.copy(OString("_reserved_identifier_").getLength())); - else - callBuffer.append(methodName); - - callBuffer.append("( m_corbaObject"); - - for (j=0; j < paramCount; j++) - { - paramName = m_reader.getMethodParamName(i, j); - paramType = m_reader.getMethodParamType(i, j); - paramMode = m_reader.getMethodParamMode(i, j); - - preBuffer.append(" "); - preBuffer.append(printCorbaParameter(paramType)); - if (isPassedAsPointer(paramType) && (paramMode == RT_PARAM_OUT)) - { - preBuffer.append("* _b_"); - preBuffer.append(paramName); - preBuffer.append(";\n"); - } - else - { - preBuffer.append(" _b_"); - preBuffer.append(paramName); - preBuffer.append(";\n"); - } - - switch (paramMode) { - case RT_PARAM_IN: - - if (isArray(paramType)) - preBuffer.append(" // fix me: conversion of array types!\n"); - else - { - preBuffer.append(" cpp_convert_u2b("); - preBuffer.append("_b_"); - preBuffer.append(paramName); - preBuffer.append(", "); - preBuffer.append(paramName); - preBuffer.append(", m_bridge);\n"); - } - - if (isPassedAsPointer(paramType)) - callBuffer.append(", &_b_"); - else - callBuffer.append(", _b_"); - break; - case RT_PARAM_INOUT: - - if (isArray(paramType)) - preBuffer.append(" // fix me: conversion of array types!\n"); - else - { - preBuffer.append(" cpp_convert_u2b("); - if (isPassedAsPointer(paramType)) - preBuffer.append("_b_"); - else - preBuffer.append("_b_"); - preBuffer.append(paramName); - preBuffer.append(", "); - preBuffer.append(paramName); - preBuffer.append(", m_bridge);\n"); - } - - callBuffer.append(", &_b_"); - - if (isArray(paramType)) - postBuffer.append(" // fix me: conversion of array types!\n"); - else - { - postBuffer.append(" cpp_convert_b2u("); - postBuffer.append(paramName); - postBuffer.append(", _b_"); - postBuffer.append(paramName); - postBuffer.append(", m_bridge);\n"); - } - - break; - case RT_PARAM_OUT: - - callBuffer.append(", &_b_"); - - if (isArray(paramType)) - postBuffer.append(" // fix me: conversion of array types!\n"); - else - { - postBuffer.append(" cpp_convert_b2u("); - postBuffer.append(paramName); - if (isPassedAsPointer(paramType)) - postBuffer.append(", *_b_"); - else - postBuffer.append(", _b_"); - postBuffer.append(paramName); - postBuffer.append(", m_bridge);\n"); - } - - break; - } - - - callBuffer.append(paramName); - } - - callBuffer.append(", &_ev );\n"); - - if (!returnType.equals("void")) - { - if (isArray(returnType)) - { - postBuffer.append(" // fix me: conversion of array types!\n"); - } - else - { - if (isPassedAsPointer(returnType)) - postBuffer.append(" cpp_convert_b2u(_u_ret, *_b_ret, m_bridge);\n"); - else - postBuffer.append(" cpp_convert_b2u(_u_ret, _b_ret, m_bridge);\n"); - } - postBuffer.append(" return _u_ret;\n"); - } - - o << " ::osl::MutexGuard guard(m_bridge->getORBLock());\n" - << " CORBA_Environment _ev;\n" - << " CORBA_exception_init (&_ev);\n"; - - o << preBuffer; - o << callBuffer; - - o << " if (_ev._major != CORBA_NO_EXCEPTION) {\n" - << " ::com::sun::star::uno::RuntimeException _ex(::rtl::OUString::createFromAscii(\"exception raised in bonobobridge\"), NULL);\n" - << " CORBA_exception_free (&_ev);\n" - << " throw _ex;\n" - << " }\n" - << " CORBA_exception_free (&_ev);\n"; - - o << postBuffer; - - o << indent() << "}\n"; - } - else - o << " );\n"; - } -} - -void InterfaceType::dumpCorbaMethods(FileStream& o, sal_Bool bDeclOnly) -{ - OString superName(m_reader.getSuperTypeName()); - - sal_uInt32 methodCount = m_reader.getMethodCount(); - - OString methodName, returnType, paramType, paramName; - sal_uInt32 paramCount = 0; - sal_uInt32 excCount = 0; - RTMethodMode methodMode = RT_MODE_INVALID; - RTParamMode paramMode = RT_PARAM_INVALID; - - sal_Bool bRef = sal_False; - sal_Bool bConst = sal_False; - sal_Bool bWithRunTimeExcp = sal_True; - - for (sal_uInt16 i=0; i < methodCount; i++) - { - methodName = m_reader.getMethodName(i); - returnType = m_reader.getMethodReturnType(i); - paramCount = m_reader.getMethodParamCount(i); - excCount = m_reader.getMethodExcCount(i); - methodMode = m_reader.getMethodMode(i); - - o << indent() - << "extern \"C\" " - << printCorbaParameter(returnType); - - if (isPassedAsPointer(returnType)) - o << "*"; - - o << " bonobobridge_"; - dumpCorbaType(o, m_typeName, sal_False, sal_False); - o << "_" << methodName << "( PortableServer_Servant _servant, "; - - sal_uInt16 j; - for (j=0; j < paramCount; j++) - { - paramName = m_reader.getMethodParamName(i, j); - paramType = m_reader.getMethodParamType(i, j); - paramMode = m_reader.getMethodParamMode(i, j); - - if ((isPassedAsPointer(paramType) || paramType.equals("string") || isArray(paramType)) && - (paramMode == RT_PARAM_IN)) - o << "const "; - - o << printCorbaParameter(paramType); - - if (isPassedAsPointer(paramType)) - { - if (paramMode == RT_PARAM_OUT) - o << "**"; - else - o << "*"; - } - else - { - if (paramMode != RT_PARAM_IN) - o << "*"; - } - - - o << " " << paramName << ", "; - } - - o << "CORBA_Environment * _ev)"; - - if (bDeclOnly) - o << ";\n"; - else - { - o << " {\n"; - OStringBuffer preBuffer(1024); - OStringBuffer callBuffer(1024); - OStringBuffer postBuffer(1024); - - callBuffer.append(" "); - - preBuffer.append(" "); - preBuffer.append(printUnoType(m_typeName, sal_False, sal_False)); - preBuffer.append(" rThis(("); - preBuffer.append(printUnoType(m_typeName, sal_False, sal_False, sal_True)); - preBuffer.append(" *)((bonobobridge::UNO_POA_com_sun_star_uno_XInterface*)_servant)->pThis->getUnoObject());\n"); - - if (!returnType.equals("void")) - { - preBuffer.append(" "); - preBuffer.append(printCorbaParameter(returnType)); - if (isPassedAsPointer(returnType)) - { - preBuffer.append("* _b_ret = "); - preBuffer.append(printCorbaType(returnType, sal_False, sal_False)); - preBuffer.append("__alloc();\n"); - - } - else - { - preBuffer.append(" _b_ret;\n"); - } - preBuffer.append(" "); - preBuffer.append(printUnoType(returnType, sal_False, sal_False)); - preBuffer.append(" _u_ret;\n"); - - callBuffer.append("_u_ret = "); - } - - callBuffer.append("rThis->"); - callBuffer.append(methodName); - callBuffer.append("( "); - - for (j=0; j < paramCount; j++) - { - paramName = m_reader.getMethodParamName(i, j); - paramType = m_reader.getMethodParamType(i, j); - paramMode = m_reader.getMethodParamMode(i, j); - - preBuffer.append(" "); - preBuffer.append(printUnoType(paramType, sal_False, sal_False)); - preBuffer.append(" _u_"); - preBuffer.append(paramName); - preBuffer.append(";\n"); - - callBuffer.append("_u_"); - callBuffer.append(paramName); - - if (j < (paramCount-1)) - callBuffer.append(", "); - - switch (paramMode) { - case RT_PARAM_IN: - - if (isArray(paramType)) - preBuffer.append(" // fix me: conversion of array types!\n"); - else - { - preBuffer.append(" cpp_convert_b2u("); - preBuffer.append("_u_"); - preBuffer.append(paramName); - preBuffer.append(", "); - if (isPassedAsPointer(paramType)) - preBuffer.append("*"); - preBuffer.append(paramName); - preBuffer.append(", ((bonobobridge::UNO_POA_com_sun_star_uno_XInterface*)_servant)->pThis->getBridge());\n"); - } - break; - case RT_PARAM_INOUT: - - if (isArray(paramType)) - { - preBuffer.append(" // fix me: conversion of array types!\n"); - postBuffer.append(" // fix me: conversion of array types!\n"); - } - else - { - preBuffer.append(" cpp_convert_b2u("); - preBuffer.append("_u_"); - preBuffer.append(paramName); - preBuffer.append(", "); - if (isPassedAsPointer(paramType)) - preBuffer.append("*"); - preBuffer.append(paramName); - preBuffer.append(", ((bonobobridge::UNO_POA_com_sun_star_uno_XInterface*)_servant)->pThis->getBridge());\n"); - - postBuffer.append(" cpp_convert_u2b("); - if (isPassedAsPointer(paramType)) - postBuffer.append("*"); - postBuffer.append(paramName); - postBuffer.append(", _u_"); - postBuffer.append(paramName); - postBuffer.append(", ((bonobobridge::UNO_POA_com_sun_star_uno_XInterface*)_servant)->pThis->getBridge());\n"); - } - break; - case RT_PARAM_OUT: - - if (isArray(paramType)) - preBuffer.append(" // fix me: conversion of array types!\n"); - else - { - postBuffer.append(" cpp_convert_u2b("); - if (isPassedAsPointer(paramType)) - postBuffer.append("**"); - else - postBuffer.append("*"); - postBuffer.append(paramName); - postBuffer.append(", _u_"); - postBuffer.append(paramName); - postBuffer.append(", ((bonobobridge::UNO_POA_com_sun_star_uno_XInterface*)_servant)->pThis->getBridge());\n"); - } - break; - } - } - - callBuffer.append(" );\n"); - - if (!returnType.equals("void")) - { - if (isArray(returnType)) - postBuffer.append(" // fix me: conversion of array types!\n"); - else - { - if (isPassedAsPointer(returnType)) - postBuffer.append(" cpp_convert_u2b(*_b_ret, _u_ret, ((bonobobridge::UNO_POA_com_sun_star_uno_XInterface*)_servant)->pThis->getBridge());\n"); - else - postBuffer.append(" cpp_convert_u2b(_b_ret, _u_ret, ((bonobobridge::UNO_POA_com_sun_star_uno_XInterface*)_servant)->pThis->getBridge());\n"); - } - - postBuffer.append(" return _b_ret;\n"); - } - - o << preBuffer; - o << callBuffer; - o << postBuffer; - - o << "}\n"; - } - } -} - -void InterfaceType::dumpFunctions(FileStream& o) -{ - if (m_typeName.equals("com/sun/star/uno/XInterface") || - m_typeName.equals("Bonobo/NullInterface")) - return; - - m_generatedConversions->insert(m_typeName); - - o << "namespace bonobobridge {\n\n"; - - /* bonobo implementation class */ - o << "class BonoboWrapper_"; - dumpCorbaType(o, m_typeName, sal_False, sal_False); - - OString superName(m_reader.getSuperTypeName()); - o << " : public BonoboWrapper< BonoboWrapper_"; - dumpCorbaType(o, superName, sal_False, sal_False); - o << ", "; - dumpUnoType(o, m_typeName, sal_False, sal_False, sal_True); - o << " > {\n"; - - o << "public: \n" - << " BonoboWrapper_"; - dumpCorbaType(o, m_typeName, sal_False, sal_False); - o << "("; - dumpCorbaType(o, m_typeName, sal_False, sal_False); - o << " corbaObject," - << "const vos::ORef<bonobobridge::Bridge>& bridge)\n"; - - o << " : BonoboWrapper< " - << "BonoboWrapper_"; - dumpCorbaType(o, superName, sal_False, sal_False); - o << ", "; - dumpUnoType(o, m_typeName, sal_False, sal_False, sal_True); - o << " >(corbaObject, bridge) {\n"; - - if (isDerivedFromUnknown(m_typeName)) - { - o << " m_bridge->registerObjectWrapper(::getCppuType(("; - dumpUnoType(o, m_typeName, sal_False, sal_False); - o << "*)NULL), m_corbaObject, ("; - dumpUnoType(o, m_typeName, sal_False, sal_False, sal_True); - o << "*)this);\n"; - } - - o << " }\n"; - - o << " virtual ~BonoboWrapper_"; - dumpCorbaType(o, m_typeName, sal_False, sal_False); - o << "() {\n"; - if (isDerivedFromUnknown(m_typeName)) - { - o << " m_bridge->unregisterObjectWrapper(::getCppuType(("; - dumpUnoType(o, m_typeName, sal_False, sal_False); - o << "*)NULL), m_corbaObject, ("; - dumpUnoType(o, m_typeName, sal_False, sal_False, sal_True); - o << "*)this);\n"; - } - o << " }\n"; - inc(); - dumpUnoMethods(o, sal_True, sal_False); - dec(); - - o << "};\n\n"; - - o << "}; // namespace bonobobridge\n"; - - dumpUnoMethods(o, sal_False, sal_False); - - /* convert function bonobo to uno */ - o << "static sal_Bool convert_b2u_" << m_typeName.replace('/', '_') - << "(void* pOut, const void* pIn, const ::com::sun::star::uno::Type& type, const ::vos::ORef< ::bonobobridge::Bridge >& bridge) {\n" - << " sal_Bool ret = sal_True;\n "; - dumpUnoType(o, m_typeName, sal_False, sal_False); - o << "& _u = *("; - dumpUnoType(o, m_typeName, sal_False, sal_False); - o << "*) pOut;\n const "; - dumpCorbaType(o, m_typeName, sal_False, sal_False); - o << "& _b = *(const "; - dumpCorbaType(o, m_typeName, sal_False, sal_False); - o << "*) pIn;\n\n" - << " _u = new bonobobridge::BonoboWrapper_"; - dumpCorbaType(o, m_typeName, sal_False, sal_False); - o << "(_b, bridge);\n" - << " return ret;\n"; - - o << "}\n\n"; - - /* POA implementation class */ - dumpCorbaMethods(o, sal_True); - o << "static POA_"; - dumpCorbaType(o, m_typeName, sal_False, sal_False); - o << "__epv bonobobridge_"; - dumpCorbaType(o, m_typeName, sal_False, sal_False); - o << "_epv = {\n"; - sal_uInt32 methodCount = m_reader.getMethodCount(); - OString methodName; - - o << " NULL,\n"; - - for (sal_uInt16 i=0; i < methodCount; i++) - { - methodName = m_reader.getMethodName(i); - o << " bonobobridge_"; - dumpCorbaType(o, m_typeName, sal_False, sal_False); - o << "_" << methodName; - - if (i < (methodCount-1)) - o << ",\n"; - else - o << "\n};\n"; - } - - OStringBuffer initBuffer(1024); - - initBuffer.insert(0, OString("&bonobobridge_") + printCorbaType(m_typeName, sal_False, sal_False) + OString("_epv")); - - while(superName.getLength() != 0) - { - if (superName.equals("Bonobo/NullInterface")) - { - superName = ""; - } - else - { - if (superName.equals("com/sun/star/uno/XInterface")) - { - initBuffer.insert(0, OString("&bonobobridge_com_sun_star_uno_XInterface_epv, ")); - } - else - { - initBuffer.insert(0, OString("&bonobobridge_") + printCorbaType(superName, sal_False, sal_False) + OString("_epv, ")); - } - TypeReader reader(m_typeMgr.getTypeReader(superName)); - superName = reader.getSuperTypeName(); - } - } - - initBuffer.insert(0, OString("NULL, ")); - - o << "static POA_"; - dumpCorbaType(o, m_typeName, sal_False, sal_False); - o << "__vepv bonobobridge_"; - dumpCorbaType(o, m_typeName, sal_False, sal_False); - o << "__vepv = {"; - o << initBuffer.makeStringAndClear(); - o << " };\n"; - - superName = m_reader.getSuperTypeName(); - - o << "namespace bonobobridge {\n\n"; - - o << "class UnoServant_"; - dumpCorbaType(o, m_typeName, sal_False, sal_False); - o << " : public UnoServant_com_sun_star_uno_XInterface {\n"; - - o << "public:\n" - << " UnoServant_"; - - dumpCorbaType(o, m_typeName, sal_False, sal_False); - o << "("; - dumpUnoType(o, m_typeName, sal_False, sal_False, sal_True); - o << "* unoObject," - << " const ::vos::ORef<bonobobridge::Bridge>& bridge," - << " CORBA_Environment *ev," - << " sal_Bool bInitPoa)\n" - << " : UnoServant_com_sun_star_uno_XInterface(unoObject, bridge, ev, sal_False) {\n" - << " if (bInitPoa) {\n" - << " memset(&m_POAUnknown, 0, sizeof(m_POAUnknown));\n" - << " POA_"; - dumpCorbaType(o, m_typeName, sal_False, sal_False); - o << "__init((PortableServer_Servant) &(m_POAUnknown.poa), ev);\n" - << " m_POAUnknown.pThis = (UnoServant_com_sun_star_uno_XInterface*)this;\n" - << " m_POAUnknown.poa.vepv = (POA_Bonobo_Unknown__vepv*)&bonobobridge_"; - dumpCorbaType(o, m_typeName, sal_False, sal_False); - o << "__vepv;\n" - << " }\n" - << " }\n" - << "};\n" - << "}; // namespace bonobobridge\n"; - - dumpCorbaMethods(o, sal_False); - - /* convert function uno to bonobo */ - o << "static sal_Bool convert_u2b_" << m_typeName.replace('/', '_') - << "(void* pOut, const void* pIn, const ::com::sun::star::uno::Type& type, const ::vos::ORef< ::bonobobridge::Bridge >& bridge) {\n"; - o << " sal_Bool ret = sal_True;\n const "; - dumpUnoType(o, m_typeName, sal_False, sal_False); - o << "& _u = *(const "; - dumpUnoType(o, m_typeName, sal_False, sal_False); - o << "*) pIn;\n "; - dumpCorbaType(o, m_typeName, sal_False, sal_False); - o << "& _b = *("; - dumpCorbaType(o, m_typeName, sal_False, sal_False); - o << "*) pOut;\n\n" - << " if (_u.is()) {\n" - << " bonobobridge::UnoServant_"; - dumpCorbaType(o, m_typeName, sal_False, sal_False); - o << " *uno_servant;\n" - << " POA_"; - dumpCorbaType(o, m_typeName, sal_False, sal_False); - o << " *poa;\n" - << " CORBA_Environment ev;\n" - << " CORBA_exception_init (&ev);\n" - << " uno_servant = new bonobobridge::UnoServant_"; - dumpCorbaType(o, m_typeName, sal_False, sal_False); - o << "(_u.get(), bridge, &ev, sal_True);\n" - << " poa = (POA_"; - dumpCorbaType(o, m_typeName, sal_False, sal_False); - o << "*)uno_servant->getPOA();\n" - << " if (ev._major != CORBA_NO_EXCEPTION) {\n" - << " delete uno_servant;\n" - << " CORBA_exception_free (&ev);\n" - << " _b = CORBA_OBJECT_NIL;\n" - << " ret = sal_False;\n" - << " }\n" - << " else {\n" - << " CORBA_free(PortableServer_POA_activate_object(bridge->getPOA(), poa, &ev));\n" - << " _b = PortableServer_POA_servant_to_reference (bridge->getPOA(), poa, &ev);\n" - << " uno_servant->corbaObjectRegistered(_b, getCppuType(("; - dumpUnoType(o, m_typeName, sal_False, sal_False); - o << "*)NULL)"; - - if (!isDerivedFromUnknown(m_typeName)) - o << ", sal_False"; - - o << ");\n" - << " }\n" - << " CORBA_exception_free (&ev);\n" - << " }\n" - << " return ret;\n" - << "}\n\n"; - - o << "inline sal_Bool bonobobridge::cpp_convert_b2u("; - dumpUnoType(o, m_typeName, sal_False, sal_True); - o << " u, "; - dumpCorbaType(o, m_typeName, sal_True, sal_True); - o << " b, const ::vos::ORef< ::bonobobridge::Bridge >& bridge) {\n" - << " return bridge->convertB2U(&u, &b, ::getCppuType(&u));\n" - << "};\n\n"; - - o << "inline sal_Bool bonobobridge::cpp_convert_u2b("; - dumpCorbaType(o, m_typeName, sal_False, sal_True); - o << " b, "; - dumpUnoType(o, m_typeName, sal_True, sal_True); - o << " u, const ::vos::ORef< ::bonobobridge::Bridge >& bridge) {\n" - << " return bridge->convertU2B(&b, &u, ::getCppuType(&u));\n" - << "};\n\n"; - - return; -} - - - - -sal_uInt32 InterfaceType::getMemberCount() -{ - sal_uInt32 count = m_reader.getMethodCount(); - - if (count) - m_hasMethods = sal_True; - - sal_uInt32 fieldCount = m_reader.getFieldCount(); - RTFieldAccess access = RT_ACCESS_INVALID; - for (sal_uInt16 i=0; i < fieldCount; i++) - { - access = m_reader.getFieldAccess(i); - - if (access != RT_ACCESS_CONST && access != RT_ACCESS_INVALID) - { - m_hasAttributes = sal_True; - count++; - } - } - return count; -} - -sal_uInt32 InterfaceType::checkInheritedMemberCount(const TypeReader* pReader) -{ - sal_uInt32 cout = 0; - sal_Bool bSelfCheck = sal_True; - if (!pReader) - { - bSelfCheck = sal_False; - pReader = &m_reader; - } - - sal_uInt32 count = 0; - OString superType(pReader->getSuperTypeName()); - if (superType.getLength() > 0) - { - TypeReader aSuperReader(m_typeMgr.getTypeReader(superType)); - if (aSuperReader.isValid()) - { - count = checkInheritedMemberCount(&aSuperReader); - } - } - - if (bSelfCheck) - { - count += pReader->getMethodCount(); - sal_uInt32 fieldCount = pReader->getFieldCount(); - RTFieldAccess access = RT_ACCESS_INVALID; - for (sal_uInt16 i=0; i < fieldCount; i++) - { - access = pReader->getFieldAccess(i); - - if (access != RT_ACCESS_CONST && access != RT_ACCESS_INVALID) - count++; - } - } - - return count; -} - -sal_uInt32 InterfaceType::getInheritedMemberCount() -{ - if (m_inheritedMemberCount == 0) - { - m_inheritedMemberCount = checkInheritedMemberCount(0); - } - - return m_inheritedMemberCount; -} - - - - -//************************************************************************* -// ModuleType -//************************************************************************* -ModuleType::ModuleType(TypeReader& typeReader, - const OString& typeName, - const TypeManager& typeMgr, - const TypeDependency& typeDependencies, - TypeSet* generatedConversions) - : CorbaType(typeReader, typeName, typeMgr, typeDependencies, generatedConversions) -{ -} - -ModuleType::~ModuleType() -{ - -} - - -sal_Bool ModuleType::hasConstants() -{ - sal_uInt32 fieldCount = m_reader.getFieldCount(); - RTFieldAccess access = RT_ACCESS_INVALID; - - for (sal_uInt16 i=0; i < fieldCount; i++) - { - access = m_reader.getFieldAccess(i); - - if (access == RT_ACCESS_CONST) - return sal_True; - } - - return sal_False; -} - -void ModuleType::dumpFunctions(FileStream& o) -{ -}; - -sal_Bool ModuleType::dumpConversionFunctions(FileStream& o, TypeSet* allreadyDumped) - throw( CannotDumpException ) -{ - sal_Bool bSpecialDefine = sal_True; - - if (m_reader.getTypeClass() == RT_TYPE_CONSTANTS) - { - bSpecialDefine = sal_False; - } - - dumpInclude(o, allreadyDumped, m_typeName, "hpp", bSpecialDefine); - - return sal_True; -} - -//************************************************************************* -// ConstantsType -//************************************************************************* -ConstantsType::ConstantsType(TypeReader& typeReader, - const OString& typeName, - const TypeManager& typeMgr, - const TypeDependency& typeDependencies, - TypeSet* generatedConversions) - : ModuleType(typeReader, typeName, typeMgr, typeDependencies, generatedConversions) -{ -} - -ConstantsType::~ConstantsType() -{ - -} - -void ConstantsType::dumpFunctions(FileStream& o) -{ -}; - -//************************************************************************* -// StructureType -//************************************************************************* -StructureType::StructureType(TypeReader& typeReader, - const OString& typeName, - const TypeManager& typeMgr, - const TypeDependency& typeDependencies, - TypeSet* generatedConversions) - : CorbaType(typeReader, typeName, typeMgr, typeDependencies, generatedConversions) -{ -} - -StructureType::~StructureType() -{ - -} - -void StructureType::dumpFunctions(FileStream& o) -{ - m_generatedConversions->insert(m_typeName); - - OString superType(m_reader.getSuperTypeName()); - - o << "static sal_Bool convert_b2u_" << m_typeName.replace('/', '_') - << "(void* pOut, const void* pIn, const ::com::sun::star::uno::Type& type, const ::vos::ORef< ::bonobobridge::Bridge >& bridge) {\n" - << " sal_Bool ret = sal_True;\n "; - dumpUnoType(o, m_typeName, sal_False, sal_False); - o << "& _u = *("; - dumpUnoType(o, m_typeName, sal_False, sal_False); - o << "*) pOut;\n const "; - dumpCorbaType(o, m_typeName, sal_False, sal_False); - o << "& _b = *(const "; - dumpCorbaType(o, m_typeName, sal_False, sal_False); - o << "*) pIn;\n\n"; - - sal_uInt32 fieldCount = m_reader.getFieldCount(); - OString fieldName; - OString fieldType; - sal_uInt16 i=0; - sal_Int32 cIndex; - OString corbaFieldName; - - sal_Bool bIsUnion = sal_False; - - for (i=0; !bIsUnion && (i < fieldCount); i++) - bIsUnion = OString("_union_fake_tag").equals(m_reader.getFieldName(i)); - - if (bIsUnion) - { - o << " // fix me: union !!!!\n ret = sal_False;\n"; - } - else - { - if (superType.getLength() > 0) - { - o << " ret = bonobobridge::cpp_convert_b2u(("; - dumpUnoType(o, superType, sal_False, sal_False); - o << "&) _u, (const "; - dumpCorbaType(o, superType, sal_False, sal_False); - o << "&) _b, bridge);\n"; - } - - for (i=0; i < fieldCount; i++) - { - fieldName = m_reader.getFieldName(i); - fieldType = m_reader.getFieldType(i); - cIndex = fieldName.indexOf("_reserved_identifier_"); - - if (cIndex == 0) - corbaFieldName = fieldName.copy(OString("_reserved_identifier_").getLength()); - else - corbaFieldName = fieldName; - - if (isArray(fieldType)) - o << " // fix me: no conversion of array types!\n"; - else - o << " if (ret)\n" - << " ret = bonobobridge::cpp_convert_b2u(" - << "_u." << fieldName.getStr() - << " , _b." << corbaFieldName.getStr() - << ", bridge);\n"; - } - } - o << " return ret;\n" - << "}\n\n" - << "static sal_Bool convert_u2b_" << m_typeName.replace('/', '_') - << "(void* pOut, const void* pIn, const ::com::sun::star::uno::Type& type, const ::vos::ORef< ::bonobobridge::Bridge >& bridge) {\n" - << " sal_Bool ret = sal_True;\n const "; - dumpUnoType(o, m_typeName, sal_False, sal_False); - o << "& _u = *(const "; - dumpUnoType(o, m_typeName, sal_False, sal_False); - o << "*) pIn;\n "; - dumpCorbaType(o, m_typeName, sal_False, sal_False); - o << "& _b = *("; - dumpCorbaType(o, m_typeName, sal_False, sal_False); - o << "*) pOut;\n\n"; - - if (bIsUnion) - o << " // fix me: union !!!!\n ret = sal_False;\n"; - else - { - if (superType.getLength() > 0) - { - o << " ret = bonobobridge::cpp_convert_u2b(("; - dumpCorbaType(o, superType, sal_False, sal_False); - o << "&) _u, (const "; - dumpUnoType(o, superType, sal_False, sal_False); - o << "&) _b, bridge);\n"; - } - - for (i=0; i < fieldCount; i++) - { - fieldName = m_reader.getFieldName(i); - fieldType = m_reader.getFieldType(i); - - cIndex = fieldName.indexOf("_reserved_identifier_"); - - if (cIndex == 0) - corbaFieldName = fieldName.copy(OString("_reserved_identifier_").getLength()); - else - corbaFieldName = fieldName; - - if (isArray(fieldType)) - o << " // fix me: no conversion of array types!\n"; - else - o << " if (ret)\n" - << " ret = bonobobridge::cpp_convert_u2b(" - << "_b." << corbaFieldName.getStr() - << ", _u." << fieldName.getStr() - << ", bridge);\n"; - } - } - - o << " return ret;\n" - << "}\n\n"; - - o << "inline sal_Bool bonobobridge::cpp_convert_b2u("; - dumpUnoType(o, m_typeName, sal_False, sal_True); - o << " u , "; - dumpCorbaType(o, m_typeName, sal_True, sal_True); - o << " b, const ::vos::ORef< ::bonobobridge::Bridge >& bridge) {\n" - << " return convert_b2u_" << m_typeName.replace('/', '_') - << "(&u, &b, ::getCppuType(&u), bridge);\n" - << "};\n\n"; - - o << "inline sal_Bool bonobobridge::cpp_convert_u2b("; - dumpCorbaType(o, m_typeName, sal_False, sal_True); - o << " b, "; - dumpUnoType(o, m_typeName, sal_True, sal_True); - o << " u, const ::vos::ORef< ::bonobobridge::Bridge >& bridge) {\n" - << " return convert_u2b_" << m_typeName.replace('/', '_') - << "(&b, &u, ::getCppuType(&u), bridge);\n" - << "};\n\n"; -} - -sal_Bool StructureType::dumpSuperMember(FileStream& o, const OString& superType, sal_Bool bWithType) -{ - sal_Bool hasMember = sal_False; - - if (superType.getLength() > 0) - { - TypeReader aSuperReader(m_typeMgr.getTypeReader(superType)); - - if (aSuperReader.isValid()) - { - hasMember = dumpSuperMember(o, aSuperReader.getSuperTypeName(), bWithType); - - sal_uInt32 fieldCount = aSuperReader.getFieldCount(); - RTFieldAccess access = RT_ACCESS_INVALID; - OString fieldName; - OString fieldType; - for (sal_uInt16 i=0; i < fieldCount; i++) - { - access = aSuperReader.getFieldAccess(i); - - if (access == RT_ACCESS_CONST || access == RT_ACCESS_INVALID) - continue; - - fieldName = aSuperReader.getFieldName(i); - fieldType = aSuperReader.getFieldType(i); - - if (hasMember) - { - o << ", "; - } else - { - hasMember = (fieldCount > 0); - } - - if (bWithType) - { - dumpUnoType(o, fieldType, sal_True, sal_True); - o << " "; - } - o << "__" << fieldName; - } - } - } - - return hasMember; -} - -//************************************************************************* -// ExceptionType -//************************************************************************* -ExceptionType::ExceptionType(TypeReader& typeReader, - const OString& typeName, - const TypeManager& typeMgr, - const TypeDependency& typeDependencies, - TypeSet* generatedConversions) - : CorbaType(typeReader, typeName, typeMgr, typeDependencies, generatedConversions) -{ -} - -ExceptionType::~ExceptionType() -{ - -} - -void ExceptionType::dumpFunctions(FileStream& o) -{ - if (m_typeName.equals("com/sun/star/uno/Exception")) - return; - - if (m_typeName.equals("com/sun/star/uno/RuntimeException")) - return; - - m_generatedConversions->insert(m_typeName); - - OString superType(m_reader.getSuperTypeName()); - - o << "static sal_Bool convert_b2u_" << m_typeName.replace('/', '_') - << "(void* pOut, const void* pIn, const ::com::sun::star::uno::Type& type, const ::vos::ORef< ::bonobobridge::Bridge >& bridge) {\n" - << " sal_Bool ret = sal_True;\n"; - dumpUnoType(o, m_typeName, sal_False, sal_False); - o << "& _u = *("; - dumpUnoType(o, m_typeName, sal_False, sal_False); - o << "*) pOut;\n const "; - dumpCorbaType(o, m_typeName, sal_False, sal_False); - o << "& _b = *(const "; - dumpCorbaType(o, m_typeName, sal_False, sal_False); - o << "*) pIn;\n\n"; - - sal_uInt32 fieldCount = m_reader.getFieldCount(); - OString fieldName; - OString fieldType; - sal_uInt16 i=0; - sal_Int32 cIndex; - OString corbaFieldName; - - if (superType.getLength() > 0) - { - o << " ret = bonobobridge::cpp_convert_b2u(("; - dumpUnoType(o, superType, sal_False, sal_False); - o << "&) _u, (const "; - dumpCorbaType(o, superType, sal_False, sal_False); - o << "&) _b, bridge);\n"; - } - - for (i=0; i < fieldCount; i++) - { - fieldName = m_reader.getFieldName(i); - fieldType = m_reader.getFieldType(i); - cIndex = fieldName.indexOf("_reserved_identifier_"); - - if (cIndex == 0) - corbaFieldName = fieldName.copy(OString("_reserved_identifier_").getLength()); - else - corbaFieldName = fieldName; - - if (isArray(fieldType)) - o << " // fix me: no conversion of array types!\n"; - else - o << " if (ret)\n" - << " ret = bonobobridge::cpp_convert_b2u(" - << "_u." << fieldName.getStr() - << ", _b." << corbaFieldName.getStr() - << ", bridge);\n"; - } - o << " return ret;\n" - << "}\n\n"; - - - o << "static sal_Bool convert_u2b_" << m_typeName.replace('/', '_') - << "(void* pOut, const void* pIn, const ::com::sun::star::uno::Type& type, const ::vos::ORef< ::bonobobridge::Bridge >& bridge) {\n" - << " sal_Bool ret = sal_True;\n const "; - dumpUnoType(o, m_typeName, sal_False, sal_False); - o << "& _u = *(const "; - dumpUnoType(o, m_typeName, sal_False, sal_False); - o << "*) pIn;\n "; - dumpCorbaType(o, m_typeName, sal_False, sal_False); - o << "& _b = *("; - dumpCorbaType(o, m_typeName, sal_False, sal_False); - o << "*) pOut;\n\n"; - - if (superType.getLength() > 0) - { - o << " ret = bonobobridge::cpp_convert_u2b(("; - dumpCorbaType(o, superType, sal_False, sal_False); - o << "&) _u, (const "; - dumpUnoType(o, superType, sal_False, sal_False); - o << "&) _b, bridge);\n"; - } - - for (i=0; i < fieldCount; i++) - { - fieldName = m_reader.getFieldName(i); - fieldType = m_reader.getFieldType(i); - - cIndex = fieldName.indexOf("_reserved_identifier_"); - - if (cIndex == 0) - corbaFieldName = fieldName.copy(OString("_reserved_identifier_").getLength()); - else - corbaFieldName = fieldName; - - if (isArray(fieldType)) - o << " // fix me: no conversion of array types!\n"; - else - o << " if (ret)\n" - << " ret = bonobobridge::cpp_convert_u2b(" - << "_b." << corbaFieldName.getStr() - << ", _u." << fieldName.getStr() - << ", bridge);\n"; - } - - o << " return ret;\n" - << "}\n\n"; - - o << "inline sal_Bool bonobobridge::cpp_convert_b2u("; - dumpUnoType(o, m_typeName, sal_False, sal_True); - o << " u , "; - dumpCorbaType(o, m_typeName, sal_True, sal_True); - o << " b, const ::vos::ORef< ::bonobobridge::Bridge >& bridge) {\n" - << " return convert_b2u_" << m_typeName.replace('/', '_') - << "(&u, &b, ::getCppuType(&u), bridge);\n" - << "};\n\n"; - - o << "inline sal_Bool bonobobridge::cpp_convert_u2b("; - dumpCorbaType(o, m_typeName, sal_False, sal_True); - o << " b, "; - dumpUnoType(o, m_typeName, sal_True, sal_True); - o << " u, const ::vos::ORef< ::bonobobridge::Bridge >& bridge) {\n" - << " return convert_u2b_" << m_typeName.replace('/', '_') - << "(&b, &u, ::getCppuType(&u), bridge);\n" - << "};\n\n"; -} - - - -sal_Bool ExceptionType::dumpSuperMember(FileStream& o, const OString& superType, sal_Bool bWithType) -{ - sal_Bool hasMember = sal_False; - - if (superType.getLength() > 0) - { - TypeReader aSuperReader(m_typeMgr.getTypeReader(superType)); - - if (aSuperReader.isValid()) - { - hasMember = dumpSuperMember(o, aSuperReader.getSuperTypeName(), bWithType); - - sal_uInt32 fieldCount = aSuperReader.getFieldCount(); - RTFieldAccess access = RT_ACCESS_INVALID; - OString fieldName; - OString fieldType; - for (sal_uInt16 i=0; i < fieldCount; i++) - { - access = aSuperReader.getFieldAccess(i); - - if (access == RT_ACCESS_CONST || access == RT_ACCESS_INVALID) - continue; - - fieldName = aSuperReader.getFieldName(i); - fieldType = aSuperReader.getFieldType(i); - - if (hasMember) - { - o << ", "; - } else - { - hasMember = (fieldCount > 0); - } - - if (bWithType) - { - dumpUnoType(o, fieldType, sal_True, sal_True); - o << " "; - } - o << "__" << fieldName; - } - } - } - - return hasMember; -} - -//************************************************************************* -// EnumType -//************************************************************************* -EnumType::EnumType(TypeReader& typeReader, - const OString& typeName, - const TypeManager& typeMgr, - const TypeDependency& typeDependencies, - TypeSet* generatedConversions) - : CorbaType(typeReader, typeName, typeMgr, typeDependencies, generatedConversions) -{ -} - -EnumType::~EnumType() -{ - -} - -void EnumType::dumpFunctions(FileStream& o) -{ - if (m_typeName.equals("com/sun/star/uno/TypeClass")) - return; - - m_generatedConversions->insert(m_typeName); - - o << "static sal_Bool convert_b2u_" << m_typeName.replace('/', '_') - << "(void* pOut, const void* pIn, const ::com::sun::star::uno::Type& type, const ::vos::ORef< ::bonobobridge::Bridge >& bridge) {\n" - << " *("; - dumpUnoType(o, m_typeName, sal_False, sal_False); - o << "*) pOut = ("; - dumpUnoType(o, m_typeName, sal_False, sal_False); - o << ") *(const "; - dumpCorbaType(o, m_typeName, sal_False, sal_False); - o << "*) pIn;\n\n" - << " return sal_True;\n" - << "}\n\n"; - - o << "static sal_Bool convert_u2b_" << m_typeName.replace('/', '_') - << "(void* pOut, const void* pIn, const ::com::sun::star::uno::Type& type, const ::vos::ORef< ::bonobobridge::Bridge >& bridge) {\n" - << " *("; - dumpCorbaType(o, m_typeName, sal_False, sal_False); - o << "*) pOut = ("; - dumpCorbaType(o, m_typeName, sal_False, sal_False); - o << ") *(const "; - dumpUnoType(o, m_typeName, sal_False, sal_False); - o << "*) pIn;\n\n" - << " return sal_True;\n" - << "}\n\n"; - - o << "inline sal_Bool bonobobridge::cpp_convert_b2u("; - dumpUnoType(o, m_typeName, sal_False, sal_True); - o << " u , "; - dumpCorbaType(o, m_typeName, sal_True, sal_True); - o << " b, const ::vos::ORef< ::bonobobridge::Bridge >& bridge) {\n" - << " return convert_b2u_" << m_typeName.replace('/', '_') - << "(&u, &b, ::getCppuType(&u), bridge);\n" - << "};\n\n"; - - o << "inline sal_Bool bonobobridge::cpp_convert_u2b("; - dumpCorbaType(o, m_typeName, sal_False, sal_True); - o << " b, "; - dumpUnoType(o, m_typeName, sal_True, sal_True); - o << " u, const ::vos::ORef< ::bonobobridge::Bridge >& bridge) {\n" - << " return convert_u2b_" << m_typeName.replace('/', '_') - << "(&b, &u, ::getCppuType(&u), bridge);\n" - << "};\n\n"; - - return; -} - - -//************************************************************************* -// TypeDefType -//************************************************************************* -TypeDefType::TypeDefType(TypeReader& typeReader, - const OString& typeName, - const TypeManager& typeMgr, - const TypeDependency& typeDependencies, - TypeSet* generatedConversions) - : CorbaType(typeReader, typeName, typeMgr, typeDependencies, generatedConversions) -{ -} - -TypeDefType::~TypeDefType() -{ - -} - -void TypeDefType::dumpFunctions(FileStream& o) -{ -} - - - -//************************************************************************* -// produceType -//************************************************************************* -sal_Bool produceType(const OString& typeName, - TypeManager& typeMgr, - TypeDependency& typeDependencies, - CorbaOptions* pOptions, - FileStream& o, TypeSet* allreadyDumped, - TypeSet* generatedConversions) - throw( CannotDumpException ) -{ - sal_Bool bNewTypeSet = (allreadyDumped == NULL); - sal_Bool ret = sal_True; - - if (bNewTypeSet) - allreadyDumped = new TypeSet(); - - - if (!typeDependencies.isGenerated(typeName)) - { - TypeReader reader(typeMgr.getTypeReader(typeName)); - - if (!reader.isValid() && !typeName.equals("/")) - ret = sal_False; - - if( ret && !checkTypeDependencies(typeMgr, typeDependencies, typeName)) - ret = sal_False; - - if (ret) - { - RTTypeClass typeClass = reader.getTypeClass(); - - switch (typeClass) - { - case RT_TYPE_INTERFACE: - { - InterfaceType iType(reader, typeName, typeMgr, typeDependencies, generatedConversions); - ret = iType.dump(pOptions, o, allreadyDumped); - if (ret) typeDependencies.setGenerated(typeName); - ret = iType.dumpDependedTypes(pOptions, o, allreadyDumped); - } - break; - case RT_TYPE_MODULE: - { - ModuleType mType(reader, typeName, typeMgr, typeDependencies, generatedConversions); - if (mType.hasConstants()) - { - ret = mType.dump(pOptions, o, allreadyDumped); - if (ret) typeDependencies.setGenerated(typeName); - } else - { - typeDependencies.setGenerated(typeName); - ret = sal_True; - } - } - break; - case RT_TYPE_STRUCT: - { - StructureType sType(reader, typeName, typeMgr, typeDependencies, generatedConversions); - ret = sType.dump(pOptions, o, allreadyDumped); - if (ret) typeDependencies.setGenerated(typeName); - ret = sType.dumpDependedTypes(pOptions, o, allreadyDumped); - } - break; - case RT_TYPE_ENUM: - { - EnumType enType(reader, typeName, typeMgr, typeDependencies, generatedConversions); - ret = enType.dump(pOptions, o, allreadyDumped); - if (ret) typeDependencies.setGenerated(typeName); - ret = enType.dumpDependedTypes(pOptions, o, allreadyDumped); - } - break; - case RT_TYPE_EXCEPTION: - { - ExceptionType eType(reader, typeName, typeMgr, typeDependencies, generatedConversions); - ret = eType.dump(pOptions, o, allreadyDumped); - if (ret) typeDependencies.setGenerated(typeName); - ret = eType.dumpDependedTypes(pOptions, o, allreadyDumped); - } - break; - case RT_TYPE_TYPEDEF: - { - TypeDefType tdType(reader, typeName, typeMgr, typeDependencies, generatedConversions); - ret = tdType.dump(pOptions, o, allreadyDumped); - if (ret) typeDependencies.setGenerated(typeName); - ret = tdType.dumpDependedTypes(pOptions, o, allreadyDumped); - } - break; - case RT_TYPE_CONSTANTS: - { - ConstantsType cType(reader, typeName, typeMgr, typeDependencies, generatedConversions); - if (cType.hasConstants()) - { - ret = cType.dump(pOptions, o, allreadyDumped); - if (ret) typeDependencies.setGenerated(typeName); - } else - { - typeDependencies.setGenerated(typeName); - ret = sal_True; - } - } - break; - case RT_TYPE_SERVICE: - case RT_TYPE_OBJECT: - ret = sal_True; - break; - } - } - } - - if (bNewTypeSet) - delete allreadyDumped; - - return ret; -} - -//************************************************************************* -// scopedName -//************************************************************************* -OString scopedName(const OString& scope, const OString& type, - sal_Bool bNoNameSpace) -{ - sal_Int32 nPos = type.lastIndexOf( '/' ); - if (nPos == -1) - return type; - - if (bNoNameSpace) - return type.copy(nPos+1); - - OStringBuffer tmpBuf(type.getLength()*2); - nPos = 0; - do - { - tmpBuf.append("::"); - tmpBuf.append(type.getToken(0, '/', nPos)); - } while( nPos != -1 ); - - return tmpBuf.makeStringAndClear(); -} - -//************************************************************************* -// shortScopedName -//************************************************************************* -OString shortScopedName(const OString& scope, const OString& type, - sal_Bool bNoNameSpace) -{ - sal_Int32 nPos = type.lastIndexOf( '/' ); - if( nPos == -1 ) - return OString(); - - if (bNoNameSpace) - return OString(); - - // scoped name only if the namespace is not equal - if (scope.lastIndexOf('/') > 0) - { - OString tmpScp(scope.copy(0, scope.lastIndexOf('/'))); - OString tmpScp2(type.copy(0, nPos)); - - if (tmpScp == tmpScp2) - return OString(); - } - - OString aScope( type.copy( 0, nPos ) ); - OStringBuffer tmpBuf(aScope.getLength()*2); - - nPos = 0; - do - { - tmpBuf.append("::"); - tmpBuf.append(aScope.getToken(0, '/', nPos)); - } while( nPos != -1 ); - - return tmpBuf.makeStringAndClear(); -} - - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/codemaker/source/bonobowrappermaker/corbatype.hxx b/codemaker/source/bonobowrappermaker/corbatype.hxx deleted file mode 100644 index b3955f2c67fb..000000000000 --- a/codemaker/source/bonobowrappermaker/corbatype.hxx +++ /dev/null @@ -1,312 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _CORBAMAKER_CPPUTYPE_HXX_ -#define _CORBAMAKER_CPPUTYPE_HXX_ - -#include <codemaker/typemanager.hxx> -#include <codemaker/dependency.hxx> - -#include <hash_set> - -enum BASETYPE -{ - BT_INVALID, - BT_VOID, - BT_ANY, - BT_TYPE, - BT_BOOLEAN, - BT_CHAR, - BT_STRING, - BT_FLOAT, - BT_DOUBLE, - BT_OCTET, - BT_BYTE, - BT_SHORT, - BT_LONG, - BT_HYPER, - BT_UNSIGNED_SHORT, - BT_UNSIGNED_LONG, - BT_UNSIGNED_HYPER -}; - - -class CorbaOptions; -class FileStream; - -struct OStringEqual -{ - sal_Bool operator() (const ::rtl::OString& lhs, const ::rtl::OString& rhs) const - { return lhs.equals( rhs );} -}; - -struct OStringHash : public std::unary_function< const ::rtl::OString &, size_t > -{ - size_t operator()( const ::rtl::OString & rStr ) const - { return rStr.hashCode(); } -}; - -typedef std::hash_set< ::rtl::OString, OStringHash, OStringEqual > TypeSet; - -class CorbaType -{ -public: - CorbaType(TypeReader& typeReader, - const ::rtl::OString& typeName, - const TypeManager& typeMgr, - const TypeDependency& typeDependencies, - TypeSet* generatedConversion); - - virtual ~CorbaType(); - - virtual sal_Bool dump(CorbaOptions* pOptions, FileStream& o, TypeSet* allreadyDumped) throw( CannotDumpException ); - virtual sal_Bool dumpDependedTypes(CorbaOptions* pOptions, FileStream& o, TypeSet* allreadyDumped) throw( CannotDumpException ); - virtual sal_Bool dumpConversionFunctions(FileStream& o, TypeSet* allreadyDumped) throw( CannotDumpException ); - - static void dumpDefaultHxxIncludes(FileStream& o); - - virtual void dumpInclude(FileStream& o, TypeSet* allreadyDumped, const ::rtl::OString& typeName, sal_Char* prefix, sal_Bool bExtended=sal_False, sal_Bool bCaseSensitive=sal_False); - virtual void dumpDepIncludes(FileStream& o, TypeSet* allreadyDumped, const ::rtl::OString& typeName, sal_Char* prefix); - - virtual void dumpNameSpace(FileStream& o, sal_Bool bOpen = sal_True, sal_Bool bFull = sal_False, const ::rtl::OString& type=""); - virtual void dumpFunctions(FileStream& o) = 0; - - virtual ::rtl::OString printUnoType( const ::rtl::OString& type, - sal_Bool bConst=sal_False, - sal_Bool bRef=sal_False, - sal_Bool bNative=sal_False) - throw( CannotDumpException ); - - virtual void dumpUnoType(FileStream& o, - const ::rtl::OString& type, - sal_Bool bConst=sal_False, - sal_Bool bRef=sal_False, - sal_Bool bNative=sal_False) - throw( CannotDumpException ); - - virtual ::rtl::OString printCorbaType(const ::rtl::OString& type, - sal_Bool bConst, - sal_Bool bRef) - throw( CannotDumpException ); - - virtual void dumpCorbaType(FileStream& o, - const ::rtl::OString& type, - sal_Bool bConst=sal_False, - sal_Bool bRef=sal_False) - throw( CannotDumpException ); - - sal_Bool isPassedAsPointer(const ::rtl::OString& type); - sal_Bool isArray(const ::rtl::OString& type); - - sal_Bool isDerivedFromUnknown(const ::rtl::OString& typeName); - - - ::rtl::OString printCorbaParameter(const ::rtl::OString& type, - sal_Bool bOut = sal_False) - throw( CannotDumpException ); - - ::rtl::OString getTypeClass(const ::rtl::OString& type="", - sal_Bool bCStyle=sal_False); - ::rtl::OString getUnoBaseType(const ::rtl::OString& type); - ::rtl::OString getCorbaBaseType(const ::rtl::OString& type); - - void dumpTypeInit(FileStream& o, const ::rtl::OString& type); - BASETYPE isBaseType(const ::rtl::OString& type); - - ::rtl::OString typeToIdentifier(const ::rtl::OString& type); - - virtual sal_uInt32 getMemberCount(); - virtual sal_uInt32 getInheritedMemberCount(); - - sal_Bool isNestedTypeByName(const ::rtl::OString& type); - - void inc(sal_uInt32 num=4); - void dec(sal_uInt32 num=4); - ::rtl::OString indent(); - ::rtl::OString indent(sal_uInt32 num); -protected: - virtual sal_uInt32 checkInheritedMemberCount(const TypeReader* pReader); - - ::rtl::OString checkSpecialCorbaType(const ::rtl::OString& type); - ::rtl::OString checkRealBaseType(const ::rtl::OString& type, sal_Bool bResolveTypeOnly = sal_False); - -protected: - sal_uInt32 m_inheritedMemberCount; - sal_uInt32 m_indentLength; - ::rtl::OString m_typeName; - ::rtl::OString m_name; - TypeReader m_reader; - TypeManager& m_typeMgr; - TypeDependency m_dependencies; - TypeSet* m_generatedConversions; -}; - -class InterfaceType : public CorbaType -{ -public: - InterfaceType(TypeReader& typeReader, - const ::rtl::OString& typeName, - const TypeManager& typeMgr, - const TypeDependency& typeDependencies, - TypeSet* generatedConversion); - - virtual ~InterfaceType(); - - void dumpFunctions(FileStream& o); - - void dumpUnoMethods(FileStream& o, sal_Bool bDeclOnly, sal_Bool bDelegateToSuper); - void dumpCorbaMethods(FileStream& o, sal_Bool bDeclOnly); - - sal_uInt32 getMemberCount(); - sal_uInt32 getInheritedMemberCount(); - -protected: - sal_uInt32 checkInheritedMemberCount(const TypeReader* pReader); - -protected: - sal_uInt32 m_inheritedMemberCount; - sal_Bool m_hasAttributes; - sal_Bool m_hasMethods; -}; - -class ModuleType : public CorbaType -{ -public: - ModuleType(TypeReader& typeReader, - const ::rtl::OString& typeName, - const TypeManager& typeMgr, - const TypeDependency& typeDependencies, - TypeSet* generatedConversion); - - virtual ~ModuleType(); - - sal_Bool dumpConversionFunctions(FileStream& o, TypeSet* allreadyDumped) throw( CannotDumpException ); - void dumpFunctions(FileStream& o); - sal_Bool hasConstants(); -}; - -class ConstantsType : public ModuleType -{ -public: - ConstantsType(TypeReader& typeReader, - const ::rtl::OString& typeName, - const TypeManager& typeMgr, - const TypeDependency& typeDependencies, - TypeSet* generatedConversion); - - virtual ~ConstantsType(); - - void dumpFunctions(FileStream& o); -}; - -class StructureType : public CorbaType -{ -public: - StructureType(TypeReader& typeReader, - const ::rtl::OString& typeName, - const TypeManager& typeMgr, - const TypeDependency& typeDependencies, - TypeSet* generatedConversion); - - virtual ~StructureType(); - - void dumpFunctions(FileStream& o); - - sal_Bool dumpSuperMember(FileStream& o, const ::rtl::OString& super, sal_Bool bWithType); -}; - -class ExceptionType : public CorbaType -{ -public: - ExceptionType(TypeReader& typeReader, - const ::rtl::OString& typeName, - const TypeManager& typeMgr, - const TypeDependency& typeDependencies, - TypeSet* generatedConversions); - - virtual ~ExceptionType(); - - void dumpFunctions(FileStream& o); - - sal_Bool dumpSuperMember(FileStream& o, const ::rtl::OString& super, sal_Bool bWithType); -}; - -class EnumType : public CorbaType -{ -public: - EnumType(TypeReader& typeReader, - const ::rtl::OString& typeName, - const TypeManager& typeMgr, - const TypeDependency& typeDependencies, - TypeSet* generatedConversion); - - virtual ~EnumType(); - - void dumpFunctions(FileStream& o); -}; - -class TypeDefType : public CorbaType -{ -public: - TypeDefType(TypeReader& typeReader, - const ::rtl::OString& typeName, - const TypeManager& typeMgr, - const TypeDependency& typeDependencies, - TypeSet* generatedConversion); - - virtual ~TypeDefType(); - - void dumpFunctions(FileStream& o); -}; - - -sal_Bool produceType(const ::rtl::OString& typeName, - TypeManager& typeMgr, - TypeDependency& typeDependencies, - CorbaOptions* pOptions, - FileStream& o, TypeSet* allreadyDumped, - TypeSet* generatedConversions) - throw( CannotDumpException ); - -/** - * This function returns a C++ scoped name, represents the namespace - * scoping of this type, e.g. com:.sun::star::uno::XInterface. If the scope of - * the type is equal scope, the relativ name will be used. - */ -::rtl::OString scopedName(const ::rtl::OString& scope, - const ::rtl::OString& type, - sal_Bool bNoNameSpace=sal_False); - -::rtl::OString shortScopedName(const ::rtl::OString& scope, - const ::rtl::OString& type, - sal_Bool bNoNameSpace=sal_False); - - -#endif // _CORBAMAKER_CPPUTYPE_HXX_ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/codemaker/source/bonobowrappermaker/makefile.mk b/codemaker/source/bonobowrappermaker/makefile.mk deleted file mode 100644 index 36889e96400f..000000000000 --- a/codemaker/source/bonobowrappermaker/makefile.mk +++ /dev/null @@ -1,62 +0,0 @@ -#************************************************************************* -# -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# Copyright 2000, 2010 Oracle and/or its affiliates. -# -# OpenOffice.org - a multi-platform office productivity suite -# -# This file is part of OpenOffice.org. -# -# OpenOffice.org is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License version 3 -# only, as published by the Free Software Foundation. -# -# OpenOffice.org is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License version 3 for more details -# (a copy is included in the LICENSE file that accompanied this code). -# -# You should have received a copy of the GNU Lesser General Public License -# version 3 along with OpenOffice.org. If not, see -# <http://www.openoffice.org/license.html> -# for a copy of the LGPLv3 License. -# -#************************************************************************* - -PRJ=..$/.. - -PRJNAME=codemaker -TARGET=bonobowrappermaker -TARGETTYPE=CUI -LIBTARGET=NO - -ENABLE_EXCEPTIONS=TRUE - -# --- Settings ----------------------------------------------------- -.INCLUDE : settings.mk - -# --- Files -------------------------------------------------------- - - -CXXFILES= corbamaker.cxx \ - corbaoptions.cxx \ - corbatype.cxx - - -APP1TARGET= $(TARGET) - -APP1OBJS= $(OBJ)$/corbamaker.obj \ - $(OBJ)$/corbaoptions.obj \ - $(OBJ)$/corbatype.obj - -APP1STDLIBS= \ - $(SALLIB) \ - $(SALHELPERLIB) \ - $(REGLIB) - -APP1LIBS= \ - $(LB)$/codemaker.lib - -.INCLUDE : target.mk |