sc/source/filter/oox/formulabase.cxx |   32 +++++++++++-------------
 sw/source/filter/xml/xmltbli.cxx     |   45 +++++++++++++----------------------
 sw/source/ui/vba/vbatables.cxx       |    8 ++----
 3 files changed, 35 insertions(+), 50 deletions(-)

New commits:
commit 2c24c34ffd8189c8d178c629c45ba069e317fa4b
Author:     Noel Grandin <[email protected]>
AuthorDate: Sat Jun 14 22:29:09 2025 +0200
Commit:     Noel Grandin <[email protected]>
CommitDate: Mon Jun 16 14:16:01 2025 +0200

    use more concrete UNO classes
    
    Change-Id: I6c529368e58a04949994a0fa3758fd835738d1f1
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/186529
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <[email protected]>

diff --git a/sw/source/filter/xml/xmltbli.cxx b/sw/source/filter/xml/xmltbli.cxx
index 55dc2041664a..ad4090904be1 100644
--- a/sw/source/filter/xml/xmltbli.cxx
+++ b/sw/source/filter/xml/xmltbli.cxx
@@ -1191,25 +1191,19 @@ SwXMLTableContext::SwXMLTableContext( SwXMLImport& 
rImport,
             ->GetRenameMap().Add( XML_TEXT_RENAME_TYPE_TABLE, aName, 
sTableName );
     }
 
-    Reference< XTextTable > xTable;
-    SwXTextTable *pXTable = nullptr;
-    Reference<XMultiServiceFactory> xFactory( GetImport().GetModel(),
-                                              UNO_QUERY );
+    rtl::Reference< SwXTextTable > xTable;
+    Reference<XMultiServiceFactory> xFactory( GetImport().GetModel(), 
UNO_QUERY );
     OSL_ENSURE( xFactory.is(), "factory missing" );
     if( xFactory.is() )
     {
-        Reference<XInterface> xIfc = xFactory->createInstance( 
u"com.sun.star.text.TextTable"_ustr );
-        OSL_ENSURE( xIfc.is(), "Couldn't create a table" );
-
-        if( xIfc.is() )
-            xTable.set( xIfc, UNO_QUERY );
+        xTable = SwXTextTable::CreateXTextTable(nullptr);
+        OSL_ENSURE( xTable.is(), "Couldn't create a table" );
     }
 
     if( xTable.is() )
     {
         xTable->initialize( 1, 1 );
-        if (auto xPropSet = xTable.query<css::beans::XPropertySet>())
-            xPropSet->setPropertyValue(UNO_NAME_TABLE_NAME, 
css::uno::Any(sTableName));
+        xTable->setPropertyValue(UNO_NAME_TABLE_NAME, 
css::uno::Any(sTableName));
 
         try
         {
@@ -1222,27 +1216,22 @@ SwXMLTableContext::SwXMLTableContext( SwXMLImport& 
rImport,
         }
     }
 
-    if( xTable.is() )
-    {
-        //FIXME
-        // xml:id for RDF metadata
-        GetImport().SetXmlId(xTable, sXmlId);
+    if( !xTable )
+        return;
 
-        pXTable = dynamic_cast<SwXTextTable*>(xTable.get());
+    //FIXME
+    // xml:id for RDF metadata
+    GetImport().SetXmlId(uno::Reference<XTextTable>(xTable), sXmlId);
 
-        Reference < XCellRange > xCellRange( xTable, UNO_QUERY );
-        Reference < XCell > xCell = xCellRange->getCellByPosition( 0, 0 );
-        Reference < XText> xText( xCell, UNO_QUERY );
-        m_xOldCursor = GetImport().GetTextImport()->GetCursor();
-        GetImport().GetTextImport()->SetCursor( xText->createTextCursor() );
+    Reference < XCell > xCell = xTable->getCellByPosition( 0, 0 );
+    Reference < XText> xText( xCell, UNO_QUERY );
+    m_xOldCursor = GetImport().GetTextImport()->GetCursor();
+    GetImport().GetTextImport()->SetCursor( xText->createTextCursor() );
 
-        // take care of open redlines for tables
-        GetImport().GetTextImport()->RedlineAdjustStartNodeCursor();
-    }
-    if( !pXTable )
-        return;
+    // take care of open redlines for tables
+    GetImport().GetTextImport()->RedlineAdjustStartNodeCursor();
 
-    SwFrameFormat *const pTableFrameFormat = pXTable->GetFrameFormat();
+    SwFrameFormat *const pTableFrameFormat = xTable->GetFrameFormat();
     OSL_ENSURE( pTableFrameFormat, "table format missing" );
     SwTable *pTable = SwTable::FindTable( pTableFrameFormat );
     assert(pTable && "table missing");
diff --git a/sw/source/ui/vba/vbatables.cxx b/sw/source/ui/vba/vbatables.cxx
index 2dfa3f5099d1..81ecc0608b73 100644
--- a/sw/source/ui/vba/vbatables.cxx
+++ b/sw/source/ui/vba/vbatables.cxx
@@ -180,18 +180,16 @@ SwVbaTables::Add( const uno::Reference< word::XRange >& 
Range, const uno::Any& N
     rtl::Reference< SwXTextDocument > xModel( pVbaRange->getDocument() );
     uno::Reference< text::XTextRange > xTextRange = pVbaRange->getXTextRange();
 
-    uno::Reference< text::XTextTable > xTable;
-    xTable.set( xModel->createInstance(u"com.sun.star.text.TextTable"_ustr), 
uno::UNO_QUERY_THROW );
+    rtl::Reference< SwXTextTable > 
xTable(SwXTextTable::CreateXTextTable(nullptr));
 
     xTable->initialize( nRows, nCols );
     uno::Reference< text::XText > xText = xTextRange->getText();
-    uno::Reference< text::XTextContent > xContext( xTable, 
uno::UNO_QUERY_THROW );
+    uno::Reference< text::XTextContent > xContext( xTable );
 
     xText->insertTextContent( xTextRange, xContext, true );
 
     // move the current cursor to the first table cell
-    uno::Reference< table::XCellRange > xCellRange( xTable, 
uno::UNO_QUERY_THROW );
-    uno::Reference< text::XText> xFirstCellText( 
xCellRange->getCellByPosition(0, 0), uno::UNO_QUERY_THROW );
+    uno::Reference< text::XText> xFirstCellText( xTable->getCellByPosition(0, 
0), uno::UNO_QUERY_THROW );
     word::getXTextViewCursor( mxDocument )->gotoRange( 
xFirstCellText->getStart(), false );
 
     uno::Reference< word::XTable > xVBATable( new SwVbaTable( mxParent, 
mxContext,  pVbaRange->getDocument(), xTable ) );
commit 4799786a080dfe7cc74e6d516c7a3ccd45c52043
Author:     Noel Grandin <[email protected]>
AuthorDate: Sat Jun 14 21:41:49 2025 +0200
Commit:     Noel Grandin <[email protected]>
CommitDate: Mon Jun 16 14:15:51 2025 +0200

    use more concrete UNO classes
    
    Change-Id: Icb8123dea4d9b0648069d991a80e178089514e60
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/186528
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <[email protected]>

diff --git a/sc/source/filter/oox/formulabase.cxx 
b/sc/source/filter/oox/formulabase.cxx
index 3d38bb22a455..60610682c6c7 100644
--- a/sc/source/filter/oox/formulabase.cxx
+++ b/sc/source/filter/oox/formulabase.cxx
@@ -45,6 +45,7 @@
 #include <oox/token/properties.hxx>
 #include <o3tl/typed_flags_set.hxx>
 #include <o3tl/string_view.hxx>
+#include <formula/FormulaCompiler.hxx>
 
 namespace {
 
@@ -1188,9 +1189,9 @@ private:
     typedef ::std::map< OUString, ApiToken >    ApiTokenMap;
     typedef Sequence< FormulaOpCodeMapEntry >   OpCodeEntrySequence;
 
-    static bool         fillEntrySeq( OpCodeEntrySequence& orEntrySeq, const 
Reference< XFormulaOpCodeMapper >& rxMapper, sal_Int32 nMapGroup );
-    static bool         fillTokenMap( ApiTokenMap& orTokenMap, 
OpCodeEntrySequence& orEntrySeq, const Reference< XFormulaOpCodeMapper >& 
rxMapper, sal_Int32 nMapGroup );
-    bool                fillFuncTokenMaps( ApiTokenMap& orIntFuncTokenMap, 
ApiTokenMap& orExtFuncTokenMap, OpCodeEntrySequence& orEntrySeq, const 
Reference< XFormulaOpCodeMapper >& rxMapper ) const;
+    static bool         fillEntrySeq( OpCodeEntrySequence& orEntrySeq, const 
formula::FormulaCompiler& rMapper, sal_Int32 nMapGroup );
+    static bool         fillTokenMap( ApiTokenMap& orTokenMap, 
OpCodeEntrySequence& orEntrySeq, const formula::FormulaCompiler& rMapper, 
sal_Int32 nMapGroup );
+    bool                fillFuncTokenMaps( ApiTokenMap& orIntFuncTokenMap, 
ApiTokenMap& orExtFuncTokenMap, OpCodeEntrySequence& orEntrySeq, const 
formula::FormulaCompiler& rMapper ) const;
 
     static bool         initOpCode( sal_Int32& ornOpCode, const 
OpCodeEntrySequence& rEntrySeq, sal_Int32 nSpecialId );
     bool                initOpCode( sal_Int32& ornOpCode, const ApiTokenMap& 
rTokenMap, const OUString& rOdfName, const OUString& rOoxName );
@@ -1209,12 +1210,11 @@ OpCodeProviderImpl::OpCodeProviderImpl( const 
FunctionInfoVector& rFuncInfos,
 
     try
     {
-        Reference< XFormulaOpCodeMapper > xMapper( 
rxModelFactory->createInstance(
-            u"com.sun.star.sheet.FormulaOpCodeMapper"_ustr ), UNO_QUERY_THROW 
);
+        formula::FormulaCompiler xMapper;
 
         // op-codes provided as attributes
-        OPCODE_UNKNOWN = xMapper->getOpCodeUnknown();
-        OPCODE_EXTERNAL = xMapper->getOpCodeExternal();
+        OPCODE_UNKNOWN = 
formula::FormulaCompiler::OpCodeMap::getOpCodeUnknown();
+        OPCODE_EXTERNAL = ocExternal;
 
         using namespace ::com::sun::star::sheet::FormulaMapGroup;
         using namespace ::com::sun::star::sheet::FormulaMapGroupSpecialOffset;
@@ -1283,24 +1283,22 @@ OpCodeProviderImpl::OpCodeProviderImpl( const 
FunctionInfoVector& rFuncInfos,
 }
 
 bool OpCodeProviderImpl::fillEntrySeq( OpCodeEntrySequence& orEntrySeq,
-        const Reference< XFormulaOpCodeMapper >& rxMapper, sal_Int32 nMapGroup 
)
+        const formula::FormulaCompiler& rMapper, sal_Int32 nMapGroup )
 {
-    try
+    formula::FormulaCompiler::OpCodeMapPtr xMap = 
rMapper.GetOpCodeMap(css::sheet::FormulaLanguage::ODFF);
+    if (xMap)
     {
-        orEntrySeq = rxMapper->getAvailableMappings( 
css::sheet::FormulaLanguage::ODFF, nMapGroup );
+        orEntrySeq = xMap->createSequenceOfAvailableMappings( rMapper, 
nMapGroup);
         return orEntrySeq.hasElements();
     }
-    catch( Exception& )
-    {
-    }
     return false;
 }
 
 bool OpCodeProviderImpl::fillTokenMap( ApiTokenMap& orTokenMap, 
OpCodeEntrySequence& orEntrySeq,
-        const Reference< XFormulaOpCodeMapper >& rxMapper, sal_Int32 nMapGroup 
)
+        const formula::FormulaCompiler& rMapper, sal_Int32 nMapGroup )
 {
     orTokenMap.clear();
-    if( fillEntrySeq( orEntrySeq, rxMapper, nMapGroup ) )
+    if( fillEntrySeq( orEntrySeq, rMapper, nMapGroup ) )
     {
         for (const FormulaOpCodeMapEntry& rEntry : orEntrySeq)
             orTokenMap[ rEntry.Name ] = rEntry.Token;
@@ -1308,11 +1306,11 @@ bool OpCodeProviderImpl::fillTokenMap( ApiTokenMap& 
orTokenMap, OpCodeEntrySeque
     return orEntrySeq.hasElements();
 }
 
-bool OpCodeProviderImpl::fillFuncTokenMaps( ApiTokenMap& orIntFuncTokenMap, 
ApiTokenMap& orExtFuncTokenMap, OpCodeEntrySequence& orEntrySeq, const 
Reference< XFormulaOpCodeMapper >& rxMapper ) const
+bool OpCodeProviderImpl::fillFuncTokenMaps( ApiTokenMap& orIntFuncTokenMap, 
ApiTokenMap& orExtFuncTokenMap, OpCodeEntrySequence& orEntrySeq, const 
formula::FormulaCompiler& rMapper ) const
 {
     orIntFuncTokenMap.clear();
     orExtFuncTokenMap.clear();
-    if( fillEntrySeq( orEntrySeq, rxMapper, 
css::sheet::FormulaMapGroup::FUNCTIONS ) )
+    if( fillEntrySeq( orEntrySeq, rMapper, 
css::sheet::FormulaMapGroup::FUNCTIONS ) )
     {
         for (const FormulaOpCodeMapEntry& rEntry : orEntrySeq)
             ((rEntry.Token.OpCode == OPCODE_EXTERNAL) ? orExtFuncTokenMap : 
orIntFuncTokenMap)[ rEntry.Name ] = rEntry.Token;

Reply via email to