compilerplugins/clang/redundantcast.cxx      |    1 
 compilerplugins/clang/test/redundantcast.cxx |   24 ++++++++
 sc/qa/unit/bugfix-test.cxx                   |   48 +++++------------
 sd/qa/unit/export-tests-ooxml1.cxx           |    3 -
 sd/qa/unit/export-tests-ooxml3.cxx           |    6 --
 sd/qa/unit/import-tests.cxx                  |   54 ++++++-------------
 sd/qa/unit/import-tests2.cxx                 |   74 +++++++++------------------
 sw/source/core/txtnode/ndtxt.cxx             |   12 ++--
 sw/source/core/unocore/unodraw.cxx           |    5 -
 sw/source/filter/ww8/wrtw8sty.cxx            |    2 
 sw/source/uibase/shells/textsh1.cxx          |    2 
 sw/source/uibase/uno/unotxdoc.cxx            |   12 ++--
 12 files changed, 103 insertions(+), 140 deletions(-)

New commits:
commit 7255d21f812b7333c83b4548e2b5b102adb606a9
Author:     Stephan Bergmann <sberg...@redhat.com>
AuthorDate: Wed Nov 23 07:37:33 2022 +0100
Commit:     Stephan Bergmann <sberg...@redhat.com>
CommitDate: Wed Nov 23 08:48:46 2022 +0100

    Fix loplugin:redundantcast check for same-type dynamic_cast
    
    ...when the target type is a reference type and the source and target type 
have
    different cv qualifiers.  (And fix the fallout.  And make the tests cover 
that
    somewhat more exhaustively; and while at it also test that the plugin can 
cope
    with dynamic_cast to void pointers, which is the only legitimate case where 
a
    dynamic_cast can involve types that are not (pointers or references to)
    non-class types.)
    
    Change-Id: Ia568ddb5dbc4a84c275db172791c345d95964857
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/143133
    Tested-by: Jenkins
    Reviewed-by: Stephan Bergmann <sberg...@redhat.com>

diff --git a/compilerplugins/clang/redundantcast.cxx 
b/compilerplugins/clang/redundantcast.cxx
index 984b5f003108..80485e0e9bd6 100644
--- a/compilerplugins/clang/redundantcast.cxx
+++ b/compilerplugins/clang/redundantcast.cxx
@@ -901,6 +901,7 @@ bool 
RedundantCast::VisitCXXDynamicCastExpr(CXXDynamicCastExpr const * expr) {
     {
         // casting from 'T&' to 'const T&' is redundant, so compare without 
the qualifiers
         qt1 = qt1->getPointeeType().getUnqualifiedType();
+        qt2 = qt2.getUnqualifiedType();
         if (qt1 == qt2)
         {
             report(
diff --git a/compilerplugins/clang/test/redundantcast.cxx 
b/compilerplugins/clang/test/redundantcast.cxx
index 228ccfc25dc2..0c1087ab32af 100644
--- a/compilerplugins/clang/test/redundantcast.cxx
+++ b/compilerplugins/clang/test/redundantcast.cxx
@@ -356,13 +356,37 @@ void testDynamicCast() {
     S2 * s2 = nullptr;
     S3 * s3 = nullptr;
 
+    (void) dynamic_cast<void *>(s1);
+    (void) dynamic_cast<void const *>(s1);
     (void) dynamic_cast<S2 *>(s1);
+    (void) dynamic_cast<S2 &>(*s1);
     (void) dynamic_cast<S1 *>(s2); // expected-error {{redundant dynamic 
upcast from 'S2 *' to 'S1 *' [loplugin:redundantcast]}}
+    (void) dynamic_cast<S1 &>(*s2); // expected-error {{redundant dynamic 
upcast from 'S2' to 'S1 &' [loplugin:redundantcast]}}
     (void) dynamic_cast<S2 *>(s2); // expected-error {{redundant dynamic cast 
from 'S2 *' to 'S2 *' [loplugin:redundantcast]}}
+    (void) dynamic_cast<S2 &>(*s2); // expected-error {{redundant dynamic cast 
from 'S2' to 'S2 &' [loplugin:redundantcast]}}
     (void) dynamic_cast<S3 *>(s2);
+    (void) dynamic_cast<S3 &>(*s2);
     (void) dynamic_cast<const S2 *>(s2); // expected-error {{redundant dynamic 
cast from 'S2 *' to 'const S2 *' [loplugin:redundantcast]}}
+    (void) dynamic_cast<const S2 &>(*s2); // expected-error {{redundant 
dynamic cast from 'S2' to 'const S2 &' [loplugin:redundantcast]}}
     (void) dynamic_cast<S1 *>(s3); // expected-error {{redundant dynamic 
upcast from 'S3 *' to 'S1 *' [loplugin:redundantcast]}}
     (void) dynamic_cast<S1&>(*s3); // expected-error {{redundant dynamic 
upcast from 'S3' to 'S1 &' [loplugin:redundantcast]}}
+
+    S1 const * c1 = nullptr;
+    S2 const * c2 = nullptr;
+    S3 const * c3 = nullptr;
+
+    (void) dynamic_cast<void const *>(c1);
+    (void) dynamic_cast<S2 const *>(c1);
+    (void) dynamic_cast<S2 const &>(*c1);
+    (void) dynamic_cast<S1 const *>(c2); // expected-error {{redundant dynamic 
upcast from 'const S2 *' to 'const S1 *' [loplugin:redundantcast]}}
+    (void) dynamic_cast<S1 const &>(*c2); // expected-error {{redundant 
dynamic upcast from 'const S2' to 'const S1 &' [loplugin:redundantcast]}}
+
+    (void) dynamic_cast<S2 const *>(c2); // expected-error {{redundant dynamic 
cast from 'const S2 *' to 'const S2 *' [loplugin:redundantcast]}}
+    (void) dynamic_cast<S2 const &>(*c2); // expected-error {{redundant 
dynamic cast from 'const S2' to 'const S2 &' [loplugin:redundantcast]}}
+    (void) dynamic_cast<S3 const *>(c2);
+    (void) dynamic_cast<S3 const &>(*c2);
+    (void) dynamic_cast<S1 const *>(c3); // expected-error {{redundant dynamic 
upcast from 'const S3 *' to 'const S1 *' [loplugin:redundantcast]}}
+    (void) dynamic_cast<S1 const&>(*c3); // expected-error {{redundant dynamic 
upcast from 'const S3' to 'const S1 &' [loplugin:redundantcast]}}
 }
 
 void overload(int);
diff --git a/sc/qa/unit/bugfix-test.cxx b/sc/qa/unit/bugfix-test.cxx
index 7a5e4e2b73b4..fb8137d4099b 100644
--- a/sc/qa/unit/bugfix-test.cxx
+++ b/sc/qa/unit/bugfix-test.cxx
@@ -547,15 +547,13 @@ void ScFiltersTest::testTdf129789()
         // Fill: None
         SdrCaptionObj* const pCaptionB2 = checkCaption(*pDoc, ScAddress(1, 1, 
0), true);
 
-        const XFillStyleItem& rStyleItemB2
-            = dynamic_cast<const 
XFillStyleItem&>(pCaptionB2->GetMergedItem(XATTR_FILLSTYLE));
+        const XFillStyleItem& rStyleItemB2 = 
pCaptionB2->GetMergedItem(XATTR_FILLSTYLE);
 
         CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_NONE, rStyleItemB2.GetValue());
 
         SdrCaptionObj* const pCaptionB9 = checkCaption(*pDoc, ScAddress(1, 8, 
0), false);
 
-        const XFillStyleItem& rStyleItemB9
-            = dynamic_cast<const 
XFillStyleItem&>(pCaptionB9->GetMergedItem(XATTR_FILLSTYLE));
+        const XFillStyleItem& rStyleItemB9 = 
pCaptionB9->GetMergedItem(XATTR_FILLSTYLE);
 
         CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_NONE, rStyleItemB9.GetValue());
     }
@@ -564,24 +562,20 @@ void ScFiltersTest::testTdf129789()
         // Fill: Solid
         SdrCaptionObj* const pCaptionE2 = checkCaption(*pDoc, ScAddress(4, 1, 
0), true);
 
-        const XFillStyleItem& rStyleItemE2
-            = dynamic_cast<const 
XFillStyleItem&>(pCaptionE2->GetMergedItem(XATTR_FILLSTYLE));
+        const XFillStyleItem& rStyleItemE2 = 
pCaptionE2->GetMergedItem(XATTR_FILLSTYLE);
 
         CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_SOLID, 
rStyleItemE2.GetValue());
 
-        const XFillColorItem& rColorItem
-            = dynamic_cast<const 
XFillColorItem&>(pCaptionE2->GetMergedItem(XATTR_FILLCOLOR));
+        const XFillColorItem& rColorItem = 
pCaptionE2->GetMergedItem(XATTR_FILLCOLOR);
         CPPUNIT_ASSERT_EQUAL(Color(0xffffc0), rColorItem.GetColorValue());
 
         SdrCaptionObj* const pCaptionE9 = checkCaption(*pDoc, ScAddress(4, 8, 
0), false);
 
-        const XFillStyleItem& rStyleItemE9
-            = dynamic_cast<const 
XFillStyleItem&>(pCaptionE9->GetMergedItem(XATTR_FILLSTYLE));
+        const XFillStyleItem& rStyleItemE9 = 
pCaptionE9->GetMergedItem(XATTR_FILLSTYLE);
 
         CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_SOLID, 
rStyleItemE9.GetValue());
 
-        const XFillColorItem& rColorItem2
-            = dynamic_cast<const 
XFillColorItem&>(pCaptionE9->GetMergedItem(XATTR_FILLCOLOR));
+        const XFillColorItem& rColorItem2 = 
pCaptionE9->GetMergedItem(XATTR_FILLCOLOR);
         CPPUNIT_ASSERT_EQUAL(Color(0xffffc0), rColorItem2.GetColorValue());
     }
 
@@ -589,23 +583,19 @@ void ScFiltersTest::testTdf129789()
         // Fill: Gradient
         SdrCaptionObj* const pCaptionH2 = checkCaption(*pDoc, ScAddress(7, 1, 
0), true);
 
-        const XFillStyleItem& rStyleItemH2
-            = dynamic_cast<const 
XFillStyleItem&>(pCaptionH2->GetMergedItem(XATTR_FILLSTYLE));
+        const XFillStyleItem& rStyleItemH2 = 
pCaptionH2->GetMergedItem(XATTR_FILLSTYLE);
 
         CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_GRADIENT, 
rStyleItemH2.GetValue());
-        const XFillGradientItem& rGradientItem
-            = dynamic_cast<const 
XFillGradientItem&>(pCaptionH2->GetMergedItem(XATTR_FILLGRADIENT));
+        const XFillGradientItem& rGradientItem = 
pCaptionH2->GetMergedItem(XATTR_FILLGRADIENT);
         CPPUNIT_ASSERT_EQUAL(Color(0xdde8cb), 
rGradientItem.GetGradientValue().GetStartColor());
         CPPUNIT_ASSERT_EQUAL(Color(0xffd7d7), 
rGradientItem.GetGradientValue().GetEndColor());
 
         SdrCaptionObj* const pCaptionH9 = checkCaption(*pDoc, ScAddress(7, 8, 
0), false);
 
-        const XFillStyleItem& rStyleItemH9
-            = dynamic_cast<const 
XFillStyleItem&>(pCaptionH9->GetMergedItem(XATTR_FILLSTYLE));
+        const XFillStyleItem& rStyleItemH9 = 
pCaptionH9->GetMergedItem(XATTR_FILLSTYLE);
 
         CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_GRADIENT, 
rStyleItemH9.GetValue());
-        const XFillGradientItem& rGradientItem2
-            = dynamic_cast<const 
XFillGradientItem&>(pCaptionH2->GetMergedItem(XATTR_FILLGRADIENT));
+        const XFillGradientItem& rGradientItem2 = 
pCaptionH2->GetMergedItem(XATTR_FILLGRADIENT);
         CPPUNIT_ASSERT_EQUAL(Color(0xdde8cb), 
rGradientItem2.GetGradientValue().GetStartColor());
         CPPUNIT_ASSERT_EQUAL(Color(0xffd7d7), 
rGradientItem2.GetGradientValue().GetEndColor());
     }
@@ -614,22 +604,18 @@ void ScFiltersTest::testTdf129789()
         // Fill: Hatch
         SdrCaptionObj* const pCaptionK2 = checkCaption(*pDoc, ScAddress(10, 1, 
0), true);
 
-        const XFillStyleItem& rStyleItemK2
-            = dynamic_cast<const 
XFillStyleItem&>(pCaptionK2->GetMergedItem(XATTR_FILLSTYLE));
+        const XFillStyleItem& rStyleItemK2 = 
pCaptionK2->GetMergedItem(XATTR_FILLSTYLE);
 
         CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_HATCH, 
rStyleItemK2.GetValue());
-        const XFillHatchItem& rHatchItem
-            = dynamic_cast<const 
XFillHatchItem&>(pCaptionK2->GetMergedItem(XATTR_FILLHATCH));
+        const XFillHatchItem& rHatchItem = 
pCaptionK2->GetMergedItem(XATTR_FILLHATCH);
         CPPUNIT_ASSERT_EQUAL(Color(0x000080), 
rHatchItem.GetHatchValue().GetColor());
 
         SdrCaptionObj* const pCaptionK9 = checkCaption(*pDoc, ScAddress(10, 8, 
0), false);
 
-        const XFillStyleItem& rStyleItemK9
-            = dynamic_cast<const 
XFillStyleItem&>(pCaptionK9->GetMergedItem(XATTR_FILLSTYLE));
+        const XFillStyleItem& rStyleItemK9 = 
pCaptionK9->GetMergedItem(XATTR_FILLSTYLE);
 
         CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_HATCH, 
rStyleItemK9.GetValue());
-        const XFillHatchItem& rHatchItem2
-            = dynamic_cast<const 
XFillHatchItem&>(pCaptionK9->GetMergedItem(XATTR_FILLHATCH));
+        const XFillHatchItem& rHatchItem2 = 
pCaptionK9->GetMergedItem(XATTR_FILLHATCH);
         CPPUNIT_ASSERT_EQUAL(Color(0x000080), 
rHatchItem2.GetHatchValue().GetColor());
     }
 
@@ -637,15 +623,13 @@ void ScFiltersTest::testTdf129789()
         // Fill: Bitmap
         SdrCaptionObj* const pCaptionN2 = checkCaption(*pDoc, ScAddress(13, 1, 
0), true);
 
-        const XFillStyleItem& rStyleItemN2
-            = dynamic_cast<const 
XFillStyleItem&>(pCaptionN2->GetMergedItem(XATTR_FILLSTYLE));
+        const XFillStyleItem& rStyleItemN2 = 
pCaptionN2->GetMergedItem(XATTR_FILLSTYLE);
 
         CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_BITMAP, 
rStyleItemN2.GetValue());
 
         SdrCaptionObj* const pCaptionN9 = checkCaption(*pDoc, ScAddress(13, 8, 
0), false);
 
-        const XFillStyleItem& rStyleItemN9
-            = dynamic_cast<const 
XFillStyleItem&>(pCaptionN9->GetMergedItem(XATTR_FILLSTYLE));
+        const XFillStyleItem& rStyleItemN9 = 
pCaptionN9->GetMergedItem(XATTR_FILLSTYLE);
 
         CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_BITMAP, 
rStyleItemN9.GetValue());
     }
diff --git a/sd/qa/unit/export-tests-ooxml1.cxx 
b/sd/qa/unit/export-tests-ooxml1.cxx
index 866cd331dc68..4d764eede9ce 100644
--- a/sd/qa/unit/export-tests-ooxml1.cxx
+++ b/sd/qa/unit/export-tests-ooxml1.cxx
@@ -984,8 +984,7 @@ void SdOOXMLExportTest1::testLineStyle()
     SdrObject const* pShape = pPage->GetObj(0);
     CPPUNIT_ASSERT_MESSAGE("no shape", pShape != nullptr);
 
-    const XLineStyleItem& rStyleItem
-        = dynamic_cast<const 
XLineStyleItem&>(pShape->GetMergedItem(XATTR_LINESTYLE));
+    const XLineStyleItem& rStyleItem = pShape->GetMergedItem(XATTR_LINESTYLE);
     CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong style", int(drawing::LineStyle_SOLID),
                                  static_cast<int>(rStyleItem.GetValue()));
 }
diff --git a/sd/qa/unit/export-tests-ooxml3.cxx 
b/sd/qa/unit/export-tests-ooxml3.cxx
index d8eedf381ddc..90cf168be5a3 100644
--- a/sd/qa/unit/export-tests-ooxml3.cxx
+++ b/sd/qa/unit/export-tests-ooxml3.cxx
@@ -1376,10 +1376,8 @@ void SdOOXMLExportTest3::testTdf126741()
     SdrObject* const pObj = pPage->GetObj(0);
     CPPUNIT_ASSERT(pObj);
 
-    const XLineStyleItem& rStyleItem
-        = dynamic_cast<const 
XLineStyleItem&>(pObj->GetMergedItem(XATTR_LINESTYLE));
-    const XLineDashItem& rDashItem
-        = dynamic_cast<const 
XLineDashItem&>(pObj->GetMergedItem(XATTR_LINEDASH));
+    const XLineStyleItem& rStyleItem = pObj->GetMergedItem(XATTR_LINESTYLE);
+    const XLineDashItem& rDashItem = pObj->GetMergedItem(XATTR_LINEDASH);
 
     CPPUNIT_ASSERT_EQUAL(drawing::LineStyle_DASH, rStyleItem.GetValue());
     CPPUNIT_ASSERT_EQUAL(sal_uInt16(1), rDashItem.GetDashValue().GetDots());
diff --git a/sd/qa/unit/import-tests.cxx b/sd/qa/unit/import-tests.cxx
index 34523fa136cd..43504ce94b8e 100644
--- a/sd/qa/unit/import-tests.cxx
+++ b/sd/qa/unit/import-tests.cxx
@@ -1093,11 +1093,9 @@ void SdImportTest::testFdo77027()
         CPPUNIT_ASSERT(pObj);
 
         // check that the fill style/color was actually imported
-        const XFillStyleItem& rStyleItem
-            = dynamic_cast<const 
XFillStyleItem&>(pObj->GetMergedItem(XATTR_FILLSTYLE));
+        const XFillStyleItem& rStyleItem = 
pObj->GetMergedItem(XATTR_FILLSTYLE);
         CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_SOLID, rStyleItem.GetValue());
-        const XFillColorItem& rColorItem
-            = dynamic_cast<const 
XFillColorItem&>(pObj->GetMergedItem(XATTR_FILLCOLOR));
+        const XFillColorItem& rColorItem = 
pObj->GetMergedItem(XATTR_FILLCOLOR);
         CPPUNIT_ASSERT_EQUAL(Color(0xff6600), rColorItem.GetColorValue());
     }
 }
@@ -1136,8 +1134,7 @@ void SdImportTest::testFillStyleNone()
 
     const SdrPage* pPage = GetPage(1);
     const SdrObject* pObj = pPage->GetObj(0);
-    auto& rFillStyleItem
-        = dynamic_cast<const 
XFillStyleItem&>(pObj->GetMergedItem(XATTR_FILLSTYLE));
+    auto& rFillStyleItem = pObj->GetMergedItem(XATTR_FILLSTYLE);
     // Without the accompanying fix in place, this test would have failed with 
'Expected: 0; Actual:
     // 1', i.e. the shape's fill was FillStyle_SOLID, making the text of the 
shape unreadable.
     CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_NONE, rFillStyleItem.GetValue());
@@ -1444,11 +1441,9 @@ void SdImportTest::testBnc904423()
         SdrObject* const pObj = pPage->GetObj(0);
         CPPUNIT_ASSERT(pObj);
 
-        const XFillStyleItem& rStyleItem
-            = dynamic_cast<const 
XFillStyleItem&>(pObj->GetMergedItem(XATTR_FILLSTYLE));
+        const XFillStyleItem& rStyleItem = 
pObj->GetMergedItem(XATTR_FILLSTYLE);
         CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_SOLID, rStyleItem.GetValue());
-        const XFillColorItem& rColorItem
-            = dynamic_cast<const 
XFillColorItem&>(pObj->GetMergedItem(XATTR_FILLCOLOR));
+        const XFillColorItem& rColorItem = 
pObj->GetMergedItem(XATTR_FILLCOLOR);
         CPPUNIT_ASSERT_EQUAL(Color(0x00CC99), rColorItem.GetColorValue());
     }
 
@@ -1457,11 +1452,9 @@ void SdImportTest::testBnc904423()
         SdrObject* const pObj = pPage->GetObj(1);
         CPPUNIT_ASSERT(pObj);
 
-        const XFillStyleItem& rStyleItem
-            = dynamic_cast<const 
XFillStyleItem&>(pObj->GetMergedItem(XATTR_FILLSTYLE));
+        const XFillStyleItem& rStyleItem = 
pObj->GetMergedItem(XATTR_FILLSTYLE);
         CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_SOLID, rStyleItem.GetValue());
-        const XFillColorItem& rColorItem
-            = dynamic_cast<const 
XFillColorItem&>(pObj->GetMergedItem(XATTR_FILLCOLOR));
+        const XFillColorItem& rColorItem = 
pObj->GetMergedItem(XATTR_FILLCOLOR);
         CPPUNIT_ASSERT_EQUAL(Color(0x3333CC), rColorItem.GetColorValue());
     }
 
@@ -1470,11 +1463,9 @@ void SdImportTest::testBnc904423()
         SdrObject* const pObj = pPage->GetObj(2);
         CPPUNIT_ASSERT(pObj);
 
-        const XFillStyleItem& rStyleItem
-            = dynamic_cast<const 
XFillStyleItem&>(pObj->GetMergedItem(XATTR_FILLSTYLE));
+        const XFillStyleItem& rStyleItem = 
pObj->GetMergedItem(XATTR_FILLSTYLE);
         CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_SOLID, rStyleItem.GetValue());
-        const XFillColorItem& rColorItem
-            = dynamic_cast<const 
XFillColorItem&>(pObj->GetMergedItem(XATTR_FILLCOLOR));
+        const XFillColorItem& rColorItem = 
pObj->GetMergedItem(XATTR_FILLCOLOR);
         CPPUNIT_ASSERT_EQUAL(Color(0xFF0000), rColorItem.GetColorValue());
     }
 }
@@ -1491,16 +1482,13 @@ void SdImportTest::testShapeLineStyle()
         SdrObject* const pObj = pPage->GetObj(0);
         CPPUNIT_ASSERT(pObj);
 
-        const XLineStyleItem& rStyleItem
-            = dynamic_cast<const 
XLineStyleItem&>(pObj->GetMergedItem(XATTR_LINESTYLE));
+        const XLineStyleItem& rStyleItem = 
pObj->GetMergedItem(XATTR_LINESTYLE);
         CPPUNIT_ASSERT_EQUAL(drawing::LineStyle_DASH, rStyleItem.GetValue());
 
-        const XLineColorItem& rColorItem
-            = dynamic_cast<const 
XLineColorItem&>(pObj->GetMergedItem(XATTR_LINECOLOR));
+        const XLineColorItem& rColorItem = 
pObj->GetMergedItem(XATTR_LINECOLOR);
         CPPUNIT_ASSERT_EQUAL(Color(0xFF0000), rColorItem.GetColorValue());
 
-        const XLineWidthItem& rWidthItem
-            = dynamic_cast<const 
XLineWidthItem&>(pObj->GetMergedItem(XATTR_LINEWIDTH));
+        const XLineWidthItem& rWidthItem = 
pObj->GetMergedItem(XATTR_LINEWIDTH);
         CPPUNIT_ASSERT_EQUAL(sal_Int32(132), rWidthItem.GetValue());
     }
 
@@ -1509,16 +1497,13 @@ void SdImportTest::testShapeLineStyle()
         SdrObject* const pObj = pPage->GetObj(1);
         CPPUNIT_ASSERT(pObj);
 
-        const XLineStyleItem& rStyleItem
-            = dynamic_cast<const 
XLineStyleItem&>(pObj->GetMergedItem(XATTR_LINESTYLE));
+        const XLineStyleItem& rStyleItem = 
pObj->GetMergedItem(XATTR_LINESTYLE);
         CPPUNIT_ASSERT_EQUAL(drawing::LineStyle_SOLID, rStyleItem.GetValue());
 
-        const XLineColorItem& rColorItem
-            = dynamic_cast<const 
XLineColorItem&>(pObj->GetMergedItem(XATTR_LINECOLOR));
+        const XLineColorItem& rColorItem = 
pObj->GetMergedItem(XATTR_LINECOLOR);
         CPPUNIT_ASSERT_EQUAL(Color(0x3333CC), rColorItem.GetColorValue());
 
-        const XLineWidthItem& rWidthItem
-            = dynamic_cast<const 
XLineWidthItem&>(pObj->GetMergedItem(XATTR_LINEWIDTH));
+        const XLineWidthItem& rWidthItem = 
pObj->GetMergedItem(XATTR_LINEWIDTH);
         CPPUNIT_ASSERT_EQUAL(sal_Int32(35), rWidthItem.GetValue());
     }
 
@@ -1527,16 +1512,13 @@ void SdImportTest::testShapeLineStyle()
         SdrObject* const pObj = pPage->GetObj(2);
         CPPUNIT_ASSERT(pObj);
 
-        const XLineStyleItem& rStyleItem
-            = dynamic_cast<const 
XLineStyleItem&>(pObj->GetMergedItem(XATTR_LINESTYLE));
+        const XLineStyleItem& rStyleItem = 
pObj->GetMergedItem(XATTR_LINESTYLE);
         CPPUNIT_ASSERT_EQUAL(drawing::LineStyle_SOLID, rStyleItem.GetValue());
 
-        const XLineColorItem& rColorItem
-            = dynamic_cast<const 
XLineColorItem&>(pObj->GetMergedItem(XATTR_LINECOLOR));
+        const XLineColorItem& rColorItem = 
pObj->GetMergedItem(XATTR_LINECOLOR);
         CPPUNIT_ASSERT_EQUAL(Color(0x7030A0), rColorItem.GetColorValue());
 
-        const XLineWidthItem& rWidthItem
-            = dynamic_cast<const 
XLineWidthItem&>(pObj->GetMergedItem(XATTR_LINEWIDTH));
+        const XLineWidthItem& rWidthItem = 
pObj->GetMergedItem(XATTR_LINEWIDTH);
         CPPUNIT_ASSERT_EQUAL(sal_Int32(176), rWidthItem.GetValue());
     }
 }
diff --git a/sd/qa/unit/import-tests2.cxx b/sd/qa/unit/import-tests2.cxx
index eea2179e15c3..315ff8bba4a2 100644
--- a/sd/qa/unit/import-tests2.cxx
+++ b/sd/qa/unit/import-tests2.cxx
@@ -233,18 +233,13 @@ void SdImportTest2::testTdf93868()
 
     const SdrPage* pPage = &(GetPage(1)->TRG_GetMasterPage());
     CPPUNIT_ASSERT_EQUAL(size_t(5), pPage->GetObjCount());
-    CPPUNIT_ASSERT_EQUAL(
-        drawing::FillStyle_SOLID,
-        dynamic_cast<const 
XFillStyleItem&>(pPage->GetObj(0)->GetMergedItem(XATTR_FILLSTYLE))
-            .GetValue());
+    CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_SOLID,
+                         
pPage->GetObj(0)->GetMergedItem(XATTR_FILLSTYLE).GetValue());
 
-    CPPUNIT_ASSERT_EQUAL(
-        drawing::FillStyle_NONE,
-        dynamic_cast<const 
XFillStyleItem&>(pPage->GetObj(1)->GetMergedItem(XATTR_FILLSTYLE))
-            .GetValue());
-    CPPUNIT_ASSERT_EQUAL(true, dynamic_cast<const 
XFillUseSlideBackgroundItem&>(
-                                   
pPage->GetObj(1)->GetMergedItem(XATTR_FILLUSESLIDEBACKGROUND))
-                                   .GetValue());
+    CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_NONE,
+                         
pPage->GetObj(1)->GetMergedItem(XATTR_FILLSTYLE).GetValue());
+    CPPUNIT_ASSERT_EQUAL(true,
+                         
pPage->GetObj(1)->GetMergedItem(XATTR_FILLUSESLIDEBACKGROUND).GetValue());
 }
 
 void SdImportTest2::testTdf95932()
@@ -255,11 +250,9 @@ void SdImportTest2::testTdf95932()
     SdrObject* const pObj = pPage->GetObj(1);
     CPPUNIT_ASSERT(pObj);
 
-    const XFillStyleItem& rStyleItem
-        = dynamic_cast<const 
XFillStyleItem&>(pObj->GetMergedItem(XATTR_FILLSTYLE));
+    const XFillStyleItem& rStyleItem = pObj->GetMergedItem(XATTR_FILLSTYLE);
     CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_SOLID, rStyleItem.GetValue());
-    const XFillColorItem& rColorItem
-        = dynamic_cast<const 
XFillColorItem&>(pObj->GetMergedItem(XATTR_FILLCOLOR));
+    const XFillColorItem& rColorItem = pObj->GetMergedItem(XATTR_FILLCOLOR);
     CPPUNIT_ASSERT_EQUAL(Color(0x76bf3d), rColorItem.GetColorValue());
 }
 
@@ -630,27 +623,22 @@ void SdImportTest2::testTdf104015()
     CPPUNIT_ASSERT_MESSAGE("Wrong object", pObj != nullptr);
     // Should have a red fill color
     {
-        const XFillStyleItem& rStyleItem
-            = dynamic_cast<const 
XFillStyleItem&>(pObj->GetMergedItem(XATTR_FILLSTYLE));
+        const XFillStyleItem& rStyleItem = 
pObj->GetMergedItem(XATTR_FILLSTYLE);
         CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_SOLID, rStyleItem.GetValue());
-        const XFillColorItem& rColorItem
-            = dynamic_cast<const 
XFillColorItem&>(pObj->GetMergedItem(XATTR_FILLCOLOR));
+        const XFillColorItem& rColorItem = 
pObj->GetMergedItem(XATTR_FILLCOLOR);
         CPPUNIT_ASSERT_EQUAL(Color(0xFF0000), rColorItem.GetColorValue());
     }
     // Should have a blue line
     {
-        const XLineStyleItem& rStyleItem
-            = dynamic_cast<const 
XLineStyleItem&>(pObj->GetMergedItem(XATTR_LINESTYLE));
+        const XLineStyleItem& rStyleItem = 
pObj->GetMergedItem(XATTR_LINESTYLE);
         CPPUNIT_ASSERT_EQUAL(drawing::LineStyle_SOLID, rStyleItem.GetValue());
 
-        const XLineColorItem& rColorItem
-            = dynamic_cast<const 
XLineColorItem&>(pObj->GetMergedItem(XATTR_LINECOLOR));
+        const XLineColorItem& rColorItem = 
pObj->GetMergedItem(XATTR_LINECOLOR);
         CPPUNIT_ASSERT_EQUAL(Color(0x0000FF), rColorItem.GetColorValue());
     }
     // Should have some shadow
     {
-        const SdrOnOffItem& rShadowItem
-            = dynamic_cast<const 
SdrOnOffItem&>(pObj->GetMergedItem(SDRATTR_SHADOW));
+        const SdrOnOffItem& rShadowItem = pObj->GetMergedItem(SDRATTR_SHADOW);
         CPPUNIT_ASSERT(rShadowItem.GetValue());
     }
 }
@@ -668,22 +656,18 @@ void SdImportTest2::testTdf104201()
     {
         SdrObject* const pObj = pPage->GetObj(0);
         CPPUNIT_ASSERT_MESSAGE("Wrong object", pObj != nullptr);
-        const XFillStyleItem& rStyleItem
-            = dynamic_cast<const 
XFillStyleItem&>(pObj->GetMergedItem(XATTR_FILLSTYLE));
+        const XFillStyleItem& rStyleItem = 
pObj->GetMergedItem(XATTR_FILLSTYLE);
         CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_SOLID, rStyleItem.GetValue());
-        const XFillColorItem& rColorItem
-            = dynamic_cast<const 
XFillColorItem&>(pObj->GetMergedItem(XATTR_FILLCOLOR));
+        const XFillColorItem& rColorItem = 
pObj->GetMergedItem(XATTR_FILLCOLOR);
         CPPUNIT_ASSERT_EQUAL(Color(0x00FF00), rColorItem.GetColorValue());
     }
     // Second shape has blue fill, but this should be overwritten by green 
group fill
     {
         SdrObject* const pObj = pPage->GetObj(0);
         CPPUNIT_ASSERT_MESSAGE("Wrong object", pObj != nullptr);
-        const XFillStyleItem& rStyleItem
-            = dynamic_cast<const 
XFillStyleItem&>(pObj->GetMergedItem(XATTR_FILLSTYLE));
+        const XFillStyleItem& rStyleItem = 
pObj->GetMergedItem(XATTR_FILLSTYLE);
         CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_SOLID, rStyleItem.GetValue());
-        const XFillColorItem& rColorItem
-            = dynamic_cast<const 
XFillColorItem&>(pObj->GetMergedItem(XATTR_FILLCOLOR));
+        const XFillColorItem& rColorItem = 
pObj->GetMergedItem(XATTR_FILLCOLOR);
         CPPUNIT_ASSERT_EQUAL(Color(0x00FF00), rColorItem.GetColorValue());
     }
 }
@@ -709,13 +693,11 @@ void SdImportTest2::testTdf105150()
     loadFromURL(u"pptx/tdf105150.pptx");
     const SdrPage* pPage = GetPage(1);
     const SdrObject* pObj = pPage->GetObj(1);
-    auto& rFillStyleItem
-        = dynamic_cast<const 
XFillStyleItem&>(pObj->GetMergedItem(XATTR_FILLSTYLE));
+    auto& rFillStyleItem = pObj->GetMergedItem(XATTR_FILLSTYLE);
     // This was drawing::FillStyle_NONE, <p:sp useBgFill="1"> was ignored when
     // the slide didn't have an explicit background fill.
     CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_NONE, rFillStyleItem.GetValue());
-    auto& rFillBackgroundItem = dynamic_cast<const 
XFillUseSlideBackgroundItem&>(
-        pObj->GetMergedItem(XATTR_FILLUSESLIDEBACKGROUND));
+    auto& rFillBackgroundItem = 
pObj->GetMergedItem(XATTR_FILLUSESLIDEBACKGROUND);
     CPPUNIT_ASSERT_EQUAL(true, rFillBackgroundItem.GetValue());
 }
 
@@ -724,8 +706,7 @@ void SdImportTest2::testTdf123684()
     loadFromURL(u"pptx/tdf123684.pptx");
     const SdrPage* pPage = GetPage(1);
     const SdrObject* pObj = pPage->GetObj(0);
-    auto& rFillStyleItem
-        = dynamic_cast<const 
XFillStyleItem&>(pObj->GetMergedItem(XATTR_FILLSTYLE));
+    auto& rFillStyleItem = pObj->GetMergedItem(XATTR_FILLSTYLE);
     // Without the accompanying fix in place, this test would have failed with 
'Expected: 0; Actual:
     // 1', i.e. the shape's fill was FillStyle_SOLID, making the text of the 
shape unreadable.
     CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_NONE, rFillStyleItem.GetValue());
@@ -738,8 +719,7 @@ void SdImportTest2::testTdf105150PPT()
     const SdrObject* pObj = pPage->GetObj(1);
     // This was drawing::FillStyle_NONE, the shape's mso_fillBackground was
     // ignored when the slide didn't have an explicit background fill.
-    auto& rFillStyleItem
-        = dynamic_cast<const 
XFillStyleItem&>(pObj->GetMergedItem(XATTR_FILLSTYLE));
+    auto& rFillStyleItem = pObj->GetMergedItem(XATTR_FILLSTYLE);
     CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_SOLID, rFillStyleItem.GetValue());
 }
 
@@ -1630,11 +1610,9 @@ void SdImportTest2::testTdf127964()
     {
         const SdrPage* pPage = GetPage(1);
         const SdrObject* pObj = pPage->GetObj(0);
-        auto& rFillStyleItem
-            = dynamic_cast<const 
XFillStyleItem&>(pObj->GetMergedItem(XATTR_FILLSTYLE));
+        auto& rFillStyleItem = pObj->GetMergedItem(XATTR_FILLSTYLE);
         CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_NONE, 
rFillStyleItem.GetValue());
-        auto& rFillBackgroundItem = dynamic_cast<const 
XFillUseSlideBackgroundItem&>(
-            pObj->GetMergedItem(XATTR_FILLUSESLIDEBACKGROUND));
+        auto& rFillBackgroundItem = 
pObj->GetMergedItem(XATTR_FILLUSESLIDEBACKGROUND);
         CPPUNIT_ASSERT_EQUAL(true, rFillBackgroundItem.GetValue());
     }
 
@@ -1643,11 +1621,9 @@ void SdImportTest2::testTdf127964()
     {
         const SdrPage* pPage = GetPage(1);
         const SdrObject* pObj = pPage->GetObj(0);
-        auto& rFillStyleItem
-            = dynamic_cast<const 
XFillStyleItem&>(pObj->GetMergedItem(XATTR_FILLSTYLE));
+        auto& rFillStyleItem = pObj->GetMergedItem(XATTR_FILLSTYLE);
         CPPUNIT_ASSERT_EQUAL(drawing::FillStyle_NONE, 
rFillStyleItem.GetValue());
-        auto& rFillBackgroundItem = dynamic_cast<const 
XFillUseSlideBackgroundItem&>(
-            pObj->GetMergedItem(XATTR_FILLUSESLIDEBACKGROUND));
+        auto& rFillBackgroundItem = 
pObj->GetMergedItem(XATTR_FILLUSESLIDEBACKGROUND);
         CPPUNIT_ASSERT_EQUAL(true, rFillBackgroundItem.GetValue());
     }
 }
diff --git a/sw/source/core/txtnode/ndtxt.cxx b/sw/source/core/txtnode/ndtxt.cxx
index e1d7e92036e4..89a149744e74 100644
--- a/sw/source/core/txtnode/ndtxt.cxx
+++ b/sw/source/core/txtnode/ndtxt.cxx
@@ -4022,7 +4022,7 @@ namespace {
                 {
                     lcl_ResetParAttrs(rTextNode);
                     // #i70748#
-                    if ( dynamic_cast<const SfxUInt16Item 
&>(rTextNode.GetAttr( RES_PARATR_OUTLINELEVEL, false )).GetValue() > 0 )
+                    if ( rTextNode.GetAttr( RES_PARATR_OUTLINELEVEL, false 
).GetValue() > 0 )
                     {
                         rTextNode.SetEmptyListStyleDueToSetOutlineLevelAttr();
                     }
@@ -4162,7 +4162,7 @@ void SwTextNode::SetAttrOutlineLevel(int nLevel)
 
 void SwTextNode::GetAttrOutlineContentVisible(bool& bOutlineContentVisibleAttr)
 {
-    const SfxGrabBagItem & rGrabBagItem = dynamic_cast<const 
SfxGrabBagItem&>(GetAttr(RES_PARATR_GRABBAG));
+    const SfxGrabBagItem & rGrabBagItem = GetAttr(RES_PARATR_GRABBAG);
     auto it = rGrabBagItem.GetGrabBag().find("OutlineContentVisibleAttr");
     if (it != rGrabBagItem.GetGrabBag().end())
         it->second >>= bOutlineContentVisibleAttr;
@@ -4219,7 +4219,7 @@ int SwTextNode::GetAttrListLevel() const
     int nAttrListLevel = 0;
 
     const SfxInt16Item& aListLevelItem =
-        dynamic_cast<const SfxInt16Item&>(GetAttr( RES_PARATR_LIST_LEVEL ));
+        GetAttr( RES_PARATR_LIST_LEVEL );
     nAttrListLevel = static_cast<int>(aListLevelItem.GetValue());
 
     return nAttrListLevel;
@@ -4315,7 +4315,7 @@ SwNumberTree::tSwNumTreeNumber 
SwTextNode::GetAttrListRestartValue() const
             "<SwTextNode::GetAttrListRestartValue()> - only ask for list 
restart value, if attribute is set at text node." );
 
     const SfxInt16Item& aListRestartValueItem =
-        dynamic_cast<const SfxInt16Item&>(GetAttr( 
RES_PARATR_LIST_RESTARTVALUE ));
+        GetAttr( RES_PARATR_LIST_RESTARTVALUE );
     return 
static_cast<SwNumberTree::tSwNumTreeNumber>(aListRestartValueItem.GetValue());
 }
 
@@ -4542,7 +4542,7 @@ bool SwTextNode::IsFirstOfNumRule(SwRootFrame const& 
rLayout) const
 void SwTextNode::SetListId(OUString const& rListId)
 {
     const SfxStringItem& rListIdItem =
-            dynamic_cast<const SfxStringItem&>(GetAttr( RES_PARATR_LIST_ID ));
+            GetAttr( RES_PARATR_LIST_ID );
     if (rListIdItem.GetValue() != rListId)
     {
         if (rListId.isEmpty())
@@ -4560,7 +4560,7 @@ void SwTextNode::SetListId(OUString const& rListId)
 OUString SwTextNode::GetListId() const
 {
     const SfxStringItem& rListIdItem =
-                dynamic_cast<const SfxStringItem&>(GetAttr( RES_PARATR_LIST_ID 
));
+                GetAttr( RES_PARATR_LIST_ID );
     const OUString& sListId {rListIdItem.GetValue()};
 
     // As long as no explicit list id attribute is set, use the list id of
diff --git a/sw/source/core/unocore/unodraw.cxx 
b/sw/source/core/unocore/unodraw.cxx
index bb93566a271a..e816380ad253 100644
--- a/sw/source/core/unocore/unodraw.cxx
+++ b/sw/source/core/unocore/unodraw.cxx
@@ -1239,7 +1239,7 @@ void SwXShape::setPropertyValue(const OUString& 
rPropertyName, const uno::Any& a
                     else if( text::TextContentAnchorType_AT_PAGE != eNewAnchor 
&&
                             (RndStdIds::FLY_AT_PAGE == eOldAnchorId))
                     {
-                        SwFormatAnchor aNewAnchor( dynamic_cast< const 
SwFormatAnchor& >( aSet.Get( RES_ANCHOR ) ) );
+                        SwFormatAnchor aNewAnchor( aSet.Get( RES_ANCHOR ) );
                         //if the fly has been anchored at page then it needs 
to be connected
                         //to the content position
                         SwPaM aPam(pDoc->GetNodes().GetEndOfContent());
@@ -1283,8 +1283,7 @@ void SwXShape::setPropertyValue(const OUString& 
rPropertyName, const uno::Any& a
                             aPam.GetPoint()->GetContentIndex(), 0 );
                         aPam.GetPoint()->AdjustContent(-1); // InsertItem 
moved it
                         SwFormatAnchor aNewAnchor(
-                            dynamic_cast<const SwFormatAnchor&>(
-                                aSet.Get(RES_ANCHOR)));
+                                aSet.Get(RES_ANCHOR));
                         aNewAnchor.SetAnchor( aPam.GetPoint() );
                         aSet.Put( aNewAnchor );
                     }
diff --git a/sw/source/filter/ww8/wrtw8sty.cxx 
b/sw/source/filter/ww8/wrtw8sty.cxx
index 842bf958def4..c73378d4b702 100644
--- a/sw/source/filter/ww8/wrtw8sty.cxx
+++ b/sw/source/filter/ww8/wrtw8sty.cxx
@@ -1678,7 +1678,7 @@ void MSWordExportBase::SectionProperties( const 
WW8_SepInfo& rSepInfo, WW8_PdAtt
             //i120133: The Section width should consider section indent value.
             if (rSectionLR.GetLeft()+rSectionLR.GetRight()!=0)
             {
-                const SwFormatCol& rCol = dynamic_cast<const 
SwFormatCol&>(rSepInfo.pSectionFormat->GetFormatAttr(RES_COL));
+                const SwFormatCol& rCol = 
rSepInfo.pSectionFormat->GetFormatAttr(RES_COL);
                 SwFormatCol aCol(rCol);
                 
aCol.SetAdjustValue(rSectionLR.GetLeft()+rSectionLR.GetRight());
                 aSet.Put(aCol);
diff --git a/sw/source/uibase/shells/textsh1.cxx 
b/sw/source/uibase/shells/textsh1.cxx
index da69a34ef75d..41a159c2a91b 100644
--- a/sw/source/uibase/shells/textsh1.cxx
+++ b/sw/source/uibase/shells/textsh1.cxx
@@ -1369,7 +1369,7 @@ void SwTextShell::Execute(SfxRequest &rReq)
         rWrtSh.GetCurAttr(aSet);
         if(SfxItemState::SET <= aSet.GetItemState( RES_TXTATR_INETFMT ))
         {
-            const SwFormatINetFormat& rINetFormat = dynamic_cast<const 
SwFormatINetFormat&>( aSet.Get(RES_TXTATR_INETFMT) );
+            const SwFormatINetFormat& rINetFormat = 
aSet.Get(RES_TXTATR_INETFMT);
             if( nSlot == SID_COPY_HYPERLINK_LOCATION )
             {
                 OUString hyperlinkLocation = rINetFormat.GetValue();
diff --git a/sw/source/uibase/uno/unotxdoc.cxx 
b/sw/source/uibase/uno/unotxdoc.cxx
index 0f0fb093cb3e..bb6b32723129 100644
--- a/sw/source/uibase/uno/unotxdoc.cxx
+++ b/sw/source/uibase/uno/unotxdoc.cxx
@@ -3865,21 +3865,21 @@ uno::Sequence< lang::Locale > SAL_CALL 
SwXTextDocument::getDocumentLanguages(
             if (bLatin)
             {
                 assert(pSet);
-                nLang = dynamic_cast< const SvxLanguageItem & >(pSet->Get( 
RES_CHRATR_LANGUAGE, false )).GetLanguage();
+                nLang = pSet->Get( RES_CHRATR_LANGUAGE, false ).GetLanguage();
                 if (nLang != LANGUAGE_DONTKNOW && nLang != LANGUAGE_SYSTEM)
                     aAllLangs.insert( nLang );
             }
             if (bAsian)
             {
                 assert(pSet);
-                nLang = dynamic_cast< const SvxLanguageItem & >(pSet->Get( 
RES_CHRATR_CJK_LANGUAGE, false )).GetLanguage();
+                nLang = pSet->Get( RES_CHRATR_CJK_LANGUAGE, false 
).GetLanguage();
                 if (nLang != LANGUAGE_DONTKNOW && nLang != LANGUAGE_SYSTEM)
                     aAllLangs.insert( nLang );
             }
             if (bComplex)
             {
                 assert(pSet);
-                nLang = dynamic_cast< const SvxLanguageItem & >(pSet->Get( 
RES_CHRATR_CTL_LANGUAGE, false )).GetLanguage();
+                nLang = pSet->Get( RES_CHRATR_CTL_LANGUAGE, false 
).GetLanguage();
                 if (nLang != LANGUAGE_DONTKNOW && nLang != LANGUAGE_SYSTEM)
                     aAllLangs.insert( nLang );
             }
@@ -3915,19 +3915,19 @@ uno::Sequence< lang::Locale > SAL_CALL 
SwXTextDocument::getDocumentLanguages(
                     LanguageType nLang = LANGUAGE_DONTKNOW;
                     if (bLatin)
                     {
-                        nLang = dynamic_cast< const SvxLanguageItem & 
>(aAttr.Get( EE_CHAR_LANGUAGE, false )).GetLanguage();
+                        nLang = aAttr.Get( EE_CHAR_LANGUAGE, false 
).GetLanguage();
                         if (nLang != LANGUAGE_DONTKNOW && nLang != 
LANGUAGE_SYSTEM)
                             aAllLangs.insert( nLang );
                     }
                     if (bAsian)
                     {
-                        nLang = dynamic_cast< const SvxLanguageItem & 
>(aAttr.Get( EE_CHAR_LANGUAGE_CJK, false )).GetLanguage();
+                        nLang = aAttr.Get( EE_CHAR_LANGUAGE_CJK, false 
).GetLanguage();
                         if (nLang != LANGUAGE_DONTKNOW && nLang != 
LANGUAGE_SYSTEM)
                             aAllLangs.insert( nLang );
                     }
                     if (bComplex)
                     {
-                        nLang = dynamic_cast< const SvxLanguageItem & 
>(aAttr.Get( EE_CHAR_LANGUAGE_CTL, false )).GetLanguage();
+                        nLang = aAttr.Get( EE_CHAR_LANGUAGE_CTL, false 
).GetLanguage();
                         if (nLang != LANGUAGE_DONTKNOW && nLang != 
LANGUAGE_SYSTEM)
                             aAllLangs.insert( nLang );
                     }

Reply via email to