sw/source/filter/ascii/wrtasc.cxx        |    5 -
 sw/source/filter/basflt/fltini.cxx       |   13 +-
 sw/source/filter/html/css1atr.cxx        |   61 ++++--------
 sw/source/filter/html/htmlatr.cxx        |   49 +++-------
 sw/source/filter/html/htmlcss1.cxx       |  149 +++++++++++++------------------
 sw/source/filter/html/htmldrawreader.cxx |    7 -
 sw/source/filter/html/htmlflywriter.cxx  |   99 ++++++++------------
 sw/source/filter/html/htmlform.cxx       |   64 ++++---------
 sw/source/filter/html/htmlgrin.cxx       |   13 +-
 sw/source/filter/html/htmlplug.cxx       |    7 -
 sw/source/filter/html/htmlsect.cxx       |   34 ++-----
 sw/source/filter/html/htmltab.cxx        |   52 ++++------
 sw/source/filter/html/htmltabw.cxx       |   15 +--
 sw/source/filter/html/svxcss1.cxx        |   60 ++++--------
 sw/source/filter/html/swhtml.cxx         |   10 --
 sw/source/filter/html/wrthtml.cxx        |   58 ++++--------
 sw/source/filter/writer/wrtswtbl.cxx     |   29 ++----
 17 files changed, 287 insertions(+), 438 deletions(-)

New commits:
commit 04e325131f3aeec0910257b261c9624de2b59542
Author:     Noel Grandin <noel.gran...@collabora.co.uk>
AuthorDate: Thu Mar 3 09:55:14 2022 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Fri Mar 4 07:51:18 2022 +0100

    use SfxItemSet::GetItemIfSet in sw/source/filter
    
    Change-Id: I8712a42236310a268fcbd7c47c01899333f4731c
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/130904
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/sw/source/filter/ascii/wrtasc.cxx 
b/sw/source/filter/ascii/wrtasc.cxx
index e13b4efc9414..db256e667663 100644
--- a/sw/source/filter/ascii/wrtasc.cxx
+++ b/sw/source/filter/ascii/wrtasc.cxx
@@ -210,12 +210,11 @@ void SwASCWriter::SetupFilterOptions(SfxMedium& rMedium)
     const SfxItemSet* pSet = rMedium.GetItemSet();
     if( nullptr != pSet )
     {
-        const SfxPoolItem* pItem;
-        if( SfxItemState::SET == pSet->GetItemState( SID_FILE_FILTEROPTIONS, 
true, &pItem ) )
+        if( const SfxStringItem* pItem = pSet->GetItemIfSet( 
SID_FILE_FILTEROPTIONS ) )
         {
             SwAsciiOptions aOpt;
             OUString sItemOpt;
-            sItemOpt = static_cast<const SfxStringItem*>(pItem)->GetValue();
+            sItemOpt = pItem->GetValue();
             aOpt.ReadUserData(sItemOpt);
             SetAsciiOptions(aOpt);
         }
diff --git a/sw/source/filter/basflt/fltini.cxx 
b/sw/source/filter/basflt/fltini.cxx
index 8e421a3610b4..7948fa0782c6 100644
--- a/sw/source/filter/basflt/fltini.cxx
+++ b/sw/source/filter/basflt/fltini.cxx
@@ -271,13 +271,12 @@ void StgReader::SetFltName( const OUString& rFltNm )
 void CalculateFlySize(SfxItemSet& rFlySet, const SwNodeIndex& rAnchor,
         SwTwips nPageWidth)
 {
-    const SfxPoolItem* pItem = nullptr;
-    if( SfxItemState::SET != rFlySet.GetItemState( RES_FRM_SIZE, true, &pItem 
) ||
-            MINFLY > static_cast<const SwFormatFrameSize*>(pItem)->GetWidth() )
+    const SwFormatFrameSize* pFrameSizeItem = rFlySet.GetItemIfSet( 
RES_FRM_SIZE );
+    if( !pFrameSizeItem || MINFLY > pFrameSizeItem->GetWidth() )
     {
         std::unique_ptr<SwFormatFrameSize> 
aSz(rFlySet.Get(RES_FRM_SIZE).Clone());
-        if (pItem)
-            aSz.reset(static_cast<SwFormatFrameSize*>(pItem->Clone()));
+        if (pFrameSizeItem)
+            aSz.reset(pFrameSizeItem->Clone());
 
         SwTwips nWidth;
         // determine the width; if there is a table use the width of the table;
@@ -369,9 +368,9 @@ void CalculateFlySize(SfxItemSet& rFlySet, const 
SwNodeIndex& rAnchor,
             aSz->SetHeight( MINFLY );
         rFlySet.Put( *aSz );
     }
-    else if( MINFLY > static_cast<const 
SwFormatFrameSize*>(pItem)->GetHeight() )
+    else if( MINFLY > pFrameSizeItem->GetHeight() )
     {
-        std::unique_ptr<SwFormatFrameSize> 
aSz(static_cast<SwFormatFrameSize*>(pItem->Clone()));
+        std::unique_ptr<SwFormatFrameSize> aSz(pFrameSizeItem->Clone());
         aSz->SetHeight( MINFLY );
         rFlySet.Put( std::move(aSz) );
     }
diff --git a/sw/source/filter/html/css1atr.cxx 
b/sw/source/filter/html/css1atr.cxx
index 882d7678ef55..ef3274ac6faf 100644
--- a/sw/source/filter/html/css1atr.cxx
+++ b/sw/source/filter/html/css1atr.cxx
@@ -1192,12 +1192,10 @@ bool SwHTMLWriter::HasScriptDependentItems( const 
SfxItemSet& rItemSet,
         }
     }
 
-    const SfxPoolItem *pItem;
+    const SwFormatDrop *pDrop;
     if( bCheckDropCap &&
-        SfxItemState::SET == rItemSet.GetItemState( RES_PARATR_DROP, true,
-                &pItem ) )
+        (pDrop = rItemSet.GetItemIfSet( RES_PARATR_DROP )) )
     {
-        const SwFormatDrop *pDrop = static_cast<const SwFormatDrop *>(pItem);
         const SwCharFormat *pDCCharFormat = pDrop->GetCharFormat();
         if( pDCCharFormat )
         {
@@ -1580,12 +1578,10 @@ static Writer& OutCSS1_SwFormat( Writer& rWrt, const 
SwFormat& rFormat,
     }
 
     // export Drop-Caps
-    const SfxPoolItem *pItem;
-    if( SfxItemState::SET==aItemSet.GetItemState( RES_PARATR_DROP, false, 
&pItem ))
+    if( const SwFormatDrop *pDrop = aItemSet.GetItemIfSet( RES_PARATR_DROP, 
false ) )
     {
         OUString sOut = aSelector +
             ":" + OStringToOUString( sCSS1_first_letter, 
RTL_TEXTENCODING_ASCII_US );
-        const SwFormatDrop *pDrop = static_cast<const SwFormatDrop *>(pItem);
         OutCSS1DropCapRule( rHTMLWrt, sOut, *pDrop, CSS1_FMT_ISTAG != nDeep, 
bHasScriptDependencies );
     }
 
@@ -2924,14 +2920,8 @@ static Writer& OutCSS1_SvxULSpace_SvxLRSpace( Writer& 
rWrt,
 static Writer& OutCSS1_SvxULSpace_SvxLRSpace( Writer& rWrt,
                                         const SfxItemSet& rItemSet )
 {
-    const SvxULSpaceItem *pULSpace = nullptr;
-    const SvxLRSpaceItem *pLRSpace = nullptr;
-    const SfxPoolItem *pItem;
-    if( SfxItemState::SET == rItemSet.GetItemState( RES_LR_SPACE, 
false/*bDeep*/, &pItem ) )
-        pLRSpace = static_cast<const SvxLRSpaceItem *>(pItem);
-
-    if( SfxItemState::SET == rItemSet.GetItemState( RES_UL_SPACE, 
false/*bDeep*/, &pItem ) )
-        pULSpace = static_cast<const SvxULSpaceItem *>(pItem);
+    const SvxLRSpaceItem *pLRSpace = rItemSet.GetItemIfSet( RES_LR_SPACE, 
false/*bDeep*/ );
+    const SvxULSpaceItem *pULSpace = rItemSet.GetItemIfSet( RES_UL_SPACE, 
false/*bDeep*/ );
 
     if( pLRSpace || pULSpace )
         OutCSS1_SvxULSpace_SvxLRSpace( rWrt, pULSpace, pLRSpace );
@@ -3015,22 +3005,16 @@ static Writer& 
OutCSS1_SvxFormatBreak_SwFormatPDesc_SvxFormatKeep( Writer& rWrt,
                                         bool bDeep )
 {
     SwHTMLWriter& rHTMLWrt = static_cast<SwHTMLWriter&>(rWrt);
-    const SfxPoolItem *pItem;
-    const SvxFormatBreakItem *pBreakItem = nullptr;
-    if( SfxItemState::SET==rItemSet.GetItemState( RES_BREAK, bDeep, &pItem ))
-        pBreakItem = static_cast<const SvxFormatBreakItem *>(pItem);
+    const SvxFormatBreakItem *pBreakItem = rItemSet.GetItemIfSet( RES_BREAK, 
bDeep );
 
     const SwFormatPageDesc *pPDescItem = nullptr;
-    if( ( !rHTMLWrt.IsCSS1Source( CSS1_OUTMODE_PARA ) ||
-          !rHTMLWrt.m_bCSS1IgnoreFirstPageDesc ||
-          rHTMLWrt.m_pStartNdIdx->GetIndex() !=
-                      rHTMLWrt.m_pCurrentPam->GetPoint()->nNode.GetIndex() ) &&
-        SfxItemState::SET==rItemSet.GetItemState( RES_PAGEDESC, bDeep, &pItem 
))
-        pPDescItem = static_cast<const SwFormatPageDesc*>(pItem);
+    if( !rHTMLWrt.IsCSS1Source( CSS1_OUTMODE_PARA ) ||
+        !rHTMLWrt.m_bCSS1IgnoreFirstPageDesc ||
+        rHTMLWrt.m_pStartNdIdx->GetIndex() !=
+                    rHTMLWrt.m_pCurrentPam->GetPoint()->nNode.GetIndex() )
+        pPDescItem = rItemSet.GetItemIfSet( RES_PAGEDESC, bDeep );
 
-    const SvxFormatKeepItem *pKeepItem = nullptr;
-    if( SfxItemState::SET==rItemSet.GetItemState( RES_KEEP, bDeep, &pItem ))
-        pKeepItem = static_cast<const SvxFormatKeepItem *>(pItem);
+    const SvxFormatKeepItem *pKeepItem = rItemSet.GetItemIfSet( RES_KEEP, 
bDeep );
 
     if( pBreakItem || pPDescItem || pKeepItem )
         OutCSS1_SvxFormatBreak_SwFormatPDesc_SvxFormatKeep( rWrt, pBreakItem,
@@ -3585,27 +3569,22 @@ void SwHTMLWriter::OutCSS1_SfxItemSet( const 
SfxItemSet& rItemSet,
     Out_SfxItemSet( aCSS1AttrFnTab, *this, rItemSet, bDeep );
 
     // some Attributes require special treatment
-    const SfxPoolItem *pItem = nullptr;
 
     // Underline, Overline, CrossedOut and Blink form together a CSS1-Property
     // (doesn't work of course for Hints)
     if( !IsCSS1Source(CSS1_OUTMODE_HINT) )
     {
-        const SvxUnderlineItem *pUnderlineItem = nullptr;
-        if( SfxItemState::SET==rItemSet.GetItemState( RES_CHRATR_UNDERLINE, 
bDeep, &pItem ))
-            pUnderlineItem = static_cast<const SvxUnderlineItem *>(pItem);
+        const SvxUnderlineItem *pUnderlineItem =
+            rItemSet.GetItemIfSet( RES_CHRATR_UNDERLINE, bDeep );
 
-        const SvxOverlineItem *pOverlineItem = nullptr;
-        if( SfxItemState::SET==rItemSet.GetItemState( RES_CHRATR_OVERLINE, 
bDeep, &pItem ))
-            pOverlineItem = static_cast<const SvxOverlineItem *>(pItem);
+        const SvxOverlineItem *pOverlineItem =
+            rItemSet.GetItemIfSet( RES_CHRATR_OVERLINE, bDeep );
 
-        const SvxCrossedOutItem *pCrossedOutItem = nullptr;
-        if( SfxItemState::SET==rItemSet.GetItemState( RES_CHRATR_CROSSEDOUT, 
bDeep, &pItem ))
-            pCrossedOutItem = static_cast<const SvxCrossedOutItem *>(pItem);
+        const SvxCrossedOutItem *pCrossedOutItem =
+            rItemSet.GetItemIfSet( RES_CHRATR_CROSSEDOUT, bDeep );
 
-        const SvxBlinkItem *pBlinkItem = nullptr;
-        if( SfxItemState::SET==rItemSet.GetItemState( RES_CHRATR_BLINK, bDeep, 
&pItem ))
-            pBlinkItem = static_cast<const SvxBlinkItem *>(pItem);
+        const SvxBlinkItem *pBlinkItem =
+            rItemSet.GetItemIfSet( RES_CHRATR_BLINK, bDeep );
 
         if( pUnderlineItem || pOverlineItem || pCrossedOutItem || pBlinkItem )
             OutCSS1_SvxTextLn_SvxCrOut_SvxBlink( *this, pUnderlineItem,
diff --git a/sw/source/filter/html/htmlatr.cxx 
b/sw/source/filter/html/htmlatr.cxx
index f14285238f89..cf3bb40c9ce0 100644
--- a/sw/source/filter/html/htmlatr.cxx
+++ b/sw/source/filter/html/htmlatr.cxx
@@ -616,15 +616,10 @@ static void OutHTML_SwFormat( Writer& rWrt, const 
SwFormat& rFormat,
     }
 
     // should an ALIGN=... be written?
-    const SfxPoolItem* pAdjItem = nullptr;
-    const SfxPoolItem* pItem;
+    const SvxAdjustItem* pAdjItem = nullptr;
 
-    if( rInfo.moItemSet &&
-        SfxItemState::SET == rInfo.moItemSet->GetItemState( RES_PARATR_ADJUST,
-                                                      false, &pItem ) )
-    {
-        pAdjItem = pItem;
-    }
+    if( rInfo.moItemSet )
+        pAdjItem = rInfo.moItemSet->GetItemIfSet( RES_PARATR_ADJUST, false );
 
     // Consider the lower spacing of the paragraph? (never in the last
     // paragraph of tables)
@@ -672,8 +667,7 @@ static void OutHTML_SwFormat( Writer& rWrt, const SwFormat& 
rFormat,
         else if( !nNewDefListLvl && !rHWrt.m_bCfgOutStyles && bPara &&
                  rULSpace.GetLower()==0 &&
                  ((bUseParSpace && bIsNextTextNode) || rHWrt.m_nDefListLvl==1) 
&&
-                 (!pAdjItem || SvxAdjust::Left==
-                    static_cast<const SvxAdjustItem *>(pAdjItem)->GetAdjust()) 
)
+                 (!pAdjItem || SvxAdjust::Left==pAdjItem->GetAdjust()) )
         {
             // Export paragraphs without a lower spacing as DT
             nNewDefListLvl = 1;
@@ -819,15 +813,13 @@ static void OutHTML_SwFormat( Writer& rWrt, const 
SwFormat& rFormat,
 
     if( rInfo.moItemSet )
     {
-        static const sal_uInt16 aWhichIds[3] = { RES_CHRATR_LANGUAGE, 
RES_CHRATR_CJK_LANGUAGE, RES_CHRATR_CTL_LANGUAGE };
+        static const TypedWhichId<SvxLanguageItem> aWhichIds[3] = { 
RES_CHRATR_LANGUAGE, RES_CHRATR_CJK_LANGUAGE, RES_CHRATR_CTL_LANGUAGE };
 
-        for(sal_uInt16 i : aWhichIds)
+        for(auto const & i : aWhichIds)
         {
             // export language if it differs from the default language only.
-            const SfxPoolItem *pTmpItem;
-            if( SfxItemState::SET == rInfo.moItemSet->GetItemState( i,
-                        true, &pTmpItem ) &&
-                static_cast<const SvxLanguageItem *>(pTmpItem)->GetLanguage() 
== eLang )
+            const SvxLanguageItem* pTmpItem = rInfo.moItemSet->GetItemIfSet( i 
);
+            if( pTmpItem && pTmpItem->GetLanguage() == eLang )
                 rInfo.moItemSet->ClearItem( i );
         }
     }
@@ -2039,11 +2031,10 @@ Writer& OutHTML_SwTextNode( Writer& rWrt, const 
SwContentNode& rNode )
             aHtml.endAttribute();
             return rHTMLWrt;
         }
-        const SfxPoolItem* pItem;
-        if( SfxItemState::SET == pItemSet->GetItemState( RES_LR_SPACE, false, 
&pItem ))
+        if( const SvxLRSpaceItem* pItem = pItemSet->GetItemIfSet( 
RES_LR_SPACE, false ))
         {
-            sal_Int32 nLeft = static_cast<const 
SvxLRSpaceItem*>(pItem)->GetLeft();
-            sal_Int32 nRight = static_cast<const 
SvxLRSpaceItem*>(pItem)->GetRight();
+            sal_Int32 nLeft = pItem->GetLeft();
+            sal_Int32 nRight = pItem->GetRight();
             if( nLeft || nRight )
             {
                 const SwFrameFormat& rPgFormat =
@@ -2079,9 +2070,8 @@ Writer& OutHTML_SwTextNode( Writer& rWrt, const 
SwContentNode& rNode )
             }
         }
 
-        if( SfxItemState::SET == pItemSet->GetItemState( RES_BOX, false, 
&pItem ))
+        if( const SvxBoxItem* pBoxItem = pItemSet->GetItemIfSet( RES_BOX, 
false ))
         {
-            const SvxBoxItem* pBoxItem = static_cast<const SvxBoxItem*>(pItem);
             const editeng::SvxBorderLine* pBorderLine = pBoxItem->GetBottom();
             if( pBorderLine )
             {
@@ -2113,11 +2103,11 @@ Writer& OutHTML_SwTextNode( Writer& rWrt, const 
SwContentNode& rNode )
                   nPoolId == RES_POOLCOLL_TABLE_HDLN) )
     {
         // The current node is empty and contains the standard style ...
-        const SfxPoolItem* pItem;
+        const SvxFontHeightItem* pFontHeightItem;
         const SfxItemSet* pItemSet = pNd->GetpSwAttrSet();
         if( pItemSet && pItemSet->Count() &&
-            SfxItemState::SET == pItemSet->GetItemState( RES_CHRATR_FONTSIZE, 
false, &pItem ) &&
-            40 == static_cast<const SvxFontHeightItem *>(pItem)->GetHeight() )
+            (pFontHeightItem = pItemSet->GetItemIfSet( RES_CHRATR_FONTSIZE, 
false )) &&
+            40 == pFontHeightItem->GetHeight() )
         {
             // ... moreover, the 2pt font is set ...
             SwNodeOffset nNdPos = 
rWrt.m_pCurrentPam->GetPoint()->nNode.GetIndex();
@@ -2150,19 +2140,18 @@ Writer& OutHTML_SwTextNode( Writer& rWrt, const 
SwContentNode& rNode )
         rHTMLWrt.m_pStartNdIdx->GetIndex() != 
rHTMLWrt.m_pCurrentPam->GetPoint()->nNode.GetIndex() )
     {
         bool bPageBreakBefore = false;
-        const SfxPoolItem* pItem;
         const SfxItemSet* pItemSet = pNd->GetpSwAttrSet();
 
         if( pItemSet )
         {
-            if( SfxItemState::SET == pItemSet->GetItemState( RES_PAGEDESC, 
true, &pItem ) &&
-                static_cast<const SwFormatPageDesc *>(pItem)->GetPageDesc() )
+            const SwFormatPageDesc* pPageDescItem = pItemSet->GetItemIfSet( 
RES_PAGEDESC );
+            if( pPageDescItem && pPageDescItem->GetPageDesc() )
             {
                 bPageBreakBefore = true;
             }
-            else if( SfxItemState::SET == pItemSet->GetItemState( RES_BREAK, 
true, &pItem ) )
+            else if( const SvxFormatBreakItem* pItem = pItemSet->GetItemIfSet( 
RES_BREAK ) )
             {
-                switch( static_cast<const SvxFormatBreakItem 
*>(pItem)->GetBreak() )
+                switch( pItem->GetBreak() )
                 {
                 case SvxBreak::PageBefore:
                     bPageBreakBefore = true;
diff --git a/sw/source/filter/html/htmlcss1.cxx 
b/sw/source/filter/html/htmlcss1.cxx
index 110fc35e4cfe..2572820be953 100644
--- a/sw/source/filter/html/htmlcss1.cxx
+++ b/sw/source/filter/html/htmlcss1.cxx
@@ -178,14 +178,12 @@ bool SwCSS1Parser::SetFormatBreak( SfxItemSet& rItemSet,
 
 static void SetCharFormatAttrs( SwCharFormat *pCharFormat, SfxItemSet& 
rItemSet )
 {
-    const SfxPoolItem *pItem;
-    static const sal_uInt16 aWhichIds[3] = { 
RES_CHRATR_FONTSIZE,RES_CHRATR_CJK_FONTSIZE,
+    static const TypedWhichId<SvxFontHeightItem> aWhichIds[3] = { 
RES_CHRATR_FONTSIZE,RES_CHRATR_CJK_FONTSIZE,
                                    RES_CHRATR_CTL_FONTSIZE };
-    for(sal_uInt16 i : aWhichIds)
+    for(auto const & i : aWhichIds)
     {
-        if( SfxItemState::SET == rItemSet.GetItemState( i, false,
-                                                   &pItem ) &&
-            static_cast<const SvxFontHeightItem *>(pItem)->GetProp() != 100)
+        const SvxFontHeightItem* pItem = rItemSet.GetItemIfSet( i, false );
+        if( pItem && pItem->GetProp() != 100)
         {
             // percentage values at the FontHeight item aren't supported
             rItemSet.ClearItem( i );
@@ -194,19 +192,19 @@ static void SetCharFormatAttrs( SwCharFormat 
*pCharFormat, SfxItemSet& rItemSet
 
     pCharFormat->SetFormatAttr( rItemSet );
 
-    if( SfxItemState::SET == rItemSet.GetItemState( RES_BACKGROUND, false, 
&pItem ) )
+    if( const SvxBrushItem* pItem = rItemSet.GetItemIfSet( RES_BACKGROUND, 
false ) )
     {
         // A Brush-Item with RES_BACKGROUND must be converted to one
         // with RES_CHRATR_BACKGROUND
 
-        SvxBrushItem aBrushItem( *static_cast<const SvxBrushItem *>(pItem) );
+        SvxBrushItem aBrushItem( *pItem );
         aBrushItem.SetWhich( RES_CHRATR_BACKGROUND );
         pCharFormat->SetFormatAttr( aBrushItem );
     }
 
-    if( SfxItemState::SET == rItemSet.GetItemState( RES_BOX, false, &pItem ) )
+    if( const SvxBoxItem* pItem = rItemSet.GetItemIfSet( RES_BOX, false ) )
     {
-        SvxBoxItem aBoxItem( *static_cast<const SvxBoxItem *>(pItem) );
+        SvxBoxItem aBoxItem( *pItem );
         aBoxItem.SetWhich( RES_CHRATR_BOX );
         pCharFormat->SetFormatAttr( aBoxItem );
     }
@@ -269,19 +267,18 @@ static void SetTextCollAttrs( SwTextFormatColl *pColl, 
SfxItemSet& rItemSet,
                              SwCSS1Parser *pCSS1Parser )
 {
     const SfxItemSet& rCollItemSet = pColl->GetAttrSet();
-    const SfxPoolItem *pCollItem, *pItem;
+    const SvxLRSpaceItem* pCollLRItem;
+    const SvxLRSpaceItem* pLRItem;
 
     // left, right border and first line indentation
     if( (rPropInfo.m_bLeftMargin || rPropInfo.m_bRightMargin ||
          rPropInfo.m_bTextIndent) &&
         (!rPropInfo.m_bLeftMargin || !rPropInfo.m_bRightMargin ||
          !rPropInfo.m_bTextIndent) &&
-        SfxItemState::SET == 
rCollItemSet.GetItemState(RES_LR_SPACE,true,&pCollItem) &&
-        SfxItemState::SET == rItemSet.GetItemState(RES_LR_SPACE,false,&pItem) )
+        (pCollLRItem = rCollItemSet.GetItemIfSet(RES_LR_SPACE)) &&
+        (pLRItem = rItemSet.GetItemIfSet(RES_LR_SPACE,false)) )
     {
-        const SvxLRSpaceItem *pLRItem = static_cast<const SvxLRSpaceItem 
*>(pItem);
-
-        SvxLRSpaceItem aLRItem( *static_cast<const SvxLRSpaceItem 
*>(pCollItem) );
+        SvxLRSpaceItem aLRItem( *pCollLRItem );
         if( rPropInfo.m_bLeftMargin )
             aLRItem.SetTextLeft( pLRItem->GetTextLeft() );
         if( rPropInfo.m_bRightMargin )
@@ -293,15 +290,14 @@ static void SetTextCollAttrs( SwTextFormatColl *pColl, 
SfxItemSet& rItemSet,
     }
 
     // top and bottom border
+    const SvxULSpaceItem* pCollULItem;
+    const SvxULSpaceItem* pULItem;
     if( (rPropInfo.m_bTopMargin || rPropInfo.m_bBottomMargin) &&
         (!rPropInfo.m_bTopMargin || !rPropInfo.m_bBottomMargin) &&
-        SfxItemState::SET == rCollItemSet.GetItemState(RES_UL_SPACE,true,
-                                                  &pCollItem) &&
-        SfxItemState::SET == rItemSet.GetItemState(RES_UL_SPACE,false,&pItem) )
+        (pCollULItem = rCollItemSet.GetItemIfSet(RES_UL_SPACE)) &&
+        (pULItem = rItemSet.GetItemIfSet(RES_UL_SPACE,false)) )
     {
-        const SvxULSpaceItem *pULItem = static_cast<const SvxULSpaceItem 
*>(pItem);
-
-        SvxULSpaceItem aULItem( *static_cast<const SvxULSpaceItem 
*>(pCollItem) );
+        SvxULSpaceItem aULItem( *pCollULItem );
         if( rPropInfo.m_bTopMargin )
             aULItem.SetUpper( pULItem->GetUpper() );
         if( rPropInfo.m_bBottomMargin )
@@ -310,13 +306,12 @@ static void SetTextCollAttrs( SwTextFormatColl *pColl, 
SfxItemSet& rItemSet,
         rItemSet.Put( aULItem );
     }
 
-    static const sal_uInt16 aWhichIds[3] = { 
RES_CHRATR_FONTSIZE,RES_CHRATR_CJK_FONTSIZE,
+    static const TypedWhichId<SvxFontHeightItem> aWhichIds[3] = { 
RES_CHRATR_FONTSIZE,RES_CHRATR_CJK_FONTSIZE,
                                    RES_CHRATR_CTL_FONTSIZE };
-    for(sal_uInt16 i : aWhichIds)
+    for(auto const & i : aWhichIds)
     {
-        if( SfxItemState::SET == rItemSet.GetItemState( i, false,
-                                                   &pItem ) &&
-            static_cast<const SvxFontHeightItem *>(pItem)->GetProp() != 100)
+        const SvxFontHeightItem* pItem = rItemSet.GetItemIfSet( i, false );
+        if( pItem && pItem->GetProp() != 100)
         {
             // percentage values at the FontHeight item aren't supported
             rItemSet.ClearItem( i );
@@ -385,28 +380,26 @@ void SwCSS1Parser::SetPageDescAttrs( const SvxBrushItem 
*pBrush,
 
     if( pItemSet2 )
     {
-        const SfxPoolItem *pItem = nullptr;
-        if( SfxItemState::SET == pItemSet2->GetItemState( RES_BACKGROUND, 
false,
-                                                   &pItem ) )
+        if( const SvxBrushItem* pItem = pItemSet2->GetItemIfSet( 
RES_BACKGROUND, false ) )
         {
             // set a background
-            aBrushItem.reset(&pItem->Clone()->StaticWhichCast(RES_BACKGROUND));
+            aBrushItem.reset(pItem->Clone());
             pItemSet2->ClearItem( RES_BACKGROUND );
             bSetBrush = true;
         }
 
-        if( SfxItemState::SET == pItemSet2->GetItemState( RES_BOX, false, 
&pItem ) )
+        if( const SvxBoxItem* pItem = pItemSet2->GetItemIfSet( RES_BOX, false 
) )
         {
             // set a border
-            aBoxItem.reset(&pItem->Clone()->StaticWhichCast(RES_BOX));
+            aBoxItem.reset(pItem->Clone());
             pItemSet2->ClearItem( RES_BOX );
             bSetBox = true;
         }
 
-        if( SfxItemState::SET == pItemSet2->GetItemState( RES_FRAMEDIR, false, 
&pItem ) )
+        if( const SvxFrameDirectionItem* pItem = pItemSet2->GetItemIfSet( 
RES_FRAMEDIR, false ) )
         {
             // set a frame
-            
aFrameDirItem.reset(&pItem->Clone()->StaticWhichCast(RES_FRAMEDIR));
+            aFrameDirItem.reset(pItem->Clone());
             pItemSet2->ClearItem( RES_FRAMEDIR );
             bSetFrameDir = true;
         }
@@ -447,20 +440,18 @@ void SwCSS1Parser::SetPageDescAttrs( const SwPageDesc 
*pPageDesc,
     SwPageDesc aNewPageDesc( *pPageDesc );
     SwFrameFormat &rMaster = aNewPageDesc.GetMaster();
     const SfxItemSet& rPageItemSet = rMaster.GetAttrSet();
-    const SfxPoolItem *pPageItem, *pItem;
     bool bChanged = false;
 
     // left, right border and first line indentation
+    const SvxLRSpaceItem *pLRItem;
     if( (rPropInfo.m_bLeftMargin || rPropInfo.m_bRightMargin) &&
-        SfxItemState::SET == rItemSet.GetItemState(RES_LR_SPACE,false,&pItem) )
+        (pLRItem = rItemSet.GetItemIfSet(RES_LR_SPACE,false)) )
     {
+        const SvxLRSpaceItem* pPageItem;
         if( (!rPropInfo.m_bLeftMargin || !rPropInfo.m_bRightMargin) &&
-            SfxItemState::SET == rPageItemSet.GetItemState(RES_LR_SPACE,
-                                                      true,&pPageItem) )
+            (pPageItem = rPageItemSet.GetItemIfSet(RES_LR_SPACE)) )
         {
-            const SvxLRSpaceItem *pLRItem = static_cast<const SvxLRSpaceItem 
*>(pItem);
-
-            SvxLRSpaceItem aLRItem( *static_cast<const SvxLRSpaceItem 
*>(pPageItem) );
+            SvxLRSpaceItem aLRItem( *pPageItem );
             if( rPropInfo.m_bLeftMargin )
                 aLRItem.SetLeft( pLRItem->GetLeft() );
             if( rPropInfo.m_bRightMargin )
@@ -470,22 +461,21 @@ void SwCSS1Parser::SetPageDescAttrs( const SwPageDesc 
*pPageDesc,
         }
         else
         {
-            rMaster.SetFormatAttr( *pItem );
+            rMaster.SetFormatAttr( *pLRItem );
         }
         bChanged = true;
     }
 
     // top and bottom border
+    const SvxULSpaceItem *pULItem;
     if( (rPropInfo.m_bTopMargin || rPropInfo.m_bBottomMargin) &&
-        SfxItemState::SET == rItemSet.GetItemState(RES_UL_SPACE,false,&pItem) )
+        (pULItem = rItemSet.GetItemIfSet(RES_UL_SPACE,false)) )
     {
+        const SvxULSpaceItem* pPageItem;
         if( (!rPropInfo.m_bTopMargin || !rPropInfo.m_bBottomMargin) &&
-            SfxItemState::SET == rPageItemSet.GetItemState(RES_UL_SPACE,
-                                                      true,&pPageItem) )
+            (pPageItem = rPageItemSet.GetItemIfSet(RES_UL_SPACE) ) )
         {
-            const SvxULSpaceItem *pULItem = static_cast<const SvxULSpaceItem 
*>(pItem);
-
-            SvxULSpaceItem aULItem( *static_cast<const SvxULSpaceItem 
*>(pPageItem) );
+            SvxULSpaceItem aULItem( *pPageItem );
             if( rPropInfo.m_bTopMargin )
                 aULItem.SetUpper( pULItem->GetUpper() );
             if( rPropInfo.m_bBottomMargin )
@@ -495,7 +485,7 @@ void SwCSS1Parser::SetPageDescAttrs( const SwPageDesc 
*pPageDesc,
         }
         else
         {
-            rMaster.SetFormatAttr( *pItem );
+            rMaster.SetFormatAttr( *pULItem );
         }
         bChanged = true;
     }
@@ -533,7 +523,7 @@ void SwCSS1Parser::SetPageDescAttrs( const SwPageDesc 
*pPageDesc,
     }
 
     // Is that possible?
-    if( SfxItemState::SET == rItemSet.GetItemState( RES_BACKGROUND, false, 
&pItem ) )
+    if( const SvxBrushItem* pItem = rItemSet.GetItemIfSet( RES_BACKGROUND, 
false ) )
     {
         // set a background
         rMaster.SetFormatAttr( *pItem );
@@ -800,12 +790,8 @@ void SwCSS1Parser::StyleParsed( const CSS1Selector 
*pSelector,
 
                 // We must test the background before setting, because
                 // in SetPageDescAttrs it will be deleted.
-                const SfxPoolItem *pItem;
-                if( 
SfxItemState::SET==rItemSet.GetItemState(RES_BACKGROUND,false,&pItem) )
+                if( const SvxBrushItem *pBrushItem = 
rItemSet.GetItemIfSet(RES_BACKGROUND,false) )
                 {
-                    const SvxBrushItem *pBrushItem =
-                        static_cast<const SvxBrushItem *>(pItem);
-
                     /// Body has a background color, if it is not "no 
fill"/"auto fill"
                     if( pBrushItem->GetColor() != COL_TRANSPARENT )
                         m_bBodyBGColorSet = true;
@@ -992,11 +978,8 @@ void SwCSS1Parser::StyleParsed( const CSS1Selector 
*pSelector,
             if( !pNext )
             {
                 // set only the attributes at the style
-                const SfxPoolItem *pItem;
-                const SvxBoxItem *pBoxItem = nullptr;
-                if( SfxItemState::SET ==
-                        pColl->GetAttrSet().GetItemState(RES_BOX,true,&pItem) )
-                    pBoxItem = static_cast<const SvxBoxItem *>(pItem);
+                const SvxBoxItem *pBoxItem =
+                        pColl->GetAttrSet().GetItemIfSet(RES_BOX);
                 rPropInfo.SetBoxItem( rItemSet, MIN_BORDER_DIST, pBoxItem );
                 if( Css1ScriptFlags::AllMask == nScript && !pParentColl )
                 {
@@ -1468,10 +1451,9 @@ void SwCSS1Parser::FillDropCap( SwFormatDrop& rDrop,
     // the number of lines matches somehow a percentage value
     // for the height (what happens with absolute heights???)
     sal_uInt8 nLines = rDrop.GetLines();
-    const SfxPoolItem *pItem;
-    if( SfxItemState::SET == rItemSet.GetItemState( RES_CHRATR_FONTSIZE, 
false, &pItem ) )
+    if( const SvxFontHeightItem* pFontHeightItem = rItemSet.GetItemIfSet( 
RES_CHRATR_FONTSIZE, false ) )
     {
-        sal_uInt16 nProp = static_cast<const SvxFontHeightItem 
*>(pItem)->GetProp();
+        sal_uInt16 nProp = pFontHeightItem->GetProp();
         nLines = static_cast<sal_uInt8>((nProp + 50) / 100);
         if( nLines < 1 )
             nLines = 1;
@@ -1496,10 +1478,10 @@ void SwCSS1Parser::FillDropCap( SwFormatDrop& rDrop,
     rDrop.GetLines() = nLines;
 
     // a right border becomes the spacing to text!
-    if( SfxItemState::SET == rItemSet.GetItemState( RES_LR_SPACE, false, 
&pItem ) )
+    if( const SvxLRSpaceItem* pLRSpaceItem = rItemSet.GetItemIfSet( 
RES_LR_SPACE, false ) )
     {
         rDrop.GetDistance() = static_cast< sal_uInt16 >(
-            static_cast<const SvxLRSpaceItem *>(pItem)->GetRight() );
+            pLRSpaceItem->GetRight() );
         rItemSet.ClearItem( RES_LR_SPACE );
     }
 
@@ -2079,35 +2061,37 @@ void SwHTMLParser::SetFrameFormatAttrs( SfxItemSet 
&rItemSet,
                                    HtmlFrameFormatFlags nFlags,
                                    SfxItemSet &rFrameItemSet )
 {
-    const SfxPoolItem *pItem;
+    const SvxBoxItem *pBoxItem;
     if( (nFlags & HtmlFrameFormatFlags::Box) &&
-        SfxItemState::SET==rItemSet.GetItemState( RES_BOX, true, &pItem ) )
+        (pBoxItem = rItemSet.GetItemIfSet( RES_BOX )) )
     {
         if( nFlags & HtmlFrameFormatFlags::Padding )
         {
-            SvxBoxItem aBoxItem( *static_cast<const SvxBoxItem *>(pItem) );
+            SvxBoxItem aBoxItem( *pBoxItem );
             // reset all 4 sides to 0
             aBoxItem.SetAllDistances(0);
             rFrameItemSet.Put( aBoxItem );
         }
         else
         {
-            rFrameItemSet.Put( *pItem );
+            rFrameItemSet.Put( *pBoxItem );
         }
         rItemSet.ClearItem( RES_BOX );
     }
 
+    const SvxBrushItem* pBrushItem;
     if( (nFlags & HtmlFrameFormatFlags::Background) &&
-        SfxItemState::SET==rItemSet.GetItemState( RES_BACKGROUND, true, &pItem 
) )
+        (pBrushItem = rItemSet.GetItemIfSet( RES_BACKGROUND )) )
     {
-        rFrameItemSet.Put( *pItem );
+        rFrameItemSet.Put( *pBrushItem );
         rItemSet.ClearItem( RES_BACKGROUND );
     }
 
+    const SvxFrameDirectionItem* pFrameDirectionItem;
     if( (nFlags & HtmlFrameFormatFlags::Direction) &&
-        SfxItemState::SET==rItemSet.GetItemState( RES_FRAMEDIR, true, &pItem ) 
)
+        (pFrameDirectionItem = rItemSet.GetItemIfSet( RES_FRAMEDIR )) )
     {
-        rFrameItemSet.Put( *pItem );
+        rFrameItemSet.Put( *pFrameDirectionItem );
         rItemSet.ClearItem( RES_FRAMEDIR );
     }
 }
@@ -2276,20 +2260,19 @@ static void lcl_swcss1_setEncoding( SwFormat& rFormat, 
rtl_TextEncoding eEnc )
         return;
 
     const SfxItemSet& rItemSet = rFormat.GetAttrSet();
-    static const sal_uInt16 aWhichIds[3] = { RES_CHRATR_FONT, 
RES_CHRATR_CJK_FONT,
+    static const TypedWhichId<SvxFontItem> aWhichIds[3] = { RES_CHRATR_FONT, 
RES_CHRATR_CJK_FONT,
                                              RES_CHRATR_CTL_FONT };
-    const SfxPoolItem *pItem;
-    for (sal_uInt16 i : aWhichIds)
+    for (auto const & i : aWhichIds)
     {
-        if (SfxItemState::SET != rItemSet.GetItemState(i, false, &pItem))
+        const SvxFontItem *pFontItem = rItemSet.GetItemIfSet(i, false);
+        if (!pFontItem)
             continue;
-        const SvxFontItem& rFont = *static_cast<const SvxFontItem*>(pItem);
-        if (RTL_TEXTENCODING_SYMBOL == rFont.GetCharSet())
+        if (RTL_TEXTENCODING_SYMBOL == pFontItem->GetCharSet())
             continue;
-        if (eEnc == rFont.GetCharSet())
+        if (eEnc == pFontItem->GetCharSet())
             continue;
-        SvxFontItem aFont(rFont.GetFamily(), rFont.GetFamilyName(),
-                          rFont.GetStyleName(), rFont.GetPitch(),
+        SvxFontItem aFont(pFontItem->GetFamily(), pFontItem->GetFamilyName(),
+                          pFontItem->GetStyleName(), pFontItem->GetPitch(),
                           eEnc, i);
         rFormat.SetFormatAttr(aFont);
     }
diff --git a/sw/source/filter/html/htmldrawreader.cxx 
b/sw/source/filter/html/htmldrawreader.cxx
index a6f42fc7f42c..240c206c61e2 100644
--- a/sw/source/filter/html/htmldrawreader.cxx
+++ b/sw/source/filter/html/htmldrawreader.cxx
@@ -98,11 +98,9 @@ void SwHTMLParser::InsertDrawObject( SdrObject* pNewDrawObj,
     }
 
     // set left/right border
-    const SfxPoolItem *pItem;
-    if( SfxItemState::SET==rCSS1ItemSet.GetItemState( RES_LR_SPACE, true, 
&pItem ) )
+    if( const SvxLRSpaceItem* pLRItem = rCSS1ItemSet.GetItemIfSet( 
RES_LR_SPACE ) )
     {
         // maybe flatten the first line indentation
-        const SvxLRSpaceItem *pLRItem = static_cast<const SvxLRSpaceItem 
*>(pItem);
         SvxLRSpaceItem aLRItem( *pLRItem );
         aLRItem.SetTextFirstLineOffset( 0 );
         if( rCSS1PropInfo.m_bLeftMargin )
@@ -126,10 +124,9 @@ void SwHTMLParser::InsertDrawObject( SdrObject* 
pNewDrawObj,
     }
 
     // set top/bottom border
-    if( SfxItemState::SET==rCSS1ItemSet.GetItemState( RES_UL_SPACE, true, 
&pItem ) )
+    if( const SvxULSpaceItem* pULItem = rCSS1ItemSet.GetItemIfSet( 
RES_UL_SPACE ) )
     {
         // maybe flatten the first line indentation
-        const SvxULSpaceItem *pULItem = static_cast<const SvxULSpaceItem 
*>(pItem);
         if( rCSS1PropInfo.m_bTopMargin )
         {
             nUpperSpace = pULItem->GetUpper();
diff --git a/sw/source/filter/html/htmlflywriter.cxx 
b/sw/source/filter/html/htmlflywriter.cxx
index 05c0ad6f847f..ade669f80b79 100644
--- a/sw/source/filter/html/htmlflywriter.cxx
+++ b/sw/source/filter/html/htmlflywriter.cxx
@@ -211,11 +211,9 @@ sal_uInt16 SwHTMLWriter::GuessFrameType( const 
SwFrameFormat& rFrameFormat,
         {
             SwNodeOffset nEnd = 
m_pDoc->GetNodes()[nStt-1]->EndOfSectionIndex();
 
-            const SfxPoolItem* pItem;
             const SfxItemSet& rItemSet = rFrameFormat.GetAttrSet();
-            if( SfxItemState::SET == rItemSet.GetItemState( RES_COL,
-                                                       true, &pItem ) &&
-                static_cast<const SwFormatCol *>(pItem)->GetNumCols() > 1 )
+            const SwFormatCol* pFormatCol = rItemSet.GetItemIfSet( RES_COL );
+            if( pFormatCol && pFormatCol->GetNumCols() > 1 )
             {
                 // frame with columns
                 eType = HTML_FRMTYPE_MULTICOL;
@@ -524,7 +522,6 @@ OString SwHTMLWriter::OutFrameFormatOptions( const 
SwFrameFormat &rFrameFormat,
 {
     OString sRetEndTags;
     OStringBuffer sOut;
-    const SfxPoolItem* pItem;
     const SfxItemSet& rItemSet = rFrameFormat.GetAttrSet();
 
     // Name
@@ -575,12 +572,13 @@ OString SwHTMLWriter::OutFrameFormatOptions( const 
SwFrameFormat &rFrameFormat,
                         : OOO_STRING_SVTOOLS_HTML_AL_left;
         }
     }
+    const SwFormatVertOrient* pVertOrient;
     if( (nFrameOpts & HtmlFrmOpts::Align) && !pStr &&
         ( !(nFrameOpts & HtmlFrmOpts::SAlign) ||
           (RndStdIds::FLY_AS_CHAR == eAnchorId) ) &&
-        SfxItemState::SET == rItemSet.GetItemState( RES_VERT_ORIENT, true, 
&pItem ))
+        (pVertOrient = rItemSet.GetItemIfSet( RES_VERT_ORIENT )) )
     {
-        switch( static_cast<const SwFormatVertOrient*>(pItem)->GetVertOrient() 
)
+        switch( pVertOrient->GetVertOrient() )
         {
         case text::VertOrientation::LINE_TOP:     pStr = 
OOO_STRING_SVTOOLS_HTML_VA_top;        break;
         case text::VertOrientation::CHAR_TOP:
@@ -602,20 +600,20 @@ OString SwHTMLWriter::OutFrameFormatOptions( const 
SwFrameFormat &rFrameFormat,
 
     // HSPACE and VSPACE
     Size aTwipSpc( 0, 0 );
+    const SvxLRSpaceItem* pLRSpaceItem;
     if( (nFrameOpts & (HtmlFrmOpts::Space|HtmlFrmOpts::MarginSize)) &&
-        SfxItemState::SET == rItemSet.GetItemState( RES_LR_SPACE, true, &pItem 
))
+        (pLRSpaceItem = rItemSet.GetItemIfSet( RES_LR_SPACE )) )
     {
         aTwipSpc.setWidth(
-            ( static_cast<const SvxLRSpaceItem*>(pItem)->GetLeft() +
-                static_cast<const SvxLRSpaceItem*>(pItem)->GetRight() ) / 2 );
+            ( pLRSpaceItem->GetLeft() + pLRSpaceItem->GetRight() ) / 2 );
         m_nDfltLeftMargin = m_nDfltRightMargin = aTwipSpc.Width();
     }
+    const SvxULSpaceItem* pULSpaceItem;
     if( (nFrameOpts & (HtmlFrmOpts::Space|HtmlFrmOpts::MarginSize)) &&
-        SfxItemState::SET == rItemSet.GetItemState( RES_UL_SPACE, true, &pItem 
))
+        (pULSpaceItem = rItemSet.GetItemIfSet( RES_UL_SPACE )) )
     {
         aTwipSpc.setHeight(
-            ( static_cast<const SvxULSpaceItem*>(pItem)->GetUpper() +
-                static_cast<const SvxULSpaceItem*>(pItem)->GetLower() ) / 2 );
+            ( pULSpaceItem->GetUpper() + pULSpaceItem->GetLower() ) / 2 );
         m_nDfltTopMargin = m_nDfltBottomMargin = 
o3tl::narrowing<sal_uInt16>(aTwipSpc.Height());
     }
 
@@ -657,11 +655,10 @@ OString SwHTMLWriter::OutFrameFormatOptions( const 
SwFrameFormat &rFrameFormat,
         aTwipSpc.setHeight( 0 );
     }
 
+    const SvxBoxItem* pBoxItem;
     if( !(nFrameOpts & HtmlFrmOpts::AbsSize) &&
-        SfxItemState::SET == rItemSet.GetItemState( RES_BOX, true, &pItem ))
+        (pBoxItem = rItemSet.GetItemIfSet( RES_BOX )) )
     {
-        const SvxBoxItem* pBoxItem = static_cast<const SvxBoxItem*>(pItem);
-
         aTwipSpc.AdjustWidth(pBoxItem->CalcLineSpace( SvxBoxItemLine::LEFT ) );
         aTwipSpc.AdjustWidth(pBoxItem->CalcLineSpace( SvxBoxItemLine::RIGHT ) 
);
         aTwipSpc.AdjustHeight(pBoxItem->CalcLineSpace( SvxBoxItemLine::TOP ) );
@@ -670,12 +667,12 @@ OString SwHTMLWriter::OutFrameFormatOptions( const 
SwFrameFormat &rFrameFormat,
 
     // WIDTH and/or HEIGHT
     // Output SwFrameSize::Variable/SwFrameSize::Minimum only, if ANYSIZE is 
set
+    const SwFormatFrameSize *pFSItem;
     if( (nFrameOpts & HtmlFrmOpts::Size) &&
-        SfxItemState::SET == rItemSet.GetItemState( RES_FRM_SIZE, true, &pItem 
) &&
+        (pFSItem = rItemSet.GetItemIfSet( RES_FRM_SIZE )) &&
         ( (nFrameOpts & HtmlFrmOpts::AnySize) ||
-          SwFrameSize::Fixed == static_cast<const SwFormatFrameSize 
*>(pItem)->GetHeightSizeType()) )
+          SwFrameSize::Fixed == pFSItem->GetHeightSizeType()) )
     {
-        const SwFormatFrameSize *pFSItem = static_cast<const SwFormatFrameSize 
*>(pItem);
         sal_uInt8 nPercentWidth = pFSItem->GetWidthPercent();
         sal_uInt8 nPercentHeight = pFSItem->GetHeightPercent();
 
@@ -732,12 +729,12 @@ OString SwHTMLWriter::OutFrameFormatOptions( const 
SwFrameFormat &rFrameFormat,
 
     // Insert wrap for graphics that are anchored to a paragraph as
     // <BR CLEAR=...> in the string
+    const SwFormatSurround* pSurround;
     if( (nFrameOpts & HtmlFrmOpts::BrClear) &&
         ((RndStdIds::FLY_AT_PARA == rFrameFormat.GetAnchor().GetAnchorId()) ||
          (RndStdIds::FLY_AT_CHAR == rFrameFormat.GetAnchor().GetAnchorId())) &&
-        SfxItemState::SET == rItemSet.GetItemState( RES_SURROUND, true, &pItem 
))
+        (pSurround = rItemSet.GetItemIfSet( RES_SURROUND )) )
     {
-        const SwFormatSurround* pSurround = static_cast<const 
SwFormatSurround*>(pItem);
         sal_Int16 eHoriOri =    rFrameFormat.GetHoriOrient().GetHoriOrient();
         pStr = nullptr;
         css::text::WrapTextMode eSurround = pSurround->GetSurround();
@@ -800,7 +797,6 @@ OString SwHTMLWriter::OutFrameFormatOptions( const 
SwFrameFormat &rFrameFormat,
 void SwHTMLWriter::writeFrameFormatOptions(HtmlWriter& aHtml, const 
SwFrameFormat& rFrameFormat, std::u16string_view rAlternateText, HtmlFrmOpts 
nFrameOptions)
 {
     bool bReplacement = (nFrameOptions & HtmlFrmOpts::Replacement) || mbReqIF;
-    const SfxPoolItem* pItem;
     const SfxItemSet& rItemSet = rFrameFormat.GetAttrSet();
 
     // Name
@@ -841,12 +837,13 @@ void SwHTMLWriter::writeFrameFormatOptions(HtmlWriter& 
aHtml, const SwFrameForma
                         : OOO_STRING_SVTOOLS_HTML_AL_left;
         }
     }
+    const SwFormatVertOrient* pVertOrient;
     if( (nFrameOptions & HtmlFrmOpts::Align) && !pAlignString &&
         ( !(nFrameOptions & HtmlFrmOpts::SAlign) ||
           (RndStdIds::FLY_AS_CHAR == eAnchorId) ) &&
-        SfxItemState::SET == rItemSet.GetItemState( RES_VERT_ORIENT, true, 
&pItem ))
+        (pVertOrient = rItemSet.GetItemIfSet( RES_VERT_ORIENT )) )
     {
-        switch( static_cast<const SwFormatVertOrient*>(pItem)->GetVertOrient() 
)
+        switch( pVertOrient->GetVertOrient() )
         {
         case text::VertOrientation::LINE_TOP:     pAlignString = 
OOO_STRING_SVTOOLS_HTML_VA_top;        break;
         case text::VertOrientation::CHAR_TOP:
@@ -867,20 +864,20 @@ void SwHTMLWriter::writeFrameFormatOptions(HtmlWriter& 
aHtml, const SwFrameForma
 
     // hspace and vspace
     Size aTwipSpc( 0, 0 );
+    const SvxLRSpaceItem* pLRSpaceItem;
     if( (nFrameOptions & (HtmlFrmOpts::Space | HtmlFrmOpts::MarginSize)) &&
-        SfxItemState::SET == rItemSet.GetItemState( RES_LR_SPACE, true, &pItem 
))
+        (pLRSpaceItem = rItemSet.GetItemIfSet( RES_LR_SPACE )) )
     {
         aTwipSpc.setWidth(
-            ( static_cast<const SvxLRSpaceItem*>(pItem)->GetLeft() +
-                static_cast<const SvxLRSpaceItem*>(pItem)->GetRight() ) / 2 );
+            ( pLRSpaceItem->GetLeft() + pLRSpaceItem->GetRight() ) / 2 );
         m_nDfltLeftMargin = m_nDfltRightMargin = aTwipSpc.Width();
     }
+    const SvxULSpaceItem* pULSpaceItem;
     if( (nFrameOptions & (HtmlFrmOpts::Space|HtmlFrmOpts::MarginSize)) &&
-        SfxItemState::SET == rItemSet.GetItemState( RES_UL_SPACE, true, &pItem 
))
+        (pULSpaceItem = rItemSet.GetItemIfSet( RES_UL_SPACE )) )
     {
         aTwipSpc.setHeight(
-            ( static_cast<const SvxULSpaceItem*>(pItem)->GetUpper() +
-                static_cast<const SvxULSpaceItem*>(pItem)->GetLower() ) / 2 );
+            ( pULSpaceItem->GetUpper() + pULSpaceItem->GetLower() ) / 2 );
         m_nDfltTopMargin = m_nDfltBottomMargin = 
o3tl::narrowing<sal_uInt16>(aTwipSpc.Height());
     }
 
@@ -920,11 +917,10 @@ void SwHTMLWriter::writeFrameFormatOptions(HtmlWriter& 
aHtml, const SwFrameForma
         aTwipSpc.setHeight( 0 );
     }
 
+    const SvxBoxItem* pBoxItem;
     if( !(nFrameOptions & HtmlFrmOpts::AbsSize) &&
-        SfxItemState::SET == rItemSet.GetItemState( RES_BOX, true, &pItem ))
+        (pBoxItem = rItemSet.GetItemIfSet( RES_BOX )) )
     {
-        const SvxBoxItem* pBoxItem = static_cast<const SvxBoxItem*>(pItem);
-
         aTwipSpc.AdjustWidth(pBoxItem->CalcLineSpace( SvxBoxItemLine::LEFT ) );
         aTwipSpc.AdjustWidth(pBoxItem->CalcLineSpace( SvxBoxItemLine::RIGHT ) 
);
         aTwipSpc.AdjustHeight(pBoxItem->CalcLineSpace( SvxBoxItemLine::TOP ) );
@@ -933,13 +929,10 @@ void SwHTMLWriter::writeFrameFormatOptions(HtmlWriter& 
aHtml, const SwFrameForma
 
     // "width" and/or "height"
     // Only output SwFrameSize::Variable/SwFrameSize::Minimum if ANYSIZE is set
-    const SwFormatFrameSize* pFSItem = nullptr;
     std::optional<SwFormatFrameSize> aFrameSize;
-    if (SfxItemState::SET == rItemSet.GetItemState( RES_FRM_SIZE, true, &pItem 
))
-    {
-        pFSItem = static_cast<const SwFormatFrameSize *>(pItem);
-    }
-    else if (const SdrObject* pObject = rFrameFormat.FindSdrObject())
+    const SwFormatFrameSize* pFSItem = rItemSet.GetItemIfSet( RES_FRM_SIZE );
+    const SdrObject* pObject;
+    if (!pFSItem && (pObject = rFrameFormat.FindSdrObject()))
     {
         // Write size for Draw shapes as well.
         const tools::Rectangle& rSnapRect = pObject->GetSnapRect();
@@ -1014,12 +1007,12 @@ void SwHTMLWriter::writeFrameFormatOptions(HtmlWriter& 
aHtml, const SwFrameForma
     RndStdIds nAnchorId = rFrameFormat.GetAnchor().GetAnchorId();
     if (RndStdIds::FLY_AT_PARA != nAnchorId && RndStdIds::FLY_AT_CHAR != 
nAnchorId)
         return;
-    if( SfxItemState::SET != rItemSet.GetItemState( RES_SURROUND, true, &pItem 
) )
+    const SwFormatSurround* pSurround = rItemSet.GetItemIfSet( RES_SURROUND );
+    if (!pSurround)
         return;
 
     const char* pSurroundString = nullptr;
 
-    const SwFormatSurround* pSurround = static_cast<const 
SwFormatSurround*>(pItem);
     sal_Int16 eHoriOri = rFrameFormat.GetHoriOrient().GetHoriOrient();
     css::text::WrapTextMode eSurround = pSurround->GetSurround();
     bool bAnchorOnly = pSurround->IsAnchorOnly();
@@ -1082,13 +1075,9 @@ OUString lclWriteOutImap(SwHTMLWriter& rHTMLWrt, const 
SfxItemSet& rItemSet, con
 {
     OUString aIMapName;
 
-    const SfxPoolItem* pItem;
-
     // Only consider the URL attribute if no ImageMap was supplied
-    if (!pAltImgMap && SfxItemState::SET == rItemSet.GetItemState( RES_URL, 
true, &pItem))
-    {
-        pURLItem = static_cast<const SwFormatURL*>( pItem);
-    }
+    if (!pAltImgMap)
+        pURLItem = rItemSet.GetItemIfSet( RES_URL );
 
     // write ImageMap
     const ImageMap* pIMap = pAltImgMap;
@@ -1237,7 +1226,6 @@ Writer& OutHTML_ImageStart( HtmlWriter& rHtml, Writer& 
rWrt, const SwFrameFormat
     if( !rHTMLWrt.mbEmbedImages && 
!HTMLOutFuncs::PrivateURLToInternalImg(aGraphicURL) && !rHTMLWrt.mpTempBaseURL )
         aGraphicURL = URIHelper::simpleNormalizedMakeRelative( 
rWrt.GetBaseURL(), aGraphicURL);
 
-    const SfxPoolItem* pItem;
     const SfxItemSet& rItemSet = rFrameFormat.GetAttrSet();
 
     const SwFormatURL* pURLItem = nullptr;
@@ -1254,11 +1242,7 @@ Writer& OutHTML_ImageStart( HtmlWriter& rHtml, Writer& 
rWrt, const SwFrameFormat
     }
 
     // URL -> <a>...<img ... >...</a>
-    const SvxMacroItem *pMacItem = nullptr;
-    if (SfxItemState::SET == rItemSet.GetItemState(RES_FRMMACRO, true, &pItem))
-    {
-        pMacItem = static_cast<const SvxMacroItem *>(pItem);
-    }
+    const SvxMacroItem *pMacItem = rItemSet.GetItemIfSet(RES_FRMMACRO);
 
     if (pURLItem || pMacItem)
     {
@@ -1308,12 +1292,11 @@ Writer& OutHTML_ImageStart( HtmlWriter& rHtml, Writer& 
rWrt, const SwFrameFormat
 
     // <font color = ...>...<img ... >...</font>
     sal_uInt16 nBorderWidth = 0;
+    const SvxBoxItem* pBoxItem;
     if( (nFrameOpts & HtmlFrmOpts::Border) &&
-        SfxItemState::SET == rItemSet.GetItemState( RES_BOX, true, &pItem ))
+        (pBoxItem = rItemSet.GetItemIfSet( RES_BOX )) )
     {
         Size aTwipBorder( 0, 0 );
-        const SvxBoxItem* pBoxItem = static_cast<const SvxBoxItem*>(pItem);
-
         const ::editeng::SvxBorderLine *pColBorderLine = nullptr;
         const ::editeng::SvxBorderLine *pBorderLine = pBoxItem->GetLeft();
         if( pBorderLine )
@@ -1408,9 +1391,9 @@ Writer& OutHTML_ImageStart( HtmlWriter& rHtml, Writer& 
rWrt, const SwFrameFormat
     }
 
     // Events
-    if (SfxItemState::SET == rItemSet.GetItemState(RES_FRMMACRO, true, &pItem))
+    if (const SvxMacroItem* pMacroItem = rItemSet.GetItemIfSet(RES_FRMMACRO))
     {
-        const SvxMacroTableDtor& rMacTable = static_cast<const SvxMacroItem 
*>(pItem)->GetMacroTable();
+        const SvxMacroTableDtor& rMacTable = pMacroItem->GetMacroTable();
         if (!rMacTable.empty())
         {
             HtmlWriterHelper::applyEvents(rHtml, rMacTable, aImageEventTable, 
rHTMLWrt.m_bCfgStarBasic);
diff --git a/sw/source/filter/html/htmlform.cxx 
b/sw/source/filter/html/htmlform.cxx
index 00c2a1334f26..86a21f594f22 100644
--- a/sw/source/filter/html/htmlform.cxx
+++ b/sw/source/filter/html/htmlform.cxx
@@ -885,12 +885,9 @@ uno::Reference< drawing::XShape > 
SwHTMLParser::InsertControl(
         uno::Reference< beans::XPropertySet > xShapePropSet( xCreate, 
UNO_QUERY );
 
         // set left/right border
-        const SfxPoolItem *pItem;
-        if( SfxItemState::SET==rCSS1ItemSet.GetItemState( RES_LR_SPACE, true,
-                                                     &pItem ) )
+        if( const SvxLRSpaceItem* pLRItem = rCSS1ItemSet.GetItemIfSet( 
RES_LR_SPACE ) )
         {
             // Flatten first line indent
-            const SvxLRSpaceItem *pLRItem = static_cast<const SvxLRSpaceItem 
*>(pItem);
             SvxLRSpaceItem aLRItem( *pLRItem );
             aLRItem.SetTextFirstLineOffset( 0 );
             if( rCSS1PropInfo.m_bLeftMargin )
@@ -916,11 +913,9 @@ uno::Reference< drawing::XShape > 
SwHTMLParser::InsertControl(
         }
 
         // set upper/lower border
-        if( SfxItemState::SET==rCSS1ItemSet.GetItemState( RES_UL_SPACE, true,
-                                                     &pItem ) )
+        if( const SvxULSpaceItem *pULItem = rCSS1ItemSet.GetItemIfSet( 
RES_UL_SPACE ) )
         {
             // Flatten first line indent
-            const SvxULSpaceItem *pULItem = static_cast<const SvxULSpaceItem 
*>(pItem);
             if( rCSS1PropInfo.m_bTopMargin )
             {
                 nUpperSpace = convertTwipToMm100( pULItem->GetUpper() );
@@ -947,11 +942,10 @@ uno::Reference< drawing::XShape > 
SwHTMLParser::InsertControl(
         uno::Reference< beans::XPropertySetInfo > xPropSetInfo =
             rFCompPropSet->getPropertySetInfo();
         OUString sPropName = "BackgroundColor";
-        if( SfxItemState::SET==rCSS1ItemSet.GetItemState( RES_BACKGROUND, true,
-                                                     &pItem ) &&
-            xPropSetInfo->hasPropertyByName( sPropName ) )
+        const SvxBrushItem* pBrushItem = rCSS1ItemSet.GetItemIfSet( 
RES_BACKGROUND );
+        if( pBrushItem && xPropSetInfo->hasPropertyByName( sPropName ) )
         {
-            const Color &rColor = static_cast<const SvxBrushItem 
*>(pItem)->GetColor();
+            const Color &rColor = pBrushItem->GetColor();
             /// copy color, if color is not "no fill"/"auto fill"
             if( rColor != COL_TRANSPARENT )
             {
@@ -963,30 +957,24 @@ uno::Reference< drawing::XShape > 
SwHTMLParser::InsertControl(
         }
 
         sPropName = "TextColor";
-        if( SfxItemState::SET==rCSS1ItemSet.GetItemState( RES_CHRATR_COLOR, 
true,
-                                                     &pItem ) &&
-            xPropSetInfo->hasPropertyByName( sPropName ) )
+        const SvxColorItem* pColorItem = rCSS1ItemSet.GetItemIfSet( 
RES_CHRATR_COLOR );
+        if( pColorItem && xPropSetInfo->hasPropertyByName( sPropName ) )
         {
-            aTmp <<= static_cast<sal_Int32>(static_cast<const SvxColorItem 
*>(pItem)->GetValue()
-                                                         .GetRGBColor());
+            aTmp <<= 
static_cast<sal_Int32>(pColorItem->GetValue().GetRGBColor());
             rFCompPropSet->setPropertyValue( sPropName, aTmp );
         }
 
         sPropName = "FontHeight";
-        if( SfxItemState::SET==rCSS1ItemSet.GetItemState( RES_CHRATR_FONTSIZE,
-                                                     true, &pItem ) &&
-            xPropSetInfo->hasPropertyByName( sPropName ) )
+        const SvxFontHeightItem* pFontHeightItem = rCSS1ItemSet.GetItemIfSet( 
RES_CHRATR_FONTSIZE );
+        if( pFontHeightItem && xPropSetInfo->hasPropertyByName( sPropName ) )
         {
-            float fVal = static_cast< float >(
-                (static_cast<const SvxFontHeightItem *>(pItem)->GetHeight()) / 
20.0 );
+            float fVal = static_cast< float >( pFontHeightItem->GetHeight() / 
20.0 );
             aTmp <<= fVal;
             rFCompPropSet->setPropertyValue( sPropName, aTmp );
         }
 
-        if( SfxItemState::SET==rCSS1ItemSet.GetItemState( RES_CHRATR_FONT, 
true,
-                                                     &pItem ) )
+        if( const SvxFontItem* pFontItem = rCSS1ItemSet.GetItemIfSet( 
RES_CHRATR_FONT ) )
         {
-            const SvxFontItem *pFontItem = static_cast<const SvxFontItem 
*>(pItem);
             sPropName = "FontName";
             if( xPropSetInfo->hasPropertyByName( sPropName ) )
             {
@@ -1020,40 +1008,36 @@ uno::Reference< drawing::XShape > 
SwHTMLParser::InsertControl(
         }
 
         sPropName = "FontWeight";
-        if( SfxItemState::SET==rCSS1ItemSet.GetItemState( RES_CHRATR_WEIGHT,
-                                                     true, &pItem ) &&
-            xPropSetInfo->hasPropertyByName( sPropName ) )
+        const SvxWeightItem* pWeightItem = rCSS1ItemSet.GetItemIfSet( 
RES_CHRATR_WEIGHT );
+        if( pWeightItem && xPropSetInfo->hasPropertyByName( sPropName ) )
         {
             float fVal = vcl::unohelper::ConvertFontWeight(
-                    static_cast<const SvxWeightItem *>(pItem)->GetWeight() );
+                    pWeightItem->GetWeight() );
             aTmp <<= fVal;
             rFCompPropSet->setPropertyValue( sPropName, aTmp );
         }
 
         sPropName = "FontSlant";
-        if( SfxItemState::SET==rCSS1ItemSet.GetItemState( RES_CHRATR_POSTURE,
-                                                     true, &pItem ) &&
-            xPropSetInfo->hasPropertyByName( sPropName ) )
+        const SvxPostureItem* pPostureItem = rCSS1ItemSet.GetItemIfSet( 
RES_CHRATR_POSTURE );
+        if( pPostureItem && xPropSetInfo->hasPropertyByName( sPropName ) )
         {
-            aTmp <<= static_cast<sal_Int16>(static_cast<const SvxPostureItem 
*>(pItem)->GetPosture());
+            aTmp <<= static_cast<sal_Int16>(pPostureItem->GetPosture());
             rFCompPropSet->setPropertyValue( sPropName, aTmp );
         }
 
         sPropName = "FontUnderline";
-        if( SfxItemState::SET==rCSS1ItemSet.GetItemState( RES_CHRATR_UNDERLINE,
-                                                     true, &pItem ) &&
-            xPropSetInfo->hasPropertyByName( sPropName ) )
+        const SvxUnderlineItem* pUnderlineItem = rCSS1ItemSet.GetItemIfSet( 
RES_CHRATR_UNDERLINE );
+        if( pUnderlineItem && xPropSetInfo->hasPropertyByName( sPropName ) )
         {
-            aTmp <<= static_cast<sal_Int16>(static_cast<const SvxUnderlineItem 
*>(pItem)->GetLineStyle());
+            aTmp <<= static_cast<sal_Int16>(pUnderlineItem->GetLineStyle());
             rFCompPropSet->setPropertyValue( sPropName, aTmp );
         }
 
         sPropName = "FontStrikeout";
-        if( SfxItemState::SET==rCSS1ItemSet.GetItemState( 
RES_CHRATR_CROSSEDOUT,
-                                                     true, &pItem ) &&
-            xPropSetInfo->hasPropertyByName( sPropName ) )
+        const SvxCrossedOutItem* pCrossedOutItem = rCSS1ItemSet.GetItemIfSet( 
RES_CHRATR_CROSSEDOUT );
+        if( pCrossedOutItem && xPropSetInfo->hasPropertyByName( sPropName ) )
         {
-            aTmp <<= static_cast<sal_Int16>(static_cast<const 
SvxCrossedOutItem *>(pItem)->GetStrikeout());
+            aTmp <<= static_cast<sal_Int16>(pCrossedOutItem->GetStrikeout());
             rFCompPropSet->setPropertyValue( sPropName, aTmp );
         }
 
diff --git a/sw/source/filter/html/htmlgrin.cxx 
b/sw/source/filter/html/htmlgrin.cxx
index 582f30caa4f6..68998cee3efe 100644
--- a/sw/source/filter/html/htmlgrin.cxx
+++ b/sw/source/filter/html/htmlgrin.cxx
@@ -1052,19 +1052,16 @@ void SwHTMLParser::InsertBodyOptions()
         m_pCSS1Parser->SetPageDescAttrs( bSetBrush ? aBrushItem.get() : 
nullptr,
                                        &aItemSet );
 
-        const SfxPoolItem *pItem;
-        static const sal_uInt16 aWhichIds[3] = { RES_CHRATR_FONTSIZE,
+        static const TypedWhichId<SvxFontHeightItem> aWhichIds[3] = { 
RES_CHRATR_FONTSIZE,
                                        RES_CHRATR_CJK_FONTSIZE,
                                        RES_CHRATR_CTL_FONTSIZE };
-        for(sal_uInt16 i : aWhichIds)
+        for(auto const & i : aWhichIds)
         {
-            if( SfxItemState::SET == aItemSet.GetItemState( i, false,
-                                                       &pItem ) &&
-                static_cast <const SvxFontHeightItem * >(pItem)->GetProp() != 
100)
+            const SvxFontHeightItem *pItem = aItemSet.GetItemIfSet( i, false );
+            if( pItem && pItem->GetProp() != 100)
             {
                 sal_uInt32 nHeight =
-                    ( m_aFontHeights[2] *
-                     static_cast <const SvxFontHeightItem * 
>(pItem)->GetProp() ) / 100;
+                    ( m_aFontHeights[2] * pItem->GetProp() ) / 100;
                 SvxFontHeightItem aNewItem( nHeight, 100, i );
                 aItemSet.Put( aNewItem );
             }
diff --git a/sw/source/filter/html/htmlplug.cxx 
b/sw/source/filter/html/htmlplug.cxx
index fdd7bd675954..eeefc4e41c33 100644
--- a/sw/source/filter/html/htmlplug.cxx
+++ b/sw/source/filter/html/htmlplug.cxx
@@ -258,11 +258,9 @@ void SwHTMLParser::SetSpace( const Size& rPixSpace,
     }
 
     // set left/right margin
-    const SfxPoolItem *pItem;
-    if( SfxItemState::SET==rCSS1ItemSet.GetItemState( RES_LR_SPACE, true, 
&pItem ) )
+    if( const SvxLRSpaceItem* pLRItem = rCSS1ItemSet.GetItemIfSet( 
RES_LR_SPACE ) )
     {
         // if applicable remove the first line indent
-        const SvxLRSpaceItem *pLRItem = static_cast<const SvxLRSpaceItem 
*>(pItem);
         SvxLRSpaceItem aLRItem( *pLRItem );
         aLRItem.SetTextFirstLineOffset( 0 );
         if( rCSS1PropInfo.m_bLeftMargin )
@@ -297,10 +295,9 @@ void SwHTMLParser::SetSpace( const Size& rPixSpace,
     }
 
     // set top/bottom margin
-    if( SfxItemState::SET==rCSS1ItemSet.GetItemState( RES_UL_SPACE, true, 
&pItem ) )
+    if( const SvxULSpaceItem *pULItem = rCSS1ItemSet.GetItemIfSet( 
RES_UL_SPACE ) )
     {
         // if applicable remove the first line indent
-        const SvxULSpaceItem *pULItem = static_cast<const SvxULSpaceItem 
*>(pItem);
         if( rCSS1PropInfo.m_bTopMargin )
         {
             nUpperSpace = pULItem->GetUpper();
diff --git a/sw/source/filter/html/htmlsect.cxx 
b/sw/source/filter/html/htmlsect.cxx
index c41368631eca..c684f0a9affb 100644
--- a/sw/source/filter/html/htmlsect.cxx
+++ b/sw/source/filter/html/htmlsect.cxx
@@ -328,15 +328,12 @@ void SwHTMLParser::NewDivision( HtmlTokenId nToken )
         if( !IsNewDoc() )
             Reader::ResetFrameFormatAttrs(aFrameItemSet );
 
-        const SfxPoolItem *pItem;
-        if( SfxItemState::SET == aItemSet.GetItemState( RES_BACKGROUND, false,
-                                                   &pItem ) )
+        if( const SvxBrushItem* pItem = aItemSet.GetItemIfSet( RES_BACKGROUND, 
false ) )
         {
             aFrameItemSet.Put( *pItem );
             aItemSet.ClearItem( RES_BACKGROUND );
         }
-        if( SfxItemState::SET == aItemSet.GetItemState( RES_FRAMEDIR, false,
-                                                   &pItem ) )
+        if( const SvxFrameDirectionItem* pItem = aItemSet.GetItemIfSet( 
RES_FRAMEDIR, false ) )
         {
             aFrameItemSet.Put( *pItem );
             aItemSet.ClearItem( RES_FRAMEDIR );
@@ -712,15 +709,12 @@ void SwHTMLParser::NewMultiCol( sal_uInt16 columnsFromCss 
)
         aFormatCol.Init( nCols, nGutter, USHRT_MAX );
         aFrameItemSet.Put( aFormatCol );
 
-        const SfxPoolItem *pItem;
-        if( SfxItemState::SET == aItemSet.GetItemState( RES_BACKGROUND, false,
-                                                   &pItem ) )
+        if( const SvxBrushItem* pItem = aItemSet.GetItemIfSet( RES_BACKGROUND, 
false) )
         {
             aFrameItemSet.Put( *pItem );
             aItemSet.ClearItem( RES_BACKGROUND );
         }
-        if( SfxItemState::SET == aItemSet.GetItemState( RES_FRAMEDIR, false,
-                                                   &pItem ) )
+        if( const SvxFrameDirectionItem* pItem = aItemSet.GetItemIfSet( 
RES_FRAMEDIR, false ) )
         {
             aFrameItemSet.Put( *pItem );
             aItemSet.ClearItem( RES_FRAMEDIR );
@@ -804,18 +798,17 @@ void SwHTMLParser::MovePageDescAttrs( SwNode *pSrcNd,
     {
         SwContentNode* pSrcContentNd = pSrcNd->GetContentNode();
 
-        const SfxPoolItem* pItem;
-        if( SfxItemState::SET == pSrcContentNd->GetSwAttrSet()
-                .GetItemState( RES_PAGEDESC, false, &pItem ) &&
-            static_cast<const SwFormatPageDesc *>(pItem)->GetPageDesc() )
+        const SwFormatPageDesc* pFormatPageDesc =
+            pSrcContentNd->GetSwAttrSet().GetItemIfSet( RES_PAGEDESC, false );
+        if( pFormatPageDesc && pFormatPageDesc->GetPageDesc() )
         {
-            pDestContentNd->SetAttr( *pItem );
+            pDestContentNd->SetAttr( *pFormatPageDesc );
             pSrcContentNd->ResetAttr( RES_PAGEDESC );
         }
-        if( SfxItemState::SET == pSrcContentNd->GetSwAttrSet()
-                .GetItemState( RES_BREAK, false, &pItem ) )
+        if( const SvxFormatBreakItem* pItem = pSrcContentNd->GetSwAttrSet()
+                .GetItemIfSet( RES_BREAK, false ) )
         {
-            switch( static_cast<const SvxFormatBreakItem *>(pItem)->GetBreak() 
)
+            switch( pItem->GetBreak() )
             {
             case SvxBreak::PageBefore:
             case SvxBreak::PageAfter:
@@ -833,9 +826,8 @@ void SwHTMLParser::MovePageDescAttrs( SwNode *pSrcNd,
     {
         SwFrameFormat *pFrameFormat = 
pSrcNd->GetTableNode()->GetTable().GetFrameFormat();
 
-        const SfxPoolItem* pItem;
-        if( SfxItemState::SET == pFrameFormat->GetAttrSet().
-                GetItemState( RES_PAGEDESC, false, &pItem ) )
+        if( const SwFormatPageDesc* pItem = pFrameFormat->GetAttrSet().
+                GetItemIfSet( RES_PAGEDESC, false ) )
         {
             if (pDestContentNd)
                 pDestContentNd->SetAttr(*pItem);
diff --git a/sw/source/filter/html/htmltab.cxx 
b/sw/source/filter/html/htmltab.cxx
index 1167e6b55c49..dad2219b01f1 100644
--- a/sw/source/filter/html/htmltab.cxx
+++ b/sw/source/filter/html/htmltab.cxx
@@ -1429,13 +1429,12 @@ void HTMLTable::FixFrameFormat( SwTableBox *pBox,
                     const SwStartNode *pSttNd = pBox->GetSttNd();
                     pCNd = pSttNd->GetNodes()[pSttNd->GetIndex()+1]
                                  ->GetContentNode();
-                    const SfxPoolItem *pItem;
+                    const SvxAdjustItem *pItem;
                     if( pCNd && pCNd->HasSwAttrSet() &&
-                        SfxItemState::SET==pCNd->GetpSwAttrSet()->GetItemState(
-                            RES_PARATR_ADJUST, false, &pItem ) )
+                        (pItem = pCNd->GetpSwAttrSet()->GetItemIfSet(
+                            RES_PARATR_ADJUST, false )) )
                     {
-                        eAdjust = static_cast<const SvxAdjustItem *>(pItem)
-                            ->GetAdjust();
+                        eAdjust = pItem->GetAdjust();
                     }
                 }
                 aItemSet.Put( SwTableBoxNumFormat(nNumFormat) );
@@ -2735,11 +2734,9 @@ SvxBrushItem* SwHTMLParser::CreateBrushItem( const Color 
*pColor,
         }
 
         m_pCSS1Parser->ParseStyleOption( rStyle, aItemSet, aPropInfo );
-        const SfxPoolItem *pItem = nullptr;
-        if( SfxItemState::SET == aItemSet.GetItemState( RES_BACKGROUND, false,
-                                                   &pItem ) )
+        if( const SvxBrushItem *pItem = aItemSet.GetItemIfSet( RES_BACKGROUND, 
false ) )
         {
-            pBrushItem = new SvxBrushItem( *static_cast<const SvxBrushItem 
*>(pItem) );
+            pBrushItem = new SvxBrushItem( *pItem );
         }
     }
 
@@ -3026,10 +3023,9 @@ CellSaveStruct::CellSaveStruct( SwHTMLParser& rParser, 
HTMLTable const *pCurTabl
         if( rParser.ParseStyleOptions( m_aStyle, m_aId, m_aClass, aItemSet,
                                        aPropInfo, &aLang, &aDir ) )
         {
-            SfxPoolItem const* pItem;
-            if (SfxItemState::SET == aItemSet.GetItemState(RES_BOX, false, 
&pItem))
+            if (SvxBoxItem const* pItem = aItemSet.GetItemIfSet(RES_BOX, 
false))
             {   // fdo#41796: steal box item to set it in FixFrameFormat later!
-                m_xBoxItem.reset(dynamic_cast<SvxBoxItem *>(pItem->Clone()));
+                m_xBoxItem.reset(pItem->Clone());
                 aItemSet.ClearItem(RES_BOX);
             }
             rParser.InsertAttrs(aItemSet, aPropInfo, xCntxt.get());
@@ -3251,21 +3247,19 @@ void SwHTMLParser::BuildTableCell( HTMLTable 
*pCurTable, bool bReadOptions,
                                                    pCurTable->GetClass(),
                                                    aItemSet, aPropInfo,
                                                       nullptr, 
&pCurTable->GetDirection() );
-            const SfxPoolItem *pItem = nullptr;
             if( bStyleParsed )
             {
-                if( SfxItemState::SET == aItemSet.GetItemState(
-                                        RES_BACKGROUND, false, &pItem ) )
+                if( const SvxBrushItem* pItem = aItemSet.GetItemIfSet(
+                                        RES_BACKGROUND, false ) )
                 {
-                    pCurTable->SetBGBrush( *static_cast<const SvxBrushItem 
*>(pItem) );
+                    pCurTable->SetBGBrush( *pItem );
                     aItemSet.ClearItem( RES_BACKGROUND );
                 }
-                if( SfxItemState::SET == aItemSet.GetItemState(
-                                        RES_PARATR_SPLIT, false, &pItem ) )
+                if( const SvxFormatSplitItem* pSplitItem = 
aItemSet.GetItemIfSet(
+                                        RES_PARATR_SPLIT, false ) )
                 {
                     aItemSet.Put(
-                        SwFormatLayoutSplit( static_cast<const 
SvxFormatSplitItem *>(pItem)
-                                                ->GetValue() ) );
+                        SwFormatLayoutSplit( pSplitItem->GetValue() ) );
                     aItemSet.ClearItem( RES_PARATR_SPLIT );
                 }
             }
@@ -3503,23 +3497,23 @@ void SwHTMLParser::BuildTableCell( HTMLTable 
*pCurTable, bool bReadOptions,
 
                 if (pFrameFormat && pOldTextNd)
                 {
-                    const SfxPoolItem* pItem2;
-                    if( SfxItemState::SET == pOldTextNd->GetSwAttrSet()
-                            .GetItemState( RES_PAGEDESC, false, &pItem2 ) &&
-                        static_cast<const SwFormatPageDesc 
*>(pItem2)->GetPageDesc() )
+                    const SwFormatPageDesc* pPageDescItem = 
pOldTextNd->GetSwAttrSet()
+                            .GetItemIfSet( RES_PAGEDESC, false );
+                    if( pPageDescItem && pPageDescItem->GetPageDesc() )
                     {
-                        pFrameFormat->SetFormatAttr( *pItem2 );
+                        pFrameFormat->SetFormatAttr( *pPageDescItem );
                         pOldTextNd->ResetAttr( RES_PAGEDESC );
                     }
-                    if( SfxItemState::SET == pOldTextNd->GetSwAttrSet()
-                            .GetItemState( RES_BREAK, true, &pItem2 ) )
+
+                    if( const SvxFormatBreakItem* pBreakItem = 
pOldTextNd->GetSwAttrSet()
+                            .GetItemIfSet( RES_BREAK ) )
                     {
-                        switch( static_cast<const SvxFormatBreakItem 
*>(pItem2)->GetBreak() )
+                        switch( pBreakItem->GetBreak() )
                         {
                         case SvxBreak::PageBefore:
                         case SvxBreak::PageAfter:
                         case SvxBreak::PageBoth:
-                            pFrameFormat->SetFormatAttr( *pItem2 );
+                            pFrameFormat->SetFormatAttr( *pBreakItem );
                             pOldTextNd->ResetAttr( RES_BREAK );
                             break;
                         default:
diff --git a/sw/source/filter/html/htmltabw.cxx 
b/sw/source/filter/html/htmltabw.cxx
index b35fcc91bf79..e72e2908e630 100644
--- a/sw/source/filter/html/htmltabw.cxx
+++ b/sw/source/filter/html/htmltabw.cxx
@@ -392,7 +392,6 @@ void SwHTMLWrtTable::OutTableCell( SwHTMLWriter& rWrt,
     }
 
     const SfxItemSet& rItemSet = pBox->GetFrameFormat()->GetAttrSet();
-    const SfxPoolItem *pItem;
 
     // ALIGN is only outputted at the paragraphs from now on
 
@@ -414,11 +413,7 @@ void SwHTMLWrtTable::OutTableCell( SwHTMLWriter& rWrt,
 
     rWrt.m_bTextAttr = false;
     rWrt.m_bOutOpts = true;
-    const SvxBrushItem *pBrushItem = nullptr;
-    if( SfxItemState::SET==rItemSet.GetItemState( RES_BACKGROUND, false, 
&pItem ) )
-    {
-        pBrushItem = static_cast<const SvxBrushItem *>(pItem);
-    }
+    const SvxBrushItem *pBrushItem = rItemSet.GetItemIfSet( RES_BACKGROUND, 
false );
     if( !pBrushItem )
         pBrushItem = pCell->GetBackground();
 
@@ -441,14 +436,14 @@ void SwHTMLWrtTable::OutTableCell( SwHTMLWriter& rWrt,
     sal_uInt32 nNumFormat = 0;
     double nValue = 0.0;
     bool bNumFormat = false, bValue = false;
-    if( SfxItemState::SET==rItemSet.GetItemState( RES_BOXATR_FORMAT, false, 
&pItem ) )
+    if( const SwTableBoxNumFormat* pItem = rItemSet.GetItemIfSet( 
RES_BOXATR_FORMAT, false ) )
     {
-        nNumFormat = static_cast<const SwTableBoxNumFormat 
*>(pItem)->GetValue();
+        nNumFormat = pItem->GetValue();
         bNumFormat = true;
     }
-    if( SfxItemState::SET==rItemSet.GetItemState( RES_BOXATR_VALUE, false, 
&pItem ) )
+    if( const SwTableBoxValue* pItem = rItemSet.GetItemIfSet( 
RES_BOXATR_VALUE, false ) )
     {
-        nValue = static_cast<const SwTableBoxValue *>(pItem)->GetValue();
+        nValue = pItem->GetValue();
         bValue = true;
         if( !bNumFormat )
             nNumFormat = 
pBox->GetFrameFormat()->GetTableBoxNumFormat().GetValue();
diff --git a/sw/source/filter/html/svxcss1.cxx 
b/sw/source/filter/html/svxcss1.cxx
index 11f0d8425567..e8c965d6547d 100644
--- a/sw/source/filter/html/svxcss1.cxx
+++ b/sw/source/filter/html/svxcss1.cxx
@@ -285,8 +285,8 @@ struct SvxCSS1ItemIds
     sal_uInt16 nOrphans;
     sal_uInt16 nFormatSplit;
 
-    sal_uInt16 nLRSpace;
-    sal_uInt16 nULSpace;
+    TypedWhichId<SvxLRSpaceItem> nLRSpace{0};
+    TypedWhichId<SvxULSpaceItem> nULSpace{0};
     sal_uInt16 nBox;
     sal_uInt16 nBrush;
 
@@ -736,8 +736,8 @@ SvxCSS1Parser::SvxCSS1Parser( SfxItemPool& rPool, const 
OUString& rBaseURL,
     aItemIds.nOrphans = initTrueWhich( SID_ATTR_PARA_ORPHANS );
     aItemIds.nFormatSplit = initTrueWhich( SID_ATTR_PARA_SPLIT );
 
-    aItemIds.nLRSpace = initTrueWhich( SID_ATTR_LRSPACE );
-    aItemIds.nULSpace = initTrueWhich( SID_ATTR_ULSPACE );
+    aItemIds.nLRSpace = TypedWhichId<SvxLRSpaceItem>(initTrueWhich( 
SID_ATTR_LRSPACE ));
+    aItemIds.nULSpace = TypedWhichId<SvxULSpaceItem>(initTrueWhich( 
SID_ATTR_ULSPACE ));
     aItemIds.nBox = initTrueWhich( SID_ATTR_BORDER_OUTER );
     aItemIds.nBrush = initTrueWhich( SID_ATTR_BRUSH );
 
@@ -941,16 +941,15 @@ void SvxCSS1Parser::MergeStyles( const SfxItemSet& 
rSrcSet,
     }
     else
     {
-        SvxLRSpaceItem aLRSpace( static_cast<const 
SvxLRSpaceItem&>(rTargetSet.Get(aItemIds.nLRSpace)) );
-        SvxULSpaceItem aULSpace( static_cast<const 
SvxULSpaceItem&>(rTargetSet.Get(aItemIds.nULSpace)) );
+        SvxLRSpaceItem aLRSpace( rTargetSet.Get(aItemIds.nLRSpace) );
+        SvxULSpaceItem aULSpace( rTargetSet.Get(aItemIds.nULSpace) );
 
         rTargetSet.Put( rSrcSet );
 
         if( rSrcInfo.m_bLeftMargin || rSrcInfo.m_bRightMargin ||
             rSrcInfo.m_bTextIndent )
         {
-            const SvxLRSpaceItem& rNewLRSpace =
-                static_cast<const SvxLRSpaceItem&>(rSrcSet.Get( 
aItemIds.nLRSpace ));
+            const SvxLRSpaceItem& rNewLRSpace = rSrcSet.Get( aItemIds.nLRSpace 
);
 
             if( rSrcInfo.m_bLeftMargin )
                 aLRSpace.SetLeft( rNewLRSpace.GetLeft() );
@@ -964,8 +963,7 @@ void SvxCSS1Parser::MergeStyles( const SfxItemSet& rSrcSet,
 
         if( rSrcInfo.m_bTopMargin || rSrcInfo.m_bBottomMargin )
         {
-            const SvxULSpaceItem& rNewULSpace =
-                static_cast<const SvxULSpaceItem&>(rSrcSet.Get( 
aItemIds.nULSpace ));
+            const SvxULSpaceItem& rNewULSpace = rSrcSet.Get( aItemIds.nULSpace 
);
 
             if( rSrcInfo.m_bTopMargin )
                 aULSpace.SetUpper( rNewULSpace.GetUpper() );
@@ -1981,11 +1979,9 @@ static void ParseCSS1_text_indent( const CSS1Expression 
*pExpr,
     if( !bSet )
         return;
 
-    const SfxPoolItem* pItem;
-    if( SfxItemState::SET == rItemSet.GetItemState( aItemIds.nLRSpace, false,
-                                               &pItem ) )
+    if( const SvxLRSpaceItem* pItem = rItemSet.GetItemIfSet( 
aItemIds.nLRSpace, false ) )
     {
-        SvxLRSpaceItem aLRItem( *static_cast<const SvxLRSpaceItem*>(pItem) );
+        SvxLRSpaceItem aLRItem( *pItem );
         aLRItem.SetTextFirstLineOffset( nIndent );
         rItemSet.Put( aLRItem );
     }
@@ -2044,11 +2040,9 @@ static void ParseCSS1_margin_left( const CSS1Expression 
*pExpr,
     rPropInfo.m_nLeftMargin = nLeft;
     if( nLeft < 0 )
         nLeft = 0;
-    const SfxPoolItem* pItem;
-    if( SfxItemState::SET == rItemSet.GetItemState( aItemIds.nLRSpace, false,
-                                               &pItem ) )
+    if( const SvxLRSpaceItem* pItem = rItemSet.GetItemIfSet( 
aItemIds.nLRSpace, false ) )
     {
-        SvxLRSpaceItem aLRItem( *static_cast<const SvxLRSpaceItem*>(pItem) );
+        SvxLRSpaceItem aLRItem( *pItem );
         aLRItem.SetTextLeft( o3tl::narrowing<sal_uInt16>(nLeft) );
         rItemSet.Put( aLRItem );
     }
@@ -2103,11 +2097,9 @@ static void ParseCSS1_margin_right( const CSS1Expression 
*pExpr,
     rPropInfo.m_nRightMargin = nRight;
     if( nRight < 0 )
         nRight = 0;
-    const SfxPoolItem* pItem;
-    if( SfxItemState::SET == rItemSet.GetItemState( aItemIds.nLRSpace, false,
-                                               &pItem ) )
+    if( const SvxLRSpaceItem* pItem = rItemSet.GetItemIfSet( 
aItemIds.nLRSpace, false ) )
     {
-        SvxLRSpaceItem aLRItem( *static_cast<const SvxLRSpaceItem*>(pItem) );
+        SvxLRSpaceItem aLRItem( *pItem );
         aLRItem.SetRight( o3tl::narrowing<sal_uInt16>(nRight) );
         rItemSet.Put( aLRItem );
     }
@@ -2165,11 +2157,9 @@ static void ParseCSS1_margin_top( const CSS1Expression 
*pExpr,
     if( !bSet )
         return;
 
-    const SfxPoolItem* pItem;
-    if( SfxItemState::SET == rItemSet.GetItemState( aItemIds.nULSpace, false,
-                                               &pItem ) )
+    if( const SvxULSpaceItem* pItem = rItemSet.GetItemIfSet( 
aItemIds.nULSpace, false ) )
     {
-        SvxULSpaceItem aULItem( *static_cast<const SvxULSpaceItem*>(pItem) );
+        SvxULSpaceItem aULItem( *pItem );
         aULItem.SetUpper( nUpper );
         rItemSet.Put( aULItem );
     }
@@ -2227,11 +2217,9 @@ static void ParseCSS1_margin_bottom( const 
CSS1Expression *pExpr,
     if( !bSet )
         return;
 
-    const SfxPoolItem* pItem;
-    if( SfxItemState::SET == rItemSet.GetItemState( aItemIds.nULSpace, false,
-                                               &pItem ) )
+    if( const SvxULSpaceItem* pItem = rItemSet.GetItemIfSet( 
aItemIds.nULSpace, false ) )
     {
-        SvxULSpaceItem aULItem( *static_cast<const SvxULSpaceItem*>(pItem) );
+        SvxULSpaceItem aULItem( *pItem );
         aULItem.SetLower( nLower );
         rItemSet.Put( aULItem );
     }
@@ -2337,11 +2325,9 @@ static void ParseCSS1_margin( const CSS1Expression 
*pExpr,
                 nMargins[1] = 0;
         }
 
-        const SfxPoolItem* pItem;
-        if( SfxItemState::SET == rItemSet.GetItemState( aItemIds.nLRSpace, 
false,
-                                                   &pItem ) )
+        if( const SvxLRSpaceItem* pItem = rItemSet.GetItemIfSet( 
aItemIds.nLRSpace, false ) )
         {
-            SvxLRSpaceItem aLRItem( *static_cast<const SvxLRSpaceItem*>(pItem) 
);
+            SvxLRSpaceItem aLRItem( *pItem );
             if( bSetMargins[3] )
                 aLRItem.SetLeft( o3tl::narrowing<sal_uInt16>(nMargins[3]) );
             if( bSetMargins[1] )
@@ -2367,11 +2353,9 @@ static void ParseCSS1_margin( const CSS1Expression 
*pExpr,
     if( nMargins[2] < 0 )
         nMargins[2] = 0;
 
-    const SfxPoolItem* pItem;
-    if( SfxItemState::SET == rItemSet.GetItemState( aItemIds.nULSpace, false,
-                                               &pItem ) )
+    if( const SvxULSpaceItem* pItem = rItemSet.GetItemIfSet( 
aItemIds.nULSpace, false ) )
     {
-        SvxULSpaceItem aULItem( *static_cast<const SvxULSpaceItem*>(pItem) );
+        SvxULSpaceItem aULItem( *pItem );
         if( bSetMargins[0] )
             aULItem.SetUpper( o3tl::narrowing<sal_uInt16>(nMargins[0]) );
         if( bSetMargins[2] )
diff --git a/sw/source/filter/html/swhtml.cxx b/sw/source/filter/html/swhtml.cxx
index 5a564c12a907..47671d0dddaf 100644
--- a/sw/source/filter/html/swhtml.cxx
+++ b/sw/source/filter/html/swhtml.cxx
@@ -4737,12 +4737,8 @@ void SwHTMLParser::SetTextCollAttrs( HTMLAttrContext 
*pContext )
         const SwTextFormatColl *pTopColl =
             m_pCSS1Parser->GetTextFormatColl( nTopColl, rTopClass );
         const SfxItemSet& rItemSet = pTopColl->GetAttrSet();
-        const SfxPoolItem *pItem;
-        if( SfxItemState::SET == rItemSet.GetItemState(RES_LR_SPACE,true, 
&pItem) )
+        if( const SvxLRSpaceItem *pLRItem = 
rItemSet.GetItemIfSet(RES_LR_SPACE) )
         {
-            const SvxLRSpaceItem *pLRItem =
-                static_cast<const SvxLRSpaceItem *>(pItem);
-
             sal_Int32 nLeft = pLRItem->GetTextLeft();
             sal_Int32 nRight = pLRItem->GetRight();
             nFirstLineIndent = pLRItem->GetTextFirstLineOffset();
@@ -4769,10 +4765,8 @@ void SwHTMLParser::SetTextCollAttrs( HTMLAttrContext 
*pContext )
             pContext->SetMargins( nLeftMargin, nRightMargin,
                                   nFirstLineIndent );
         }
-        if( SfxItemState::SET == rItemSet.GetItemState(RES_UL_SPACE,true, 
&pItem) )
+        if( const SvxULSpaceItem* pULItem = 
rItemSet.GetItemIfSet(RES_UL_SPACE) )
         {
-            const SvxULSpaceItem *pULItem =
-                static_cast<const SvxULSpaceItem *>(pItem);
             pContext->SetULSpace( pULItem->GetUpper(), pULItem->GetLower() );
         }
     }
diff --git a/sw/source/filter/html/wrthtml.cxx 
b/sw/source/filter/html/wrthtml.cxx
index 39c2e39049de..d1e5f64408fb 100644
--- a/sw/source/filter/html/wrthtml.cxx
+++ b/sw/source/filter/html/wrthtml.cxx
@@ -188,11 +188,10 @@ void SwHTMLWriter::SetupFilterOptions(SfxMedium& rMedium)
     if (pSet == nullptr)
         return;
 
-    const SfxPoolItem* pItem;
     uno::Sequence<beans::PropertyValue> aArgs = rMedium.GetArgs();
-    if (pSet->GetItemState(SID_FILE_FILTEROPTIONS, true, &pItem) == 
SfxItemState::SET)
+    if (const SfxStringItem* pItem = pSet->GetItemIfSet( 
SID_FILE_FILTEROPTIONS ))
     {
-        const OUString sFilterOptions = static_cast<const 
SfxStringItem*>(pItem)->GetValue();
+        const OUString sFilterOptions = pItem->GetValue();
 
         if (sFilterOptions.startsWith("{"))
         {
@@ -552,15 +551,14 @@ ErrCode SwHTMLWriter::WriteStream()
     if( !aStartTags.isEmpty() )
         Strm().WriteOString( aStartTags );
 
-    const SfxPoolItem *pItem;
+    const SwFormatHeader *pFormatHeader;
     const SfxItemSet& rPageItemSet = m_pCurrPageDesc->GetMaster().GetAttrSet();
     if( !m_bWriteClipboardDoc && m_pDoc->GetDocShell() &&
          
(!m_pDoc->getIDocumentSettingAccess().get(DocumentSettingId::HTML_MODE) &&
           
!m_pDoc->getIDocumentSettingAccess().get(DocumentSettingId::BROWSE_MODE)) &&
-        SfxItemState::SET == rPageItemSet.GetItemState( RES_HEADER, true, 
&pItem) )
+        (pFormatHeader = rPageItemSet.GetItemIfSet( RES_HEADER )) )
     {
-        const SwFrameFormat *pHeaderFormat =
-            static_cast<const SwFormatHeader *>(pItem)->GetHeaderFormat();
+        const SwFrameFormat *pHeaderFormat = pFormatHeader->GetHeaderFormat();
         if( pHeaderFormat )
             OutHTML_HeaderFooter( *this, *pHeaderFormat, true );
     }
@@ -575,12 +573,12 @@ ErrCode SwHTMLWriter::WriteStream()
     if( m_xFootEndNotes )
         OutFootEndNotes();
 
+    const SwFormatFooter* pFormatFooter;
     if( !m_bWriteClipboardDoc && m_pDoc->GetDocShell() &&
         
(!m_pDoc->getIDocumentSettingAccess().get(DocumentSettingId::HTML_MODE) && 
!m_pDoc->getIDocumentSettingAccess().get(DocumentSettingId::BROWSE_MODE))  &&
-        SfxItemState::SET == rPageItemSet.GetItemState( RES_FOOTER, true, 
&pItem) )
+        (pFormatFooter = rPageItemSet.GetItemIfSet( RES_FOOTER )) )
     {
-        const SwFrameFormat *pFooterFormat =
-            static_cast<const SwFormatFooter *>(pItem)->GetFooterFormat();
+        const SwFrameFormat *pFooterFormat = pFormatFooter->GetFooterFormat();
         if( pFooterFormat )
             OutHTML_HeaderFooter( *this, *pFooterFormat, false );
     }
@@ -662,17 +660,14 @@ ErrCode SwHTMLWriter::WriteStream()
 static const SwFormatCol *lcl_html_GetFormatCol( const SwSection& rSection,
                                        const SwSectionFormat& rFormat )
 {
-    const SwFormatCol *pCol = nullptr;
+    if( SectionType::FileLink == rSection.GetType() )
+        return nullptr;
 
-    const SfxPoolItem* pItem;
-    if( SectionType::FileLink != rSection.GetType() &&
-        SfxItemState::SET == 
rFormat.GetAttrSet().GetItemState(RES_COL,false,&pItem) &&
-        static_cast<const SwFormatCol *>(pItem)->GetNumCols() > 1 )
-    {
-        pCol = static_cast<const SwFormatCol *>(pItem);
-    }
+    const SwFormatCol *pCol = rFormat.GetAttrSet().GetItemIfSet(RES_COL,false);
+    if (pCol->GetNumCols() > 1 )
+        return pCol;
 
-    return pCol;
+    return nullptr;
 }
 
 static bool lcl_html_IsMultiColStart( const SwHTMLWriter& rHTMLWrt, 
SwNodeOffset nIndex )
@@ -982,19 +977,16 @@ static void OutBodyColor( const char* pTag, const 
SwFormat *pFormat,
     const SvxColorItem *pColorItem = nullptr;
 
     const SfxItemSet& rItemSet = pFormat->GetAttrSet();
-    const SfxPoolItem *pRefItem = nullptr, *pItem = nullptr;
-    bool bItemSet = SfxItemState::SET == rItemSet.GetItemState( 
RES_CHRATR_COLOR,
-                                                           true, &pItem);
-    bool bRefItemSet = pRefFormat &&
-        SfxItemState::SET == pRefFormat->GetAttrSet().GetItemState( 
RES_CHRATR_COLOR,
-                                                            true, &pRefItem);
-    if( bItemSet )
+    const SvxColorItem *pCItem = rItemSet.GetItemIfSet( RES_CHRATR_COLOR );
+    const SvxColorItem *pRefItem = nullptr;
+    if (pRefFormat)
+        pRefItem = pRefFormat->GetAttrSet().GetItemIfSet( RES_CHRATR_COLOR );
+    if( pCItem )
     {
         // only when the item is set in the template of the current document
         // or has a different value as the in HTML template, it will be set
-        const SvxColorItem *pCItem = static_cast<const SvxColorItem*>(pItem);
 
-        if( !bRefItemSet )
+        if( !pRefItem )
         {
             pColorItem = pCItem;
         }
@@ -1004,7 +996,7 @@ static void OutBodyColor( const char* pTag, const SwFormat 
*pFormat,
             if( COL_AUTO == aColor )
                 aColor = COL_BLACK;
 
-            Color aRefColor( static_cast<const 
SvxColorItem*>(pRefItem)->GetValue() );
+            Color aRefColor( pRefItem->GetValue() );
             if( COL_AUTO == aRefColor )
                 aRefColor = COL_BLACK;
 
@@ -1012,7 +1004,7 @@ static void OutBodyColor( const char* pTag, const 
SwFormat *pFormat,
                 pColorItem = pCItem;
         }
     }
-    else if( bRefItemSet )
+    else if( pRefItem )
     {
         // The item was still set in the HTML template so we output the default
         pColorItem = &rItemSet.GetPool()->GetDefaultItem( RES_CHRATR_COLOR );
@@ -1409,11 +1401,9 @@ void SwHTMLWriter::OutBackground( const SvxBrushItem 
*pBrushItem, bool bGraphic
 
 void SwHTMLWriter::OutBackground( const SfxItemSet& rItemSet, bool bGraphic )
 {
-    const SfxPoolItem* pItem;
-    if( SfxItemState::SET == rItemSet.GetItemState( RES_BACKGROUND, false,
-                                               &pItem ))
+    if( const SvxBrushItem* pItem = rItemSet.GetItemIfSet( RES_BACKGROUND, 
false ) )
     {
-        OutBackground( static_cast<const SvxBrushItem*>(pItem), bGraphic );
+        OutBackground( pItem, bGraphic );
     }
 }
 
diff --git a/sw/source/filter/writer/wrtswtbl.cxx 
b/sw/source/filter/writer/wrtswtbl.cxx
index 6421eeb5c38a..1c4e43e35c8f 100644
--- a/sw/source/filter/writer/wrtswtbl.cxx
+++ b/sw/source/filter/writer/wrtswtbl.cxx
@@ -41,11 +41,9 @@ sal_Int16 SwWriteTableCell::GetVertOri() const
     if( m_pBox->GetSttNd() )
     {
         const SfxItemSet& rItemSet = m_pBox->GetFrameFormat()->GetAttrSet();
-        const SfxPoolItem *pItem;
-        if( SfxItemState::SET == rItemSet.GetItemState( RES_VERT_ORIENT, 
false, &pItem ) )
+        if( const SwFormatVertOrient *pItem = rItemSet.GetItemIfSet( 
RES_VERT_ORIENT, false ) )
         {
-            sal_Int16 eBoxVertOri =
-                static_cast<const SwFormatVertOrient 
*>(pItem)->GetVertOrient();
+            sal_Int16 eBoxVertOri = pItem->GetVertOrient();
             if( text::VertOrientation::CENTER==eBoxVertOri || 
text::VertOrientation::BOTTOM==eBoxVertOri)
                 eCellVertOri = eBoxVertOri;
         }
@@ -149,12 +147,11 @@ tools::Long SwWriteTable::GetLineHeight( const SwTableBox 
*pBox )
         return 0;
 
     const SwFrameFormat *pLineFrameFormat = pLine->GetFrameFormat();
-    const SfxPoolItem* pItem;
     const SfxItemSet& rItemSet = pLineFrameFormat->GetAttrSet();
 
     tools::Long nHeight = 0;
-    if( SfxItemState::SET == rItemSet.GetItemState( RES_FRM_SIZE, true, &pItem 
))
-        nHeight = static_cast<const SwFormatFrameSize*>(pItem)->GetHeight();
+    if( const SwFormatFrameSize* pItem = rItemSet.GetItemIfSet( RES_FRM_SIZE ) 
)
+        nHeight = pItem->GetHeight();
 
     return nHeight;
 }
@@ -167,20 +164,18 @@ const SvxBrushItem *SwWriteTable::GetLineBrush( const 
SwTableBox *pBox,
     while( pLine )
     {
         const SwFrameFormat *pLineFrameFormat = pLine->GetFrameFormat();
-        const SfxPoolItem* pItem;
         const SfxItemSet& rItemSet = pLineFrameFormat->GetAttrSet();
 
-        if( SfxItemState::SET == rItemSet.GetItemState( RES_BACKGROUND, false,
-                                                   &pItem ) )
+        if( const SvxBrushItem* pItem = rItemSet.GetItemIfSet( RES_BACKGROUND, 
false ) )
         {
             if( !pLine->GetUpper() )
             {
                 if( !pRow->GetBackground() )
-                    pRow->SetBackground( static_cast<const SvxBrushItem 
*>(pItem) );
+                    pRow->SetBackground( pItem );
                 pItem = nullptr;
             }
 
-            return static_cast<const SvxBrushItem *>(pItem);
+            return pItem;
         }
 
         pBox = pLine->GetUpper();
@@ -586,18 +581,16 @@ void SwWriteTable::FillTableRowsCols( tools::Long 
nStartRPos, sal_uInt16 nStartR
         const SwTableBoxes& rBoxes = pLine->GetTabBoxes();
 
         const SwFrameFormat *pLineFrameFormat = pLine->GetFrameFormat();
-        const SfxPoolItem* pItem;
         const SfxItemSet& rItemSet = pLineFrameFormat->GetAttrSet();
 
         tools::Long nHeight = 0;
-        if( SfxItemState::SET == rItemSet.GetItemState( RES_FRM_SIZE, true, 
&pItem ))
-            nHeight = static_cast<const 
SwFormatFrameSize*>(pItem)->GetHeight();
+        if( const SwFormatFrameSize* pFrameSizeItem = rItemSet.GetItemIfSet( 
RES_FRM_SIZE ))
+            nHeight = pFrameSizeItem->GetHeight();
 
         const SvxBrushItem *pBrushItem, *pLineBrush = pParentBrush;
-        if( SfxItemState::SET == rItemSet.GetItemState( RES_BACKGROUND, false,
-                                                   &pItem ) )
+        if( const SvxBrushItem* pTmpBrush = rItemSet.GetItemIfSet( 
RES_BACKGROUND, false ) )
         {
-            pLineBrush = static_cast<const SvxBrushItem *>(pItem);
+            pLineBrush = pTmpBrush;
 
             // If the row spans the entire table, we can
             // print out the background to the row. Otherwise

Reply via email to