1*2fe1ca3dSAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*2fe1ca3dSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*2fe1ca3dSAndrew Rist * or more contributor license agreements. See the NOTICE file 5*2fe1ca3dSAndrew Rist * distributed with this work for additional information 6*2fe1ca3dSAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*2fe1ca3dSAndrew Rist * to you under the Apache License, Version 2.0 (the 8*2fe1ca3dSAndrew Rist * "License"); you may not use this file except in compliance 9*2fe1ca3dSAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 11*2fe1ca3dSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 13*2fe1ca3dSAndrew Rist * Unless required by applicable law or agreed to in writing, 14*2fe1ca3dSAndrew Rist * software distributed under the License is distributed on an 15*2fe1ca3dSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*2fe1ca3dSAndrew Rist * KIND, either express or implied. See the License for the 17*2fe1ca3dSAndrew Rist * specific language governing permissions and limitations 18*2fe1ca3dSAndrew Rist * under the License. 19cdf0e10cSrcweir * 20*2fe1ca3dSAndrew Rist *************************************************************/ 21*2fe1ca3dSAndrew Rist 22*2fe1ca3dSAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_idlc.hxx" 26cdf0e10cSrcweir #include <idlc/astmodule.hxx> 27cdf0e10cSrcweir #include <idlc/asttypedef.hxx> 28cdf0e10cSrcweir #include <idlc/astservice.hxx> 29cdf0e10cSrcweir #include <idlc/astconstant.hxx> 30cdf0e10cSrcweir #include <idlc/astattribute.hxx> 31cdf0e10cSrcweir #include <idlc/astinterfacemember.hxx> 32cdf0e10cSrcweir #ifndef _IDLC_ASTSERVICEEMEMBER_HXX_ 33cdf0e10cSrcweir #include <idlc/astservicemember.hxx> 34cdf0e10cSrcweir #endif 35cdf0e10cSrcweir #include <idlc/astobserves.hxx> 36cdf0e10cSrcweir #include <idlc/astneeds.hxx> 37cdf0e10cSrcweir #include <idlc/astsequence.hxx> 38cdf0e10cSrcweir #include "idlc/astoperation.hxx" 39cdf0e10cSrcweir 40cdf0e10cSrcweir #include "registry/version.h" 41cdf0e10cSrcweir #include "registry/writer.hxx" 42cdf0e10cSrcweir 43cdf0e10cSrcweir using namespace ::rtl; 44cdf0e10cSrcweir 45cdf0e10cSrcweir sal_Bool AstModule::dump(RegistryKey& rKey) 46cdf0e10cSrcweir { 47cdf0e10cSrcweir OUString emptyStr; 48cdf0e10cSrcweir RegistryKey localKey; 49cdf0e10cSrcweir if ( getNodeType() == NT_root ) 50cdf0e10cSrcweir { 51cdf0e10cSrcweir localKey = rKey; 52cdf0e10cSrcweir }else 53cdf0e10cSrcweir { 54cdf0e10cSrcweir if (rKey.createKey( OStringToOUString(getFullName(), RTL_TEXTENCODING_UTF8 ), localKey)) 55cdf0e10cSrcweir { 56cdf0e10cSrcweir fprintf(stderr, "%s: warning, could not create key '%s' in '%s'\n", 57cdf0e10cSrcweir idlc()->getOptions()->getProgramName().getStr(), 58cdf0e10cSrcweir getFullName().getStr(), OUStringToOString(rKey.getRegistryName(), RTL_TEXTENCODING_UTF8).getStr()); 59cdf0e10cSrcweir return sal_False; 60cdf0e10cSrcweir } 61cdf0e10cSrcweir } 62cdf0e10cSrcweir 63cdf0e10cSrcweir sal_uInt16 nConst = getNodeCount(NT_const); 64cdf0e10cSrcweir 65cdf0e10cSrcweir if ( nConst > 0 ) 66cdf0e10cSrcweir { 67cdf0e10cSrcweir RTTypeClass typeClass = RT_TYPE_MODULE; 68cdf0e10cSrcweir if ( getNodeType() == NT_constants ) 69cdf0e10cSrcweir typeClass = RT_TYPE_CONSTANTS; 70cdf0e10cSrcweir 71cdf0e10cSrcweir typereg::Writer aBlob( 72cdf0e10cSrcweir m_bPublished ? TYPEREG_VERSION_1 : TYPEREG_VERSION_0, 73cdf0e10cSrcweir getDocumentation(), emptyStr, typeClass, 74cdf0e10cSrcweir m_bPublished, 75cdf0e10cSrcweir OStringToOUString(getRelativName(), RTL_TEXTENCODING_UTF8), 0, 76cdf0e10cSrcweir nConst, 0, 0); 77cdf0e10cSrcweir 78cdf0e10cSrcweir DeclList::const_iterator iter = getIteratorBegin(); 79cdf0e10cSrcweir DeclList::const_iterator end = getIteratorEnd(); 80cdf0e10cSrcweir AstDeclaration* pDecl = NULL; 81cdf0e10cSrcweir sal_uInt16 index = 0; 82cdf0e10cSrcweir while ( iter != end ) 83cdf0e10cSrcweir { 84cdf0e10cSrcweir pDecl = *iter; 85cdf0e10cSrcweir if ( pDecl->getNodeType() == NT_const && 86cdf0e10cSrcweir pDecl->isInMainfile() ) 87cdf0e10cSrcweir { 88cdf0e10cSrcweir ((AstConstant*)pDecl)->dumpBlob( 89cdf0e10cSrcweir aBlob, index++, 90cdf0e10cSrcweir getNodeType() == NT_module && pDecl->isPublished()); 91cdf0e10cSrcweir } 92cdf0e10cSrcweir ++iter; 93cdf0e10cSrcweir } 94cdf0e10cSrcweir 95cdf0e10cSrcweir sal_uInt32 aBlobSize; 96cdf0e10cSrcweir void const * pBlob = aBlob.getBlob(&aBlobSize); 97cdf0e10cSrcweir 98cdf0e10cSrcweir if (localKey.setValue(emptyStr, RG_VALUETYPE_BINARY, 99cdf0e10cSrcweir (RegValue)pBlob, aBlobSize)) 100cdf0e10cSrcweir { 101cdf0e10cSrcweir fprintf(stderr, "%s: warning, could not set value of key \"%s\" in %s\n", 102cdf0e10cSrcweir idlc()->getOptions()->getProgramName().getStr(), 103cdf0e10cSrcweir getFullName().getStr(), OUStringToOString(localKey.getRegistryName(), RTL_TEXTENCODING_UTF8).getStr()); 104cdf0e10cSrcweir return sal_False; 105cdf0e10cSrcweir } 106cdf0e10cSrcweir } else 107cdf0e10cSrcweir { 108cdf0e10cSrcweir RTTypeClass typeClass = RT_TYPE_MODULE; 109cdf0e10cSrcweir if ( getNodeType() == NT_constants ) 110cdf0e10cSrcweir typeClass = RT_TYPE_CONSTANTS; 111cdf0e10cSrcweir 112cdf0e10cSrcweir typereg::Writer aBlob( 113cdf0e10cSrcweir m_bPublished ? TYPEREG_VERSION_1 : TYPEREG_VERSION_0, 114cdf0e10cSrcweir getDocumentation(), emptyStr, typeClass, m_bPublished, 115cdf0e10cSrcweir OStringToOUString(getRelativName(), RTL_TEXTENCODING_UTF8), 0, 0, 0, 116cdf0e10cSrcweir 0); 117cdf0e10cSrcweir 118cdf0e10cSrcweir sal_uInt32 aBlobSize; 119cdf0e10cSrcweir void const * pBlob = aBlob.getBlob(&aBlobSize); 120cdf0e10cSrcweir 121cdf0e10cSrcweir if ( getNodeType() != NT_root ) 122cdf0e10cSrcweir { 123cdf0e10cSrcweir if (localKey.setValue(emptyStr, RG_VALUETYPE_BINARY, 124cdf0e10cSrcweir (RegValue)pBlob, aBlobSize)) 125cdf0e10cSrcweir { 126cdf0e10cSrcweir fprintf(stderr, "%s: warning, could not set value of key \"%s\" in %s\n", 127cdf0e10cSrcweir idlc()->getOptions()->getProgramName().getStr(), 128cdf0e10cSrcweir getFullName().getStr(), OUStringToOString(localKey.getRegistryName(), RTL_TEXTENCODING_UTF8).getStr()); 129cdf0e10cSrcweir return sal_False; 130cdf0e10cSrcweir } 131cdf0e10cSrcweir } 132cdf0e10cSrcweir } 133cdf0e10cSrcweir if ( getNodeType() == NT_root ) 134cdf0e10cSrcweir { 135cdf0e10cSrcweir localKey.releaseKey(); 136cdf0e10cSrcweir } 137cdf0e10cSrcweir return AstDeclaration::dump(rKey); 138cdf0e10cSrcweir } 139cdf0e10cSrcweir 140cdf0e10cSrcweir sal_Bool AstTypeDef::dump(RegistryKey& rKey) 141cdf0e10cSrcweir { 142cdf0e10cSrcweir OUString emptyStr; 143cdf0e10cSrcweir RegistryKey localKey; 144cdf0e10cSrcweir if (rKey.createKey( OStringToOUString(getFullName(), RTL_TEXTENCODING_UTF8 ), localKey)) 145cdf0e10cSrcweir { 146cdf0e10cSrcweir fprintf(stderr, "%s: warning, could not create key '%s' in '%s'\n", 147cdf0e10cSrcweir idlc()->getOptions()->getProgramName().getStr(), 148cdf0e10cSrcweir getFullName().getStr(), OUStringToOString(rKey.getRegistryName(), RTL_TEXTENCODING_UTF8).getStr()); 149cdf0e10cSrcweir return sal_False; 150cdf0e10cSrcweir } 151cdf0e10cSrcweir 152cdf0e10cSrcweir typereg::Writer aBlob( 153cdf0e10cSrcweir m_bPublished ? TYPEREG_VERSION_1 : TYPEREG_VERSION_0, 154cdf0e10cSrcweir getDocumentation(), emptyStr, RT_TYPE_TYPEDEF, m_bPublished, 155cdf0e10cSrcweir OStringToOUString(getRelativName(), RTL_TEXTENCODING_UTF8), 1, 0, 0, 0); 156cdf0e10cSrcweir aBlob.setSuperTypeName( 157cdf0e10cSrcweir 0, 158cdf0e10cSrcweir OStringToOUString( 159cdf0e10cSrcweir getBaseType()->getRelativName(), RTL_TEXTENCODING_UTF8)); 160cdf0e10cSrcweir 161cdf0e10cSrcweir sal_uInt32 aBlobSize; 162cdf0e10cSrcweir void const * pBlob = aBlob.getBlob(&aBlobSize); 163cdf0e10cSrcweir 164cdf0e10cSrcweir if (localKey.setValue(emptyStr, RG_VALUETYPE_BINARY, (RegValue)pBlob, aBlobSize)) 165cdf0e10cSrcweir { 166cdf0e10cSrcweir fprintf(stderr, "%s: warning, could not set value of key \"%s\" in %s\n", 167cdf0e10cSrcweir idlc()->getOptions()->getProgramName().getStr(), 168cdf0e10cSrcweir getFullName().getStr(), OUStringToOString(localKey.getRegistryName(), RTL_TEXTENCODING_UTF8).getStr()); 169cdf0e10cSrcweir return sal_False; 170cdf0e10cSrcweir } 171cdf0e10cSrcweir 172cdf0e10cSrcweir return sal_True; 173cdf0e10cSrcweir } 174cdf0e10cSrcweir 175cdf0e10cSrcweir sal_Bool AstService::dump(RegistryKey& rKey) 176cdf0e10cSrcweir { 177cdf0e10cSrcweir OUString emptyStr; 178cdf0e10cSrcweir typereg_Version version = m_bPublished 179cdf0e10cSrcweir ? TYPEREG_VERSION_1 : TYPEREG_VERSION_0; 180cdf0e10cSrcweir OString superName; 181cdf0e10cSrcweir sal_uInt16 constructors = 0; 182cdf0e10cSrcweir sal_uInt16 properties = 0; 183cdf0e10cSrcweir sal_uInt16 references = 0; 184cdf0e10cSrcweir {for (DeclList::const_iterator i(getIteratorBegin()); i != getIteratorEnd(); 185cdf0e10cSrcweir ++i) 186cdf0e10cSrcweir { 187cdf0e10cSrcweir switch ((*i)->getNodeType()) { 188cdf0e10cSrcweir case NT_interface: 189cdf0e10cSrcweir case NT_typedef: 190cdf0e10cSrcweir version = TYPEREG_VERSION_1; 191cdf0e10cSrcweir OSL_ASSERT(superName.getLength() == 0); 192cdf0e10cSrcweir superName = (*i)->getRelativName(); 193cdf0e10cSrcweir break; 194cdf0e10cSrcweir 195cdf0e10cSrcweir case NT_operation: 196cdf0e10cSrcweir OSL_ASSERT(getNodeType() == NT_service); 197cdf0e10cSrcweir ++constructors; 198cdf0e10cSrcweir break; 199cdf0e10cSrcweir 200cdf0e10cSrcweir case NT_property: 201cdf0e10cSrcweir OSL_ASSERT(getNodeType() == NT_service); 202cdf0e10cSrcweir ++properties; 203cdf0e10cSrcweir break; 204cdf0e10cSrcweir 205cdf0e10cSrcweir case NT_service_member: 206cdf0e10cSrcweir if (getNodeType() == NT_singleton) { 207cdf0e10cSrcweir OSL_ASSERT(superName.getLength() == 0); 208cdf0e10cSrcweir superName = ((AstServiceMember *)(*i))-> 209cdf0e10cSrcweir getRealService()->getRelativName(); 210cdf0e10cSrcweir break; 211cdf0e10cSrcweir } 212cdf0e10cSrcweir case NT_interface_member: 213cdf0e10cSrcweir case NT_observes: 214cdf0e10cSrcweir case NT_needs: 215cdf0e10cSrcweir OSL_ASSERT(getNodeType() == NT_service); 216cdf0e10cSrcweir ++references; 217cdf0e10cSrcweir break; 218cdf0e10cSrcweir 219cdf0e10cSrcweir default: 220cdf0e10cSrcweir OSL_ASSERT(false); 221cdf0e10cSrcweir break; 222cdf0e10cSrcweir } 223cdf0e10cSrcweir }} 224cdf0e10cSrcweir OSL_ASSERT(constructors == 0 || !m_defaultConstructor); 225cdf0e10cSrcweir if (m_defaultConstructor) { 226cdf0e10cSrcweir constructors = 1; 227cdf0e10cSrcweir } 228cdf0e10cSrcweir RegistryKey localKey; 229cdf0e10cSrcweir if (rKey.createKey( 230cdf0e10cSrcweir rtl::OStringToOUString(getFullName(), RTL_TEXTENCODING_UTF8), 231cdf0e10cSrcweir localKey)) { 232cdf0e10cSrcweir fprintf( 233cdf0e10cSrcweir stderr, "%s: warning, could not create key '%s' in '%s'\n", 234cdf0e10cSrcweir idlc()->getOptions()->getProgramName().getStr(), 235cdf0e10cSrcweir getFullName().getStr(), 236cdf0e10cSrcweir rtl::OUStringToOString( 237cdf0e10cSrcweir rKey.getRegistryName(), RTL_TEXTENCODING_UTF8).getStr()); 238cdf0e10cSrcweir return false; 239cdf0e10cSrcweir } 240cdf0e10cSrcweir typereg::Writer writer( 241cdf0e10cSrcweir version, getDocumentation(), emptyStr, 242cdf0e10cSrcweir getNodeType() == NT_singleton ? RT_TYPE_SINGLETON : RT_TYPE_SERVICE, 243cdf0e10cSrcweir m_bPublished, 244cdf0e10cSrcweir rtl::OStringToOUString(getRelativName(), RTL_TEXTENCODING_UTF8), 245cdf0e10cSrcweir superName.getLength() == 0 ? 0 : 1, properties, constructors, 246cdf0e10cSrcweir references); 247cdf0e10cSrcweir if (superName.getLength() != 0) { 248cdf0e10cSrcweir writer.setSuperTypeName( 249cdf0e10cSrcweir 0, rtl::OStringToOUString(superName, RTL_TEXTENCODING_UTF8)); 250cdf0e10cSrcweir } 251cdf0e10cSrcweir sal_uInt16 constructorIndex = 0; 252cdf0e10cSrcweir sal_uInt16 propertyIndex = 0; 253cdf0e10cSrcweir sal_uInt16 referenceIndex = 0; 254cdf0e10cSrcweir {for (DeclList::const_iterator i(getIteratorBegin()); i != getIteratorEnd(); 255cdf0e10cSrcweir ++i) 256cdf0e10cSrcweir { 257cdf0e10cSrcweir switch ((*i)->getNodeType()) { 258cdf0e10cSrcweir case NT_operation: 259cdf0e10cSrcweir // static_cast< AstOperation * >(*i)->dumpBlob( 260cdf0e10cSrcweir ((AstOperation *)(*i))->dumpBlob( 261cdf0e10cSrcweir writer, constructorIndex++); 262cdf0e10cSrcweir break; 263cdf0e10cSrcweir 264cdf0e10cSrcweir case NT_property: 265cdf0e10cSrcweir // static_cast< AstAttribute * >(*i)->dumpBlob( 266cdf0e10cSrcweir ((AstAttribute *)(*i))->dumpBlob( 267cdf0e10cSrcweir writer, propertyIndex++, 0); 268cdf0e10cSrcweir break; 269cdf0e10cSrcweir 270cdf0e10cSrcweir case NT_interface_member: 271cdf0e10cSrcweir { 272cdf0e10cSrcweir // AstInterfaceMember * decl = static_cast< AstInterfaceMember *>(*i); 273cdf0e10cSrcweir AstInterfaceMember * decl = (AstInterfaceMember *)(*i); 274cdf0e10cSrcweir writer.setReferenceData( 275cdf0e10cSrcweir referenceIndex++, decl->getDocumentation(), RT_REF_SUPPORTS, 276cdf0e10cSrcweir (decl->isOptional() 277cdf0e10cSrcweir ? RT_ACCESS_OPTIONAL : RT_ACCESS_INVALID), 278cdf0e10cSrcweir rtl::OStringToOUString( 279cdf0e10cSrcweir decl->getRealInterface()->getRelativName(), 280cdf0e10cSrcweir RTL_TEXTENCODING_UTF8)); 281cdf0e10cSrcweir break; 282cdf0e10cSrcweir } 283cdf0e10cSrcweir 284cdf0e10cSrcweir case NT_service_member: 285cdf0e10cSrcweir if (getNodeType() == NT_service) { 286cdf0e10cSrcweir // AstServiceMember * decl = static_cast< AstServiceMember * >(*i); 287cdf0e10cSrcweir AstServiceMember * decl = (AstServiceMember *)(*i); 288cdf0e10cSrcweir writer.setReferenceData( 289cdf0e10cSrcweir referenceIndex++, decl->getDocumentation(), RT_REF_EXPORTS, 290cdf0e10cSrcweir (decl->isOptional() 291cdf0e10cSrcweir ? RT_ACCESS_OPTIONAL : RT_ACCESS_INVALID), 292cdf0e10cSrcweir rtl::OStringToOUString( 293cdf0e10cSrcweir decl->getRealService()->getRelativName(), 294cdf0e10cSrcweir RTL_TEXTENCODING_UTF8)); 295cdf0e10cSrcweir } 296cdf0e10cSrcweir break; 297cdf0e10cSrcweir 298cdf0e10cSrcweir case NT_observes: 299cdf0e10cSrcweir { 300cdf0e10cSrcweir // AstObserves * decl = static_cast< AstObserves * >(*i); 301cdf0e10cSrcweir AstObserves * decl = (AstObserves *)(*i); 302cdf0e10cSrcweir writer.setReferenceData( 303cdf0e10cSrcweir referenceIndex++, decl->getDocumentation(), RT_REF_OBSERVES, 304cdf0e10cSrcweir RT_ACCESS_INVALID, 305cdf0e10cSrcweir rtl::OStringToOUString( 306cdf0e10cSrcweir decl->getRealInterface()->getRelativName(), 307cdf0e10cSrcweir RTL_TEXTENCODING_UTF8)); 308cdf0e10cSrcweir break; 309cdf0e10cSrcweir } 310cdf0e10cSrcweir 311cdf0e10cSrcweir case NT_needs: 312cdf0e10cSrcweir { 313cdf0e10cSrcweir // AstNeeds * decl = static_cast< AstNeeds * >(*i); 314cdf0e10cSrcweir AstNeeds * decl = (AstNeeds *)(*i); 315cdf0e10cSrcweir writer.setReferenceData( 316cdf0e10cSrcweir referenceIndex++, decl->getDocumentation(), RT_REF_NEEDS, 317cdf0e10cSrcweir RT_ACCESS_INVALID, 318cdf0e10cSrcweir rtl::OStringToOUString( 319cdf0e10cSrcweir decl->getRealService()->getRelativName(), 320cdf0e10cSrcweir RTL_TEXTENCODING_UTF8)); 321cdf0e10cSrcweir break; 322cdf0e10cSrcweir } 323cdf0e10cSrcweir 324cdf0e10cSrcweir default: 325cdf0e10cSrcweir OSL_ASSERT( 326cdf0e10cSrcweir (*i)->getNodeType() == NT_interface 327cdf0e10cSrcweir || (*i)->getNodeType() == NT_typedef); 328cdf0e10cSrcweir break; 329cdf0e10cSrcweir } 330cdf0e10cSrcweir }} 331cdf0e10cSrcweir if (m_defaultConstructor) { 332cdf0e10cSrcweir writer.setMethodData( 333cdf0e10cSrcweir constructorIndex++, emptyStr, RT_MODE_TWOWAY, 334cdf0e10cSrcweir emptyStr, rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("void")), 335cdf0e10cSrcweir 0, 0); 336cdf0e10cSrcweir } 337cdf0e10cSrcweir sal_uInt32 size; 338cdf0e10cSrcweir void const * blob = writer.getBlob(&size); 339cdf0e10cSrcweir if (localKey.setValue( 340cdf0e10cSrcweir emptyStr, RG_VALUETYPE_BINARY, const_cast< void * >(blob), 341cdf0e10cSrcweir size)) 342cdf0e10cSrcweir { 343cdf0e10cSrcweir fprintf( 344cdf0e10cSrcweir stderr, "%s: warning, could not set value of key \"%s\" in %s\n", 345cdf0e10cSrcweir idlc()->getOptions()->getProgramName().getStr(), 346cdf0e10cSrcweir getFullName().getStr(), 347cdf0e10cSrcweir rtl::OUStringToOString( 348cdf0e10cSrcweir localKey.getRegistryName(), RTL_TEXTENCODING_UTF8).getStr()); 349cdf0e10cSrcweir return false; 350cdf0e10cSrcweir } 351cdf0e10cSrcweir return true; 352cdf0e10cSrcweir } 353cdf0e10cSrcweir 354cdf0e10cSrcweir sal_Bool AstAttribute::dumpBlob( 355cdf0e10cSrcweir typereg::Writer & rBlob, sal_uInt16 index, sal_uInt16 * methodIndex) 356cdf0e10cSrcweir { 357cdf0e10cSrcweir RTFieldAccess accessMode = RT_ACCESS_INVALID; 358cdf0e10cSrcweir 359cdf0e10cSrcweir if (isReadonly()) 360cdf0e10cSrcweir { 361cdf0e10cSrcweir accessMode |= RT_ACCESS_READONLY; 362cdf0e10cSrcweir } else 363cdf0e10cSrcweir { 364cdf0e10cSrcweir accessMode |= RT_ACCESS_READWRITE; 365cdf0e10cSrcweir } 366cdf0e10cSrcweir if (isOptional()) 367cdf0e10cSrcweir { 368cdf0e10cSrcweir accessMode |= RT_ACCESS_OPTIONAL; 369cdf0e10cSrcweir } 370cdf0e10cSrcweir if (isBound()) 371cdf0e10cSrcweir { 372cdf0e10cSrcweir accessMode |= RT_ACCESS_BOUND; 373cdf0e10cSrcweir } 374cdf0e10cSrcweir if (isMayBeVoid()) 375cdf0e10cSrcweir { 376cdf0e10cSrcweir accessMode |= RT_ACCESS_MAYBEVOID; 377cdf0e10cSrcweir } 378cdf0e10cSrcweir if (isConstrained()) 379cdf0e10cSrcweir { 380cdf0e10cSrcweir accessMode |= RT_ACCESS_CONSTRAINED; 381cdf0e10cSrcweir } 382cdf0e10cSrcweir if (isTransient()) 383cdf0e10cSrcweir { 384cdf0e10cSrcweir accessMode |= RT_ACCESS_TRANSIENT; 385cdf0e10cSrcweir } 386cdf0e10cSrcweir if (isMayBeAmbiguous()) 387cdf0e10cSrcweir { 388cdf0e10cSrcweir accessMode |= RT_ACCESS_MAYBEAMBIGUOUS; 389cdf0e10cSrcweir } 390cdf0e10cSrcweir if (isMayBeDefault()) 391cdf0e10cSrcweir { 392cdf0e10cSrcweir accessMode |= RT_ACCESS_MAYBEDEFAULT; 393cdf0e10cSrcweir } 394cdf0e10cSrcweir if (isRemoveable()) 395cdf0e10cSrcweir { 396cdf0e10cSrcweir accessMode |= RT_ACCESS_REMOVEABLE; 397cdf0e10cSrcweir } 398cdf0e10cSrcweir 399cdf0e10cSrcweir OUString name(OStringToOUString(getLocalName(), RTL_TEXTENCODING_UTF8)); 400cdf0e10cSrcweir rBlob.setFieldData( 401cdf0e10cSrcweir index, getDocumentation(), OUString(), accessMode, name, 402cdf0e10cSrcweir OStringToOUString(getType()->getRelativName(), RTL_TEXTENCODING_UTF8), 403cdf0e10cSrcweir RTConstValue()); 404cdf0e10cSrcweir dumpExceptions( 405cdf0e10cSrcweir rBlob, m_getDocumentation, m_getExceptions, RT_MODE_ATTRIBUTE_GET, 406cdf0e10cSrcweir methodIndex); 407cdf0e10cSrcweir dumpExceptions( 408cdf0e10cSrcweir rBlob, m_setDocumentation, m_setExceptions, RT_MODE_ATTRIBUTE_SET, 409cdf0e10cSrcweir methodIndex); 410cdf0e10cSrcweir 411cdf0e10cSrcweir return sal_True; 412cdf0e10cSrcweir } 413cdf0e10cSrcweir 414cdf0e10cSrcweir void AstAttribute::dumpExceptions( 415cdf0e10cSrcweir typereg::Writer & writer, rtl::OUString const & documentation, 416cdf0e10cSrcweir DeclList const & exceptions, RTMethodMode flags, sal_uInt16 * methodIndex) 417cdf0e10cSrcweir { 418cdf0e10cSrcweir if (!exceptions.empty()) { 419cdf0e10cSrcweir OSL_ASSERT(methodIndex != 0); 420cdf0e10cSrcweir sal_uInt16 idx = (*methodIndex)++; 421cdf0e10cSrcweir // exceptions.size() <= SAL_MAX_UINT16 already checked in 422cdf0e10cSrcweir // AstInterface::dump: 423cdf0e10cSrcweir writer.setMethodData( 424cdf0e10cSrcweir idx, documentation, flags, 425cdf0e10cSrcweir OStringToOUString(getLocalName(), RTL_TEXTENCODING_UTF8), 426cdf0e10cSrcweir rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("void")), 0, 427cdf0e10cSrcweir static_cast< sal_uInt16 >(exceptions.size())); 428cdf0e10cSrcweir sal_uInt16 exceptionIndex = 0; 429cdf0e10cSrcweir for (DeclList::const_iterator i(exceptions.begin()); 430cdf0e10cSrcweir i != exceptions.end(); ++i) 431cdf0e10cSrcweir { 432cdf0e10cSrcweir writer.setMethodExceptionTypeName( 433cdf0e10cSrcweir idx, exceptionIndex++, 434cdf0e10cSrcweir rtl::OStringToOUString( 435cdf0e10cSrcweir (*i)->getRelativName(), RTL_TEXTENCODING_UTF8)); 436cdf0e10cSrcweir } 437cdf0e10cSrcweir } 438cdf0e10cSrcweir } 439cdf0e10cSrcweir 440cdf0e10cSrcweir const sal_Char* AstSequence::getRelativName() const 441cdf0e10cSrcweir { 442cdf0e10cSrcweir if ( !m_pRelativName ) 443cdf0e10cSrcweir { 444cdf0e10cSrcweir m_pRelativName = new OString("[]"); 445cdf0e10cSrcweir AstDeclaration const * pType = resolveTypedefs( m_pMemberType ); 446cdf0e10cSrcweir *m_pRelativName += pType->getRelativName(); 447cdf0e10cSrcweir } 448cdf0e10cSrcweir 449cdf0e10cSrcweir return m_pRelativName->getStr(); 450cdf0e10cSrcweir } 451