framework/inc/dispatch/interceptionhelper.hxx               |    9 ++++++---
 framework/source/dispatch/interceptionhelper.cxx            |    3 ++-
 framework/source/services/ContextChangeEventMultiplexer.cxx |    1 +
 framework/source/services/frame.cxx                         |    3 +--
 4 files changed, 10 insertions(+), 6 deletions(-)

New commits:
commit 60a96f41f0d050ec05bfcb337edf3717689adacb
Author:     Stephan Bergmann <sberg...@redhat.com>
AuthorDate: Wed Dec 14 19:08:56 2022 +0100
Commit:     Stephan Bergmann <sberg...@redhat.com>
CommitDate: Fri Dec 16 12:14:09 2022 +0000

    Use rtl::Reference to avoid a dynamic_cast
    
    Change-Id: I1a439df62a33c7edccbbe62e373690b17b2f6161
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/144315
    Tested-by: Jenkins
    Reviewed-by: Stephan Bergmann <sberg...@redhat.com>

diff --git a/framework/inc/dispatch/interceptionhelper.hxx 
b/framework/inc/dispatch/interceptionhelper.hxx
index 681f69c6d013..89339b1f8455 100644
--- a/framework/inc/dispatch/interceptionhelper.hxx
+++ b/framework/inc/dispatch/interceptionhelper.hxx
@@ -26,6 +26,7 @@
 #include <com/sun/star/frame/XFrame.hpp>
 #include <com/sun/star/frame/DispatchDescriptor.hpp>
 
+#include <rtl/ref.hxx>
 #include <tools/wldcrd.hxx>
 #include <cppuhelper/implbase.hxx>
 #include <cppuhelper/weakref.hxx>
@@ -35,6 +36,8 @@
 
 namespace framework{
 
+class DispatchProvider;
+
 /** @short      implements a helper to support interception with additional 
functionality.
 
     @descr      This helper implements the complete 
XDispatchProviderInterception interface with
@@ -129,7 +132,7 @@ class InterceptionHelper final : public  
::cppu::WeakImplHelper<
 
         /** @short this interception helper implements the top level master of 
an interceptor list ...
                    but this member is the lowest possible slave! */
-        css::uno::Reference< css::frame::XDispatchProvider > m_xSlave;
+        rtl::Reference< DispatchProvider > m_xSlave;
 
         /** @short contains all registered interceptor objects. */
         InterceptorList m_lInterceptionRegs;
@@ -147,7 +150,7 @@ class InterceptionHelper final : public  
::cppu::WeakImplHelper<
                     an outside creates dispatch provider, which has to be used 
here as lowest slave "interceptor".
          */
         InterceptionHelper(const css::uno::Reference< css::frame::XFrame >&    
        xOwner,
-                           css::uno::Reference< css::frame::XDispatchProvider 
>  xSlave);
+                           rtl::Reference< DispatchProvider >  xSlave);
 
     private:
 
@@ -244,7 +247,7 @@ class InterceptionHelper final : public  
::cppu::WeakImplHelper<
          */
         virtual void SAL_CALL disposing(const css::lang::EventObject& aEvent) 
override;
 
-        css::uno::Reference<css::frame::XDispatchProvider> GetSlave() const { 
return m_xSlave; }
+        rtl::Reference<DispatchProvider> GetSlave() const { return m_xSlave; }
 
 }; // class InterceptionHelper
 
diff --git a/framework/source/dispatch/interceptionhelper.cxx 
b/framework/source/dispatch/interceptionhelper.cxx
index addb02ba685b..40cfe404edc3 100644
--- a/framework/source/dispatch/interceptionhelper.cxx
+++ b/framework/source/dispatch/interceptionhelper.cxx
@@ -17,6 +17,7 @@
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
 
+#include <dispatch/dispatchprovider.hxx>
 #include <dispatch/interceptionhelper.hxx>
 
 #include <com/sun/star/frame/XInterceptorInfo.hpp>
@@ -31,7 +32,7 @@ using namespace com::sun::star;
 namespace framework{
 
 InterceptionHelper::InterceptionHelper(const css::uno::Reference< 
css::frame::XFrame >&            xOwner,
-                                       css::uno::Reference< 
css::frame::XDispatchProvider >  xSlave)
+                                       rtl::Reference< DispatchProvider >  
xSlave)
     : m_xOwnerWeak  (xOwner                       )
     , m_xSlave      (std::move(xSlave                       ))
 {
diff --git a/framework/source/services/ContextChangeEventMultiplexer.cxx 
b/framework/source/services/ContextChangeEventMultiplexer.cxx
index b2f6db457fac..1cf4a670cf5a 100644
--- a/framework/source/services/ContextChangeEventMultiplexer.cxx
+++ b/framework/source/services/ContextChangeEventMultiplexer.cxx
@@ -322,6 +322,7 @@ static uno::Reference<ui::XContextChangeEventListener> 
GetFirstListenerWith_Impl
     uno::Reference<ui::XContextChangeEventListener> xRet;
 
     rtl::Reference<ContextChangeEventMultiplexer> pMultiplexer =
+        // [-loplugin:unocast]
         dynamic_cast<ContextChangeEventMultiplexer 
*>(ui::ContextChangeEventMultiplexer::get(xComponentContext).get());
     assert(pMultiplexer);
 
diff --git a/framework/source/services/frame.cxx 
b/framework/source/services/frame.cxx
index b658874b865f..3721f8e40462 100644
--- a/framework/source/services/frame.cxx
+++ b/framework/source/services/frame.cxx
@@ -1477,8 +1477,7 @@ sal_Bool SAL_CALL XFrameImpl::setComponent(const 
css::uno::Reference< css::awt::
             auto pInterceptionHelper = 
dynamic_cast<InterceptionHelper*>(m_xDispatchHelper.get());
             if (pInterceptionHelper)
             {
-                css::uno::Reference<css::frame::XDispatchProvider> 
xDispatchProvider = pInterceptionHelper->GetSlave();
-                auto pDispatchProvider = 
dynamic_cast<DispatchProvider*>(xDispatchProvider.get());
+                rtl::Reference<DispatchProvider> pDispatchProvider = 
pInterceptionHelper->GetSlave();
                 if (pDispatchProvider)
                 {
                     pDispatchProvider->ClearProtocolHandlers();

Reply via email to