compilerplugins/clang/refcounting.cxx | 42 +++++++++++++++------------ sw/inc/unoparagraph.hxx | 5 +-- sw/inc/unotext.hxx | 4 ++ sw/inc/unotextbodyhf.hxx | 2 - sw/inc/unotextrange.hxx | 3 + sw/source/core/access/AccessibilityCheck.cxx | 22 ++++++-------- sw/source/core/doc/rdfhelper.cxx | 9 +++-- sw/source/core/edit/edfcol.cxx | 8 ++--- sw/source/core/inc/unocontentcontrol.hxx | 7 ++-- sw/source/core/inc/unometa.hxx | 11 +++---- sw/source/core/inc/unoport.hxx | 3 + sw/source/core/layout/atrfrm.cxx | 2 - sw/source/core/txtnode/fmtatr2.cxx | 3 + sw/source/core/txtnode/ndtxt.cxx | 3 + sw/source/core/unocore/unocoll.cxx | 2 - sw/source/core/unocore/unocontentcontrol.cxx | 18 +++++------ sw/source/core/unocore/unocrsrhelper.cxx | 2 - sw/source/core/unocore/unoobj2.cxx | 10 +++--- sw/source/core/unocore/unoparagraph.cxx | 12 +++---- sw/source/core/unocore/unoportenum.cxx | 14 +++++---- sw/source/core/unocore/unorefmk.cxx | 21 ++++++------- sw/source/core/unocore/unosect.cxx | 7 ++-- sw/source/core/unocore/unotext.cxx | 6 +-- 23 files changed, 116 insertions(+), 100 deletions(-)
New commits: commit 8ad66ed2c5345f63e0581b6053222c80a9c612c3 Author: Noel Grandin <noel.gran...@collabora.co.uk> AuthorDate: Thu Sep 14 15:57:11 2023 +0200 Commit: Noel Grandin <noel.gran...@collabora.co.uk> CommitDate: Sun Sep 17 17:24:52 2023 +0200 remove unnecessary dynamic_cast around SwXText Unusually, we cannot use rtl::Reference to hold SwXText, because rtl::Reference assumes that its pointee is a subclass of OWeakObject, which SwXText is not (and we cannot make it so because the UNO bridge does not support virtual base classes). So we have to use css::uno::Reference<SwXText> and carve out an exception in loplugin:refcounting. Change-Id: If3a1307e30fdcd3b47aa665252be081fb5063400 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156982 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> diff --git a/compilerplugins/clang/refcounting.cxx b/compilerplugins/clang/refcounting.cxx index ca6c0d97d9f0..801173ce6488 100644 --- a/compilerplugins/clang/refcounting.cxx +++ b/compilerplugins/clang/refcounting.cxx @@ -378,24 +378,30 @@ static bool containsStaticTypeMethod(const CXXRecordDecl* x) void RefCounting::checkUnoReference(QualType qt, const Decl* decl, const RecordDecl* parent, const std::string& rDeclName) { - if (loplugin::TypeCheck(qt).Class("Reference").Namespace("uno").Namespace("star").Namespace("sun").Namespace("com").GlobalNamespace()) { - const CXXRecordDecl* pRecordDecl = qt->getAsCXXRecordDecl(); - const ClassTemplateSpecializationDecl* pTemplate = dyn_cast<ClassTemplateSpecializationDecl>(pRecordDecl); - const TemplateArgument& rArg = pTemplate->getTemplateArgs()[0]; - const CXXRecordDecl* templateParam = rArg.getAsType()->getAsCXXRecordDecl()->getDefinition(); - if (templateParam && !containsStaticTypeMethod(templateParam)) { - report( - DiagnosticsEngine::Warning, - ("uno::Reference %0 with template parameter that does not" - " contain ::static_type() %1%select{|, parent is %3,}2 should" - " probably be using rtl::Reference instead"), - decl->getLocation()) - << rDeclName << qt << (parent != nullptr) - << (parent != nullptr - ? parent->getQualifiedNameAsString() : std::string()) - << decl->getSourceRange(); - } - } + if (!loplugin::TypeCheck(qt).Class("Reference").Namespace("uno").Namespace("star").Namespace("sun").Namespace("com").GlobalNamespace()) + return; + const CXXRecordDecl* pRecordDecl = qt->getAsCXXRecordDecl(); + const ClassTemplateSpecializationDecl* pTemplate = dyn_cast<ClassTemplateSpecializationDecl>(pRecordDecl); + const TemplateArgument& rArg = pTemplate->getTemplateArgs()[0]; + const CXXRecordDecl* templateParam = rArg.getAsType()->getAsCXXRecordDecl()->getDefinition(); + if (!templateParam) + return; + // SwXText is a special case. It is a mixin class that does not inherit from OWeakObject, so + // we cannot use rtl::Reference. + if (loplugin::DeclCheck(templateParam).Class("SwXText")) + return; + if (containsStaticTypeMethod(templateParam)) + return; + report( + DiagnosticsEngine::Warning, + ("uno::Reference %0 with template parameter that does not" + " contain ::static_type() %1%select{|, parent is %3,}2 should" + " probably be using rtl::Reference instead"), + decl->getLocation()) + << rDeclName << qt << (parent != nullptr) + << (parent != nullptr + ? parent->getQualifiedNameAsString() : std::string()) + << decl->getSourceRange(); } bool RefCounting::visitTemporaryObjectExpr(Expr const * expr) { diff --git a/sw/inc/unoparagraph.hxx b/sw/inc/unoparagraph.hxx index 860edc18e938..cbdfe202a1cb 100644 --- a/sw/inc/unoparagraph.hxx +++ b/sw/inc/unoparagraph.hxx @@ -70,7 +70,7 @@ private: virtual ~SwXParagraph() override; - SwXParagraph(css::uno::Reference< css::text::XText > const & xParent, + SwXParagraph(css::uno::Reference< SwXText > const & xParent, SwTextNode & rTextNode, const sal_Int32 nSelStart, const sal_Int32 nSelEnd); @@ -81,8 +81,7 @@ public: static rtl::Reference<SwXParagraph> CreateXParagraph(SwDoc & rDoc, SwTextNode * pTextNode, - css::uno::Reference< css::text::XText> - const& xParentText = nullptr, + css::uno::Reference<SwXText> const& xParentText, const sal_Int32 nSelStart = -1, const sal_Int32 nSelEnd = - 1); const SwTextNode * GetTextNode() const; diff --git a/sw/inc/unotext.hxx b/sw/inc/unotext.hxx index 7429d9f4cb66..5dbb7e993fc9 100644 --- a/sw/inc/unotext.hxx +++ b/sw/inc/unotext.hxx @@ -83,6 +83,10 @@ public: const SwDoc* GetDoc() const; SwDoc* GetDoc(); + // declare these here to resolve ambiguity when we declared rtl::Reference<subtype-of-SwXText> + virtual void SAL_CALL acquire() override = 0; + virtual void SAL_CALL release() override = 0; + // XInterface virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type& rType) override; diff --git a/sw/inc/unotextbodyhf.hxx b/sw/inc/unotextbodyhf.hxx index 8e10e22a68fb..3c16da8f7574 100644 --- a/sw/inc/unotextbodyhf.hxx +++ b/sw/inc/unotextbodyhf.hxx @@ -105,7 +105,7 @@ class SwXHeadFootText final public: - static css::uno::Reference< css::text::XText > + static rtl::Reference< SwXHeadFootText > CreateXHeadFootText(SwFrameFormat & rHeadFootFormat, const bool bIsHeader); rtl::Reference< SwXTextCursor > CreateTextCursor(const bool bIgnoreTables = false); diff --git a/sw/inc/unotextrange.hxx b/sw/inc/unotextrange.hxx index a234d1092805..1d2265ddfec1 100644 --- a/sw/inc/unotextrange.hxx +++ b/sw/inc/unotextrange.hxx @@ -37,6 +37,7 @@ class SwDoc; class SwUnoCursor; class SwFrameFormat; +class SwXText; class SW_DLLPUBLIC SwUnoInternalPaM final : public SwPaM @@ -66,7 +67,7 @@ namespace sw { const css::uno::Reference<css::text::XTextRange> & xTextRange, TextRangeMode eMode = TextRangeMode::RequireTextNode); - css::uno::Reference< css::text::XText > + css::uno::Reference< SwXText > CreateParentXText(SwDoc & rDoc, const SwPosition& rPos); bool GetDefaultTextContentValue(css::uno::Any& rAny, diff --git a/sw/source/core/access/AccessibilityCheck.cxx b/sw/source/core/access/AccessibilityCheck.cxx index cf214d060a76..63443bcb89bd 100644 --- a/sw/source/core/access/AccessibilityCheck.cxx +++ b/sw/source/core/access/AccessibilityCheck.cxx @@ -41,6 +41,7 @@ #include <svx/swframetypes.hxx> #include <fmtanchr.hxx> #include <dcontact.hxx> +#include <unotext.hxx> #include <svx/svdoashp.hxx> #include <svx/sdasitm.hxx> @@ -380,13 +381,12 @@ public: return; SwTextNode* pTextNode = pCurrent->GetTextNode(); - uno::Reference<text::XTextContent> xParagraph - = SwXParagraph::CreateXParagraph(pTextNode->GetDoc(), pTextNode); + rtl::Reference<SwXParagraph> xParagraph + = SwXParagraph::CreateXParagraph(pTextNode->GetDoc(), pTextNode, nullptr); if (!xParagraph.is()) return; - uno::Reference<container::XEnumerationAccess> xRunEnumAccess(xParagraph, uno::UNO_QUERY); - uno::Reference<container::XEnumeration> xRunEnum = xRunEnumAccess->createEnumeration(); + uno::Reference<container::XEnumeration> xRunEnum = xParagraph->createEnumeration(); sal_Int32 nStart = 0; while (xRunEnum->hasMoreElements()) { @@ -571,13 +571,12 @@ public: return; SwTextNode* pTextNode = pCurrent->GetTextNode(); - uno::Reference<text::XTextContent> xParagraph; - xParagraph = SwXParagraph::CreateXParagraph(pTextNode->GetDoc(), pTextNode); + rtl::Reference<SwXParagraph> xParagraph + = SwXParagraph::CreateXParagraph(pTextNode->GetDoc(), pTextNode, nullptr); if (!xParagraph.is()) return; - uno::Reference<container::XEnumerationAccess> xRunEnumAccess(xParagraph, uno::UNO_QUERY); - uno::Reference<container::XEnumeration> xRunEnum = xRunEnumAccess->createEnumeration(); + uno::Reference<container::XEnumeration> xRunEnum = xParagraph->createEnumeration(); sal_Int32 nStart = 0; while (xRunEnum->hasMoreElements()) { @@ -1072,13 +1071,12 @@ public: return; SwTextNode* pTextNode = pCurrent->GetTextNode(); - uno::Reference<text::XTextContent> xParagraph; - xParagraph = SwXParagraph::CreateXParagraph(pTextNode->GetDoc(), pTextNode); + rtl::Reference<SwXParagraph> xParagraph + = SwXParagraph::CreateXParagraph(pTextNode->GetDoc(), pTextNode, nullptr); if (!xParagraph.is()) return; - uno::Reference<container::XEnumerationAccess> xRunEnumAccess(xParagraph, uno::UNO_QUERY); - uno::Reference<container::XEnumeration> xRunEnum = xRunEnumAccess->createEnumeration(); + uno::Reference<container::XEnumeration> xRunEnum = xParagraph->createEnumeration(); sal_Int32 nStart = 0; while (xRunEnum->hasMoreElements()) { diff --git a/sw/source/core/doc/rdfhelper.cxx b/sw/source/core/doc/rdfhelper.cxx index c06126830967..d4e5d9da2b52 100644 --- a/sw/source/core/doc/rdfhelper.cxx +++ b/sw/source/core/doc/rdfhelper.cxx @@ -21,6 +21,7 @@ #include <docsh.hxx> #include <ndtxt.hxx> #include <unoparagraph.hxx> +#include <unotext.hxx> using namespace com::sun::star; @@ -201,13 +202,13 @@ void SwRDFHelper::cloneStatements(const css::uno::Reference<css::frame::XModel>& std::map<OUString, OUString> SwRDFHelper::getTextNodeStatements(const OUString& rType, SwTextNode& rTextNode) { - uno::Reference<rdf::XResource> xTextNode(SwXParagraph::CreateXParagraph(rTextNode.GetDoc(), &rTextNode)); + uno::Reference<rdf::XResource> xTextNode(SwXParagraph::CreateXParagraph(rTextNode.GetDoc(), &rTextNode, nullptr)); return getStatements(rTextNode.GetDoc().GetDocShell()->GetBaseModel(), rType, xTextNode); } void SwRDFHelper::addTextNodeStatement(const OUString& rType, const OUString& rPath, SwTextNode& rTextNode, const OUString& rKey, const OUString& rValue) { - uno::Reference<rdf::XResource> xSubject(SwXParagraph::CreateXParagraph(rTextNode.GetDoc(), &rTextNode)); + uno::Reference<rdf::XResource> xSubject(SwXParagraph::CreateXParagraph(rTextNode.GetDoc(), &rTextNode, nullptr)); addStatement(rTextNode.GetDoc().GetDocShell()->GetBaseModel(), rType, rPath, xSubject, rKey, rValue); } @@ -222,7 +223,7 @@ void SwRDFHelper::removeTextNodeStatement(const OUString& rType, SwTextNode& rTe uno::Reference<rdf::XURI> xGraphName = aGraphNames[0]; uno::Reference<rdf::XNamedGraph> xGraph = xDocumentMetadataAccess->getRDFRepository()->getGraph(xGraphName); - uno::Reference<rdf::XResource> xSubject(SwXParagraph::CreateXParagraph(rTextNode.GetDoc(), &rTextNode)); + uno::Reference<rdf::XResource> xSubject(SwXParagraph::CreateXParagraph(rTextNode.GetDoc(), &rTextNode, nullptr)); uno::Reference<rdf::XURI> xKey = rdf::URI::create(xComponentContext, rKey); uno::Reference<rdf::XLiteral> xValue = rdf::Literal::create(xComponentContext, rValue); xGraph->removeStatements(xSubject, xKey, xValue); @@ -246,7 +247,7 @@ void SwRDFHelper::updateTextNodeStatement(const OUString& rType, const OUString& } uno::Reference<rdf::XNamedGraph> xGraph = xDocumentMetadataAccess->getRDFRepository()->getGraph(xGraphName); - uno::Reference<rdf::XResource> xSubject(SwXParagraph::CreateXParagraph(rTextNode.GetDoc(), &rTextNode)); + uno::Reference<rdf::XResource> xSubject(SwXParagraph::CreateXParagraph(rTextNode.GetDoc(), &rTextNode, nullptr)); uno::Reference<rdf::XURI> xKey = rdf::URI::create(xComponentContext, rKey); if (aGraphNames.hasElements()) diff --git a/sw/source/core/edit/edfcol.cxx b/sw/source/core/edit/edfcol.cxx index 9462de2f16bb..66ac033189a3 100644 --- a/sw/source/core/edit/edfcol.cxx +++ b/sw/source/core/edit/edfcol.cxx @@ -1286,7 +1286,7 @@ void SwEditShell::ApplyParagraphClassification(std::vector<svx::ClassificationRe }); uno::Reference<frame::XModel> xModel = pDocShell->GetBaseModel(); - rtl::Reference<SwXParagraph> xParent = SwXParagraph::CreateXParagraph(pNode->GetDoc(), pNode); + rtl::Reference<SwXParagraph> xParent = SwXParagraph::CreateXParagraph(pNode->GetDoc(), pNode, nullptr); lcl_ApplyParagraphClassification(GetDoc(), xModel, xParent, css::uno::Reference<css::rdf::XResource>(xParent), std::move(aResults)); } @@ -1360,7 +1360,7 @@ std::vector<svx::ClassificationResult> SwEditShell::CollectParagraphClassificati if (pNode == nullptr) return aResult; - uno::Reference<text::XTextContent> xParent = SwXParagraph::CreateXParagraph(pNode->GetDoc(), pNode); + rtl::Reference<SwXParagraph> xParent = SwXParagraph::CreateXParagraph(pNode->GetDoc(), pNode, nullptr); uno::Reference<frame::XModel> xModel = pDocShell->GetBaseModel(); return lcl_CollectParagraphClassification(xModel, xParent); } @@ -1779,7 +1779,7 @@ void SwEditShell::SignParagraph() return; // 1. Get the text (without fields). - const uno::Reference<text::XTextContent> xParagraph = SwXParagraph::CreateXParagraph(pNode->GetDoc(), pNode); + const rtl::Reference<SwXParagraph> xParagraph = SwXParagraph::CreateXParagraph(pNode->GetDoc(), pNode, nullptr); const OString utf8Text = lcl_getParagraphBodyText(xParagraph); if (utf8Text.isEmpty()) return; @@ -1849,7 +1849,7 @@ void SwEditShell::ValidateParagraphSignatures(SwTextNode* pNode, bool updateDont SetParagraphSignatureValidation(bOldValidationFlag); }); - uno::Reference<text::XTextContent> xParentText = SwXParagraph::CreateXParagraph(*GetDoc(), pNode); + rtl::Reference<SwXParagraph> xParentText = SwXParagraph::CreateXParagraph(*GetDoc(), pNode, nullptr); lcl_ValidateParagraphSignatures(*GetDoc(), xParentText, updateDontRemove); } diff --git a/sw/source/core/inc/unocontentcontrol.hxx b/sw/source/core/inc/unocontentcontrol.hxx index b037091b6bfd..d2881e0c8b08 100644 --- a/sw/source/core/inc/unocontentcontrol.hxx +++ b/sw/source/core/inc/unocontentcontrol.hxx @@ -41,6 +41,7 @@ class SwPaM; class SwTextNode; class SwFormatContentControl; class SwContentControl; +class SwXText; /** * UNO API wrapper around an SwContentControl, exposed as the com.sun.star.text.ContentControl @@ -64,7 +65,7 @@ protected: SwXContentControl& operator=(const SwXContentControl&) = delete; SwXContentControl(SwDoc* pDoc, SwContentControl* pContentControl, - const css::uno::Reference<css::text::XText>& xParentText, + const css::uno::Reference<SwXText>& xParentText, std::unique_ptr<const TextRangeList_t> pPortions); SwXContentControl(SwDoc* pDoc); @@ -72,7 +73,7 @@ protected: public: static rtl::Reference<SwXContentControl> CreateXContentControl(SwContentControl& rContentControl, - const css::uno::Reference<css::text::XText>& xParentText = nullptr, + const css::uno::Reference<SwXText>& xParentText = nullptr, std::unique_ptr<const TextRangeList_t>&& pPortions = std::unique_ptr<const TextRangeList_t>()); @@ -80,7 +81,7 @@ public: /// Initializes params with position of the attribute content (without CH_TXTATR). bool SetContentRange(SwTextNode*& rpNode, sal_Int32& rStart, sal_Int32& rEnd) const; - const css::uno::Reference<css::text::XText>& GetParentText() const; + const css::uno::Reference<SwXText>& GetParentText() const; // XServiceInfo OUString SAL_CALL getImplementationName() override; diff --git a/sw/source/core/inc/unometa.hxx b/sw/source/core/inc/unometa.hxx index e0ebf444ccdb..d89ef914df1f 100644 --- a/sw/source/core/inc/unometa.hxx +++ b/sw/source/core/inc/unometa.hxx @@ -42,6 +42,7 @@ typedef std::deque< class SwPaM; class SwTextNode; +class SwXText; namespace sw { class Meta; @@ -81,7 +82,7 @@ protected: /// @param pDoc and pMeta != 0, but not & because of ImplInheritanceHelper SwXMeta(SwDoc *const pDoc, ::sw::Meta *const pMeta, - css::uno::Reference< css::text::XText> const& xParentText, + css::uno::Reference<SwXText> const& xParentText, std::unique_ptr<TextRangeList_t const> pPortions); SwXMeta(SwDoc *const pDoc); @@ -91,7 +92,7 @@ public: static rtl::Reference<SwXMeta> CreateXMeta( ::sw::Meta & rMeta, - css::uno::Reference< css::text::XText> const& xParentText = nullptr, + css::uno::Reference<SwXText> xParentText, std::unique_ptr<TextRangeList_t const> && pPortions = std::unique_ptr<TextRangeList_t const>()); static rtl::Reference<SwXMeta> @@ -99,7 +100,7 @@ public: /// init params with position of the attribute content (w/out CH_TXTATR) bool SetContentRange( SwTextNode *& rpNode, sal_Int32 & rStart, sal_Int32 & rEnd) const; - css::uno::Reference< css::text::XText > const & GetParentText() const; + css::uno::Reference< SwXText > const & GetParentText() const; /// @throws css::lang::IllegalArgumentException /// @throws css::uno::RuntimeException @@ -192,11 +193,11 @@ private: friend rtl::Reference<SwXMeta> SwXMeta::CreateXMeta(::sw::Meta &, - css::uno::Reference< css::text::XText> const&, + css::uno::Reference<SwXText>, std::unique_ptr<TextRangeList_t const> && pPortions); SwXMetaField(SwDoc *const pDoc, ::sw::Meta *const pMeta, - css::uno::Reference< css::text::XText> const& xParentText, + css::uno::Reference<SwXText> const& xParentText, std::unique_ptr<TextRangeList_t const> pPortions); friend rtl::Reference<SwXMeta> diff --git a/sw/source/core/inc/unoport.hxx b/sw/source/core/inc/unoport.hxx index 1315334d3992..53f05964fabd 100644 --- a/sw/source/core/inc/unoport.hxx +++ b/sw/source/core/inc/unoport.hxx @@ -45,6 +45,7 @@ namespace com::sun::star::text { class XFootnote; } class SwFrameFormat; class SwRangeRedline; class SwTextRuby; +class SwXText; typedef std::deque< css::uno::Reference< css::text::XTextRange > > @@ -257,7 +258,7 @@ class SwXTextPortionEnumeration final public: /// @param bOnlyTextFields tries to return less data, but may return more than just text fields SwXTextPortionEnumeration(SwPaM& rParaCursor, - css::uno::Reference< css::text::XText > const & xParent, + css::uno::Reference< SwXText > const & xParent, const sal_Int32 nStart, const sal_Int32 nEnd, bool bOnlyTextFields = false ); SwXTextPortionEnumeration(SwPaM& rParaCursor, diff --git a/sw/source/core/layout/atrfrm.cxx b/sw/source/core/layout/atrfrm.cxx index 08d47bd16479..5e3c26e708c7 100644 --- a/sw/source/core/layout/atrfrm.cxx +++ b/sw/source/core/layout/atrfrm.cxx @@ -2725,7 +2725,7 @@ void SwFrameFormat::SwClientNotify(const SwModify& rMod, const SfxHint& rHint) pOldAnchorNode = static_cast<const SwFormatAnchor*>(pLegacy->m_pOld)->GetAnchorNode(); break; case RES_REMOVE_UNO_OBJECT: - SetXObject(uno::Reference<uno::XInterface>(nullptr)); + SetXObject(nullptr); break; } diff --git a/sw/source/core/txtnode/fmtatr2.cxx b/sw/source/core/txtnode/fmtatr2.cxx index 367658e84456..ba7862fd4110 100644 --- a/sw/source/core/txtnode/fmtatr2.cxx +++ b/sw/source/core/txtnode/fmtatr2.cxx @@ -46,6 +46,7 @@ #include <ndtxt.hxx> #include <doc.hxx> #include <unometa.hxx> +#include <unotext.hxx> #include <docsh.hxx> #include <osl/diagnose.h> @@ -735,7 +736,7 @@ bool Meta::IsInContent() const css::uno::Reference< css::rdf::XMetadatable > Meta::MakeUnoObject() { - return SwXMeta::CreateXMeta(*this); + return SwXMeta::CreateXMeta(*this, {}); } MetaField::MetaField(SwFormatMeta * const i_pFormat, diff --git a/sw/source/core/txtnode/ndtxt.cxx b/sw/source/core/txtnode/ndtxt.cxx index 10a4209356a3..bd87f2d2bcbe 100644 --- a/sw/source/core/txtnode/ndtxt.cxx +++ b/sw/source/core/txtnode/ndtxt.cxx @@ -78,6 +78,7 @@ #include <attrhint.hxx> #include <memory> #include <unoparagraph.hxx> +#include <unotext.hxx> #include <wrtsh.hxx> #include <fmtpdsc.hxx> #include <svx/sdr/attribute/sdrallfillattributeshelper.hxx> @@ -5535,7 +5536,7 @@ uno::Reference< rdf::XMetadatable > SwTextNode::MakeUnoObject() { const uno::Reference<rdf::XMetadatable> xMeta( - SwXParagraph::CreateXParagraph(GetDoc(), this)); + SwXParagraph::CreateXParagraph(GetDoc(), this, nullptr)); return xMeta; } diff --git a/sw/source/core/unocore/unocoll.cxx b/sw/source/core/unocore/unocoll.cxx index 3f412181d470..14229655e6a0 100644 --- a/sw/source/core/unocore/unocoll.cxx +++ b/sw/source/core/unocore/unocoll.cxx @@ -789,7 +789,7 @@ SwXServiceProvider::MakeInstance(SwServiceType nObjectType, SwDoc & rDoc) } break; case SwServiceType::Paragraph: - xRet = static_cast<cppu::OWeakObject*>(SwXParagraph::CreateXParagraph(rDoc, nullptr).get()); + xRet = static_cast<cppu::OWeakObject*>(SwXParagraph::CreateXParagraph(rDoc, nullptr, nullptr).get()); break; case SwServiceType::NumberingRules: xRet = static_cast<cppu::OWeakObject*>(new SwXNumberingRules(rDoc)); diff --git a/sw/source/core/unocore/unocontentcontrol.cxx b/sw/source/core/unocore/unocontentcontrol.cxx index fa610f256523..541fc46699b3 100644 --- a/sw/source/core/unocore/unocontentcontrol.cxx +++ b/sw/source/core/unocore/unocontentcontrol.cxx @@ -82,7 +82,7 @@ SwXContentControlText::SwXContentControlText(SwDoc& rDoc, SwXContentControl& rCo const SwStartNode* SwXContentControlText::GetStartNode() const { - auto pParent = dynamic_cast<SwXText*>(m_rContentControl.GetParentText().get()); + SwXText* pParent = m_rContentControl.GetParentText().get(); return pParent ? pParent->GetStartNode() : nullptr; } @@ -148,7 +148,7 @@ public: // 3 possible states: not attached, attached, disposed bool m_bIsDisposed; bool m_bIsDescriptor; - uno::Reference<text::XText> m_xParentText; + css::uno::Reference<SwXText> m_xParentText; rtl::Reference<SwXContentControlText> m_xText; SwContentControl* m_pContentControl; bool m_bShowingPlaceHolder; @@ -178,7 +178,7 @@ public: OUString m_aLock; Impl(SwXContentControl& rThis, SwDoc& rDoc, SwContentControl* pContentControl, - uno::Reference<text::XText> xParentText, std::unique_ptr<const TextRangeList_t> pPortions) + css::uno::Reference<SwXText> xParentText, std::unique_ptr<const TextRangeList_t> pPortions) : m_pTextPortions(std::move(pPortions)) , m_bIsDisposed(false) , m_bIsDescriptor(pContentControl == nullptr) @@ -236,13 +236,13 @@ void SwXContentControl::Impl::Notify(const SfxHint& rHint) m_EventListeners.disposeAndClear(aGuard, aEvent); } -const uno::Reference<text::XText>& SwXContentControl::GetParentText() const +const css::uno::Reference<SwXText>& SwXContentControl::GetParentText() const { return m_pImpl->m_xParentText; } SwXContentControl::SwXContentControl(SwDoc* pDoc, SwContentControl* pContentControl, - const uno::Reference<text::XText>& xParentText, + const css::uno::Reference<SwXText>& xParentText, std::unique_ptr<const TextRangeList_t> pPortions) : m_pImpl(new SwXContentControl::Impl(*this, *pDoc, pContentControl, xParentText, std::move(pPortions))) @@ -265,7 +265,7 @@ rtl::Reference<SwXContentControl> SwXContentControl::CreateXContentControl(SwDoc rtl::Reference<SwXContentControl> SwXContentControl::CreateXContentControl(SwContentControl& rContentControl, - const uno::Reference<text::XText>& xParent, + const css::uno::Reference<SwXText>& xParent, std::unique_ptr<const TextRangeList_t>&& pPortions) { // re-use existing SwXContentControl @@ -281,7 +281,7 @@ SwXContentControl::CreateXContentControl(SwContentControl& rContentControl, if (xContentControl->m_pImpl->m_xParentText.get() != xParent.get()) { SAL_WARN("sw.uno", "SwXContentControl with different parent"); - xContentControl->m_pImpl->m_xParentText.set(xParent); + xContentControl->m_pImpl->m_xParentText = xParent; } } return xContentControl; @@ -294,7 +294,7 @@ SwXContentControl::CreateXContentControl(SwContentControl& rContentControl, SAL_WARN("sw.uno", "CreateXContentControl: no text node"); return nullptr; } - uno::Reference<text::XText> xParentText(xParent); + css::uno::Reference<SwXText> xParentText(xParent); if (!xParentText.is()) { SwTextContentControl* pTextAttr = rContentControl.GetTextAttr(); @@ -304,7 +304,7 @@ SwXContentControl::CreateXContentControl(SwContentControl& rContentControl, return nullptr; } SwPosition aPos(*pTextNode, pTextAttr->GetStart()); - xParentText.set(sw::CreateParentXText(pTextNode->GetDoc(), aPos)); + xParentText = sw::CreateParentXText(pTextNode->GetDoc(), aPos); } if (!xParentText.is()) { diff --git a/sw/source/core/unocore/unocrsrhelper.cxx b/sw/source/core/unocore/unocrsrhelper.cxx index d68169643f81..935b165bf274 100644 --- a/sw/source/core/unocore/unocrsrhelper.cxx +++ b/sw/source/core/unocore/unocrsrhelper.cxx @@ -651,7 +651,7 @@ bool getCursorPropertyValue(const SfxItemPropertyMapEntry& rEntry { if (pAny) { - uno::Reference<text::XTextContent> xParagraph = SwXParagraph::CreateXParagraph(pTextNode->GetDoc(), pTextNode); + uno::Reference<text::XTextContent> xParagraph = SwXParagraph::CreateXParagraph(pTextNode->GetDoc(), pTextNode, nullptr); *pAny <<= xParagraph; } } diff --git a/sw/source/core/unocore/unoobj2.cxx b/sw/source/core/unocore/unoobj2.cxx index 04f5ed1e33d5..6e9bf1cfe7e1 100644 --- a/sw/source/core/unocore/unoobj2.cxx +++ b/sw/source/core/unocore/unoobj2.cxx @@ -1250,10 +1250,10 @@ SwXTextRange::CreateXTextRange( namespace sw { -uno::Reference< text::XText > +css::uno::Reference< SwXText > CreateParentXText(SwDoc & rDoc, const SwPosition& rPos) { - uno::Reference< text::XText > xParentText; + css::uno::Reference< SwXText > xParentText; SwStartNode* pSttNode = rPos.GetNode().StartOfSectionNode(); while(pSttNode && pSttNode->IsSectionNode()) { @@ -1332,8 +1332,8 @@ CreateParentXText(SwDoc & rDoc, const SwPosition& rPos) if (pSttNode == pTextFootnote->GetStartNode()->GetNode(). FindSttNodeByType(SwFootnoteStartNode)) { - xParentText.set(SwXFootnote::CreateXFootnote(rDoc, - &const_cast<SwFormatFootnote&>(rFootnote))); + xParentText = SwXFootnote::CreateXFootnote(rDoc, + &const_cast<SwFormatFootnote&>(rFootnote)); break; } } @@ -1347,7 +1347,7 @@ CreateParentXText(SwDoc & rDoc, const SwPosition& rPos) const uno::Reference<frame::XModel> xModel = pDocSh->GetBaseModel(); const uno::Reference< text::XTextDocument > xDoc( xModel, uno::UNO_QUERY); - xParentText = xDoc->getText(); + xParentText = dynamic_cast<SwXText*>(xDoc->getText().get()); } } } diff --git a/sw/source/core/unocore/unoparagraph.cxx b/sw/source/core/unocore/unoparagraph.cxx index 15f9b56c490f..198f23ff2272 100644 --- a/sw/source/core/unocore/unoparagraph.cxx +++ b/sw/source/core/unocore/unoparagraph.cxx @@ -125,11 +125,11 @@ public: sal_Int32 m_nSelectionStartPos; sal_Int32 m_nSelectionEndPos; OUString m_sText; - uno::Reference<text::XText> m_xParentText; + css::uno::Reference<SwXText> m_xParentText; SwTextNode* m_pTextNode; Impl(SwXParagraph& rThis, - SwTextNode* const pTextNode = nullptr, uno::Reference<text::XText> xParent = nullptr, + SwTextNode* const pTextNode = nullptr, css::uno::Reference<SwXText> xParent = nullptr, const sal_Int32 nSelStart = -1, const sal_Int32 nSelEnd = -1) : m_rThis(rThis) , m_rPropSet(*aSwMapProvider.GetPropertySet(PROPERTY_MAP_PARAGRAPH)) @@ -219,7 +219,7 @@ SwXParagraph::SwXParagraph() } SwXParagraph::SwXParagraph( - uno::Reference< text::XText > const & xParent, + css::uno::Reference< SwXText > const & xParent, SwTextNode & rTextNode, const sal_Int32 nSelStart, const sal_Int32 nSelEnd) : m_pImpl( @@ -243,7 +243,7 @@ bool SwXParagraph::IsDescriptor() const rtl::Reference<SwXParagraph> SwXParagraph::CreateXParagraph(SwDoc & rDoc, SwTextNode *const pTextNode, - uno::Reference< text::XText> const& i_xParent, + css::uno::Reference< SwXText> const& i_xParent, const sal_Int32 nSelStart, const sal_Int32 nSelEnd) { // re-use existing SwXParagraph @@ -259,11 +259,11 @@ SwXParagraph::CreateXParagraph(SwDoc & rDoc, SwTextNode *const pTextNode, } // create new SwXParagraph - uno::Reference<text::XText> xParentText(i_xParent); + css::uno::Reference<SwXText> xParentText(i_xParent); if (!xParentText.is() && pTextNode) { SwPosition Pos(*pTextNode); - xParentText.set(::sw::CreateParentXText( rDoc, Pos )); + xParentText = ::sw::CreateParentXText( rDoc, Pos ); } SwXParagraph *const pXPara( pTextNode ? new SwXParagraph(xParentText, *pTextNode, nSelStart, nSelEnd) diff --git a/sw/source/core/unocore/unoportenum.cxx b/sw/source/core/unocore/unoportenum.cxx index fd6cc626336b..642a49ae1805 100644 --- a/sw/source/core/unocore/unoportenum.cxx +++ b/sw/source/core/unocore/unoportenum.cxx @@ -1,4 +1,5 @@ /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * This file is part of the LibreOffice project. * @@ -23,6 +24,7 @@ #include <utility> #include <unoport.hxx> +#include <unotext.hxx> #include <IMark.hxx> #include <crossrefbookmark.hxx> #include <annotationmark.hxx> @@ -74,7 +76,7 @@ typedef std::stack< PortionList_t > PortionStack_t; static void lcl_CreatePortions( TextRangeList_t & i_rPortions, - uno::Reference< text::XText > const& i_xParentText, + css::uno::Reference< SwXText > const& i_xParentText, SwUnoCursor* pUnoCursor, FrameClientSortList_t & i_rFrames, const sal_Int32 i_nStartPos, const sal_Int32 i_nEndPos, bool bOnlyTextFields ); @@ -296,7 +298,7 @@ Sequence< OUString > SwXTextPortionEnumeration::getSupportedServiceNames() SwXTextPortionEnumeration::SwXTextPortionEnumeration( SwPaM& rParaCursor, - uno::Reference< XText > const & xParentText, + css::uno::Reference< SwXText > const & xParentText, const sal_Int32 nStart, const sal_Int32 nEnd, bool bOnlyTextFields) @@ -516,7 +518,7 @@ lcl_CreateTOXMarkPortion( static uno::Reference<text::XTextRange> lcl_CreateMetaPortion( - uno::Reference<text::XText> const& xParent, + css::uno::Reference<SwXText> const& xParent, const SwUnoCursor * const pUnoCursor, SwTextAttr & rAttr, std::unique_ptr<TextRangeList_t const> && pPortions) { @@ -542,7 +544,7 @@ lcl_CreateMetaPortion( /// Creates a text portion that has a non-empty ContentControl property. static uno::Reference<text::XTextRange> -lcl_CreateContentControlPortion(const uno::Reference<text::XText>& xParent, +lcl_CreateContentControlPortion(const css::uno::Reference<SwXText>& xParent, const SwUnoCursor* pUnoCursor, SwTextAttr& rAttr, std::unique_ptr<const TextRangeList_t>&& pPortions) { @@ -701,7 +703,7 @@ SwXRedlinePortion_ImplList; static Reference<XTextRange> lcl_ExportHints( PortionStack_t & rPortionStack, - const Reference<XText> & xParent, + const css::uno::Reference<SwXText> & xParent, SwUnoCursor * const pUnoCursor, SwpHints const * const pHints, const sal_Int32 i_nStartPos, @@ -1330,7 +1332,7 @@ static sal_Int32 lcl_GetNextIndex( static void lcl_CreatePortions( TextRangeList_t & i_rPortions, - uno::Reference< text::XText > const & i_xParentText, + css::uno::Reference< SwXText > const & i_xParentText, SwUnoCursor * const pUnoCursor, FrameClientSortList_t & i_rFrames, const sal_Int32 i_nStartPos, diff --git a/sw/source/core/unocore/unorefmk.cxx b/sw/source/core/unocore/unorefmk.cxx index 20d3b7d323d1..feb403c05f0d 100644 --- a/sw/source/core/unocore/unorefmk.cxx +++ b/sw/source/core/unocore/unorefmk.cxx @@ -516,8 +516,7 @@ SwXMetaText::SwXMetaText(SwDoc & rDoc, SwXMeta & rMeta) const SwStartNode *SwXMetaText::GetStartNode() const { - SwXText const * const pParent( - dynamic_cast<SwXText*>(m_rMeta.GetParentText().get())); + SwXText const * const pParent = m_rMeta.GetParentText().get(); return pParent ? pParent->GetStartNode() : nullptr; } @@ -588,13 +587,13 @@ public: // 3 possible states: not attached, attached, disposed bool m_bIsDisposed; bool m_bIsDescriptor; - uno::Reference<text::XText> m_xParentText; + css::uno::Reference<SwXText> m_xParentText; rtl::Reference<SwXMetaText> m_xText; sw::Meta* m_pMeta; Impl(SwXMeta& rThis, SwDoc& rDoc, ::sw::Meta* const pMeta, - uno::Reference<text::XText> xParentText, + css::uno::Reference<SwXText> xParentText, std::unique_ptr<TextRangeList_t const> pPortions) : m_pTextPortions(std::move(pPortions)) , m_bIsDisposed(false) @@ -639,13 +638,13 @@ void SwXMeta::Impl::Notify(const SfxHint& rHint) m_EventListeners.disposeAndClear(aGuard, ev); } -uno::Reference<text::XText> const & SwXMeta::GetParentText() const +css::uno::Reference<SwXText> const & SwXMeta::GetParentText() const { return m_pImpl->m_xParentText; } SwXMeta::SwXMeta(SwDoc *const pDoc, ::sw::Meta *const pMeta, - uno::Reference<text::XText> const& xParentText, + css::uno::Reference<SwXText> const& xParentText, std::unique_ptr<TextRangeList_t const> pPortions) : m_pImpl( new SwXMeta::Impl(*this, *pDoc, pMeta, xParentText, std::move(pPortions)) ) { @@ -673,7 +672,7 @@ SwXMeta::CreateXMeta(SwDoc & rDoc, bool const isField) rtl::Reference<SwXMeta> SwXMeta::CreateXMeta(::sw::Meta & rMeta, - uno::Reference<text::XText> const& i_xParent, + css::uno::Reference<SwXText> i_xParent, std::unique_ptr<TextRangeList_t const> && pPortions) { // re-use existing SwXMeta @@ -691,7 +690,7 @@ SwXMeta::CreateXMeta(::sw::Meta & rMeta, if (xMeta->m_pImpl->m_xParentText.get() != i_xParent.get()) { SAL_WARN("sw.uno", "SwXMeta with different parent?"); - xMeta->m_pImpl->m_xParentText.set(i_xParent); + xMeta->m_pImpl->m_xParentText = i_xParent; } } return xMeta; @@ -701,14 +700,14 @@ SwXMeta::CreateXMeta(::sw::Meta & rMeta, SwTextNode * const pTextNode( rMeta.GetTextNode() ); SAL_WARN_IF(!pTextNode, "sw.uno", "CreateXMeta: no text node?"); if (!pTextNode) { return nullptr; } - uno::Reference<text::XText> xParentText(i_xParent); + css::uno::Reference<SwXText> xParentText(i_xParent); if (!xParentText.is()) { SwTextMeta * const pTextAttr( rMeta.GetTextAttr() ); SAL_WARN_IF(!pTextAttr, "sw.uno", "CreateXMeta: no text attr?"); if (!pTextAttr) { return nullptr; } const SwPosition aPos(*pTextNode, pTextAttr->GetStart()); - xParentText.set( ::sw::CreateParentXText(pTextNode->GetDoc(), aPos) ); + xParentText = ::sw::CreateParentXText(pTextNode->GetDoc(), aPos); } if (!xParentText.is()) { return nullptr; } // this is why the constructor is private: need to acquire pXMeta here @@ -1190,7 +1189,7 @@ inline const ::sw::MetaField* SwXMeta::Impl::GetMetaField() const } SwXMetaField::SwXMetaField(SwDoc *const pDoc, ::sw::Meta *const pMeta, - uno::Reference<text::XText> const& xParentText, + css::uno::Reference<SwXText> const& xParentText, std::unique_ptr<TextRangeList_t const> pPortions) : SwXMetaField_Base(pDoc, pMeta, xParentText, std::move(pPortions)) { diff --git a/sw/source/core/unocore/unosect.cxx b/sw/source/core/unocore/unosect.cxx index 69ec954d063a..490bd8d1c435 100644 --- a/sw/source/core/unocore/unosect.cxx +++ b/sw/source/core/unocore/unosect.cxx @@ -19,6 +19,7 @@ #include <memory> #include <unosection.hxx> +#include <unotext.hxx> #include <com/sun/star/beans/PropertyAttribute.hpp> #include <com/sun/star/lang/WrappedTargetRuntimeException.hpp> @@ -391,7 +392,7 @@ SwXTextSection::attach(const uno::Reference< text::XTextRange > & xTextRange) static_cast< ::cppu::OWeakObject*>(this), 0); } m_pImpl->Attach(pRet->GetFormat()); - pRet->GetFormat()->SetXObject(static_cast< ::cppu::OWeakObject*>(this)); + pRet->GetFormat()->SetXObject(static_cast<cppu::OWeakObject*>(this)); // XML import must hide sections depending on their old // condition status @@ -451,8 +452,8 @@ SwXTextSection::getAnchor() } if (isMoveIntoTable) { - uno::Reference<text::XText> const xParentText( - ::sw::CreateParentXText(*pSectFormat->GetDoc(), SwPosition(*pIdx))); + css::uno::Reference<SwXText> const xParentText = + ::sw::CreateParentXText(*pSectFormat->GetDoc(), SwPosition(*pIdx)); xRet = new SwXTextRange(*pSectFormat); } else // for compatibility, keep the old way in this case diff --git a/sw/source/core/unocore/unotext.cxx b/sw/source/core/unocore/unotext.cxx index f0d6c05b1693..9ca70148accd 100644 --- a/sw/source/core/unocore/unotext.cxx +++ b/sw/source/core/unocore/unotext.cxx @@ -2535,17 +2535,17 @@ class SwXHeadFootText::Impl } }; -uno::Reference<text::XText> SwXHeadFootText::CreateXHeadFootText( +rtl::Reference<SwXHeadFootText> SwXHeadFootText::CreateXHeadFootText( SwFrameFormat& rHeadFootFormat, const bool bIsHeader) { // re-use existing SwXHeadFootText // #i105557#: do not iterate over the registered clients: race condition - uno::Reference<text::XText> xText(rHeadFootFormat.GetXObject(), uno::UNO_QUERY); + rtl::Reference<SwXHeadFootText> xText = dynamic_cast<SwXHeadFootText*>(rHeadFootFormat.GetXObject().get().get()); if(!xText.is()) { xText = new SwXHeadFootText(rHeadFootFormat, bIsHeader); - rHeadFootFormat.SetXObject(xText); + rHeadFootFormat.SetXObject(static_cast<cppu::OWeakObject*>(xText.get())); } return xText; }