sw/inc/unotext.hxx                                   |    2 +-
 sw/inc/unotextbodyhf.hxx                             |    2 +-
 sw/source/writerfilter/dmapper/DomainMapper_Impl.cxx |   17 ++++++++++-------
 sw/source/writerfilter/dmapper/DomainMapper_Impl.hxx |    5 +++--
 sw/source/writerfilter/dmapper/PropertyMap.cxx       |    3 ++-
 5 files changed, 17 insertions(+), 12 deletions(-)

New commits:
commit 1db0a141021778c66f2a922ddef8494b7a755ca2
Author:     Noel Grandin <noelgran...@gmail.com>
AuthorDate: Sat Aug 3 10:23:20 2024 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Sat Aug 3 21:15:09 2024 +0200

    use more concrete UNO type in writerfilter
    
    Change-Id: I80128e6b76c36070612fc2e9dda3ad82c865f6ce
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/171441
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/sw/inc/unotext.hxx b/sw/inc/unotext.hxx
index 73fc1e4c57ba..751a1a213070 100644
--- a/sw/inc/unotext.hxx
+++ b/sw/inc/unotext.hxx
@@ -46,7 +46,7 @@ class SwPaM;
 class SwXTextCursor;
 class SwXParagraph;
 
-class SAL_DLLPUBLIC_RTTI SwXText
+class SAL_DLLPUBLIC_RTTI SAL_LOPLUGIN_ANNOTATE("crosscast") SwXText
     : public css::lang::XTypeProvider
     , public css::beans::XPropertySet
     , public css::text::XTextAppendAndConvert
diff --git a/sw/inc/unotextbodyhf.hxx b/sw/inc/unotextbodyhf.hxx
index 3c16da8f7574..cdaeb8e102af 100644
--- a/sw/inc/unotextbodyhf.hxx
+++ b/sw/inc/unotextbodyhf.hxx
@@ -37,7 +37,7 @@ typedef ::cppu::WeakImplHelper
 ,   css::container::XEnumerationAccess
 > SwXBodyText_Base;
 
-class SwXBodyText final
+class SW_DLLPUBLIC SwXBodyText final
     : public SwXBodyText_Base
     , public SwXText
 {
diff --git a/sw/source/writerfilter/dmapper/DomainMapper_Impl.cxx 
b/sw/source/writerfilter/dmapper/DomainMapper_Impl.cxx
index 6138bc7834a6..50bdd274e6f0 100644
--- a/sw/source/writerfilter/dmapper/DomainMapper_Impl.cxx
+++ b/sw/source/writerfilter/dmapper/DomainMapper_Impl.cxx
@@ -148,6 +148,7 @@
 #include <unocontentcontrol.hxx>
 #include <unofootnote.hxx>
 #include <unoport.hxx>
+#include <unotextbodyhf.hxx>
 
 using namespace ::com::sun::star;
 using namespace oox;
@@ -405,13 +406,11 @@ DomainMapper_Impl::DomainMapper_Impl(
         throw uno::Exception(u"failed to find body text of the insert 
position"_ustr, nullptr);
     }
 
-    uno::Reference< text::XTextAppend > xBodyTextAppend( m_xBodyText, 
uno::UNO_QUERY );
-    m_aTextAppendStack.push(TextAppendContext(xBodyTextAppend,
+    m_aTextAppendStack.push(TextAppendContext(m_xBodyText,
                 m_bIsNewDoc ? uno::Reference<text::XTextCursor>() : 
m_xBodyText->createTextCursorByRange(m_xInsertTextRange)));
 
     //todo: does it makes sense to set the body text as static text interface?
-    uno::Reference< text::XTextAppendAndConvert > xBodyTextAppendAndConvert( 
m_xBodyText, uno::UNO_QUERY );
-    m_pTableHandler = new DomainMapperTableHandler(xBodyTextAppendAndConvert, 
*this);
+    m_pTableHandler = new DomainMapperTableHandler(m_xBodyText, *this);
     getTableManager( ).setHandler(m_pTableHandler);
 
     getTableManager( ).startLevel();
@@ -528,14 +527,18 @@ OUString DomainMapper_Impl::GetUnusedCharacterStyleName()
     return sPageStyleName;
 }
 
-uno::Reference< text::XText > const & DomainMapper_Impl::GetBodyText()
+rtl::Reference< SwXText > const & DomainMapper_Impl::GetBodyText()
 {
     if(!m_xBodyText.is())
     {
         if (m_xInsertTextRange.is())
-            m_xBodyText = m_xInsertTextRange->getText();
+        {
+            uno::Reference<css::text::XText> xText = 
m_xInsertTextRange->getText();
+            assert(!xText || dynamic_cast<SwXText*>(xText.get()));
+            m_xBodyText = 
dynamic_cast<SwXText*>(m_xInsertTextRange->getText().get());
+        }
         else if (m_xTextDocument.is())
-            m_xBodyText = m_xTextDocument->getText();
+            m_xBodyText = m_xTextDocument->getBodyText();
     }
     return m_xBodyText;
 }
diff --git a/sw/source/writerfilter/dmapper/DomainMapper_Impl.hxx 
b/sw/source/writerfilter/dmapper/DomainMapper_Impl.hxx
index a22574fa3292..223992082645 100644
--- a/sw/source/writerfilter/dmapper/DomainMapper_Impl.hxx
+++ b/sw/source/writerfilter/dmapper/DomainMapper_Impl.hxx
@@ -61,6 +61,7 @@ class SwXTextSection;
 class SwXTextField;
 class SwXTextFrame;
 class SwXTextEmbeddedObject;
+class SwXText;
 namespace com::sun::star{
         namespace awt{
             struct Size;
@@ -553,7 +554,7 @@ private:
 
     // cache next available number, expensive to repeatedly compute
     std::optional<int> m_xNextUnusedCharacterStyleNo;
-    css::uno::Reference<css::text::XText> m_xBodyText;
+    rtl::Reference<SwXText> m_xBodyText;
 
     std::stack<TextAppendContext>                                              
     m_aTextAppendStack;
     std::vector<AnchoredContext> m_vAnchoredStack;
@@ -725,7 +726,7 @@ public:
     css::uno::Reference<css::container::XNameContainer> const & 
GetCharacterStyles();
     css::uno::Reference<css::container::XNameContainer> const& 
GetParagraphStyles();
     OUString GetUnusedCharacterStyleName();
-    css::uno::Reference<css::text::XText> const & GetBodyText();
+    rtl::Reference<SwXText> const & GetBodyText();
     const rtl::Reference<SwXTextDocument>& GetTextDocument() const
     {
         return m_xTextDocument;
diff --git a/sw/source/writerfilter/dmapper/PropertyMap.cxx 
b/sw/source/writerfilter/dmapper/PropertyMap.cxx
index ea840aa6b536..ce9b20c2f1f9 100644
--- a/sw/source/writerfilter/dmapper/PropertyMap.cxx
+++ b/sw/source/writerfilter/dmapper/PropertyMap.cxx
@@ -68,6 +68,7 @@
 #include <unosection.hxx>
 #include <unotxdoc.hxx>
 #include <unoxstyle.hxx>
+#include <unotext.hxx>
 #include <utility>
 
 #include <frozen/bits/defines.h>
@@ -1166,7 +1167,7 @@ static uno::Reference< beans::XPropertySet > 
lcl_GetRangeProperties( bool bIsFir
     uno::Reference< beans::XPropertySet > xRangeProperties;
     if ( bIsFirstSection && rDM_Impl.GetBodyText().is() )
     {
-        uno::Reference< container::XEnumerationAccess > xEnumAccess( 
rDM_Impl.GetBodyText(), uno::UNO_QUERY_THROW );
+        uno::Reference< container::XEnumerationAccess > xEnumAccess( 
dynamic_cast<container::XEnumerationAccess*>(rDM_Impl.GetBodyText().get()), 
uno::UNO_QUERY_THROW );
         uno::Reference< container::XEnumeration > xEnum = 
xEnumAccess->createEnumeration();
         xRangeProperties.set( xEnum->nextElement(), uno::UNO_QUERY_THROW );
         if ( rDM_Impl.GetIsDummyParaAddedForTableInSection() && 
xEnum->hasMoreElements() )

Reply via email to