sw/source/core/doc/DocumentFieldsManager.cxx |    9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

New commits:
commit 7f4b53b1c7c192ecfef35913133239b670070062
Author:     Bjoern Michaelsen <bjoern.michael...@libreoffice.org>
AuthorDate: Mon Mar 20 00:07:49 2023 +0100
Commit:     Michael Stahl <michael.st...@allotropia.de>
CommitDate: Wed Mar 22 10:58:54 2023 +0000

    UpdateTableFields: stronger assertions
    
    - And use {Static,Dynamic}WhichCast where possible
    
    Change-Id: Ie5097d360ddb0a5cd9980392a9106b9586861001
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/149121
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <michael.st...@allotropia.de>

diff --git a/sw/source/core/doc/DocumentFieldsManager.cxx 
b/sw/source/core/doc/DocumentFieldsManager.cxx
index 3503ba053e68..a395dc352392 100644
--- a/sw/source/core/doc/DocumentFieldsManager.cxx
+++ b/sw/source/core/doc/DocumentFieldsManager.cxx
@@ -598,12 +598,11 @@ void DocumentFieldsManager::UpdateRefFields()
 
 void DocumentFieldsManager::UpdateTableFields( SfxPoolItem* pHt )
 {
-    OSL_ENSURE( !pHt || RES_TABLEFML_UPDATE  == pHt->Which(),
-            "What MessageItem is this?" );
     SwTableFormulaUpdate* pUpdateField = nullptr;
     if(pHt && RES_TABLEFML_UPDATE == pHt->Which())
         pUpdateField = static_cast<SwTableFormulaUpdate*>(pHt);
-    assert(!pUpdateField || pUpdateField->m_eFlags != TBL_BOXPTR); // use 
SwTable::SwitchFormulasToInternalRepresentation
+    assert(!pHt || pUpdateField);
+    assert(!pUpdateField || pUpdateField->m_eFlags == TBL_CALC || 
pUpdateField->m_eFlags == TBL_SPLITTBL || pUpdateField->m_eFlags == 
TBL_MERGETBL);
     auto pFieldType = GetFieldType( SwFieldIds::Table, OUString(), false );
     if(pFieldType && (!pUpdateField || pUpdateField->m_eFlags == TBL_CALC))
     {
@@ -640,7 +639,7 @@ void DocumentFieldsManager::UpdateTableFields( SfxPoolItem* 
pHt )
     }
 
     // all fields/boxes are now invalid, so we can start to calculate
-    if(pHt && ( RES_TABLEFML_UPDATE != pHt->Which() || TBL_CALC != 
static_cast<SwTableFormulaUpdate*>(pHt)->m_eFlags))
+    if(pHt && pUpdateField->m_eFlags != TBL_CALC)
         return;
 
     std::optional<SwCalc> oCalc;
@@ -730,7 +729,7 @@ void DocumentFieldsManager::UpdateTableFields( SfxPoolItem* 
pHt )
     // calculate the formula at the boxes
     for (const SfxPoolItem* pItem : 
m_rDoc.GetAttrPool().GetItemSurrogates(RES_BOXATR_FORMULA))
     {
-        auto pFormula = const_cast<SwTableBoxFormula*>(dynamic_cast<const 
SwTableBoxFormula*>(pItem));
+        auto pFormula = 
const_cast<SwTableBoxFormula*>(pItem->DynamicWhichCast(RES_BOXATR_FORMULA));
         if(!pFormula || !pFormula->GetDefinedIn() || pFormula->IsValid())
             continue;
         SwTableBox* pBox = pFormula->GetTableBox();

Reply via email to