diff options
author | Vladimir Glazounov <vg@openoffice.org> | 2006-03-15 08:13:51 +0000 |
---|---|---|
committer | Vladimir Glazounov <vg@openoffice.org> | 2006-03-15 08:13:51 +0000 |
commit | f14849d7800f2d481f0b86b4bf99680083db3746 (patch) | |
tree | ef96428e99962d3f915f5bab01a9dffb29d3f1c4 /codemaker | |
parent | 2eaa59ef4a8fd7648fadb99885ea5dcb94b1b103 (diff) |
INTEGRATION: CWS jsc3 (1.35.14); FILE MERGED
2006/02/28 08:20:01 jsc 1.35.14.7: #i62183# change comment
2006/02/21 13:32:33 jsc 1.35.14.6: #i62183# resolve merge conflicts
2006/02/20 11:25:11 jsc 1.35.14.5: RESYNC: (1.36-1.37); FILE MERGED
2006/02/17 16:44:56 jsc 1.35.14.4: #i56247# exchange forward declaration with include
2006/02/17 15:58:17 jsc 1.35.14.3: #62183# re- declare ambiguous base interface methods
2006/01/20 13:39:00 jsc 1.35.14.2: RESYNC: (1.35-1.36); FILE MERGED
2006/01/20 13:01:47 jsc 1.35.14.1: #i53950# refactor translateIdentifier to translateUnoToCppIdentifer
Diffstat (limited to 'codemaker')
-rw-r--r-- | codemaker/source/cppumaker/cpputype.cxx | 435 |
1 files changed, 171 insertions, 264 deletions
diff --git a/codemaker/source/cppumaker/cpputype.cxx b/codemaker/source/cppumaker/cpputype.cxx index 140b27573b59..6d5d5b14d2ff 100644 --- a/codemaker/source/cppumaker/cpputype.cxx +++ b/codemaker/source/cppumaker/cpputype.cxx @@ -4,9 +4,9 @@ * * $RCSfile: cpputype.cxx,v $ * - * $Revision: 1.38 $ + * $Revision: 1.39 $ * - * last change: $Author: rt $ $Date: 2006-03-09 10:26:41 $ + * last change: $Author: vg $ $Date: 2006-03-15 09:13:51 $ * * The Contents of this file are made available subject to * the terms of GNU Lesser General Public License Version 2.1. @@ -55,6 +55,7 @@ #include "includes.hxx" using namespace rtl; +using namespace codemaker::cpp; namespace { @@ -68,216 +69,6 @@ rtl::OString translateSimpleUnoType(rtl::OString const & unoType) { return trans[codemaker::UnoType::getSort(unoType)]; } -rtl::OString translateIdentifier( - rtl::OString const & unoIdentifier, rtl::OString const & prefix, - bool global, rtl::OString const * forbidden = 0) -{ - if (// Keywords: - unoIdentifier == "asm" - || unoIdentifier == "auto" - || unoIdentifier == "bool" - || unoIdentifier == "break" - || unoIdentifier == "case" - || unoIdentifier == "catch" - || unoIdentifier == "char" - || unoIdentifier == "class" - || unoIdentifier == "const" - /* unoIdentifier == "const_cast" */ - || unoIdentifier == "continue" - || unoIdentifier == "default" - || unoIdentifier == "delete" - || unoIdentifier == "do" - || unoIdentifier == "double" - /* unoIdentifier == "dynamic_cast" */ - || unoIdentifier == "else" - || unoIdentifier == "enum" - || unoIdentifier == "explicit" - || unoIdentifier == "export" - || unoIdentifier == "extern" - || unoIdentifier == "false" - || unoIdentifier == "float" - || unoIdentifier == "for" - || unoIdentifier == "friend" - || unoIdentifier == "goto" - || unoIdentifier == "if" - || unoIdentifier == "inline" - || unoIdentifier == "int" - || unoIdentifier == "long" - || unoIdentifier == "mutable" - || unoIdentifier == "namespace" - || unoIdentifier == "new" - || unoIdentifier == "operator" - || unoIdentifier == "private" - || unoIdentifier == "protected" - || unoIdentifier == "public" - || unoIdentifier == "register" - /* unoIdentifier == "reinterpret_cast" */ - || unoIdentifier == "return" - || unoIdentifier == "short" - || unoIdentifier == "signed" - || unoIdentifier == "sizeof" - || unoIdentifier == "static" - /* unoIdentifier == "static_cast" */ - || unoIdentifier == "struct" - || unoIdentifier == "switch" - || unoIdentifier == "template" - || unoIdentifier == "this" - || unoIdentifier == "throw" - || unoIdentifier == "true" - || unoIdentifier == "try" - || unoIdentifier == "typedef" - || unoIdentifier == "typeid" - || unoIdentifier == "typename" - || unoIdentifier == "union" - || unoIdentifier == "unsigned" - || unoIdentifier == "using" - || unoIdentifier == "virtual" - || unoIdentifier == "void" - || unoIdentifier == "volatile" - /* unoIdentifier == "wchar_t" */ - || unoIdentifier == "while" - // Alternative representations: - || unoIdentifier == "and" - /* unoIdentifier == "and_eq" */ - || unoIdentifier == "bitand" - || unoIdentifier == "bitor" - || unoIdentifier == "compl" - || unoIdentifier == "not" - /* unoIdentifier == "not_eq" */ - || unoIdentifier == "or" - /* unoIdentifier == "or_eq" */ - || unoIdentifier == "xor" - /* unoIdentifier == "xor_eq" */ - // Standard macros: - || unoIdentifier == "BUFSIZ" - || unoIdentifier == "CLOCKS_PER_SEC" - || unoIdentifier == "EDOM" - || unoIdentifier == "EOF" - || unoIdentifier == "ERANGE" - || unoIdentifier == "EXIT_FAILURE" - || unoIdentifier == "EXIT_SUCCESS" - || unoIdentifier == "FILENAME_MAX" - || unoIdentifier == "FOPEN_MAX" - || unoIdentifier == "HUGE_VAL" - || unoIdentifier == "LC_ALL" - || unoIdentifier == "LC_COLLATE" - || unoIdentifier == "LC_CTYPE" - || unoIdentifier == "LC_MONETARY" - || unoIdentifier == "LC_NUMERIC" - || unoIdentifier == "LC_TIME" - || unoIdentifier == "L_tmpnam" - || unoIdentifier == "MB_CUR_MAX" - || unoIdentifier == "NULL" - || unoIdentifier == "RAND_MAX" - || unoIdentifier == "SEEK_CUR" - || unoIdentifier == "SEEK_END" - || unoIdentifier == "SEEK_SET" - || unoIdentifier == "SIGABRT" - || unoIdentifier == "SIGFPE" - || unoIdentifier == "SIGILL" - || unoIdentifier == "SIGINT" - || unoIdentifier == "SIGSEGV" - || unoIdentifier == "SIGTERM" - || unoIdentifier == "SIG_DFL" - || unoIdentifier == "SIG_ERR" - || unoIdentifier == "SIG_IGN" - || unoIdentifier == "TMP_MAX" - || unoIdentifier == "WCHAR_MAX" - || unoIdentifier == "WCHAR_MIN" - || unoIdentifier == "WEOF" - /* unoIdentifier == "_IOFBF" */ - /* unoIdentifier == "_IOLBF" */ - /* unoIdentifier == "_IONBF" */ - || unoIdentifier == "assert" - || unoIdentifier == "errno" - || unoIdentifier == "offsetof" - || unoIdentifier == "setjmp" - || unoIdentifier == "stderr" - || unoIdentifier == "stdin" - || unoIdentifier == "stdout" - /* unoIdentifier == "va_arg" */ - /* unoIdentifier == "va_end" */ - /* unoIdentifier == "va_start" */ - // Standard values: - || unoIdentifier == "CHAR_BIT" - || unoIdentifier == "CHAR_MAX" - || unoIdentifier == "CHAR_MIN" - || unoIdentifier == "DBL_DIG" - || unoIdentifier == "DBL_EPSILON" - || unoIdentifier == "DBL_MANT_DIG" - || unoIdentifier == "DBL_MAX" - || unoIdentifier == "DBL_MAX_10_EXP" - || unoIdentifier == "DBL_MAX_EXP" - || unoIdentifier == "DBL_MIN" - || unoIdentifier == "DBL_MIN_10_EXP" - || unoIdentifier == "DBL_MIN_EXP" - || unoIdentifier == "FLT_DIG" - || unoIdentifier == "FLT_EPSILON" - || unoIdentifier == "FLT_MANT_DIG" - || unoIdentifier == "FLT_MAX" - || unoIdentifier == "FLT_MAX_10_EXP" - || unoIdentifier == "FLT_MAX_EXP" - || unoIdentifier == "FLT_MIN" - || unoIdentifier == "FLT_MIN_10_EXP" - || unoIdentifier == "FLT_MIN_EXP" - || unoIdentifier == "FLT_RADIX" - || unoIdentifier == "FLT_ROUNDS" - || unoIdentifier == "INT_MAX" - || unoIdentifier == "INT_MIN" - || unoIdentifier == "LDBL_DIG" - || unoIdentifier == "LDBL_EPSILON" - || unoIdentifier == "LDBL_MANT_DIG" - || unoIdentifier == "LDBL_MAX" - || unoIdentifier == "LDBL_MAX_10_EXP" - || unoIdentifier == "LDBL_MAX_EXP" - || unoIdentifier == "LDBL_MIN" - || unoIdentifier == "LDBL_MIN_10_EXP" - || unoIdentifier == "LDBL_MIN_EXP" - || unoIdentifier == "LONG_MAX" - || unoIdentifier == "LONG_MIN" - || unoIdentifier == "MB_LEN_MAX" - || unoIdentifier == "SCHAR_MAX" - || unoIdentifier == "SCHAR_MIN" - || unoIdentifier == "SHRT_MAX" - || unoIdentifier == "SHRT_MIN" - || unoIdentifier == "UCHAR_MAX" - || unoIdentifier == "UINT_MAX" - || unoIdentifier == "ULONG_MAX" - || unoIdentifier == "USHRT_MAX" - || (global - && (// Standard types: - /* unoIdentifier == "clock_t" */ - /* unoIdentifier == "div_t" */ - unoIdentifier == "FILE" - /* unoIdentifier == "fpos_t" */ - /* unoIdentifier == "jmp_buf" */ - || unoIdentifier == "lconv" - /* unoIdentifier == "ldiv_t" */ - /* unoIdentifier == "mbstate_t" */ - /* unoIdentifier == "ptrdiff_t" */ - /* unoIdentifier == "sig_atomic_t" */ - /* unoIdentifier == "size_t" */ - /* unoIdentifier == "time_t" */ - || unoIdentifier == "tm" - /* unoIdentifier == "va_list" */ - /* unoIdentifier == "wctrans_t" */ - /* unoIdentifier == "wctype_t" */ - /* unoIdentifier == "wint_t" */ - // Standard namespaces: - || unoIdentifier == "std")) - // Others: - || unoIdentifier == "NDEBUG" - || forbidden != 0 && unoIdentifier == *forbidden) - { - rtl::OStringBuffer buf(prefix); - buf.append('_'); - buf.append(unoIdentifier); - return buf.makeStringAndClear(); - } else { - return unoIdentifier; - } -} - } //************************************************************************* @@ -369,7 +160,8 @@ void CppuType::dumpGetCppuTypePreamble(FileStream & out) { out << indent() << "static inline ::com::sun::star::uno::Type const & get() {\n"; } else { - if (codemaker::cppumaker::dumpNamespaceOpen(out, m_typeName, false)) { + if (codemaker::cppumaker::dumpNamespaceOpen(out, m_typeMgr, + m_typeName, false)) { out << "\n\n"; } out << ("inline ::com::sun::star::uno::Type const &" @@ -605,7 +397,7 @@ void CppuType::dumpInitializer( { typereg::Reader reader(m_typeMgr.getTypeReader(t)); OSL_ASSERT(reader.isValid()); - out << scopedName(rtl::OString(), t) << "_" + out << scopedCppName(m_typeMgr, t) << "_" << rtl::OUStringToOString( reader.getFieldName(0), RTL_TEXTENCODING_UTF8); @@ -919,8 +711,11 @@ void CppuType::dumpCppuGetTypeMemberDecl(FileStream& o, CppuTypeDecl eDeclFlag) } } -bool CppuType::isGlobal() const { - return m_typeName.indexOf('/') < 0; +IdentifierTranslationMode CppuType::isGlobal() const { + if ( m_typeName.indexOf('/') < 0 ) + return ITM_GLOBAL; + else + return ITM_NONGLOBAL; } sal_uInt32 CppuType::getMemberCount() @@ -1098,9 +893,10 @@ void CppuType::dumpType(FileStream& o, const OString& type, { case RT_TYPE_INTERFACE: if (bNative) - o << scopedName(m_typeName, relType); + o << scopedCppName(m_typeMgr, relType); else - o << "::com::sun::star::uno::Reference< " << scopedName(m_typeName, relType) << " >"; + o << "::com::sun::star::uno::Reference< " + << scopedCppName(m_typeMgr, relType) << " >"; break; case RT_TYPE_INVALID: { @@ -1109,7 +905,8 @@ void CppuType::dumpType(FileStream& o, const OString& type, { o << tmp; } else - throw CannotDumpException("Unknown type '" + relType + "', incomplete type library."); + throw CannotDumpException("Unknown type '" + relType + + "', incomplete type library."); } break; case RT_TYPE_STRUCT: @@ -1117,7 +914,7 @@ void CppuType::dumpType(FileStream& o, const OString& type, case RT_TYPE_TYPEDEF: case RT_TYPE_EXCEPTION: { - o << scopedName(m_typeName, relType); + o << scopedCppName(m_typeMgr, relType); if (!args.empty()) { o << "< "; for (std::vector< rtl::OString >::iterator i(args.begin()); @@ -1464,7 +1261,7 @@ sal_Bool InterfaceType::dumpHFile( o << ("\nnamespace com { namespace sun { namespace star { namespace uno {\n" "class Type;\n} } } }\n\n"); - if (codemaker::cppumaker::dumpNamespaceOpen(o, m_typeName, false)) { + if (codemaker::cppumaker::dumpNamespaceOpen(o, m_typeMgr, m_typeName, false)) { o << "\n"; } dumpDeclaration(o); @@ -1480,23 +1277,118 @@ sal_Bool InterfaceType::dumpHFile( return sal_True; } + +/* collects all base interface of a given interface. + */ +void collectBases(TypeManager const & manager, + typereg::Reader const & reader, + StringSet & bases) +{ + for (sal_Int16 i = 0; i < reader.getSuperTypeCount(); ++i) + { + OString supertype = rtl::OUStringToOString( + reader.getSuperTypeName(i), RTL_TEXTENCODING_UTF8); + + if ( ! supertype.equals("com/sun/star/uno/XInterface") ) { + bases.insert(supertype); + + typereg::Reader super(manager.getTypeReader(supertype)); + collectBases(manager, super, bases); + } + } +} + +/* collects ambiguous base interfaces by firstly collecting all bases + from the direct parents and secondly build an intersection of this + collected base sets. + */ +StringSet collectAmbiguousBases(TypeManager const & manager, + typereg::Reader const & reader) +{ + std::vector< StringSet > basesets; + for (sal_Int16 i = 0; i < reader.getSuperTypeCount(); ++i) + { + OString superType = rtl::OUStringToOString( + reader.getSuperTypeName(i), RTL_TEXTENCODING_UTF8); + + typereg::Reader super(manager.getTypeReader(superType)); + StringSet bases; + collectBases(manager, super, bases); + basesets.push_back(bases); + } + + StringSet ambiguousbases; + long index=1; + long length = static_cast< long >(basesets.size()); + for (std::vector<StringSet>::const_iterator iter(basesets.begin()); + iter != basesets.end(); ++iter) + { + for (long i=index; i < length; ++i) + { + std::set_intersection((*iter).begin(), (*iter).end(), + basesets[i].begin(), basesets[i].end(), + std::inserter( + ambiguousbases, ambiguousbases.begin()), + LessString()); + } + ++index; + } + return ambiguousbases; +} + +/* dump the re-declaration of ambiguous base interfaces. It simply declares all + ambiguous methods and attribute methods again to avoid ambiguity. + */ +void InterfaceType::dumpAmbiguousBaseInterfaces(FileStream& o) +{ + StringSet ambiguousBases = collectAmbiguousBases(m_typeMgr, m_reader); + + if (ambiguousBases.size() > 0) + o << indent() << "// begin re-declaration of ambiguous base " + "interfaces"; + + for (StringSet::const_iterator i(ambiguousBases.begin()); + i != ambiguousBases.end(); ++i) + { + typereg::Reader ambiguousreader(m_typeMgr.getTypeReader(*i)); + if (ambiguousreader.isValid()) { + InterfaceType iType(ambiguousreader, *i, m_typeMgr); + + o << "\n" << indent() << "// disambiguate " + << iType.m_typeName.replace('/', '.') << ":"; + iType.inc(); + iType.dumpAttributes(o); + iType.dumpMethods(o); + } + } + + if (ambiguousBases.size() > 0) + o << indent() << "// end re-declaration of ambiguous base " + "interfaces\n"; +} + + sal_Bool InterfaceType::dumpDeclaration(FileStream& o) throw( CannotDumpException ) { +// rtl::OString cppName(translateUnoToCppIdentifier( +// m_name, "interface", ITM_KEYWORDSONLY, &m_name)); + +// o << "\nclass SAL_NO_VTABLE " << cppName; o << "\nclass SAL_NO_VTABLE " << m_name; for (sal_Int16 i = 0; i < m_reader.getSuperTypeCount(); ++i) { o << (i == 0 ? " :" : ",") << " public " - << scopedName( - m_typeName, - rtl::OUStringToOString( - m_reader.getSuperTypeName(i), RTL_TEXTENCODING_UTF8)); + << scopedCppName(m_typeMgr, rtl::OUStringToOString( + m_reader.getSuperTypeName(i), RTL_TEXTENCODING_UTF8)); } o << "\n{\npublic:\n"; inc(); + dumpAmbiguousBaseInterfaces(o); + dumpAttributes(o); dumpMethods(o); @@ -1523,8 +1415,11 @@ sal_Bool InterfaceType::dumpHxxFile( dumpGetCppuType(o); +// rtl::OString cppName(translateUnoToCppIdentifier( +// m_name, "interface", ITM_KEYWORDSONLY, &m_name)); + o << "\n::com::sun::star::uno::Type const & " - << scopedName(rtl::OString(), m_typeName) + << scopedCppName(m_typeMgr, m_typeName) << "::static_type(void *) {\n"; inc(); o << indent() << "return ::getCppuType(static_cast< "; @@ -1647,6 +1542,8 @@ void InterfaceType::dumpMethods(FileStream& o) } dumpType(o, paramType, bConst, bRef); +// o << " " << translateUnoToCppIdentifier( +// paramName, "param", ITM_KEYWORDSONLY, NULL); o << " " << paramName; if (j+1 < (sal_uInt16)paramCount) o << ", "; @@ -2262,8 +2159,7 @@ void InterfaceType::dumpExceptionSpecification( out << ", "; } first = false; - out << scopedName( - m_typeName, + out << scopedCppName(m_typeMgr, rtl::OUStringToOString(name, RTL_TEXTENCODING_UTF8)); } } @@ -2402,7 +2298,7 @@ sal_Bool ConstantsType::dumpHFile( includes.dump(o, 0); o << "\n"; - if (codemaker::cppumaker::dumpNamespaceOpen(o, m_typeName, true)) { + if (codemaker::cppumaker::dumpNamespaceOpen(o, m_typeMgr, m_typeName, true)) { o << "\n"; } o << "\n"; @@ -2537,7 +2433,7 @@ sal_Bool StructureType::dumpHFile( includes.dump(o, 0); o << "\n"; - if (codemaker::cppumaker::dumpNamespaceOpen(o, m_typeName, false)) { + if (codemaker::cppumaker::dumpNamespaceOpen(o, m_typeMgr, m_typeName, false)) { o << "\n"; } @@ -2581,7 +2477,7 @@ sal_Bool StructureType::dumpDeclaration(FileStream& o) OSL_ASSERT(base.getLength() > 0); //TODO } if (base.getLength() > 0) { - o << ": public " << scopedName(m_typeName, base); + o << ": public " << scopedCppName(m_typeMgr, base); } o << " {\n"; inc(); @@ -2634,7 +2530,7 @@ sal_Bool StructureType::dumpDeclaration(FileStream& o) && type != "hyper" && type != "unsigned hyper") { OSL_ASSERT(!parameterized); - o << " CPPU_GCC3_ALIGN(" << scopedName(m_typeName, base) << ")"; + o << " CPPU_GCC3_ALIGN(" << scopedCppName(m_typeMgr, base) << ")"; } o << ";\n"; } @@ -2661,7 +2557,7 @@ sal_Bool StructureType::dumpHxxFile( includes.dump(o, &m_typeName); o << "\n"; - if (codemaker::cppumaker::dumpNamespaceOpen(o, m_typeName, false)) { + if (codemaker::cppumaker::dumpNamespaceOpen(o, m_typeMgr, m_typeName, false)) { o << "\n"; } o << "\n"; @@ -2679,7 +2575,7 @@ sal_Bool StructureType::dumpHxxFile( sal_Bool first = sal_True; if (superType.getLength() > 0) { - o << indent() << ": " << scopedName(m_typeName, superType) << "()\n"; + o << indent() << ": " << scopedCppName(m_typeMgr, superType) << "()\n"; first = sal_False; } @@ -2756,7 +2652,7 @@ sal_Bool StructureType::dumpHxxFile( sal_Bool first = sal_True; if (superType.getLength() > 0) { - o << indent() << ": " << scopedName(m_typeName, superType) << "("; + o << indent() << ": " << scopedCppName(m_typeMgr, superType) << "("; dumpSuperMember(o, superType, sal_False); o << ")\n"; first = sal_False; @@ -3246,7 +3142,7 @@ sal_Bool ExceptionType::dumpHFile( includes.dump(o, 0); o << "\n"; - if (codemaker::cppumaker::dumpNamespaceOpen(o, m_typeName, false)) { + if (codemaker::cppumaker::dumpNamespaceOpen(o, m_typeMgr, m_typeName, false)) { o << "\n"; } @@ -3279,7 +3175,7 @@ sal_Bool ExceptionType::dumpDeclaration(FileStream& o) m_reader.getSuperTypeName(0), RTL_TEXTENCODING_UTF8); } if (superType.getLength() > 0) - o << " : public " << scopedName(m_typeName, superType); + o << " : public " << scopedCppName(m_typeMgr, superType); o << "\n{\npublic:\n"; inc(); @@ -3345,7 +3241,7 @@ sal_Bool ExceptionType::dumpDeclaration(FileStream& o) if (i == 0 && superType.getLength() && !fieldType.equals("double") && !fieldType.equals("hyper") && !fieldType.equals("unsigned hyper")) { - o << " CPPU_GCC3_ALIGN( " << scopedName(m_typeName, superType) << " )"; + o << " CPPU_GCC3_ALIGN( " << scopedCppName(m_typeMgr, superType) << " )"; } o << ";\n"; } @@ -3368,7 +3264,7 @@ sal_Bool ExceptionType::dumpHxxFile( includes.dump(o, &m_typeName); o << "\n"; - if (codemaker::cppumaker::dumpNamespaceOpen(o, m_typeName, false)) { + if (codemaker::cppumaker::dumpNamespaceOpen(o, m_typeMgr, m_typeName, false)) { o << "\n"; } o << "\n"; @@ -3383,7 +3279,7 @@ sal_Bool ExceptionType::dumpHxxFile( sal_Bool first = sal_True; if (superType.getLength() > 0) { - o << indent() << ": " << scopedName(m_typeName, superType) << "()\n"; + o << indent() << ": " << scopedCppName(m_typeMgr, superType) << "()\n"; first = sal_False; } @@ -3460,7 +3356,7 @@ sal_Bool ExceptionType::dumpHxxFile( sal_Bool first = sal_True; if (superType.getLength() > 0) { - o << indent() << ": " << scopedName(m_typeName, superType) << "("; + o << indent() << ": " << scopedCppName(m_typeMgr, superType) << "("; dumpSuperMember(o, superType, sal_False); o << ")\n"; first = sal_False; @@ -3504,7 +3400,7 @@ sal_Bool ExceptionType::dumpHxxFile( << " const & the_other)"; first = true; if (superType.getLength() > 0) { - o << ": " << scopedName(m_typeName, superType) << "(the_other)"; + o << ": " << scopedCppName(m_typeMgr, superType) << "(the_other)"; first = false; } for (sal_uInt16 i = 0; i < fieldCount; ++i) { @@ -3523,7 +3419,7 @@ sal_Bool ExceptionType::dumpHxxFile( << ("//TODO: Just like its implicitly-defined counterpart, this function" " definition is not exception-safe\n"); if (superType.getLength() > 0) { - o << indent() << scopedName(m_typeName, superType) + o << indent() << scopedCppName(m_typeMgr, superType) << "::operator =(the_other);\n"; } for (sal_uInt16 i = 0; i < fieldCount; ++i) { @@ -3628,7 +3524,7 @@ sal_Bool EnumType::dumpHFile( includes.dump(o, 0); o << "\n"; - if (codemaker::cppumaker::dumpNamespaceOpen(o, m_typeName, false)) { + if (codemaker::cppumaker::dumpNamespaceOpen(o, m_typeMgr, m_typeName, false)) { o << "\n"; } @@ -3718,7 +3614,7 @@ void EnumType::dumpNormalGetCppuType(FileStream& o) o << indent() << "typelib_static_enum_type_init( &the_type,\n"; inc(31); o << indent() << "\"" << m_typeName.replace('/', '.') << "\",\n" - << indent() << scopedName(OString(), m_typeName) << "_" + << indent() << scopedCppName(m_typeMgr, m_typeName) << "_" << rtl::OUStringToOString(m_reader.getFieldName(0), RTL_TEXTENCODING_UTF8) << " );\n"; dec(31); @@ -3779,7 +3675,7 @@ void EnumType::dumpComprehensiveGetCppuType(FileStream& o) o << "\n" << indent() << "typelib_typedescription_newEnum( &pTD,\n"; inc(); o << indent() << "sTypeName.pData,\n" - << indent() << "(sal_Int32)" << scopedName("", m_typeName, sal_False) + << indent() << "(sal_Int32)" << scopedCppName(m_typeMgr, m_typeName, sal_False) << "_" << rtl::OUStringToOString(m_reader.getFieldName(0), RTL_TEXTENCODING_UTF8) << ",\n" @@ -3831,7 +3727,7 @@ sal_Bool TypeDefType::dumpHFile( includes.dump(o, 0); o << "\n"; - if (codemaker::cppumaker::dumpNamespaceOpen(o, m_typeName, false)) { + if (codemaker::cppumaker::dumpNamespaceOpen(o, m_typeMgr, m_typeName, false)) { o << "\n"; } @@ -3981,12 +3877,13 @@ sal_Bool ServiceType::dumpHxxFile( } } } - rtl::OString cppName(translateIdentifier(m_name, "service", isGlobal())); + rtl::OString cppName(translateUnoToCppIdentifier( + m_name, "service", isGlobal())); rtl::OString headerDefine(dumpHeaderDefine(o, "HPP")); o << "\n"; includes.dump(o, 0); o << "\n"; - if (codemaker::cppumaker::dumpNamespaceOpen(o, m_typeName, false)) { + if (codemaker::cppumaker::dumpNamespaceOpen(o, m_typeMgr, m_typeName, false)) { o << "\n"; } o << "\nclass " << cppName << " {\n"; @@ -3997,13 +3894,14 @@ sal_Bool ServiceType::dumpHxxFile( rtl::OUStringToOString( m_reader.getSuperTypeName(0), RTL_TEXTENCODING_UTF8)); rtl::OString fullBaseName(baseName.replace('/', '.')); - rtl::OString scopedBaseName(scopedName(rtl::OString(), baseName)); + rtl::OString scopedBaseName(scopedCppName(m_typeMgr, baseName)); o << "public:\n"; for (sal_uInt16 i = 0; i < ctors; ++i) { if (isDefaultConstructor(i)) { o << indent() << "static ::com::sun::star::uno::Reference< " << scopedBaseName << " > " - << translateIdentifier("create", "method", false, &cppName) + << translateUnoToCppIdentifier( + "create", "method", ITM_NONGLOBAL, &cppName) << ("(::com::sun::star::uno::Reference<" " ::com::sun::star::uno::XComponentContext > const &" " the_context) {\n"); @@ -4064,10 +3962,10 @@ sal_Bool ServiceType::dumpHxxFile( } else { o << indent() << "static ::com::sun::star::uno::Reference< " << scopedBaseName << " > " - << translateIdentifier( + << translateUnoToCppIdentifier( rtl::OUStringToOString( m_reader.getMethodName(i), RTL_TEXTENCODING_UTF8), - "method", false, &cppName) + "method", ITM_NONGLOBAL, &cppName) << ("(::com::sun::star::uno::Reference<" " ::com::sun::star::uno::XComponentContext > const &" " the_context"); @@ -4089,11 +3987,11 @@ sal_Bool ServiceType::dumpHxxFile( bool byRef = passByReference(type); dumpType(o, type, byRef, byRef); o << " " - << translateIdentifier( + << translateUnoToCppIdentifier( rtl::OUStringToOString( m_reader.getMethodParameterName(i, j), RTL_TEXTENCODING_UTF8), - "param", false); + "param", ITM_NONGLOBAL); } o << ") {\n"; inc(); @@ -4118,11 +4016,11 @@ sal_Bool ServiceType::dumpHxxFile( for (sal_uInt16 j = 0; j < params; ++j) { o << indent() << "the_arguments[" << j << "] "; rtl::OString param( - translateIdentifier( + translateUnoToCppIdentifier( rtl::OUStringToOString( m_reader.getMethodParameterName(i, j), RTL_TEXTENCODING_UTF8), - "param", false)); + "param", ITM_NONGLOBAL)); sal_Int32 rank; if (codemaker::UnoType::getSort( codemaker::UnoType::decompose( @@ -4171,11 +4069,11 @@ sal_Bool ServiceType::dumpHxxFile( "::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(\"") << fullName << "\")), "; if (rest) { - o << translateIdentifier( + o << translateUnoToCppIdentifier( rtl::OUStringToOString( m_reader.getMethodParameterName(i, 0), RTL_TEXTENCODING_UTF8), - "param", false); + "param", ITM_NONGLOBAL); } else if (params == 0) { o << ("::com::sun::star::uno::Sequence<" " ::com::sun::star::uno::Any >()"); @@ -4288,13 +4186,14 @@ sal_Bool SingletonType::dumpHxxFile( FileStream & o, codemaker::cppumaker::Includes & includes) throw (CannotDumpException) { - rtl::OString cppName(translateIdentifier(m_name, "singleton", isGlobal())); + rtl::OString cppName(translateUnoToCppIdentifier( + m_name, "singleton", isGlobal())); rtl::OString fullName(m_typeName.replace('/', '.')); rtl::OString baseName( rtl::OUStringToOString( m_reader.getSuperTypeName(0), RTL_TEXTENCODING_UTF8)); rtl::OString fullBaseName(baseName.replace('/', '.')); - rtl::OString scopedBaseName(scopedName(rtl::OString(), baseName)); + rtl::OString scopedBaseName(scopedCppName(m_typeMgr, baseName)); rtl::OString headerDefine(dumpHeaderDefine(o, "HPP")); o << "\n"; //TODO: Decide whether the types added to includes should rather be added to @@ -4307,14 +4206,14 @@ sal_Bool SingletonType::dumpHxxFile( includes.addRtlUstringHxx(); includes.dump(o, 0); o << "\n"; - if (codemaker::cppumaker::dumpNamespaceOpen(o, m_typeName, false)) { + if (codemaker::cppumaker::dumpNamespaceOpen(o, m_typeMgr, m_typeName, false)) { o << "\n"; } o << "\nclass " << cppName << " {\npublic:\n"; inc(); o << indent() << "static ::com::sun::star::uno::Reference< " << scopedBaseName << " > " - << translateIdentifier("get", "method", false, &cppName) + << translateUnoToCppIdentifier("get", "method", ITM_NONGLOBAL, &cppName) << ("(::com::sun::star::uno::Reference<" " ::com::sun::star::uno::XComponentContext > const & context) {\n"); inc(); @@ -4616,6 +4515,7 @@ bool produceType(RegistryKey& rTypeKey, bool bIsExtraType, //************************************************************************* // scopedName //************************************************************************* +/* OString scopedName(const OString& scope, const OString& type, sal_Bool bNoNameSpace) { @@ -4631,8 +4531,15 @@ OString scopedName(const OString& scope, const OString& type, do { tmpBuf.append("::"); - tmpBuf.append(type.getToken(0, '/', nPos)); + OString token(type.getToken(0, '/', nPos)); + if (nPos != -1) + tmpBuf.append(translateUnoToCppIndentifier( + token, "module", ITM_KEYWORDSONLY)); + else + tmpBuf.append(translateUnoToCppIndentifier( + token, "interface", ITM_KEYWORDSONLY)); } while( nPos != -1 ); return tmpBuf.makeStringAndClear(); } +*/ |