/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_cppuhelper.hxx" // The only purpose of this file is to workaround a problem in UNO: // Cppumaker and its brethren emit different implementations for // the same symbol by design (!) which is quite... unfortunate // and can confuse the heck out of dynamic linkers, debuggers, etc. // // For bootstrapping the comprehensive descriptions of some UNO types are needed. // The mechanism in this file makes sure that these comprehensive type // descriptions are used to prime the so-called "WeakMap". // // TODO: change cppumaker and its brethren to use different symbol names // for different implementations. In particular "cppu_detail_getUnoType" // should be divided into full, weak and mini implementations. // Types that are candidates for this special workaround are the ones mentioned // by the exceptions thrown from implbase_ex.cxx's __queryDeepNoXInterface() // that also need to added to the makefile's UNOTYPES define #define cppu_detail_getUnoType cppu_full_getUnoType #define InitTypeDesc(T) {(void)cppu_full_getUnoType(static_cast< T * >(NULL));} // NOTE: the cppuhelper part in the include paths below ensures that the type descriptions // are comprehensive descriptions and not some weak descriptions e.g. from solver #include "cppuhelper/com/sun/star/lang/XComponent.hpp" #include "cppuhelper/com/sun/star/lang/XInitialization.hpp" #include "cppuhelper/com/sun/star/lang/XSingleServiceFactory.hpp" #include "cppuhelper/com/sun/star/lang/XSingleComponentFactory.hpp" #include "cppuhelper/com/sun/star/lang/XMultiServiceFactory.hpp" #include "cppuhelper/com/sun/star/lang/XMultiComponentFactory.hpp" #include "cppuhelper/com/sun/star/lang/XServiceInfo.hpp" #include "cppuhelper/com/sun/star/lang/XEventListener.hpp" #include "cppuhelper/com/sun/star/lang/XTypeProvider.hpp" #include "cppuhelper/com/sun/star/lang/XUnoTunnel.hpp" #include "cppuhelper/com/sun/star/lang/DisposedException.hpp" #include "cppuhelper/com/sun/star/uno/DeploymentException.hpp" #include "cppuhelper/com/sun/star/uno/XWeak.hpp" #include "cppuhelper/com/sun/star/uno/XCurrentContext.hpp" #include "cppuhelper/com/sun/star/uno/XComponentContext.hpp" #include "cppuhelper/com/sun/star/uno/RuntimeException.hpp" #include "cppuhelper/com/sun/star/util/XMacroExpander.hpp" #include "cppuhelper/com/sun/star/beans/PropertyValue.hpp" #include "cppuhelper/com/sun/star/beans/XPropertySet.hpp" #include "cppuhelper/com/sun/star/beans/XMultiPropertySet.hpp" #include "cppuhelper/com/sun/star/container/XContentEnumerationAccess.hpp" #include "cppuhelper/com/sun/star/container/XEnumerationAccess.hpp" #include "cppuhelper/com/sun/star/container/XEnumeration.hpp" #include "cppuhelper/com/sun/star/container/XNameAccess.hpp" #include "cppuhelper/com/sun/star/container/XNameReplace.hpp" #include "cppuhelper/com/sun/star/container/XNameContainer.hpp" #include "cppuhelper/com/sun/star/container/XHierarchicalNameAccess.hpp" #include "cppuhelper/com/sun/star/container/XSet.hpp" #include "cppuhelper/com/sun/star/bridge/XUnoUrlResolver.hpp" #include "cppuhelper/com/sun/star/io/IOException.hpp" #include "cppuhelper/com/sun/star/io/FilePermission.hpp" #include "cppuhelper/com/sun/star/security/RuntimePermission.hpp" #include "cppuhelper/com/sun/star/loader/XImplementationLoader.hpp" #include "cppuhelper/com/sun/star/security/XAccessController.hpp" #include "cppuhelper/com/sun/star/registry/XRegistryKey.hpp" #include "cppuhelper/com/sun/star/registry/XSimpleRegistry.hpp" #include "cppuhelper/com/sun/star/reflection/XTypeDescription.hpp" #include "cppuhelper/com/sun/star/reflection/XEnumTypeDescription.hpp" #include "cppuhelper/com/sun/star/reflection/XArrayTypeDescription.hpp" #include "cppuhelper/com/sun/star/reflection/XStructTypeDescription.hpp" #include "cppuhelper/com/sun/star/reflection/XUnionTypeDescription.hpp" #include "cppuhelper/com/sun/star/reflection/XCompoundTypeDescription.hpp" #include "cppuhelper/com/sun/star/reflection/XIndirectTypeDescription.hpp" #include "cppuhelper/com/sun/star/reflection/XInterfaceTypeDescription.hpp" #include "cppuhelper/com/sun/star/reflection/XInterfaceMemberTypeDescription.hpp" #include "cppuhelper/com/sun/star/reflection/XInterfaceMethodTypeDescription.hpp" #include "cppuhelper/com/sun/star/reflection/XMethodParameter.hpp" void primeWeakMap( void) { InitTypeDesc( com::sun::star::lang::XComponent ); InitTypeDesc( com::sun::star::lang::XInitialization ); InitTypeDesc( com::sun::star::lang::XSingleServiceFactory ); InitTypeDesc( com::sun::star::lang::XSingleComponentFactory ); InitTypeDesc( com::sun::star::lang::XMultiServiceFactory ); InitTypeDesc( com::sun::star::lang::XMultiComponentFactory ); InitTypeDesc( com::sun::star::lang::XServiceInfo ); InitTypeDesc( com::sun::star::lang::XEventListener ); InitTypeDesc( com::sun::star::lang::XTypeProvider ); InitTypeDesc( com::sun::star::lang::XUnoTunnel ); InitTypeDesc( com::sun::star::lang::DisposedException ); InitTypeDesc( com::sun::star::uno::XWeak ); InitTypeDesc( com::sun::star::uno::DeploymentException ); InitTypeDesc( com::sun::star::uno::XCurrentContext ); InitTypeDesc( com::sun::star::uno::XComponentContext ); InitTypeDesc( com::sun::star::uno::RuntimeException ); InitTypeDesc( com::sun::star::util::XMacroExpander ); InitTypeDesc( com::sun::star::beans::PropertyState ); InitTypeDesc( com::sun::star::beans::PropertyValue ); InitTypeDesc( com::sun::star::beans::XPropertySet ); InitTypeDesc( com::sun::star::beans::XMultiPropertySet ); InitTypeDesc( com::sun::star::container::XElementAccess ); InitTypeDesc( com::sun::star::container::XEnumeration ); InitTypeDesc( com::sun::star::container::XEnumerationAccess ); InitTypeDesc( com::sun::star::container::XContentEnumerationAccess ); InitTypeDesc( com::sun::star::container::XHierarchicalNameAccess ); InitTypeDesc( com::sun::star::container::XNameAccess ); InitTypeDesc( com::sun::star::container::XNameReplace ); InitTypeDesc( com::sun::star::container::XNameContainer ); InitTypeDesc( com::sun::star::container::XSet ); InitTypeDesc( com::sun::star::io::IOException ); InitTypeDesc( com::sun::star::io::FilePermission ); InitTypeDesc( com::sun::star::security::XAccessController ); InitTypeDesc( com::sun::star::security::RuntimePermission); InitTypeDesc( com::sun::star::loader::XImplementationLoader ); InitTypeDesc( com::sun::star::bridge::XUnoUrlResolver ); InitTypeDesc( com::sun::star::registry::XRegistryKey ); InitTypeDesc( com::sun::star::registry::XSimpleRegistry ); InitTypeDesc( com::sun::star::reflection::XTypeDescription ); InitTypeDesc( com::sun::star::reflection::XEnumTypeDescription ); InitTypeDesc( com::sun::star::reflection::XArrayTypeDescription ); InitTypeDesc( com::sun::star::reflection::XStructTypeDescription ); InitTypeDesc( com::sun::star::reflection::XUnionTypeDescription ); InitTypeDesc( com::sun::star::reflection::XCompoundTypeDescription ); InitTypeDesc( com::sun::star::reflection::XIndirectTypeDescription ); InitTypeDesc( com::sun::star::reflection::XInterfaceTypeDescription ); InitTypeDesc( com::sun::star::reflection::XInterfaceMemberTypeDescription ); InitTypeDesc( com::sun::star::reflection::XInterfaceMethodTypeDescription ); InitTypeDesc( com::sun::star::reflection::XMethodParameter ); }