[Libreoffice-commits] core.git: cppuhelper/source desktop/Library_sofficeapp.mk desktop/source include/cppuhelper

Stephan Bergmann sbergman at redhat.com
Fri Feb 26 12:37:31 UTC 2016


 cppuhelper/source/defaultbootstrap.cxx |   23 ---
 cppuhelper/source/gcc3.map             |    5 
 cppuhelper/source/servicemanager.cxx   |  239 +++++++++++++++++----------------
 cppuhelper/source/servicemanager.hxx   |   17 +-
 desktop/Library_sofficeapp.mk          |    1 
 desktop/source/lib/init.cxx            |   24 ++-
 include/cppuhelper/detail/preinit.hxx  |   37 -----
 7 files changed, 159 insertions(+), 187 deletions(-)

New commits:
commit 79c11bb56ecf9f99250387ee59559f7472028f05
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Thu Feb 25 15:33:22 2016 +0100

    Use an XInitialization-based channel to request service mgr pre-init
    
    ...instead of private cppu::preInitBootstrap function
    
    Change-Id: Id0e6fcf721b697c993e5acffaf7836452cfa9750
    Reviewed-on: https://gerrit.libreoffice.org/22699
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Tor Lillqvist <tml at collabora.com>
    Tested-by: Tor Lillqvist <tml at collabora.com>

diff --git a/cppuhelper/source/defaultbootstrap.cxx b/cppuhelper/source/defaultbootstrap.cxx
index 9ff68e1..bede6b5 100644
--- a/cppuhelper/source/defaultbootstrap.cxx
+++ b/cppuhelper/source/defaultbootstrap.cxx
@@ -18,7 +18,6 @@
 #include <com/sun/star/uno/XComponentContext.hpp>
 #include <com/sun/star/lang/XSingleComponentFactory.hpp>
 #include <cppuhelper/bootstrap.hxx>
-#include <cppuhelper/detail/preinit.hxx>
 #include <cppuhelper/component_context.hxx>
 #include <rtl/bootstrap.hxx>
 #include <rtl/ref.hxx>
@@ -108,26 +107,4 @@ cppu::defaultBootstrap_InitialComponentContext()
     return defaultBootstrap_InitialComponentContext(getUnoIniUri());
 }
 
-void
-cppu::preInitBootstrap(css::uno::Reference< css::uno::XComponentContext > const & xContext)
-{
-    if (!xContext.is())
-        throw css::uno::DeploymentException("preInit: XComponentContext is not created");
-
-    css::uno::Reference< css::uno::XInterface > xService;
-    xContext->getValueByName("/singletons/com.sun.star.lang.theServiceManager") >>= xService;
-    if (!xService.is())
-        throw css::uno::DeploymentException("preInit: XMultiComponentFactory is not created");
-
-    rtl::Reference<cppuhelper::ServiceManager> aService(reinterpret_cast<cppuhelper::ServiceManager*>(xService.get()));
-
-    // pre-requisites:
-    // In order to load implementations and invoke
-    // component factory it is required:
-    // 1) defaultBootstrap_InitialComponentContext()
-    // 2) comphelper::setProcessServiceFactory(xSFactory);
-    // 3) InitVCL()
-    aService->loadAllImplementations();
-}
-
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/cppuhelper/source/gcc3.map b/cppuhelper/source/gcc3.map
index 658b3ca..12c29834a 100644
--- a/cppuhelper/source/gcc3.map
+++ b/cppuhelper/source/gcc3.map
@@ -436,8 +436,3 @@ GLIBCXX_3.4 {
         _ZGVNSt7num_put*; _ZNSt7num_put*;
         _ZNSs4_Rep20_S_empty_rep_storageE;
 };
-
-PRIVATE_1.0 { # LibO 5.2
-    global:
-        _ZN4cppu16preInitBootstrapERKN3com3sun4star3uno9ReferenceINS3_17XComponentContextEEE;
-};
diff --git a/cppuhelper/source/servicemanager.cxx b/cppuhelper/source/servicemanager.cxx
index 0f709ef..2c29bb6 100644
--- a/cppuhelper/source/servicemanager.cxx
+++ b/cppuhelper/source/servicemanager.cxx
@@ -878,118 +878,6 @@ void cppuhelper::ServiceManager::loadImplementation(
     }
 }
 
-void cppuhelper::ServiceManager::loadAllImplementations()
-{
-#ifdef DISABLE_DYNLOADING
-    abort();
-#else
-    rtl::OUString aUri;
-    osl::MutexGuard g(rBHelper.rMutex);
-    css::uno::Environment aSourceEnv(css::uno::Environment::getCurrent());
-
-    // loop all implementations
-    for (Data::NamedImplementations::const_iterator iterator(
-            data_.namedImplementations.begin());
-            iterator != data_.namedImplementations.end(); ++iterator)
-    {
-        try
-        {
-            // expand absolute URI implementation component library
-            aUri = cppu::bootstrap_expandUri(iterator->second->info->uri);
-        }
-        catch (css::lang::IllegalArgumentException& aError)
-        {
-            throw css::uno::DeploymentException(
-                "Cannot expand URI" + iterator->second->info->uri + ": " + aError.Message,
-                static_cast< cppu::OWeakObject * >(this));
-        }
-
-        if (iterator->second->info->loader == "com.sun.star.loader.SharedLibrary" &&
-            iterator->second->status != Data::Implementation::STATUS_LOADED)
-        {
-            // load component library
-            osl::Module aModule(aUri, SAL_LOADMODULE_NOW | SAL_LOADMODULE_GLOBAL);
-            SAL_INFO("lok", "loaded component library " << aUri << ( aModule.is() ? " ok" : " no"));
-
-            if (aModule.is() &&
-                !iterator->second->info->environment.isEmpty())
-            {
-                OUString aSymFactory;
-                oslGenericFunction fpFactory;
-                css::uno::Environment aTargetEnv;
-                css::uno::Reference<css::uno::XInterface> xFactory;
-
-                if(iterator->second->info->constructor.isEmpty())
-                {
-                    // expand full name component factory symbol
-                    if (iterator->second->info->prefix == "direct")
-                        aSymFactory = iterator->second->info->name.replace('.', '_') + "_" COMPONENT_GETFACTORY;
-                    else if (!iterator->second->info->prefix.isEmpty())
-                        aSymFactory = iterator->second->info->prefix + "_" COMPONENT_GETFACTORY;
-                    else
-                        aSymFactory = COMPONENT_GETFACTORY;
-
-                    // get function symbol component factory
-                    fpFactory = aModule.getFunctionSymbol(aSymFactory);
-                    if (fpFactory == nullptr)
-                    {
-                        throw css::loader::CannotActivateFactoryException(
-                            ("no factory symbol \"" + aSymFactory + "\" in component library :" + aUri),
-                            css::uno::Reference<css::uno::XInterface>());
-                    }
-
-                    aTargetEnv = cppuhelper::detail::getEnvironment(iterator->second->info->environment, iterator->second->info->name);
-                    component_getFactoryFunc fpComponentFactory = reinterpret_cast<component_getFactoryFunc>(fpFactory);
-
-                    if (aSourceEnv.get() == aTargetEnv.get())
-                    {
-                        // invoke function component factory
-                        OString aImpl(rtl::OUStringToOString(iterator->second->info->name, RTL_TEXTENCODING_ASCII_US));
-                        xFactory.set(css::uno::Reference<css::uno::XInterface>(static_cast<css::uno::XInterface *>(
-                            (*fpComponentFactory)(aImpl.getStr(), this, nullptr)), SAL_NO_ACQUIRE));
-                    }
-                }
-                else
-                {
-                    // get function symbol component factory
-                    fpFactory = aModule.getFunctionSymbol(iterator->second->info->constructor);
-                }
-
-                css::uno::Reference<css::lang::XSingleComponentFactory> xSCFactory;
-                css::uno::Reference<css::lang::XSingleServiceFactory> xSSFactory;
-
-                // query interface XSingleComponentFactory or XSingleServiceFactory
-                if (xFactory.is())
-                {
-                    xSCFactory.set(xFactory, css::uno::UNO_QUERY);
-                    if (!xSCFactory.is())
-                    {
-                        xSSFactory.set(xFactory, css::uno::UNO_QUERY);
-                        if (!xSSFactory.is())
-                        {
-                            throw css::uno::DeploymentException(
-                                ("Implementation " + iterator->second->info->name
-                                  + " does not provide a constructor or factory"),
-                                static_cast< cppu::OWeakObject * >(this));
-                        }
-                    }
-                }
-
-                if (!iterator->second->info->constructor.isEmpty() && fpFactory)
-                    iterator->second->constructor = reinterpret_cast<ImplementationConstructorFn *>(fpFactory);
-
-                iterator->second->factory1 = xSCFactory;
-                iterator->second->factory2 = xSSFactory;
-                iterator->second->status = Data::Implementation::STATUS_LOADED;
-
-            }
-            // leak aModule
-            aModule.release();
-        }
-    }
-#endif
-}
-
 void cppuhelper::ServiceManager::disposing() {
     std::vector< css::uno::Reference<css::lang::XComponent> > sngls;
     std::vector< css::uno::Reference< css::lang::XComponent > > comps;
@@ -1051,6 +939,22 @@ void cppuhelper::ServiceManager::disposing() {
     }
 }
 
+void cppuhelper::ServiceManager::initialize(
+    css::uno::Sequence<css::uno::Any> const & aArguments)
+    throw (css::uno::Exception, css::uno::RuntimeException, std::exception)
+{
+    OUString arg;
+    if (aArguments.getLength() == 1 && (aArguments[0] >>= arg)
+        && arg == "preload")
+    {
+        preloadImplementations();
+    } else {
+        throw css::lang::IllegalArgumentException(
+            "invalid ServiceManager::initialize argument",
+            css::uno::Reference<css::uno::XInterface>(), 0);
+    }
+}
+
 rtl::OUString cppuhelper::ServiceManager::getImplementationName()
     throw (css::uno::RuntimeException, std::exception)
 {
@@ -1989,4 +1893,115 @@ cppuhelper::ServiceManager::findServiceImplementation(
     return impl;
 }
 
+void cppuhelper::ServiceManager::preloadImplementations() {
+#ifdef DISABLE_DYNLOADING
+    abort();
+#else
+    rtl::OUString aUri;
+    osl::MutexGuard g(rBHelper.rMutex);
+    css::uno::Environment aSourceEnv(css::uno::Environment::getCurrent());
+
+    // loop all implementations
+    for (Data::NamedImplementations::const_iterator iterator(
+            data_.namedImplementations.begin());
+            iterator != data_.namedImplementations.end(); ++iterator)
+    {
+        try
+        {
+            // expand absolute URI implementation component library
+            aUri = cppu::bootstrap_expandUri(iterator->second->info->uri);
+        }
+        catch (css::lang::IllegalArgumentException& aError)
+        {
+            throw css::uno::DeploymentException(
+                "Cannot expand URI" + iterator->second->info->uri + ": " + aError.Message,
+                static_cast< cppu::OWeakObject * >(this));
+        }
+
+        if (iterator->second->info->loader == "com.sun.star.loader.SharedLibrary" &&
+            iterator->second->status != Data::Implementation::STATUS_LOADED)
+        {
+            // load component library
+            osl::Module aModule(aUri, SAL_LOADMODULE_NOW | SAL_LOADMODULE_GLOBAL);
+            SAL_INFO("lok", "loaded component library " << aUri << ( aModule.is() ? " ok" : " no"));
+
+            if (aModule.is() &&
+                !iterator->second->info->environment.isEmpty())
+            {
+                OUString aSymFactory;
+                oslGenericFunction fpFactory;
+                css::uno::Environment aTargetEnv;
+                css::uno::Reference<css::uno::XInterface> xFactory;
+
+                if(iterator->second->info->constructor.isEmpty())
+                {
+                    // expand full name component factory symbol
+                    if (iterator->second->info->prefix == "direct")
+                        aSymFactory = iterator->second->info->name.replace('.', '_') + "_" COMPONENT_GETFACTORY;
+                    else if (!iterator->second->info->prefix.isEmpty())
+                        aSymFactory = iterator->second->info->prefix + "_" COMPONENT_GETFACTORY;
+                    else
+                        aSymFactory = COMPONENT_GETFACTORY;
+
+                    // get function symbol component factory
+                    fpFactory = aModule.getFunctionSymbol(aSymFactory);
+                    if (fpFactory == nullptr)
+                    {
+                        throw css::loader::CannotActivateFactoryException(
+                            ("no factory symbol \"" + aSymFactory + "\" in component library :" + aUri),
+                            css::uno::Reference<css::uno::XInterface>());
+                    }
+
+                    aTargetEnv = cppuhelper::detail::getEnvironment(iterator->second->info->environment, iterator->second->info->name);
+                    component_getFactoryFunc fpComponentFactory = reinterpret_cast<component_getFactoryFunc>(fpFactory);
+
+                    if (aSourceEnv.get() == aTargetEnv.get())
+                    {
+                        // invoke function component factory
+                        OString aImpl(rtl::OUStringToOString(iterator->second->info->name, RTL_TEXTENCODING_ASCII_US));
+                        xFactory.set(css::uno::Reference<css::uno::XInterface>(static_cast<css::uno::XInterface *>(
+                            (*fpComponentFactory)(aImpl.getStr(), this, nullptr)), SAL_NO_ACQUIRE));
+                    }
+                }
+                else
+                {
+                    // get function symbol component factory
+                    fpFactory = aModule.getFunctionSymbol(iterator->second->info->constructor);
+                }
+
+                css::uno::Reference<css::lang::XSingleComponentFactory> xSCFactory;
+                css::uno::Reference<css::lang::XSingleServiceFactory> xSSFactory;
+
+                // query interface XSingleComponentFactory or XSingleServiceFactory
+                if (xFactory.is())
+                {
+                    xSCFactory.set(xFactory, css::uno::UNO_QUERY);
+                    if (!xSCFactory.is())
+                    {
+                        xSSFactory.set(xFactory, css::uno::UNO_QUERY);
+                        if (!xSSFactory.is())
+                        {
+                            throw css::uno::DeploymentException(
+                                ("Implementation " + iterator->second->info->name
+                                  + " does not provide a constructor or factory"),
+                                static_cast< cppu::OWeakObject * >(this));
+                        }
+                    }
+                }
+
+                if (!iterator->second->info->constructor.isEmpty() && fpFactory)
+                    iterator->second->constructor = reinterpret_cast<ImplementationConstructorFn *>(fpFactory);
+
+                iterator->second->factory1 = xSCFactory;
+                iterator->second->factory2 = xSSFactory;
+                iterator->second->status = Data::Implementation::STATUS_LOADED;
+
+            }
+            // leak aModule
+            aModule.release();
+        }
+    }
+#endif
+}
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/cppuhelper/source/servicemanager.hxx b/cppuhelper/source/servicemanager.hxx
index 7e8f4e6..9a01006 100644
--- a/cppuhelper/source/servicemanager.hxx
+++ b/cppuhelper/source/servicemanager.hxx
@@ -23,6 +23,7 @@
 #include <com/sun/star/container/XContentEnumerationAccess.hpp>
 #include <com/sun/star/container/XSet.hpp>
 #include <com/sun/star/lang/XEventListener.hpp>
+#include <com/sun/star/lang/XInitialization.hpp>
 #include <com/sun/star/lang/XMultiComponentFactory.hpp>
 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
 #include <com/sun/star/lang/XServiceInfo.hpp>
@@ -30,7 +31,7 @@
 #include <com/sun/star/uno/XComponentContext.hpp>
 #include <com/sun/star/uno/Reference.hxx>
 #include <cppuhelper/basemutex.hxx>
-#include <cppuhelper/compbase8.hxx>
+#include <cppuhelper/compbase.hxx>
 #include <osl/mutex.hxx>
 #include <registry/registry.hxx>
 #include <rtl/ustring.hxx>
@@ -50,11 +51,12 @@ typedef css::uno::XInterface * SAL_CALL ImplementationConstructorFn(
 
 }
 
-typedef cppu::WeakComponentImplHelper8<
+typedef cppu::WeakComponentImplHelper<
     css::lang::XServiceInfo, css::lang::XMultiServiceFactory,
     css::lang::XMultiComponentFactory, css::container::XSet,
     css::container::XContentEnumerationAccess, css::beans::XPropertySet,
-    css::beans::XPropertySetInfo, css::lang::XEventListener >
+    css::beans::XPropertySetInfo, css::lang::XEventListener,
+    css::lang::XInitialization>
 ServiceManagerBase;
 
 class ServiceManager:
@@ -203,8 +205,6 @@ public:
         css::uno::Reference< css::uno::XComponentContext > const & context,
         std::shared_ptr< Data::Implementation > & implementation);
 
-    void loadAllImplementations();
-
 private:
     virtual ~ServiceManager();
 
@@ -333,6 +333,11 @@ private:
     virtual void SAL_CALL disposing(css::lang::EventObject const & Source)
         throw (css::uno::RuntimeException, std::exception) override;
 
+    virtual void SAL_CALL initialize(
+        css::uno::Sequence<css::uno::Any> const & aArguments)
+        throw (css::uno::Exception, css::uno::RuntimeException, std::exception)
+        override;
+
     // needs to be called with rBHelper.rMutex locked:
     bool isDisposed() { return rBHelper.bDisposed || rBHelper.bInDispose; }
 
@@ -377,6 +382,8 @@ private:
         css::uno::Reference< css::uno::XComponentContext > const & context,
         rtl::OUString const & specifier);
 
+    void preloadImplementations();
+
     css::uno::Reference< css::uno::XComponentContext > context_;
     Data data_;
 };
diff --git a/desktop/Library_sofficeapp.mk b/desktop/Library_sofficeapp.mk
index c7e1e69..99fa979 100644
--- a/desktop/Library_sofficeapp.mk
+++ b/desktop/Library_sofficeapp.mk
@@ -59,7 +59,6 @@ $(eval $(call gb_Library_use_libraries,sofficeapp,\
     ucbhelper \
     utl \
     vcl \
-    xmlreader \
 	$(gb_UWINAPI) \
 ))
 
diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx
index 5eb2aa1..829254c 100644
--- a/desktop/source/lib/init.cxx
+++ b/desktop/source/lib/init.cxx
@@ -28,7 +28,6 @@
 #include <rtl/strbuf.hxx>
 #include <rtl/uri.hxx>
 #include <cppuhelper/bootstrap.hxx>
-#include <cppuhelper/detail/preinit.hxx>
 #include <comphelper/dispatchcommand.hxx>
 #include <comphelper/lok.hxx>
 #include <comphelper/processfactory.hxx>
@@ -48,8 +47,6 @@
 #include <com/sun/star/style/XStyleFamiliesSupplier.hpp>
 #include <com/sun/star/ucb/XContentProvider.hpp>
 #include <com/sun/star/ucb/XUniversalContentBroker.hpp>
-#include <com/sun/star/container/XContentEnumerationAccess.hpp>
-#include <com/sun/star/container/XHierarchicalNameAccess.hpp>
 #include <com/sun/star/util/URLTransformer.hpp>
 #include <com/sun/star/datatransfer/clipboard/XClipboard.hpp>
 #include <com/sun/star/text/TextContentAnchorType.hpp>
@@ -1920,8 +1917,27 @@ static int lo_initialize(LibreOfficeKit* pThis, const char* pAppPath, const char
             if (eStage == PRE_INIT)
             {
                 InitVCL();
+
                 // pre-load all component libraries.
-                cppu::preInitBootstrap(xContext);
+                if (!xContext.is())
+                    throw css::uno::DeploymentException("preInit: XComponentContext is not created");
+
+                css::uno::Reference< css::uno::XInterface > xService;
+                xContext->getValueByName("/singletons/com.sun.star.lang.theServiceManager") >>= xService;
+                if (!xService.is())
+                    throw css::uno::DeploymentException("preInit: XMultiComponentFactory is not created");
+
+                css::uno::Reference<css::lang::XInitialization> aService(
+                    xService, css::uno::UNO_QUERY_THROW);
+
+                // pre-requisites:
+                // In order to load implementations and invoke
+                // component factory it is required:
+                // 1) defaultBootstrap_InitialComponentContext()
+                // 2) comphelper::setProcessServiceFactory(xSFactory);
+                // 3) InitVCL()
+                aService->initialize({css::uno::makeAny<OUString>("preload")});
+
                 // Release Solar Mutex, lo_startmain thread should acquire it.
                 Application::ReleaseSolarMutex();
             }
diff --git a/include/cppuhelper/detail/preinit.hxx b/include/cppuhelper/detail/preinit.hxx
deleted file mode 100644
index d152cf2..0000000
--- a/include/cppuhelper/detail/preinit.hxx
+++ /dev/null
@@ -1,37 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#ifndef INCLUDED_CPPUHELPER_DETAIL_PREINIT_HXX
-#define INCLUDED_CPPUHELPER_DETAIL_PREINIT_HXX
-
-#include <cppuhelper/cppuhelperdllapi.h>
-
-namespace cppu
-{
-
-#if defined LIBO_INTERNAL_ONLY
-
-/** Preload all shared library components with service manager upon
-    information from bootstrap variables.
-
-    This function tries to find its parameters via these bootstrap variables:
-
-      - UNO_SERVICES      -- a space separated list of file urls of service rdbs
-
-*/
-CPPUHELPER_DLLPUBLIC void SAL_CALL
-preInitBootstrap(css::uno::Reference< css::uno::XComponentContext > const & xContext);
-
-#endif // LIBO_INTERNAL_ONLY
-
-} // namespace cppu
-
-#endif // INCLUDED_CPPUHELPER_DETAIL_PREINIT_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */


More information about the Libreoffice-commits mailing list