compilerplugins/clang/finalmethods.cxx                       |  153 +++++++++++
 compilerplugins/clang/finalmethods.py                        |   71 +++++
 include/basegfx/utils/unopolypolygon.hxx                     |   36 +-
 include/comphelper/ChainablePropertySet.hxx                  |   38 +-
 include/comphelper/MasterPropertySet.hxx                     |   32 +-
 include/comphelper/accessiblecomponenthelper.hxx             |   14 -
 include/comphelper/accessibleselectionhelper.hxx             |   16 -
 include/comphelper/accessibletexthelper.hxx                  |   12 
 include/comphelper/accessiblewrapper.hxx                     |   32 +-
 include/comphelper/proparrhlp.hxx                            |    2 
 include/comphelper/propertysethelper.hxx                     |    8 
 include/comphelper/propertystatecontainer.hxx                |    6 
 include/comphelper/propshlp.hxx                              |    2 
 include/comphelper/propstate.hxx                             |    2 
 include/comphelper/seqstream.hxx                             |   18 -
 include/comphelper/weakeventlistener.hxx                     |    2 
 include/drawinglayer/primitive2d/fillgradientprimitive2d.hxx |    6 
 include/drawinglayer/primitive2d/groupprimitive2d.hxx        |    2 
 include/drawinglayer/primitive2d/primitivetools2d.hxx        |    6 
 include/drawinglayer/primitive3d/baseprimitive3d.hxx         |    4 
 include/drawinglayer/primitive3d/polygonprimitive3d.hxx      |    2 
 include/editeng/AccessibleContextBase.hxx                    |    2 
 include/editeng/AccessibleSelectionBase.hxx                  |   14 -
 include/editeng/AccessibleStaticTextBase.hxx                 |   38 +-
 include/editeng/UnoForbiddenCharsTable.hxx                   |   12 
 include/editeng/unoforou.hxx                                 |  104 +++----
 include/editeng/unotext.hxx                                  |   80 ++---
 include/formula/token.hxx                                    |   12 
 include/linguistic/lngprophelp.hxx                           |    6 
 include/linguistic/misc.hxx                                  |    6 
 include/oox/core/contexthandler2.hxx                         |    6 
 include/tools/stream.hxx                                     |    4 
 include/unotools/confignode.hxx                              |    2 
 include/unotools/streamwrap.hxx                              |   22 -
 include/xmloff/XMLCharContext.hxx                            |    2 
 include/xmloff/XMLComplexColorHandler.hxx                    |    6 
 include/xmloff/XMLConstantsPropertyHandler.hxx               |    4 
 include/xmloff/XMLDrawingPageStyleContext.hxx                |    2 
 include/xmloff/XMLEventsImportContext.hxx                    |    2 
 include/xmloff/XMLTextMasterPageContext.hxx                  |    2 
 include/xmloff/XMLTextMasterStylesContext.hxx                |    2 
 include/xmloff/XMLTextShapeImportHelper.hxx                  |    2 
 include/xmloff/txtparae.hxx                                  |    2 
 include/xmloff/txtstyli.hxx                                  |    6 
 include/xmloff/xmlexp.hxx                                    |    4 
 include/xmloff/xmlimp.hxx                                    |   40 +-
 include/xmloff/xmlmetai.hxx                                  |    2 
 include/xmloff/xmlnumfi.hxx                                  |    2 
 include/xmloff/xmlprcon.hxx                                  |    2 
 include/xmloff/xmlstyle.hxx                                  |    4 
 50 files changed, 540 insertions(+), 316 deletions(-)

New commits:
commit 5b2cd79aded5081ca8a4bc20fb851573ce890092
Author:     Noel Grandin <noel.gran...@collabora.co.uk>
AuthorDate: Wed Mar 20 12:29:19 2024 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Tue Mar 26 17:16:47 2024 +0100

    loplugin:finalmethods
    
    create a plugin that finds methods we can mark as final because they are
    not override in subclasses.
    
    Which is useful both as documentation (telling you that you don't need
    to worry about subclasses changing the implementation under you),
    and for performance, letting the compiler elide virtual calls in many
    cases.
    
    Apply the results to a subset of stuff in /include
    
    Change-Id: I7b5cc893ec2f343bc356bfc338e4cf531ffba1e0
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/165054
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/compilerplugins/clang/finalmethods.cxx 
b/compilerplugins/clang/finalmethods.cxx
new file mode 100644
index 000000000000..9dfb93e5f6a7
--- /dev/null
+++ b/compilerplugins/clang/finalmethods.cxx
@@ -0,0 +1,153 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <cassert>
+#include <unordered_map>
+#include <unordered_set>
+#include <string>
+#include <iostream>
+#include "config_clang.h"
+#include "compat.hxx"
+#include "plugin.hxx"
+#include <fstream>
+
+/**
+Look for methods that are final i.e. nothing overrides them
+
+Making the method final means the compiler can devirtualise
+some method calls.
+
+The process goes something like this:
+  $ make check
+  $ make FORCE_COMPILE=all COMPILER_PLUGIN_TOOL='finalmethods' check
+  $ ./compilerplugins/clang/finalmethods.py
+
+*/
+
+namespace
+{
+// try to limit the voluminous output a little
+static std::unordered_set<std::string> overriddenSet;
+static std::unordered_map<std::string, std::string> definitionMap; // 
methodName -> location
+
+class FinalMethods : public RecursiveASTVisitor<FinalMethods>, public 
loplugin::Plugin
+{
+public:
+    explicit FinalMethods(loplugin::InstantiationData const& data)
+        : Plugin(data)
+    {
+    }
+
+    virtual void run() override
+    {
+        handler.enableTreeWideAnalysisMode();
+
+        TraverseDecl(compiler.getASTContext().getTranslationUnitDecl());
+
+        // dump all our output in one write call - this is to try and limit IO 
"crosstalk" between multiple processes
+        // writing to the same logfile
+        std::string output;
+        for (const std::string& s : overriddenSet)
+            output += "overridden:     " + s + "
";
+        for (const auto& s : definitionMap)
+            output += "definition:     " + s.first + " " + s.second + "
";
+        std::ofstream myfile;
+        myfile.open(WORKDIR "/loplugin.finalmethods.log", std::ios::app | 
std::ios::out);
+        myfile << output;
+        myfile.close();
+    }
+
+    bool shouldVisitTemplateInstantiations() const { return true; }
+
+    bool shouldVisitImplicitCode() const { return true; }
+
+    bool VisitCXXMethodDecl(const CXXMethodDecl*);
+
+private:
+    std::string toString(SourceLocation loc);
+    std::string niceName(const CXXMethodDecl*);
+};
+
+bool FinalMethods::VisitCXXMethodDecl(const CXXMethodDecl* methodDecl)
+{
+    if (ignoreLocation(methodDecl))
+        return true;
+    if (!methodDecl->isThisDeclarationADefinition())
+        return true;
+    // don't care about compiler-generated functions
+    if (methodDecl->isImplicit())
+        return true;
+    if (!methodDecl->isVirtual())
+        return true;
+    if (!methodDecl->getLocation().isValid())
+        return true;
+    if (isa<CXXDestructorDecl>(methodDecl) || 
isa<CXXConstructorDecl>(methodDecl))
+        return true;
+
+    methodDecl = methodDecl->getCanonicalDecl();
+    if 
(isInUnoIncludeFile(compiler.getSourceManager().getSpellingLoc(methodDecl->getLocation())))
+        return true;
+
+    std::string methodNiceName = niceName(methodDecl);
+
+    // If the containing class/struct is final, then the method is effectively 
final too.
+    if (!methodDecl->hasAttr<FinalAttr>() && 
!methodDecl->getParent()->hasAttr<FinalAttr>())
+        definitionMap.insert({ methodNiceName, 
toString(methodDecl->getBeginLoc()) });
+
+    for (auto it = methodDecl->begin_overridden_methods();
+         it != methodDecl->end_overridden_methods(); ++it)
+        overriddenSet.insert(niceName(*it));
+
+    return true;
+}
+
+std::string FinalMethods::niceName(const CXXMethodDecl* methodDecl)
+{
+    if (methodDecl->getInstantiatedFromMemberFunction())
+        methodDecl = 
dyn_cast<CXXMethodDecl>(methodDecl->getInstantiatedFromMemberFunction());
+    else if (methodDecl->getTemplateInstantiationPattern())
+        methodDecl = 
dyn_cast<CXXMethodDecl>(methodDecl->getTemplateInstantiationPattern());
+
+    std::string returnType = 
methodDecl->getReturnType().getCanonicalType().getAsString();
+
+    const CXXRecordDecl* recordDecl = methodDecl->getParent();
+    std::string nameAndParams
+        = recordDecl->getQualifiedNameAsString() + "::" + 
methodDecl->getNameAsString() + "(";
+
+    bool bFirst = true;
+    for (const ParmVarDecl* pParmVarDecl : methodDecl->parameters())
+    {
+        if (bFirst)
+            bFirst = false;
+        else
+            nameAndParams += ",";
+        nameAndParams += 
pParmVarDecl->getType().getCanonicalType().getAsString();
+    }
+    nameAndParams += ")";
+    if (methodDecl->isConst())
+        nameAndParams += " const";
+
+    return returnType + " " + nameAndParams + " " + returnType;
+}
+
+std::string FinalMethods::toString(SourceLocation loc)
+{
+    SourceLocation expansionLoc = 
compiler.getSourceManager().getExpansionLoc(loc);
+    StringRef name = getFilenameOfLocation(expansionLoc);
+    std::string sourceLocation
+        = std::string(name.substr(strlen(SRCDIR) + 1)) + ":"
+          + 
std::to_string(compiler.getSourceManager().getSpellingLineNumber(expansionLoc));
+    loplugin::normalizeDotDotInFilePath(sourceLocation);
+    return sourceLocation;
+}
+
+loplugin::Plugin::Registration<FinalMethods> X("finalmethods", false);
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/compilerplugins/clang/finalmethods.py 
b/compilerplugins/clang/finalmethods.py
new file mode 100755
index 000000000000..21414c1acbef
--- /dev/null
+++ b/compilerplugins/clang/finalmethods.py
@@ -0,0 +1,71 @@
+#!/usr/bin/python3
+
+import re
+
+definitionSet = set()
+overriddenSet = set()
+definitionToFileDict = {}
+
+with open("workdir/loplugin.finalmethods.log") as txt:
+    for line in txt:
+        tokens = line.strip().split("  ")
+
+        if len(tokens) == 1:
+            pass
+
+        elif tokens[0] == "definition:":
+            methodName = tokens[1]
+            fileName  = tokens[2]
+            definitionSet.add(methodName)
+            definitionToFileDict[methodName] = fileName
+
+        elif tokens[0] == "overridden:":
+            methodName = tokens[1]
+            overriddenSet.add(methodName)
+
+        else:
+            print( "unknown line: " + line)
+
+match_module_inc1 = re.compile(r'^\w+/inc/')
+match_module_inc2 = re.compile(r'^\w+/.*/inc/')
+tmpset = set()
+for method in sorted(definitionSet - overriddenSet):
+    file = definitionToFileDict[method]
+    # ignore classes defined inside compilation units, the compiler knows they 
are final already
+    if (".cxx" in file): continue
+    # ignore test and external code
+    if ("/qa/" in file): continue
+    if (file.startswith("workdir/")): continue
+    # We are only really interested in classes that are shared between linkage 
units, where the compiler
+    # is not able to figure out for itself that classes are final.
+    if not(file.startswith("include/") or match_module_inc1.match(file) or 
match_module_inc2.match(file)): continue
+    #if not(file.endswith(".hxx")): continue
+    # Exclude URE
+    if file.startswith("include/com/"): continue
+    if file.startswith("include/cppu/"): continue
+    if file.startswith("include/cppuhelper/"): continue
+    if file.startswith("include/osl/"): continue
+    if file.startswith("include/rtl/"): continue
+    if file.startswith("include/sal/"): continue
+    if file.startswith("include/salhelper/"): continue
+    if file.startswith("include/typelib/"): continue
+    if file.startswith("include/uno/"): continue
+    tmpset.add((method, file))
+
+# sort the results using a "natural order" so sequences like 
[item1,item2,item10] sort nicely
+def natural_sort_key(s, _nsre=re.compile('([0-9]+)')):
+    return [int(text) if text.isdigit() else text.lower()
+            for text in re.split(_nsre, s)]
+# sort by both the source-line and the datatype, so the output file ordering 
is stable
+# when we have multiple items on the same source line
+def v_sort_key(v):
+    return natural_sort_key(v[1]) + [v[0]]
+def sort_set_by_natural_key(s):
+    return sorted(s, key=lambda v: v_sort_key(v))
+
+# print output, sorted by name and line number
+with open("compilerplugins/clang/finalmethods.results", "wt") as f:
+    for t in sort_set_by_natural_key(tmpset):
+        f.write(t[1] + "
")
+        f.write("    " + t[0] + "
")
+
diff --git a/include/basegfx/utils/unopolypolygon.hxx 
b/include/basegfx/utils/unopolypolygon.hxx
index 48788b074ede..6357f17b577c 100644
--- a/include/basegfx/utils/unopolypolygon.hxx
+++ b/include/basegfx/utils/unopolypolygon.hxx
@@ -43,30 +43,30 @@ namespace basegfx::unotools
         explicit UnoPolyPolygon( B2DPolyPolygon );
 
         // XPolyPolygon2D
-        SAL_DLLPRIVATE virtual void SAL_CALL addPolyPolygon( const 
css::geometry::RealPoint2D& position, const css::uno::Reference< 
css::rendering::XPolyPolygon2D >& polyPolygon ) override;
-        SAL_DLLPRIVATE virtual ::sal_Int32 SAL_CALL getNumberOfPolygons(  ) 
override;
-        SAL_DLLPRIVATE virtual ::sal_Int32 SAL_CALL getNumberOfPolygonPoints( 
::sal_Int32 polygon ) override;
-        SAL_DLLPRIVATE virtual css::rendering::FillRule SAL_CALL getFillRule(  
) override;
-        SAL_DLLPRIVATE virtual void SAL_CALL setFillRule( 
css::rendering::FillRule fillRule ) override;
-        SAL_DLLPRIVATE virtual sal_Bool SAL_CALL isClosed( ::sal_Int32 index ) 
override;
-        SAL_DLLPRIVATE virtual void SAL_CALL setClosed( ::sal_Int32 index, 
sal_Bool closedState ) override;
+        SAL_DLLPRIVATE virtual void SAL_CALL addPolyPolygon( const 
css::geometry::RealPoint2D& position, const css::uno::Reference< 
css::rendering::XPolyPolygon2D >& polyPolygon ) override final;
+        SAL_DLLPRIVATE virtual ::sal_Int32 SAL_CALL getNumberOfPolygons(  ) 
override final;
+        SAL_DLLPRIVATE virtual ::sal_Int32 SAL_CALL getNumberOfPolygonPoints( 
::sal_Int32 polygon ) override final;
+        SAL_DLLPRIVATE virtual css::rendering::FillRule SAL_CALL getFillRule(  
) override final;
+        SAL_DLLPRIVATE virtual void SAL_CALL setFillRule( 
css::rendering::FillRule fillRule ) override final;
+        SAL_DLLPRIVATE virtual sal_Bool SAL_CALL isClosed( ::sal_Int32 index ) 
override final;
+        SAL_DLLPRIVATE virtual void SAL_CALL setClosed( ::sal_Int32 index, 
sal_Bool closedState ) override final;
 
         // XLinePolyPolygon2D
-        SAL_DLLPRIVATE virtual css::uno::Sequence< css::uno::Sequence< 
css::geometry::RealPoint2D > > SAL_CALL getPoints( ::sal_Int32 nPolygonIndex, 
::sal_Int32 nNumberOfPolygons, ::sal_Int32 nPointIndex, ::sal_Int32 
nNumberOfPoints ) override;
-        SAL_DLLPRIVATE virtual void SAL_CALL setPoints( const 
css::uno::Sequence< css::uno::Sequence< css::geometry::RealPoint2D > >& points, 
::sal_Int32 nPolygonIndex ) override;
-        SAL_DLLPRIVATE virtual css::geometry::RealPoint2D SAL_CALL getPoint( 
::sal_Int32 nPolygonIndex, ::sal_Int32 nPointIndex ) override;
-        SAL_DLLPRIVATE virtual void SAL_CALL setPoint( const 
css::geometry::RealPoint2D& point, ::sal_Int32 nPolygonIndex, ::sal_Int32 
nPointIndex ) override;
+        SAL_DLLPRIVATE virtual css::uno::Sequence< css::uno::Sequence< 
css::geometry::RealPoint2D > > SAL_CALL getPoints( ::sal_Int32 nPolygonIndex, 
::sal_Int32 nNumberOfPolygons, ::sal_Int32 nPointIndex, ::sal_Int32 
nNumberOfPoints ) override final;
+        SAL_DLLPRIVATE virtual void SAL_CALL setPoints( const 
css::uno::Sequence< css::uno::Sequence< css::geometry::RealPoint2D > >& points, 
::sal_Int32 nPolygonIndex ) override final;
+        SAL_DLLPRIVATE virtual css::geometry::RealPoint2D SAL_CALL getPoint( 
::sal_Int32 nPolygonIndex, ::sal_Int32 nPointIndex ) override final;
+        SAL_DLLPRIVATE virtual void SAL_CALL setPoint( const 
css::geometry::RealPoint2D& point, ::sal_Int32 nPolygonIndex, ::sal_Int32 
nPointIndex ) override final;
 
         // XBezierPolyPolygon2D
-        SAL_DLLPRIVATE virtual css::uno::Sequence< css::uno::Sequence< 
css::geometry::RealBezierSegment2D > > SAL_CALL getBezierSegments( ::sal_Int32 
nPolygonIndex, ::sal_Int32 nNumberOfPolygons, ::sal_Int32 nPointIndex, 
::sal_Int32 nNumberOfPoints ) override;
-        SAL_DLLPRIVATE virtual void SAL_CALL setBezierSegments( const 
css::uno::Sequence< css::uno::Sequence< css::geometry::RealBezierSegment2D > >& 
points, ::sal_Int32 nPolygonIndex ) override;
-        SAL_DLLPRIVATE virtual css::geometry::RealBezierSegment2D SAL_CALL 
getBezierSegment( ::sal_Int32 nPolygonIndex, ::sal_Int32 nPointIndex ) override;
-        SAL_DLLPRIVATE virtual void SAL_CALL setBezierSegment( const 
css::geometry::RealBezierSegment2D& point, ::sal_Int32 nPolygonIndex, 
::sal_Int32 nPointIndex ) override;
+        SAL_DLLPRIVATE virtual css::uno::Sequence< css::uno::Sequence< 
css::geometry::RealBezierSegment2D > > SAL_CALL getBezierSegments( ::sal_Int32 
nPolygonIndex, ::sal_Int32 nNumberOfPolygons, ::sal_Int32 nPointIndex, 
::sal_Int32 nNumberOfPoints ) override final;
+        SAL_DLLPRIVATE virtual void SAL_CALL setBezierSegments( const 
css::uno::Sequence< css::uno::Sequence< css::geometry::RealBezierSegment2D > >& 
points, ::sal_Int32 nPolygonIndex ) override final;
+        SAL_DLLPRIVATE virtual css::geometry::RealBezierSegment2D SAL_CALL 
getBezierSegment( ::sal_Int32 nPolygonIndex, ::sal_Int32 nPointIndex ) override 
final;
+        SAL_DLLPRIVATE virtual void SAL_CALL setBezierSegment( const 
css::geometry::RealBezierSegment2D& point, ::sal_Int32 nPolygonIndex, 
::sal_Int32 nPointIndex ) override final;
 
         // XServiceInfo
-        SAL_DLLPRIVATE virtual OUString SAL_CALL getImplementationName() 
override;
-        SAL_DLLPRIVATE virtual sal_Bool SAL_CALL supportsService( const 
OUString& ServiceName ) override;
-        SAL_DLLPRIVATE virtual css::uno::Sequence< OUString > SAL_CALL 
getSupportedServiceNames() override;
+        SAL_DLLPRIVATE virtual OUString SAL_CALL getImplementationName() 
override final;
+        SAL_DLLPRIVATE virtual sal_Bool SAL_CALL supportsService( const 
OUString& ServiceName ) override final;
+        SAL_DLLPRIVATE virtual css::uno::Sequence< OUString > SAL_CALL 
getSupportedServiceNames() override final;
 
         SAL_DLLPRIVATE B2DPolyPolygon getPolyPolygon() const;
 
diff --git a/include/comphelper/ChainablePropertySet.hxx 
b/include/comphelper/ChainablePropertySet.hxx
index fb4fbd744d9a..20bbe030d978 100644
--- a/include/comphelper/ChainablePropertySet.hxx
+++ b/include/comphelper/ChainablePropertySet.hxx
@@ -113,34 +113,34 @@ namespace comphelper
         virtual ~ChainablePropertySet()
             noexcept override;
 
-        css::uno::Any SAL_CALL queryInterface( const css::uno::Type& aType ) 
override
+        css::uno::Any SAL_CALL queryInterface( const css::uno::Type& aType ) 
override final
         { return ChainablePropertySetBase::queryInterface( aType ); }
-        void SAL_CALL acquire(  ) noexcept override
+        void SAL_CALL acquire(  ) noexcept override final
         { ChainablePropertySetBase::acquire( ); }
-        void SAL_CALL release(  ) noexcept override
+        void SAL_CALL release(  ) noexcept override final
         { ChainablePropertySetBase::release( ); }
 
         // XPropertySet
-        virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL 
getPropertySetInfo(  ) override;
-        virtual void SAL_CALL setPropertyValue( const OUString& aPropertyName, 
const css::uno::Any& aValue ) override;
-        virtual css::uno::Any SAL_CALL getPropertyValue( const OUString& 
PropertyName ) override;
-        virtual void SAL_CALL addPropertyChangeListener( const OUString& 
aPropertyName, const css::uno::Reference< css::beans::XPropertyChangeListener 
>& xListener ) override;
-        virtual void SAL_CALL removePropertyChangeListener( const OUString& 
aPropertyName, const css::uno::Reference< css::beans::XPropertyChangeListener 
>& aListener ) override;
-        virtual void SAL_CALL addVetoableChangeListener( const OUString& 
PropertyName, const css::uno::Reference< css::beans::XVetoableChangeListener >& 
aListener ) override;
-        virtual void SAL_CALL removeVetoableChangeListener( const OUString& 
PropertyName, const css::uno::Reference< css::beans::XVetoableChangeListener >& 
aListener ) override;
+        virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL 
getPropertySetInfo(  ) override final;
+        virtual void SAL_CALL setPropertyValue( const OUString& aPropertyName, 
const css::uno::Any& aValue ) override final;
+        virtual css::uno::Any SAL_CALL getPropertyValue( const OUString& 
PropertyName ) override final;
+        virtual void SAL_CALL addPropertyChangeListener( const OUString& 
aPropertyName, const css::uno::Reference< css::beans::XPropertyChangeListener 
>& xListener ) override final;
+        virtual void SAL_CALL removePropertyChangeListener( const OUString& 
aPropertyName, const css::uno::Reference< css::beans::XPropertyChangeListener 
>& aListener ) override final;
+        virtual void SAL_CALL addVetoableChangeListener( const OUString& 
PropertyName, const css::uno::Reference< css::beans::XVetoableChangeListener >& 
aListener ) override final;
+        virtual void SAL_CALL removeVetoableChangeListener( const OUString& 
PropertyName, const css::uno::Reference< css::beans::XVetoableChangeListener >& 
aListener ) override final;
 
         // XMultiPropertySet
-        virtual void SAL_CALL setPropertyValues( const css::uno::Sequence< 
OUString >& aPropertyNames, const css::uno::Sequence< css::uno::Any >& aValues 
) override;
-        virtual css::uno::Sequence< css::uno::Any > SAL_CALL 
getPropertyValues( const css::uno::Sequence< OUString >& aPropertyNames ) 
override;
-        virtual void SAL_CALL addPropertiesChangeListener( const 
css::uno::Sequence< OUString >& aPropertyNames, const css::uno::Reference< 
css::beans::XPropertiesChangeListener >& xListener ) override;
-        virtual void SAL_CALL removePropertiesChangeListener( const 
css::uno::Reference< css::beans::XPropertiesChangeListener >& xListener ) 
override;
-        virtual void SAL_CALL firePropertiesChangeEvent( const 
css::uno::Sequence< OUString >& aPropertyNames, const css::uno::Reference< 
css::beans::XPropertiesChangeListener >& xListener ) override;
+        virtual void SAL_CALL setPropertyValues( const css::uno::Sequence< 
OUString >& aPropertyNames, const css::uno::Sequence< css::uno::Any >& aValues 
) override final;
+        virtual css::uno::Sequence< css::uno::Any > SAL_CALL 
getPropertyValues( const css::uno::Sequence< OUString >& aPropertyNames ) 
override final;
+        virtual void SAL_CALL addPropertiesChangeListener( const 
css::uno::Sequence< OUString >& aPropertyNames, const css::uno::Reference< 
css::beans::XPropertiesChangeListener >& xListener ) override final;
+        virtual void SAL_CALL removePropertiesChangeListener( const 
css::uno::Reference< css::beans::XPropertiesChangeListener >& xListener ) 
override final;
+        virtual void SAL_CALL firePropertiesChangeEvent( const 
css::uno::Sequence< OUString >& aPropertyNames, const css::uno::Reference< 
css::beans::XPropertiesChangeListener >& xListener ) override final;
 
         // XPropertyState
-        virtual css::beans::PropertyState SAL_CALL getPropertyState( const 
OUString& PropertyName ) override;
-        virtual css::uno::Sequence< css::beans::PropertyState > SAL_CALL 
getPropertyStates( const css::uno::Sequence< OUString >& aPropertyName ) 
override;
-        virtual void SAL_CALL setPropertyToDefault( const OUString& 
PropertyName ) override;
-        virtual css::uno::Any SAL_CALL getPropertyDefault( const OUString& 
aPropertyName ) override;
+        virtual css::beans::PropertyState SAL_CALL getPropertyState( const 
OUString& PropertyName ) override final;
+        virtual css::uno::Sequence< css::beans::PropertyState > SAL_CALL 
getPropertyStates( const css::uno::Sequence< OUString >& aPropertyName ) 
override final;
+        virtual void SAL_CALL setPropertyToDefault( const OUString& 
PropertyName ) override final;
+        virtual css::uno::Any SAL_CALL getPropertyDefault( const OUString& 
aPropertyName ) override final;
     };
 }
 #endif
diff --git a/include/comphelper/MasterPropertySet.hxx 
b/include/comphelper/MasterPropertySet.hxx
index 867583d646ca..f69c28299d03 100644
--- a/include/comphelper/MasterPropertySet.hxx
+++ b/include/comphelper/MasterPropertySet.hxx
@@ -108,26 +108,26 @@ namespace comphelper
             noexcept;
 
         // XPropertySet
-        virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL 
getPropertySetInfo(  ) override;
-        virtual void SAL_CALL setPropertyValue( const OUString& aPropertyName, 
const css::uno::Any& aValue ) override;
-        virtual css::uno::Any SAL_CALL getPropertyValue( const OUString& 
PropertyName ) override;
-        virtual void SAL_CALL addPropertyChangeListener( const OUString& 
aPropertyName, const css::uno::Reference< css::beans::XPropertyChangeListener 
>& xListener ) override;
-        virtual void SAL_CALL removePropertyChangeListener( const OUString& 
aPropertyName, const css::uno::Reference< css::beans::XPropertyChangeListener 
>& aListener ) override;
-        virtual void SAL_CALL addVetoableChangeListener( const OUString& 
PropertyName, const css::uno::Reference< css::beans::XVetoableChangeListener >& 
aListener ) override;
-        virtual void SAL_CALL removeVetoableChangeListener( const OUString& 
PropertyName, const css::uno::Reference< css::beans::XVetoableChangeListener >& 
aListener ) override;
+        virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL 
getPropertySetInfo(  ) override final;
+        virtual void SAL_CALL setPropertyValue( const OUString& aPropertyName, 
const css::uno::Any& aValue ) override final;
+        virtual css::uno::Any SAL_CALL getPropertyValue( const OUString& 
PropertyName ) override final;
+        virtual void SAL_CALL addPropertyChangeListener( const OUString& 
aPropertyName, const css::uno::Reference< css::beans::XPropertyChangeListener 
>& xListener ) override final;
+        virtual void SAL_CALL removePropertyChangeListener( const OUString& 
aPropertyName, const css::uno::Reference< css::beans::XPropertyChangeListener 
>& aListener ) override final;
+        virtual void SAL_CALL addVetoableChangeListener( const OUString& 
PropertyName, const css::uno::Reference< css::beans::XVetoableChangeListener >& 
aListener ) override final;
+        virtual void SAL_CALL removeVetoableChangeListener( const OUString& 
PropertyName, const css::uno::Reference< css::beans::XVetoableChangeListener >& 
aListener ) override final;
 
         // XMultiPropertySet
-        virtual void SAL_CALL setPropertyValues( const css::uno::Sequence< 
OUString >& aPropertyNames, const css::uno::Sequence< css::uno::Any >& aValues 
) override;
-        virtual css::uno::Sequence< css::uno::Any > SAL_CALL 
getPropertyValues( const css::uno::Sequence< OUString >& aPropertyNames ) 
override;
-        virtual void SAL_CALL addPropertiesChangeListener( const 
css::uno::Sequence< OUString >& aPropertyNames, const css::uno::Reference< 
css::beans::XPropertiesChangeListener >& xListener ) override;
-        virtual void SAL_CALL removePropertiesChangeListener( const 
css::uno::Reference< css::beans::XPropertiesChangeListener >& xListener ) 
override;
-        virtual void SAL_CALL firePropertiesChangeEvent( const 
css::uno::Sequence< OUString >& aPropertyNames, const css::uno::Reference< 
css::beans::XPropertiesChangeListener >& xListener ) override;
+        virtual void SAL_CALL setPropertyValues( const css::uno::Sequence< 
OUString >& aPropertyNames, const css::uno::Sequence< css::uno::Any >& aValues 
) override final;
+        virtual css::uno::Sequence< css::uno::Any > SAL_CALL 
getPropertyValues( const css::uno::Sequence< OUString >& aPropertyNames ) 
override final;
+        virtual void SAL_CALL addPropertiesChangeListener( const 
css::uno::Sequence< OUString >& aPropertyNames, const css::uno::Reference< 
css::beans::XPropertiesChangeListener >& xListener ) override final;
+        virtual void SAL_CALL removePropertiesChangeListener( const 
css::uno::Reference< css::beans::XPropertiesChangeListener >& xListener ) 
override final;
+        virtual void SAL_CALL firePropertiesChangeEvent( const 
css::uno::Sequence< OUString >& aPropertyNames, const css::uno::Reference< 
css::beans::XPropertiesChangeListener >& xListener ) override final;
 
         // XPropertyState
-        virtual css::beans::PropertyState SAL_CALL getPropertyState( const 
OUString& PropertyName ) override;
-        virtual css::uno::Sequence< css::beans::PropertyState > SAL_CALL 
getPropertyStates( const css::uno::Sequence< OUString >& aPropertyName ) 
override;
-        virtual void SAL_CALL setPropertyToDefault( const OUString& 
PropertyName ) override;
-        virtual css::uno::Any SAL_CALL getPropertyDefault( const OUString& 
aPropertyName ) override;
+        virtual css::beans::PropertyState SAL_CALL getPropertyState( const 
OUString& PropertyName ) override final;
+        virtual css::uno::Sequence< css::beans::PropertyState > SAL_CALL 
getPropertyStates( const css::uno::Sequence< OUString >& aPropertyName ) 
override final;
+        virtual void SAL_CALL setPropertyToDefault( const OUString& 
PropertyName ) override final;
+        virtual css::uno::Any SAL_CALL getPropertyDefault( const OUString& 
aPropertyName ) override final;
     };
 }
 #endif
diff --git a/include/comphelper/accessiblecomponenthelper.hxx 
b/include/comphelper/accessiblecomponenthelper.hxx
index 5d10b2b17eb2..3774baf683d5 100644
--- a/include/comphelper/accessiblecomponenthelper.hxx
+++ b/include/comphelper/accessiblecomponenthelper.hxx
@@ -80,8 +80,8 @@ namespace comphelper
 
     public:
         // XAccessibleEventBroadcaster
-        virtual void SAL_CALL addAccessibleEventListener( const 
css::uno::Reference< css::accessibility::XAccessibleEventListener >& xListener 
) override;
-        virtual void SAL_CALL removeAccessibleEventListener( const 
css::uno::Reference< css::accessibility::XAccessibleEventListener >& xListener 
) override;
+        virtual void SAL_CALL addAccessibleEventListener( const 
css::uno::Reference< css::accessibility::XAccessibleEventListener >& xListener 
) override final;
+        virtual void SAL_CALL removeAccessibleEventListener( const 
css::uno::Reference< css::accessibility::XAccessibleEventListener >& xListener 
) override final;
 
         // XAccessibleContext - still waiting to be overwritten
         virtual sal_Int64 SAL_CALL getAccessibleChildCount(  ) override = 0;
@@ -197,11 +197,11 @@ namespace comphelper
 
     public:
         // XAccessibleComponent - default implementations
-        virtual sal_Bool SAL_CALL containsPoint( const css::awt::Point& aPoint 
) override;
-        virtual css::awt::Point SAL_CALL getLocation(  ) override;
+        virtual sal_Bool SAL_CALL containsPoint( const css::awt::Point& aPoint 
) override final;
+        virtual css::awt::Point SAL_CALL getLocation(  ) override final;
         virtual css::awt::Point SAL_CALL getLocationOnScreen(  ) override;
-        virtual css::awt::Size SAL_CALL getSize(  ) override;
-        virtual css::awt::Rectangle SAL_CALL getBounds(  ) override;
+        virtual css::awt::Size SAL_CALL getSize(  ) override final;
+        virtual css::awt::Rectangle SAL_CALL getBounds(  ) override final;
     };
 
 
@@ -226,7 +226,7 @@ namespace comphelper
 
     public:
         // XAccessibleComponent - default implementations
-        virtual sal_Bool SAL_CALL containsPoint( const css::awt::Point& aPoint 
) override;
+        virtual sal_Bool SAL_CALL containsPoint( const css::awt::Point& aPoint 
) override final;
         virtual css::awt::Point SAL_CALL getLocation(  ) override;
         virtual css::awt::Point SAL_CALL getLocationOnScreen(  ) override;
         virtual css::awt::Size SAL_CALL getSize(  ) override;
diff --git a/include/comphelper/accessibleselectionhelper.hxx 
b/include/comphelper/accessibleselectionhelper.hxx
index f291707e1a91..12842bf4bcb2 100644
--- a/include/comphelper/accessibleselectionhelper.hxx
+++ b/include/comphelper/accessibleselectionhelper.hxx
@@ -110,18 +110,18 @@ namespace comphelper
         OAccessibleSelectionHelper();
 
         // return ourself here by default
-        virtual css::uno::Reference< css::accessibility::XAccessibleContext > 
implGetAccessibleContext() override;
+        virtual css::uno::Reference< css::accessibility::XAccessibleContext > 
implGetAccessibleContext() override final;
 
     public:
 
         // XAccessibleSelection - default implementations
-        virtual void SAL_CALL selectAccessibleChild( sal_Int64 nChildIndex ) 
override;
-        virtual sal_Bool SAL_CALL isAccessibleChildSelected( sal_Int64 
nChildIndex ) override;
-        virtual void SAL_CALL clearAccessibleSelection(  ) override;
-        virtual void SAL_CALL selectAllAccessibleChildren(  ) override;
-        virtual sal_Int64 SAL_CALL getSelectedAccessibleChildCount(  ) 
override;
-        virtual css::uno::Reference< css::accessibility::XAccessible > 
SAL_CALL getSelectedAccessibleChild( sal_Int64 nSelectedChildIndex ) override;
-        virtual void SAL_CALL deselectAccessibleChild( sal_Int64 
nSelectedChildIndex ) override;
+        virtual void SAL_CALL selectAccessibleChild( sal_Int64 nChildIndex ) 
override final;
+        virtual sal_Bool SAL_CALL isAccessibleChildSelected( sal_Int64 
nChildIndex ) override final;
+        virtual void SAL_CALL clearAccessibleSelection(  ) override final;
+        virtual void SAL_CALL selectAllAccessibleChildren(  ) override final;
+        virtual sal_Int64 SAL_CALL getSelectedAccessibleChildCount(  ) 
override final;
+        virtual css::uno::Reference< css::accessibility::XAccessible > 
SAL_CALL getSelectedAccessibleChild( sal_Int64 nSelectedChildIndex ) override 
final;
+        virtual void SAL_CALL deselectAccessibleChild( sal_Int64 
nSelectedChildIndex ) override final;
     };
 
 
diff --git a/include/comphelper/accessibletexthelper.hxx 
b/include/comphelper/accessibletexthelper.hxx
index 433cd357badc..eab5df05be41 100644
--- a/include/comphelper/accessibletexthelper.hxx
+++ b/include/comphelper/accessibletexthelper.hxx
@@ -131,12 +131,12 @@ namespace comphelper
 
     public:
         // XAccessibleText
-        virtual OUString SAL_CALL getSelectedText() override;
-        virtual sal_Int32 SAL_CALL getSelectionStart() override;
-        virtual sal_Int32 SAL_CALL getSelectionEnd() override;
-        virtual css::accessibility::TextSegment SAL_CALL getTextAtIndex( 
sal_Int32 nIndex, sal_Int16 aTextType ) override;
-        virtual css::accessibility::TextSegment SAL_CALL getTextBeforeIndex( 
sal_Int32 nIndex, sal_Int16 aTextType ) override;
-        virtual css::accessibility::TextSegment SAL_CALL getTextBehindIndex( 
sal_Int32 nIndex, sal_Int16 aTextType ) override;
+        virtual OUString SAL_CALL getSelectedText() override final;
+        virtual sal_Int32 SAL_CALL getSelectionStart() override final;
+        virtual sal_Int32 SAL_CALL getSelectionEnd() override final;
+        virtual css::accessibility::TextSegment SAL_CALL getTextAtIndex( 
sal_Int32 nIndex, sal_Int16 aTextType ) override final;
+        virtual css::accessibility::TextSegment SAL_CALL getTextBeforeIndex( 
sal_Int32 nIndex, sal_Int16 aTextType ) override final;
+        virtual css::accessibility::TextSegment SAL_CALL getTextBehindIndex( 
sal_Int32 nIndex, sal_Int16 aTextType ) override final;
     };
 
 
diff --git a/include/comphelper/accessiblewrapper.hxx 
b/include/comphelper/accessiblewrapper.hxx
index fa0e5832f448..02e3da19d8a4 100644
--- a/include/comphelper/accessiblewrapper.hxx
+++ b/include/comphelper/accessiblewrapper.hxx
@@ -99,7 +99,7 @@ namespace comphelper
 
     protected:
         virtual css::uno::Reference< css::accessibility::XAccessibleContext > 
SAL_CALL
-                    getAccessibleContext(  ) override;
+                    getAccessibleContext(  ) override final;
 
         const css::uno::Reference< css::accessibility::XAccessible >&
                     getParent() const { return m_xParentAccessible; }
@@ -205,7 +205,7 @@ namespace comphelper
         css::uno::Reference< css::accessibility::XAccessibleRelationSet > 
baseGetAccessibleRelationSet(  );
 
         // XAccessibleEventListener
-        virtual void SAL_CALL notifyEvent( const 
css::accessibility::AccessibleEventObject& aEvent ) override;
+        virtual void SAL_CALL notifyEvent( const 
css::accessibility::AccessibleEventObject& aEvent ) override final;
 
         // XEventListener
         virtual void SAL_CALL disposing( const css::lang::EventObject& Source 
) override;
@@ -279,32 +279,32 @@ namespace comphelper
         DECLARE_XTYPEPROVIDER( )
 
         // XAccessibleContext
-        virtual sal_Int64 SAL_CALL getAccessibleChildCount(  ) override;
-        virtual css::uno::Reference< css::accessibility::XAccessible > 
SAL_CALL getAccessibleChild( sal_Int64 i ) override;
-        virtual css::uno::Reference< css::accessibility::XAccessible > 
SAL_CALL getAccessibleParent(  ) override;
+        virtual sal_Int64 SAL_CALL getAccessibleChildCount(  ) override final;
+        virtual css::uno::Reference< css::accessibility::XAccessible > 
SAL_CALL getAccessibleChild( sal_Int64 i ) override final;
+        virtual css::uno::Reference< css::accessibility::XAccessible > 
SAL_CALL getAccessibleParent(  ) override final;
         virtual sal_Int64 SAL_CALL getAccessibleIndexInParent(  ) override;
-        virtual sal_Int16 SAL_CALL getAccessibleRole(  ) override;
-        virtual OUString SAL_CALL getAccessibleDescription(  ) override;
-        virtual OUString SAL_CALL getAccessibleName(  ) override;
-        virtual css::uno::Reference< 
css::accessibility::XAccessibleRelationSet > SAL_CALL getAccessibleRelationSet( 
 ) override;
-        virtual sal_Int64 SAL_CALL getAccessibleStateSet(  ) override;
-        virtual css::lang::Locale SAL_CALL getLocale(  ) override;
+        virtual sal_Int16 SAL_CALL getAccessibleRole(  ) override final;
+        virtual OUString SAL_CALL getAccessibleDescription(  ) override final;
+        virtual OUString SAL_CALL getAccessibleName(  ) override final;
+        virtual css::uno::Reference< 
css::accessibility::XAccessibleRelationSet > SAL_CALL getAccessibleRelationSet( 
 ) override final;
+        virtual sal_Int64 SAL_CALL getAccessibleStateSet(  ) override final;
+        virtual css::lang::Locale SAL_CALL getLocale(  ) override final;
 
         // XAccessibleEventBroadcaster
-        virtual void SAL_CALL addAccessibleEventListener( const 
css::uno::Reference< css::accessibility::XAccessibleEventListener >& xListener 
) override;
-        virtual void SAL_CALL removeAccessibleEventListener( const 
css::uno::Reference< css::accessibility::XAccessibleEventListener >& xListener 
) override;
+        virtual void SAL_CALL addAccessibleEventListener( const 
css::uno::Reference< css::accessibility::XAccessibleEventListener >& xListener 
) override final;
+        virtual void SAL_CALL removeAccessibleEventListener( const 
css::uno::Reference< css::accessibility::XAccessibleEventListener >& xListener 
) override final;
 
         // OAccessibleContextWrapper
-        virtual void notifyTranslatedEvent( const 
css::accessibility::AccessibleEventObject& _rEvent ) override;
+        virtual void notifyTranslatedEvent( const 
css::accessibility::AccessibleEventObject& _rEvent ) override final;
 
         // helper method for both 'disposing' methods
         void implDisposing(const css::lang::EventObject* pEvent);
 
         // OComponentHelper
-        void SAL_CALL disposing() override;
+        void SAL_CALL disposing() override final;
 
         // XAccessibleEventListener
-        virtual void SAL_CALL disposing(const css::lang::EventObject& rEvent) 
override;
+        virtual void SAL_CALL disposing(const css::lang::EventObject& rEvent) 
override final;
 
     protected:
         virtual ~OAccessibleContextWrapper() override;
diff --git a/include/comphelper/proparrhlp.hxx 
b/include/comphelper/proparrhlp.hxx
index 5db95972f556..77fa9e1b9714 100644
--- a/include/comphelper/proparrhlp.hxx
+++ b/include/comphelper/proparrhlp.hxx
@@ -80,7 +80,7 @@ protected:
         fillProperties is called. getInfoService and getFirstAggregateId may 
be overwritten to determine
         the additional parameters of the OPropertyArrayAggregationHelper.
     */
-    virtual ::cppu::IPropertyArrayHelper* createArrayHelper( ) const;
+    virtual ::cppu::IPropertyArrayHelper* createArrayHelper( ) const final;
 };
 
 template<class TYPE>
diff --git a/include/comphelper/propertysethelper.hxx 
b/include/comphelper/propertysethelper.hxx
index a4746a02fad9..a9ca3c93786f 100644
--- a/include/comphelper/propertysethelper.hxx
+++ b/include/comphelper/propertysethelper.hxx
@@ -83,10 +83,10 @@ public:
     virtual void SAL_CALL firePropertiesChangeEvent( const css::uno::Sequence< 
OUString >& aPropertyNames, const css::uno::Reference< 
css::beans::XPropertiesChangeListener >& xListener ) override;
 
     // XPropertyState
-    virtual css::beans::PropertyState SAL_CALL getPropertyState( const 
OUString& PropertyName ) override;
-    virtual css::uno::Sequence< css::beans::PropertyState > SAL_CALL 
getPropertyStates( const css::uno::Sequence< OUString >& aPropertyName ) 
override;
-    virtual void SAL_CALL setPropertyToDefault( const OUString& PropertyName ) 
override;
-    virtual css::uno::Any SAL_CALL getPropertyDefault( const OUString& 
aPropertyName ) override;
+    virtual css::beans::PropertyState SAL_CALL getPropertyState( const 
OUString& PropertyName ) override final;
+    virtual css::uno::Sequence< css::beans::PropertyState > SAL_CALL 
getPropertyStates( const css::uno::Sequence< OUString >& aPropertyName ) 
override final;
+    virtual void SAL_CALL setPropertyToDefault( const OUString& PropertyName ) 
override final;
+    virtual css::uno::Any SAL_CALL getPropertyDefault( const OUString& 
aPropertyName ) override final;
 };
 
 }
diff --git a/include/comphelper/propertystatecontainer.hxx 
b/include/comphelper/propertystatecontainer.hxx
index d5da098f1630..e992e6b64546 100644
--- a/include/comphelper/propertystatecontainer.hxx
+++ b/include/comphelper/propertystatecontainer.hxx
@@ -56,10 +56,10 @@ namespace comphelper
 
 
         // XPropertyState
-        virtual css::beans::PropertyState SAL_CALL getPropertyState( const 
OUString& PropertyName ) override;
+        virtual css::beans::PropertyState SAL_CALL getPropertyState( const 
OUString& PropertyName ) override final;
         virtual css::uno::Sequence< css::beans::PropertyState > SAL_CALL 
getPropertyStates( const css::uno::Sequence< OUString >& aPropertyName ) 
override;
-        virtual void SAL_CALL setPropertyToDefault( const OUString& 
PropertyName ) override;
-        virtual css::uno::Any SAL_CALL getPropertyDefault( const OUString& 
aPropertyName ) override;
+        virtual void SAL_CALL setPropertyToDefault( const OUString& 
PropertyName ) override final;
+        virtual css::uno::Any SAL_CALL getPropertyDefault( const OUString& 
aPropertyName ) override final;
 
 
         // own overridables
diff --git a/include/comphelper/propshlp.hxx b/include/comphelper/propshlp.hxx
index cd59b52c8afe..e605a4d65812 100644
--- a/include/comphelper/propshlp.hxx
+++ b/include/comphelper/propshlp.hxx
@@ -172,7 +172,7 @@ protected:
                                           const css::uno::Any& rValue);
     /** Override this if you need to do something special during 
getPropertyValue */
     virtual css::uno::Any getPropertyValueImpl(std::unique_lock<std::mutex>& 
rGuard,
-                                               const ::rtl::OUString& 
aPropertyName);
+                                               const ::rtl::OUString& 
aPropertyName) final;
 
     /**
        This method fire events to all registered property listeners.
diff --git a/include/comphelper/propstate.hxx b/include/comphelper/propstate.hxx
index 7729aaa9b8f4..e4c80b56a580 100644
--- a/include/comphelper/propstate.hxx
+++ b/include/comphelper/propstate.hxx
@@ -57,7 +57,7 @@ namespace comphelper
         virtual css::beans::PropertyState SAL_CALL
             getPropertyState(const OUString& PropertyName) override;
         virtual css::uno::Sequence< css::beans::PropertyState> SAL_CALL
-            getPropertyStates(const css::uno::Sequence< OUString >& 
aPropertyName) override;
+            getPropertyStates(const css::uno::Sequence< OUString >& 
aPropertyName) override final;
         virtual void SAL_CALL
             setPropertyToDefault(const OUString& PropertyName) override;
         virtual css::uno::Any SAL_CALL
diff --git a/include/comphelper/seqstream.hxx b/include/comphelper/seqstream.hxx
index 8e2ae36d17c2..80c449027a95 100644
--- a/include/comphelper/seqstream.hxx
+++ b/include/comphelper/seqstream.hxx
@@ -46,22 +46,22 @@ public:
     MemoryInputStream(const sal_Int8* pData, sal_Int32 nDataLength);
 
 // css::io::XInputStream
-    virtual sal_Int32 SAL_CALL readBytes( css::uno::Sequence<sal_Int8>& aData, 
sal_Int32 nBytesToRead ) override;
+    virtual sal_Int32 SAL_CALL readBytes( css::uno::Sequence<sal_Int8>& aData, 
sal_Int32 nBytesToRead ) override final;
 
-    virtual sal_Int32 SAL_CALL readSomeBytes( css::uno::Sequence<sal_Int8>& 
aData, sal_Int32 nMaxBytesToRead ) override;
+    virtual sal_Int32 SAL_CALL readSomeBytes( css::uno::Sequence<sal_Int8>& 
aData, sal_Int32 nMaxBytesToRead ) override final;
 
-    virtual void SAL_CALL skipBytes( sal_Int32 nBytesToSkip ) override;
+    virtual void SAL_CALL skipBytes( sal_Int32 nBytesToSkip ) override final;
 
-    virtual sal_Int32 SAL_CALL available(  ) override;
+    virtual sal_Int32 SAL_CALL available(  ) override final;
 
-    virtual void SAL_CALL closeInput(  ) override;
+    virtual void SAL_CALL closeInput(  ) override final;
 
-    virtual void SAL_CALL seek( sal_Int64 location ) override;
-    virtual sal_Int64 SAL_CALL getPosition(  ) override;
-    virtual sal_Int64 SAL_CALL getLength(  ) override;
+    virtual void SAL_CALL seek( sal_Int64 location ) override final;
+    virtual sal_Int64 SAL_CALL getPosition(  ) override final;
+    virtual sal_Int64 SAL_CALL getLength(  ) override final;
 
 // comphelper::ByteReader
-    virtual sal_Int32 readSomeBytes( sal_Int8* pData, sal_Int32 nBytesToRead ) 
override;
+    virtual sal_Int32 readSomeBytes( sal_Int8* pData, sal_Int32 nBytesToRead ) 
override final;
 
 private:
     sal_Int32 avail();
diff --git a/include/comphelper/weakeventlistener.hxx 
b/include/comphelper/weakeventlistener.hxx
index dae191ed8598..868a0bb5dcec 100644
--- a/include/comphelper/weakeventlistener.hxx
+++ b/include/comphelper/weakeventlistener.hxx
@@ -117,7 +117,7 @@ namespace comphelper
         }
 
         // XEventListener overridables
-        virtual void SAL_CALL disposing( const css::lang::EventObject& Source 
) override;
+        virtual void SAL_CALL disposing( const css::lang::EventObject& Source 
) override final;
 
     protected:
         // OComponentHelper overridables
diff --git a/include/drawinglayer/primitive2d/fillgradientprimitive2d.hxx 
b/include/drawinglayer/primitive2d/fillgradientprimitive2d.hxx
index 62442d18a652..42f4de30fd91 100644
--- a/include/drawinglayer/primitive2d/fillgradientprimitive2d.hxx
+++ b/include/drawinglayer/primitive2d/fillgradientprimitive2d.hxx
@@ -91,13 +91,13 @@ namespace drawinglayer::primitive2d
             const attribute::FillGradientAttribute& getFillGradient() const { 
return maFillGradient; }
 
             /// compare operator
-            virtual bool operator==(const BasePrimitive2D& rPrimitive) const 
override;
+            virtual bool operator==(const BasePrimitive2D& rPrimitive) const 
override final;
 
             /// get range
-            virtual basegfx::B2DRange getB2DRange(const 
geometry::ViewInformation2D& rViewInformation) const override;
+            virtual basegfx::B2DRange getB2DRange(const 
geometry::ViewInformation2D& rViewInformation) const override final;
 
             /// provide unique ID
-            virtual sal_uInt32 getPrimitive2DID() const override;
+            virtual sal_uInt32 getPrimitive2DID() const override final;
         };
 } // end of namespace drawinglayer::primitive2d
 
diff --git a/include/drawinglayer/primitive2d/groupprimitive2d.hxx 
b/include/drawinglayer/primitive2d/groupprimitive2d.hxx
index b34bef834f03..1c55a5814743 100644
--- a/include/drawinglayer/primitive2d/groupprimitive2d.hxx
+++ b/include/drawinglayer/primitive2d/groupprimitive2d.hxx
@@ -85,7 +85,7 @@ namespace drawinglayer::primitive2d
             virtual sal_uInt32 getPrimitive2DID() const override;
 
             // XAccounting
-            virtual sal_Int64 estimateUsage() override;
+            virtual sal_Int64 estimateUsage() override final;
         };
 } // end of namespace drawinglayer::primitive2d
 
diff --git a/include/drawinglayer/primitive2d/primitivetools2d.hxx 
b/include/drawinglayer/primitive2d/primitivetools2d.hxx
index 97e4f770e389..9ecf5445d7c3 100644
--- a/include/drawinglayer/primitive2d/primitivetools2d.hxx
+++ b/include/drawinglayer/primitive2d/primitivetools2d.hxx
@@ -83,7 +83,7 @@ namespace drawinglayer::primitive2d
             const basegfx::B2DRange& getViewport() const { return maViewport; }
 
             /// Override standard getDecomposition to be view-dependent here
-            virtual void get2DDecomposition(Primitive2DDecompositionVisitor& 
rVisitor, const geometry::ViewInformation2D& rViewInformation) const override;
+            virtual void get2DDecomposition(Primitive2DDecompositionVisitor& 
rVisitor, const geometry::ViewInformation2D& rViewInformation) const override 
final;
         };
 
         /** ViewTransformationDependentPrimitive2D class
@@ -112,7 +112,7 @@ namespace drawinglayer::primitive2d
             const basegfx::B2DHomMatrix& getViewTransformation() const { 
return maViewTransformation; }
 
             /// Override standard getDecomposition to be view-dependent here
-            virtual void get2DDecomposition(Primitive2DDecompositionVisitor& 
rVisitor, const geometry::ViewInformation2D& rViewInformation) const override;
+            virtual void get2DDecomposition(Primitive2DDecompositionVisitor& 
rVisitor, const geometry::ViewInformation2D& rViewInformation) const override 
final;
         };
 
         /** ObjectAndViewTransformationDependentPrimitive2D class
@@ -144,7 +144,7 @@ namespace drawinglayer::primitive2d
             const basegfx::B2DHomMatrix& getObjectTransformation() const { 
return maObjectTransformation; }
 
             /// Override standard getDecomposition to be view-dependent here
-            virtual void get2DDecomposition(Primitive2DDecompositionVisitor& 
rVisitor, const geometry::ViewInformation2D& rViewInformation) const override;
+            virtual void get2DDecomposition(Primitive2DDecompositionVisitor& 
rVisitor, const geometry::ViewInformation2D& rViewInformation) const override 
final;
         };
 } // end of namespace drawinglayer::primitive2d
 
diff --git a/include/drawinglayer/primitive3d/baseprimitive3d.hxx 
b/include/drawinglayer/primitive3d/baseprimitive3d.hxx
index 4a636835b51c..0731aa61b642 100644
--- a/include/drawinglayer/primitive3d/baseprimitive3d.hxx
+++ b/include/drawinglayer/primitive3d/baseprimitive3d.hxx
@@ -129,12 +129,12 @@ namespace drawinglayer::primitive3d
             /** The getDecomposition implementation for UNO API will use 
getDecomposition from this implementation. It
                 will get the ViewInformation from the ViewParameters for that 
purpose
              */
-            virtual css::uno::Sequence< ::css::uno::Reference< 
::css::graphic::XPrimitive3D > > SAL_CALL getDecomposition( const 
css::uno::Sequence< css::beans::PropertyValue >& rViewParameters ) override;
+            virtual css::uno::Sequence< ::css::uno::Reference< 
::css::graphic::XPrimitive3D > > SAL_CALL getDecomposition( const 
css::uno::Sequence< css::beans::PropertyValue >& rViewParameters ) override 
final;
 
             /** the getRange default implementation will use getDecomposition 
to create the range information from merging
                 getRange results from the single local decomposition 
primitives.
              */
-            virtual css::geometry::RealRectangle3D SAL_CALL getRange( const 
css::uno::Sequence< css::beans::PropertyValue >& rViewParameters ) override;
+            virtual css::geometry::RealRectangle3D SAL_CALL getRange( const 
css::uno::Sequence< css::beans::PropertyValue >& rViewParameters ) override 
final;
         };
 
 } // end of namespace drawinglayer::primitive2d
diff --git a/include/drawinglayer/primitive3d/polygonprimitive3d.hxx 
b/include/drawinglayer/primitive3d/polygonprimitive3d.hxx
index a414cd27d472..5d4e0fb1bcc0 100644
--- a/include/drawinglayer/primitive3d/polygonprimitive3d.hxx
+++ b/include/drawinglayer/primitive3d/polygonprimitive3d.hxx
@@ -62,7 +62,7 @@ namespace drawinglayer::primitive3d
             virtual bool operator==(const BasePrimitive3D& rPrimitive) const 
override;
 
             /// get range
-            virtual basegfx::B3DRange getB3DRange(const 
geometry::ViewInformation3D& rViewInformation) const override;
+            virtual basegfx::B3DRange getB3DRange(const 
geometry::ViewInformation3D& rViewInformation) const override final;
 
             /// provide unique ID
             DeclPrimitive3DIDBlock()
diff --git a/include/editeng/AccessibleContextBase.hxx 
b/include/editeng/AccessibleContextBase.hxx
index 25f3ab8ceb55..02ae07b1f9e5 100644
--- a/include/editeng/AccessibleContextBase.hxx
+++ b/include/editeng/AccessibleContextBase.hxx
@@ -233,7 +233,7 @@ public:
     /** Return whether the specified service is supported by this class.
     */
     virtual sal_Bool SAL_CALL
-        supportsService (const OUString& sServiceName) override;
+        supportsService (const OUString& sServiceName) override final;
 
     /** Returns a list of all supported services.  In this case that is just
         the AccessibleContext service.
diff --git a/include/editeng/AccessibleSelectionBase.hxx 
b/include/editeng/AccessibleSelectionBase.hxx
index 0db8d688c21e..6fe5fbaf821c 100644
--- a/include/editeng/AccessibleSelectionBase.hxx
+++ b/include/editeng/AccessibleSelectionBase.hxx
@@ -46,13 +46,13 @@ namespace accessibility
     public:
 
         // XAccessibleSelection - default implementations
-        virtual void SAL_CALL selectAccessibleChild( sal_Int64 nChildIndex ) 
override;
-        virtual sal_Bool SAL_CALL isAccessibleChildSelected( sal_Int64 
nChildIndex ) override;
-        virtual void SAL_CALL clearAccessibleSelection(  ) override;
-        virtual void SAL_CALL selectAllAccessibleChildren(  ) override;
-        virtual sal_Int64 SAL_CALL getSelectedAccessibleChildCount(  ) 
override;
-        virtual css::uno::Reference< css::accessibility::XAccessible > 
SAL_CALL getSelectedAccessibleChild( sal_Int64 nSelectedChildIndex ) override;
-        virtual void SAL_CALL deselectAccessibleChild( sal_Int64 
nSelectedChildIndex ) override;
+        virtual void SAL_CALL selectAccessibleChild( sal_Int64 nChildIndex ) 
override final;
+        virtual sal_Bool SAL_CALL isAccessibleChildSelected( sal_Int64 
nChildIndex ) override final;
+        virtual void SAL_CALL clearAccessibleSelection(  ) override final;
+        virtual void SAL_CALL selectAllAccessibleChildren(  ) override final;
+        virtual sal_Int64 SAL_CALL getSelectedAccessibleChildCount(  ) 
override final;
+        virtual css::uno::Reference< css::accessibility::XAccessible > 
SAL_CALL getSelectedAccessibleChild( sal_Int64 nSelectedChildIndex ) override 
final;
+        virtual void SAL_CALL deselectAccessibleChild( sal_Int64 
nSelectedChildIndex ) override final;
 
     public:
 
diff --git a/include/editeng/AccessibleStaticTextBase.hxx 
b/include/editeng/AccessibleStaticTextBase.hxx
index 06b4abb0cdd7..619bba8ee4a2 100644
--- a/include/editeng/AccessibleStaticTextBase.hxx
+++ b/include/editeng/AccessibleStaticTextBase.hxx
@@ -177,33 +177,33 @@ namespace accessibility
         void Dispose();
 
         // XAccessibleText interface implementation
-        virtual sal_Int32 SAL_CALL getCaretPosition() override;
-        virtual sal_Bool SAL_CALL setCaretPosition( sal_Int32 nIndex ) 
override;
-        virtual sal_Unicode SAL_CALL getCharacter( sal_Int32 nIndex ) override;
+        virtual sal_Int32 SAL_CALL getCaretPosition() override final;
+        virtual sal_Bool SAL_CALL setCaretPosition( sal_Int32 nIndex ) 
override final;
+        virtual sal_Unicode SAL_CALL getCharacter( sal_Int32 nIndex ) override 
final;
         virtual css::uno::Sequence< css::beans::PropertyValue > SAL_CALL 
getCharacterAttributes( sal_Int32 nIndex, const css::uno::Sequence< OUString >& 
aRequestedAttributes ) override;
-        virtual css::awt::Rectangle SAL_CALL getCharacterBounds( sal_Int32 
nIndex ) override;
-        virtual sal_Int32 SAL_CALL getCharacterCount() override;
-        virtual sal_Int32 SAL_CALL getIndexAtPoint( const css::awt::Point& 
aPoint ) override;
-        virtual OUString SAL_CALL getSelectedText() override;
-        virtual sal_Int32 SAL_CALL getSelectionStart() override;
-        virtual sal_Int32 SAL_CALL getSelectionEnd() override;
+        virtual css::awt::Rectangle SAL_CALL getCharacterBounds( sal_Int32 
nIndex ) override final;
+        virtual sal_Int32 SAL_CALL getCharacterCount() override final;
+        virtual sal_Int32 SAL_CALL getIndexAtPoint( const css::awt::Point& 
aPoint ) override final;
+        virtual OUString SAL_CALL getSelectedText() override final;
+        virtual sal_Int32 SAL_CALL getSelectionStart() override final;
+        virtual sal_Int32 SAL_CALL getSelectionEnd() override final;
         /// This will only work with a functional SvxEditViewForwarder, i.e. 
an EditEngine/Outliner in edit mode
-        virtual sal_Bool SAL_CALL setSelection( sal_Int32 nStartIndex, 
sal_Int32 nEndIndex ) override;
-        virtual OUString SAL_CALL getText() override;
-        virtual OUString SAL_CALL getTextRange( sal_Int32 nStartIndex, 
sal_Int32 nEndIndex ) override;
+        virtual sal_Bool SAL_CALL setSelection( sal_Int32 nStartIndex, 
sal_Int32 nEndIndex ) override final;
+        virtual OUString SAL_CALL getText() override final;
+        virtual OUString SAL_CALL getTextRange( sal_Int32 nStartIndex, 
sal_Int32 nEndIndex ) override final;
         /// Does not support AccessibleTextType::SENTENCE (missing feature in 
EditEngine)
-        virtual css::accessibility::TextSegment SAL_CALL getTextAtIndex( 
sal_Int32 nIndex, sal_Int16 aTextType ) override;
+        virtual css::accessibility::TextSegment SAL_CALL getTextAtIndex( 
sal_Int32 nIndex, sal_Int16 aTextType ) override final;
         /// Does not support AccessibleTextType::SENTENCE (missing feature in 
EditEngine)
-        virtual css::accessibility::TextSegment SAL_CALL getTextBeforeIndex( 
sal_Int32 nIndex, sal_Int16 aTextType ) override;
+        virtual css::accessibility::TextSegment SAL_CALL getTextBeforeIndex( 
sal_Int32 nIndex, sal_Int16 aTextType ) override final;
         /// Does not support AccessibleTextType::SENTENCE (missing feature in 
EditEngine)
-        virtual css::accessibility::TextSegment SAL_CALL getTextBehindIndex( 
sal_Int32 nIndex, sal_Int16 aTextType ) override;
+        virtual css::accessibility::TextSegment SAL_CALL getTextBehindIndex( 
sal_Int32 nIndex, sal_Int16 aTextType ) override final;
         /// This will only work with a functional SvxEditViewForwarder, i.e. 
an EditEngine/Outliner in edit mode
-        virtual sal_Bool SAL_CALL copyText( sal_Int32 nStartIndex, sal_Int32 
nEndIndex ) override;
-        virtual sal_Bool SAL_CALL scrollSubstringTo( sal_Int32 nStartIndex, 
sal_Int32 nEndIndex, css::accessibility::AccessibleScrollType aScrollType) 
override;
+        virtual sal_Bool SAL_CALL copyText( sal_Int32 nStartIndex, sal_Int32 
nEndIndex ) override final;
+        virtual sal_Bool SAL_CALL scrollSubstringTo( sal_Int32 nStartIndex, 
sal_Int32 nEndIndex, css::accessibility::AccessibleScrollType aScrollType) 
override final;
 
         // XAccessibleTextAttributes
-        virtual css::uno::Sequence< css::beans::PropertyValue > SAL_CALL 
getDefaultAttributes( const css::uno::Sequence< OUString >& RequestedAttributes 
) override;
-        virtual css::uno::Sequence< css::beans::PropertyValue > SAL_CALL 
getRunAttributes( sal_Int32 Index, const css::uno::Sequence< OUString >& 
RequestedAttributes ) override;
+        virtual css::uno::Sequence< css::beans::PropertyValue > SAL_CALL 
getDefaultAttributes( const css::uno::Sequence< OUString >& RequestedAttributes 
) override final;
+        virtual css::uno::Sequence< css::beans::PropertyValue > SAL_CALL 
getRunAttributes( sal_Int32 Index, const css::uno::Sequence< OUString >& 
RequestedAttributes ) override final;
 
         // child-related methods from XAccessibleContext
         /// @throws css::uno::RuntimeException
diff --git a/include/editeng/UnoForbiddenCharsTable.hxx 
b/include/editeng/UnoForbiddenCharsTable.hxx
index 625198dadc83..957198c1ef15 100644
--- a/include/editeng/UnoForbiddenCharsTable.hxx
+++ b/include/editeng/UnoForbiddenCharsTable.hxx
@@ -43,14 +43,14 @@ public:
     virtual ~SvxUnoForbiddenCharsTable() override;
 
     // XForbiddenCharacters
-    virtual css::i18n::ForbiddenCharacters SAL_CALL getForbiddenCharacters( 
const css::lang::Locale& rLocale ) override;
-    virtual sal_Bool SAL_CALL hasForbiddenCharacters( const css::lang::Locale& 
rLocale ) override;
-    virtual void SAL_CALL setForbiddenCharacters( const css::lang::Locale& 
rLocale, const css::i18n::ForbiddenCharacters& rForbiddenCharacters ) override;
-    virtual void SAL_CALL removeForbiddenCharacters( const css::lang::Locale& 
rLocale ) override;
+    virtual css::i18n::ForbiddenCharacters SAL_CALL getForbiddenCharacters( 
const css::lang::Locale& rLocale ) override final;
+    virtual sal_Bool SAL_CALL hasForbiddenCharacters( const css::lang::Locale& 
rLocale ) override final;
+    virtual void SAL_CALL setForbiddenCharacters( const css::lang::Locale& 
rLocale, const css::i18n::ForbiddenCharacters& rForbiddenCharacters ) override 
final;
+    virtual void SAL_CALL removeForbiddenCharacters( const css::lang::Locale& 
rLocale ) override final;
 
     // XSupportedLocales
-    virtual css::uno::Sequence< css::lang::Locale > SAL_CALL getLocales(  ) 
override;
-    virtual sal_Bool SAL_CALL hasLocale( const css::lang::Locale& aLocale ) 
override;
+    virtual css::uno::Sequence< css::lang::Locale > SAL_CALL getLocales(  ) 
override final;
+    virtual sal_Bool SAL_CALL hasLocale( const css::lang::Locale& aLocale ) 
override final;
 };
 
 #endif // INCLUDED_EDITENG_UNOFORBIDDENCHARSTABLE_HXX
diff --git a/include/editeng/unoforou.hxx b/include/editeng/unoforou.hxx
index 646c44a39e8f..0abb982cf62d 100644
--- a/include/editeng/unoforou.hxx
+++ b/include/editeng/unoforou.hxx
@@ -54,69 +54,69 @@ public:
                         SvxOutlinerForwarder( Outliner& rOutl, bool bOutlText 
);
     virtual             ~SvxOutlinerForwarder() override;
 
-    virtual sal_Int32   GetParagraphCount() const override;
-    virtual sal_Int32   GetTextLen( sal_Int32 nParagraph ) const override;
-    virtual OUString    GetText( const ESelection& rSel ) const override;
-    virtual SfxItemSet  GetAttribs( const ESelection& rSel, EditEngineAttribs 
nOnlyHardAttrib = EditEngineAttribs::All ) const override;
-    virtual SfxItemSet  GetParaAttribs( sal_Int32 nPara ) const override;
-    virtual void        SetParaAttribs( sal_Int32 nPara, const SfxItemSet& 
rSet ) override;
-    virtual void        RemoveAttribs( const ESelection& rSelection ) override;
-    virtual void        GetPortions( sal_Int32 nPara, std::vector<sal_Int32>& 
rList ) const override;
+    virtual sal_Int32   GetParagraphCount() const override final;
+    virtual sal_Int32   GetTextLen( sal_Int32 nParagraph ) const override 
final;
+    virtual OUString    GetText( const ESelection& rSel ) const override final;
+    virtual SfxItemSet  GetAttribs( const ESelection& rSel, EditEngineAttribs 
nOnlyHardAttrib = EditEngineAttribs::All ) const override final;
+    virtual SfxItemSet  GetParaAttribs( sal_Int32 nPara ) const override final;
+    virtual void        SetParaAttribs( sal_Int32 nPara, const SfxItemSet& 
rSet ) override final;
+    virtual void        RemoveAttribs( const ESelection& rSelection ) override 
final;
+    virtual void        GetPortions( sal_Int32 nPara, std::vector<sal_Int32>& 
rList ) const override final;
 
     virtual OUString    GetStyleSheet(sal_Int32 nPara) const override;
     virtual void        SetStyleSheet(sal_Int32 nPara, const OUString& 
rStyleName) override;
 
-    virtual SfxItemState    GetItemState( const ESelection& rSel, sal_uInt16 
nWhich ) const override;
-    virtual SfxItemState    GetItemState( sal_Int32 nPara, sal_uInt16 nWhich ) 
const override;
-
-    virtual void        QuickInsertText( const OUString& rText, const 
ESelection& rSel ) override;
-    virtual void        QuickInsertField( const SvxFieldItem& rFld, const 
ESelection& rSel ) override;
-    virtual void        QuickSetAttribs( const SfxItemSet& rSet, const 
ESelection& rSel ) override;
-    virtual void        QuickInsertLineBreak( const ESelection& rSel ) 
override;
-
-    virtual SfxItemPool* GetPool() const override;
-
-    virtual OUString    CalcFieldValue( const SvxFieldItem& rField, sal_Int32 
nPara, sal_Int32 nPos, std::optional<Color>& rpTxtColor, std::optional<Color>& 
rpFldColor, std::optional<FontLineStyle>& rpFldLineStyle ) override;
-    virtual void        FieldClicked( const SvxFieldItem& rField ) override;
-
-    virtual bool        IsValid() const override;
-
-    virtual LanguageType    GetLanguage( sal_Int32, sal_Int32 ) const override;
-    virtual sal_Int32       GetFieldCount( sal_Int32 nPara ) const override;
-    virtual EFieldInfo      GetFieldInfo( sal_Int32 nPara, sal_uInt16 nField ) 
const override;
-    virtual EBulletInfo     GetBulletInfo( sal_Int32 nPara ) const override;
-    virtual tools::Rectangle       GetCharBounds( sal_Int32 nPara, sal_Int32 
nIndex ) const override;
-    virtual tools::Rectangle       GetParaBounds( sal_Int32 nPara ) const 
override;
-    virtual MapMode         GetMapMode() const override;
-    virtual OutputDevice*   GetRefDevice() const override;
-    virtual bool            GetIndexAtPoint( const Point&, sal_Int32& nPara, 
sal_Int32& nIndex ) const override;
-    virtual bool            GetWordIndices( sal_Int32 nPara, sal_Int32 nIndex, 
sal_Int32& nStart, sal_Int32& nEnd ) const override;
-    virtual bool            GetAttributeRun( sal_Int32& nStartIndex, 
sal_Int32& nEndIndex, sal_Int32 nPara, sal_Int32 nIndex, bool bInCell = false ) 
const override;
-    virtual sal_Int32       GetLineCount( sal_Int32 nPara ) const override;
-    virtual sal_Int32       GetLineLen( sal_Int32 nPara, sal_Int32 nLine ) 
const override;
-    virtual void            GetLineBoundaries( /*out*/sal_Int32& rStart, 
/*out*/sal_Int32& rEnd, sal_Int32 nPara, sal_Int32 nLine ) const override;
-    virtual sal_Int32       GetLineNumberAtIndex( sal_Int32 nPara, sal_Int32 
nIndex ) const override;
-    virtual bool            Delete( const ESelection& ) override;
-    virtual bool            InsertText( const OUString&, const ESelection& ) 
override;
-    virtual bool            QuickFormatDoc( bool bFull = false ) override;
-    virtual sal_Int16       GetDepth( sal_Int32 nPara ) const override;
-    virtual bool            SetDepth( sal_Int32 nPara, sal_Int16 nNewDepth ) 
override;
-    virtual sal_Int32       GetNumberingStartValue( sal_Int32 nPara ) override;
-    virtual void            SetNumberingStartValue( sal_Int32 nPara, sal_Int32 
nNumberingStartValue ) override;
-
-    virtual bool            IsParaIsNumberingRestart( sal_Int32 nPara ) 
override;
-    virtual void            SetParaIsNumberingRestart( sal_Int32 nPara, bool 
bParaIsNumberingRestart ) override;
+    virtual SfxItemState    GetItemState( const ESelection& rSel, sal_uInt16 
nWhich ) const override final;
+    virtual SfxItemState    GetItemState( sal_Int32 nPara, sal_uInt16 nWhich ) 
const override final;
+
+    virtual void        QuickInsertText( const OUString& rText, const 
ESelection& rSel ) override final;
+    virtual void        QuickInsertField( const SvxFieldItem& rFld, const 
ESelection& rSel ) override final;
+    virtual void        QuickSetAttribs( const SfxItemSet& rSet, const 
ESelection& rSel ) override final;
+    virtual void        QuickInsertLineBreak( const ESelection& rSel ) 
override final;
+
+    virtual SfxItemPool* GetPool() const override final;
+
+    virtual OUString    CalcFieldValue( const SvxFieldItem& rField, sal_Int32 
nPara, sal_Int32 nPos, std::optional<Color>& rpTxtColor, std::optional<Color>& 
rpFldColor, std::optional<FontLineStyle>& rpFldLineStyle ) override final;
+    virtual void        FieldClicked( const SvxFieldItem& rField ) override 
final;
+
+    virtual bool        IsValid() const override final;
+
+    virtual LanguageType    GetLanguage( sal_Int32, sal_Int32 ) const override 
final;
+    virtual sal_Int32       GetFieldCount( sal_Int32 nPara ) const override 
final;
+    virtual EFieldInfo      GetFieldInfo( sal_Int32 nPara, sal_uInt16 nField ) 
const override final;
+    virtual EBulletInfo     GetBulletInfo( sal_Int32 nPara ) const override 
final;
+    virtual tools::Rectangle       GetCharBounds( sal_Int32 nPara, sal_Int32 
nIndex ) const override final;
+    virtual tools::Rectangle       GetParaBounds( sal_Int32 nPara ) const 
override final;
+    virtual MapMode         GetMapMode() const override final;
+    virtual OutputDevice*   GetRefDevice() const override final;
+    virtual bool            GetIndexAtPoint( const Point&, sal_Int32& nPara, 
sal_Int32& nIndex ) const override final;
+    virtual bool            GetWordIndices( sal_Int32 nPara, sal_Int32 nIndex, 
sal_Int32& nStart, sal_Int32& nEnd ) const override final;
+    virtual bool            GetAttributeRun( sal_Int32& nStartIndex, 
sal_Int32& nEndIndex, sal_Int32 nPara, sal_Int32 nIndex, bool bInCell = false ) 
const override final;
+    virtual sal_Int32       GetLineCount( sal_Int32 nPara ) const override 
final;
+    virtual sal_Int32       GetLineLen( sal_Int32 nPara, sal_Int32 nLine ) 
const override final;
+    virtual void            GetLineBoundaries( /*out*/sal_Int32& rStart, 
/*out*/sal_Int32& rEnd, sal_Int32 nPara, sal_Int32 nLine ) const override final;
+    virtual sal_Int32       GetLineNumberAtIndex( sal_Int32 nPara, sal_Int32 
nIndex ) const override final;
+    virtual bool            Delete( const ESelection& ) override final;
+    virtual bool            InsertText( const OUString&, const ESelection& ) 
override final;
+    virtual bool            QuickFormatDoc( bool bFull = false ) override 
final;
+    virtual sal_Int16       GetDepth( sal_Int32 nPara ) const override final;
+    virtual bool            SetDepth( sal_Int32 nPara, sal_Int16 nNewDepth ) 
override final;
+    virtual sal_Int32       GetNumberingStartValue( sal_Int32 nPara ) override 
final;
+    virtual void            SetNumberingStartValue( sal_Int32 nPara, sal_Int32 
nNumberingStartValue ) override final;
+
+    virtual bool            IsParaIsNumberingRestart( sal_Int32 nPara ) 
override final;
+    virtual void            SetParaIsNumberingRestart( sal_Int32 nPara, bool 
bParaIsNumberingRestart ) override final;
 
     /* this method flushes internal caches for this forwarder */
     void                flushCache();
 
-    virtual const SfxItemSet*   GetEmptyItemSetPtr() override;
+    virtual const SfxItemSet*   GetEmptyItemSetPtr() override final;
 
     // implementation functions for XParagraphAppend and XTextPortionAppend
-    virtual void        AppendParagraph() override;
-    virtual sal_Int32   AppendTextPortion( sal_Int32 nPara, const OUString 
&rText, const SfxItemSet &rSet ) override;
+    virtual void        AppendParagraph() override final;
+    virtual sal_Int32   AppendTextPortion( sal_Int32 nPara, const OUString 
&rText, const SfxItemSet &rSet ) override final;
     //XTextCopy
-    virtual void        CopyText(const SvxTextForwarder& rSource) override;
+    virtual void        CopyText(const SvxTextForwarder& rSource) override 
final;
 };
 
 #endif
diff --git a/include/editeng/unotext.hxx b/include/editeng/unotext.hxx
index c60b6677ec52..844d15cb82cb 100644
--- a/include/editeng/unotext.hxx
+++ b/include/editeng/unotext.hxx
@@ -379,8 +379,8 @@ public:
     virtual css::uno::Sequence< css::uno::Any > SAL_CALL getPropertyDefaults( 
const css::uno::Sequence< OUString >& aPropertyNames ) override;
 
     // XTextRangeCompare
-    virtual ::sal_Int16 SAL_CALL compareRegionStarts( const 
css::uno::Reference< css::text::XTextRange >& xR1, const css::uno::Reference< 
css::text::XTextRange >& xR2 ) override;
-    virtual ::sal_Int16 SAL_CALL compareRegionEnds( const css::uno::Reference< 
css::text::XTextRange >& xR1, const css::uno::Reference< css::text::XTextRange 
>& xR2 ) override;
+    virtual ::sal_Int16 SAL_CALL compareRegionStarts( const 
css::uno::Reference< css::text::XTextRange >& xR1, const css::uno::Reference< 
css::text::XTextRange >& xR2 ) override final;
+    virtual ::sal_Int16 SAL_CALL compareRegionEnds( const css::uno::Reference< 
css::text::XTextRange >& xR1, const css::uno::Reference< css::text::XTextRange 
>& xR2 ) override final;
 
     // css::lang::XServiceInfo
     virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) 
override;
@@ -445,8 +445,8 @@ public:
     virtual css::uno::Any SAL_CALL queryAggregation( const css::uno::Type & 
rType );
 
     // css::text::XSimpleText
-    virtual css::uno::Reference< css::text::XTextCursor > SAL_CALL 
createTextCursor(  ) override;
-    virtual css::uno::Reference< css::text::XTextCursor > SAL_CALL 
createTextCursorByRange( const css::uno::Reference< css::text::XTextRange >& 
aTextPosition ) override;
+    virtual css::uno::Reference< css::text::XTextCursor > SAL_CALL 
createTextCursor(  ) override final;
+    virtual css::uno::Reference< css::text::XTextCursor > SAL_CALL 
createTextCursorByRange( const css::uno::Reference< css::text::XTextRange >& 
aTextPosition ) override final;
     virtual void SAL_CALL insertString( const css::uno::Reference< 
css::text::XTextRange >& xRange, const OUString& aString, sal_Bool bAbsorb ) 
override;
     virtual void SAL_CALL insertControlCharacter( const css::uno::Reference< 
css::text::XTextRange >& xRange, sal_Int16 nControlCharacter, sal_Bool bAbsorb 
) override;
 
@@ -457,31 +457,31 @@ public:
     virtual void SAL_CALL setString( const OUString& aString ) override;
 
     // css::text::XTextRange
-    virtual css::uno::Reference< css::text::XText > SAL_CALL getText(  ) 
override;
+    virtual css::uno::Reference< css::text::XText > SAL_CALL getText(  ) 
override final;
     virtual css::uno::Reference< css::text::XTextRange > SAL_CALL getStart() 
override;
     virtual css::uno::Reference< css::text::XTextRange > SAL_CALL getEnd() 
override;
 
     // css::container::XEnumerationAccess
-    virtual css::uno::Reference< css::container::XEnumeration > SAL_CALL 
createEnumeration(  ) override;
+    virtual css::uno::Reference< css::container::XEnumeration > SAL_CALL 
createEnumeration(  ) override final;
 
     // css::container::XElementAccess
-    virtual css::uno::Type SAL_CALL getElementType(  ) override;
-    virtual sal_Bool SAL_CALL hasElements(  ) override;
+    virtual css::uno::Type SAL_CALL getElementType(  ) override final;
+    virtual sal_Bool SAL_CALL hasElements(  ) override final;
 
     // css::text::XTextRangeMover
-    virtual void SAL_CALL moveTextRange( const css::uno::Reference< 
css::text::XTextRange >& xRange, sal_Int16 nParagraphs ) override;
+    virtual void SAL_CALL moveTextRange( const css::uno::Reference< 
css::text::XTextRange >& xRange, sal_Int16 nParagraphs ) override final;
 
     // css::text::XParagraphAppend (new import API)
-    virtual css::uno::Reference< css::text::XTextRange > SAL_CALL 
finishParagraph( const css::uno::Sequence< css::beans::PropertyValue >& 
CharacterAndParagraphProperties ) override;
-    virtual css::uno::Reference< css::text::XTextRange > SAL_CALL 
finishParagraphInsert( const css::uno::Sequence< css::beans::PropertyValue >& 
CharacterAndParagraphProperties, const css::uno::Reference< 
css::text::XTextRange >& xInsertPosition ) override;
+    virtual css::uno::Reference< css::text::XTextRange > SAL_CALL 
finishParagraph( const css::uno::Sequence< css::beans::PropertyValue >& 
CharacterAndParagraphProperties ) override final;
+    virtual css::uno::Reference< css::text::XTextRange > SAL_CALL 
finishParagraphInsert( const css::uno::Sequence< css::beans::PropertyValue >& 
CharacterAndParagraphProperties, const css::uno::Reference< 
css::text::XTextRange >& xInsertPosition ) override final;
 
     // css::text::XTextPortionAppend (new import API)
-    virtual css::uno::Reference< css::text::XTextRange > SAL_CALL 
appendTextPortion( const OUString& Text, const css::uno::Sequence< 
css::beans::PropertyValue >& CharacterAndParagraphProperties ) override;
+    virtual css::uno::Reference< css::text::XTextRange > SAL_CALL 
appendTextPortion( const OUString& Text, const css::uno::Sequence< 
css::beans::PropertyValue >& CharacterAndParagraphProperties ) override final;
 
-    virtual css::uno::Reference< css::text::XTextRange > SAL_CALL 
insertTextPortion( const OUString& Text, const css::uno::Sequence< 
css::beans::PropertyValue >& CharacterAndParagraphProperties, const 
css::uno::Reference< css::text::XTextRange>& rTextRange ) override;
+    virtual css::uno::Reference< css::text::XTextRange > SAL_CALL 
insertTextPortion( const OUString& Text, const css::uno::Sequence< 
css::beans::PropertyValue >& CharacterAndParagraphProperties, const 
css::uno::Reference< css::text::XTextRange>& rTextRange ) override final;
 
     // css::text::XTextCopy
-    virtual void SAL_CALL copyText( const css::uno::Reference< 
css::text::XTextCopy >& xSource ) override;
+    virtual void SAL_CALL copyText( const css::uno::Reference< 
css::text::XTextCopy >& xSource ) override final;
 
     // css::lang::XServiceInfo
     virtual OUString SAL_CALL getImplementationName() override;
@@ -505,17 +505,17 @@ public:
 
     // Internal
     static const css::uno::Sequence< sal_Int8 > & getUnoTunnelId() noexcept;
-    virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence< 
sal_Int8 >& aIdentifier ) override;
+    virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence< 
sal_Int8 >& aIdentifier ) override final;
 
     // css::uno::XInterface
-    virtual css::uno::Any SAL_CALL queryAggregation( const css::uno::Type & 
rType ) override;
-    virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & 
rType ) override;
-    virtual void SAL_CALL acquire() noexcept override;
-    virtual void SAL_CALL release() noexcept override;
+    virtual css::uno::Any SAL_CALL queryAggregation( const css::uno::Type & 
rType ) override final;
+    virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & 
rType ) override final;
+    virtual void SAL_CALL acquire() noexcept override final;
+    virtual void SAL_CALL release() noexcept override final;
 
     // css::lang::XTypeProvider
-    virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes(  ) 
override;
-    virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId(  ) 
override;
+    virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes(  ) 
override final;
+    virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId(  ) 
override final;
 };
 
 
@@ -643,36 +643,36 @@ public:
     virtual ~SvxUnoTextCursor() noexcept override;
 
     // css::uno::XInterface
-    virtual css::uno::Any SAL_CALL queryAggregation( const css::uno::Type & 
rType ) override;
-    virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & 
rType ) override;
-    virtual void SAL_CALL acquire() noexcept override;
-    virtual void SAL_CALL release() noexcept override;
+    virtual css::uno::Any SAL_CALL queryAggregation( const css::uno::Type & 
rType ) override final;
+    virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & 
rType ) override final;
+    virtual void SAL_CALL acquire() noexcept override final;
+    virtual void SAL_CALL release() noexcept override final;
 
     // css::text::XTextRange
     virtual css::uno::Reference< css::text::XText > SAL_CALL getText() 
override;
-    virtual OUString SAL_CALL getString() override;
-    virtual void SAL_CALL setString( const OUString& aString ) override;
+    virtual OUString SAL_CALL getString() override final;
+    virtual void SAL_CALL setString( const OUString& aString ) override final;
     virtual css::uno::Reference< css::text::XTextRange > SAL_CALL getStart() 
override;
     virtual css::uno::Reference< css::text::XTextRange > SAL_CALL getEnd() 
override;
 
     // css::text::XTextCursor -> css::text::XTextRange
-    virtual void SAL_CALL collapseToStart(  ) override;
-    virtual void SAL_CALL collapseToEnd(  ) override;
-    virtual sal_Bool SAL_CALL isCollapsed(  ) override;
-    virtual sal_Bool SAL_CALL goLeft( sal_Int16 nCount, sal_Bool bExpand ) 
override;
-    virtual sal_Bool SAL_CALL goRight( sal_Int16 nCount, sal_Bool bExpand ) 
override;
-    virtual void SAL_CALL gotoStart( sal_Bool bExpand ) override;
-    virtual void SAL_CALL gotoEnd( sal_Bool bExpand ) override;
-    virtual void SAL_CALL gotoRange( const css::uno::Reference< 
css::text::XTextRange >& xRange, sal_Bool bExpand ) override;
+    virtual void SAL_CALL collapseToStart(  ) override final;
+    virtual void SAL_CALL collapseToEnd(  ) override final;
+    virtual sal_Bool SAL_CALL isCollapsed(  ) override final;
+    virtual sal_Bool SAL_CALL goLeft( sal_Int16 nCount, sal_Bool bExpand ) 
override final;
+    virtual sal_Bool SAL_CALL goRight( sal_Int16 nCount, sal_Bool bExpand ) 
override final;
+    virtual void SAL_CALL gotoStart( sal_Bool bExpand ) override final;
+    virtual void SAL_CALL gotoEnd( sal_Bool bExpand ) override final;
+    virtual void SAL_CALL gotoRange( const css::uno::Reference< 
css::text::XTextRange >& xRange, sal_Bool bExpand ) override final;
 
     // css::lang::XServiceInfo
-    virtual OUString SAL_CALL getImplementationName() override;
-    virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) 
override;
-    virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() 
override;
+    virtual OUString SAL_CALL getImplementationName() override final;
+    virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) 
override final;
+    virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() 
override final;
 
     // css::lang::XTypeProvider
-    virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes(  ) 
override;
-    virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId(  ) 
override;
+    virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes(  ) 
override final;
+    virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId(  ) 
override final;
 
 };
 
diff --git a/include/formula/token.hxx b/include/formula/token.hxx
index f534b2c5c801..c729acaceeb6 100644
--- a/include/formula/token.hxx
+++ b/include/formula/token.hxx
@@ -270,10 +270,10 @@ public:
                                     eInForceArray( r.eInForceArray ) {}
 
     virtual FormulaToken*       Clone() const override { return new 
FormulaByteToken(*this); }
-    virtual sal_uInt8           GetByte() const override;
-    virtual void                SetByte( sal_uInt8 n ) override;
-    virtual ParamClass          GetInForceArray() const override;
-    virtual void                SetInForceArray( ParamClass c ) override;
+    virtual sal_uInt8           GetByte() const override final;
+    virtual void                SetByte( sal_uInt8 n ) override final;
+    virtual ParamClass          GetInForceArray() const override final;
+    virtual void                SetInForceArray( ParamClass c ) override final;
     virtual bool                operator==( const FormulaToken& rToken ) const 
override;
 };
 
@@ -307,8 +307,8 @@ public:
                                     FormulaToken( r ), fDouble( r.fDouble ) {}
 
     virtual FormulaToken*       Clone() const override { return new 
FormulaDoubleToken(*this); }
-    virtual double              GetDouble() const override;
-    virtual double&             GetDoubleAsReference() override;
+    virtual double              GetDouble() const override final;
+    virtual double&             GetDoubleAsReference() override final;
     virtual sal_Int16           GetDoubleType() const override;     ///< 
always returns 0 for "not typed"
     virtual bool                operator==( const FormulaToken& rToken ) const 
override;
 };
diff --git a/include/linguistic/lngprophelp.hxx 
b/include/linguistic/lngprophelp.hxx
index d9a2bd505960..0095f40afdd7 100644
--- a/include/linguistic/lngprophelp.hxx
+++ b/include/linguistic/lngprophelp.hxx
@@ -95,7 +95,7 @@ public:
 
     // XEventListener
     virtual void SAL_CALL
-        disposing( const css::lang::EventObject& rSource ) override;
+        disposing( const css::lang::EventObject& rSource ) override final;
 
     // XPropertyChangeListener
     virtual void SAL_CALL
@@ -104,10 +104,10 @@ public:
     // XLinguServiceEventBroadcaster
     virtual sal_Bool SAL_CALL
         addLinguServiceEventListener(
-                const css::uno::Reference< 
css::linguistic2::XLinguServiceEventListener >& rxListener ) override;
+                const css::uno::Reference< 
css::linguistic2::XLinguServiceEventListener >& rxListener ) override final;
     virtual sal_Bool SAL_CALL
         removeLinguServiceEventListener(
-                const css::uno::Reference< 
css::linguistic2::XLinguServiceEventListener >& rxListener ) override;
+                const css::uno::Reference< 
css::linguistic2::XLinguServiceEventListener >& rxListener ) override final;
 
     // non-UNO functions
     void    AddAsPropListener();
diff --git a/include/linguistic/misc.hxx b/include/linguistic/misc.hxx
index a9a7d074d63d..bc9a777dd4fa 100644
--- a/include/linguistic/misc.hxx
+++ b/include/linguistic/misc.hxx
@@ -182,11 +182,11 @@ public:
     void            Deactivate();
 
     // XEventListener
-    virtual void SAL_CALL disposing( const css::lang::EventObject& Source ) 
override;
+    virtual void SAL_CALL disposing( const css::lang::EventObject& Source ) 
override final;
 
     // XTerminateListener
-    virtual void SAL_CALL queryTermination( const css::lang::EventObject& 
aEvent ) override;
-    virtual void SAL_CALL notifyTermination( const css::lang::EventObject& 
aEvent ) override;
+    virtual void SAL_CALL queryTermination( const css::lang::EventObject& 
aEvent ) override final;
+    virtual void SAL_CALL notifyTermination( const css::lang::EventObject& 
aEvent ) override final;
 };
 
 }   // namespace linguistic
diff --git a/include/oox/core/contexthandler2.hxx 
b/include/oox/core/contexthandler2.hxx
index 1414db7f242d..0101bd956a21 100644
--- a/include/oox/core/contexthandler2.hxx
+++ b/include/oox/core/contexthandler2.hxx
@@ -268,9 +268,9 @@ public:
 
     // oox.core.ContextHandler interface --------------------------------------
 
-    virtual ContextHandlerRef createRecordContext( sal_Int32 nRecId, 
SequenceInputStream& rStrm ) override;
-    virtual void        startRecord( sal_Int32 nRecId, SequenceInputStream& 
rStrm ) override;
-    virtual void        endRecord( sal_Int32 nRecId ) override;
+    virtual ContextHandlerRef createRecordContext( sal_Int32 nRecId, 
SequenceInputStream& rStrm ) override final;
+    virtual void        startRecord( sal_Int32 nRecId, SequenceInputStream& 
rStrm ) override final;
+    virtual void        endRecord( sal_Int32 nRecId ) override final;
 
     // oox.core.ContextHandler2Helper interface -------------------------------
 
diff --git a/include/tools/stream.hxx b/include/tools/stream.hxx
index d89162618955..24552e4e0db3 100644
--- a/include/tools/stream.hxx
+++ b/include/tools/stream.hxx
@@ -642,7 +642,7 @@ public:
                     SvMemoryStream( std::size_t nInitSize=512, std::size_t 
nResize=64 );
                     virtual ~SvMemoryStream() override;
 
-    virtual void    ResetError() override;
+    virtual void    ResetError() override final;
 
     sal_uInt64      GetSize() { return TellEnd(); }
     std::size_t     GetEndOfData() const { return nEndOfData; }
@@ -659,7 +659,7 @@ public:
     /// @since LibreOffice 7.5
     void            MakeReadOnly();
     void            SetResizeOffset( std::size_t nNewResize ) { nResize = 
nNewResize; }
-    virtual sal_uInt64 TellEnd() override { FlushBuffer(); return nEndOfData; }
+    virtual sal_uInt64 TellEnd() override final { FlushBuffer(); return 
nEndOfData; }
 };
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/include/unotools/confignode.hxx b/include/unotools/confignode.hxx
index f334aa149794..946825aa4821 100644
--- a/include/unotools/confignode.hxx
+++ b/include/unotools/confignode.hxx
@@ -156,7 +156,7 @@ namespace utl
 
     protected:
         // OEventListenerAdapter
-        virtual void _disposing( const css::lang::EventObject& _rSource ) 
override;
+        virtual void _disposing( const css::lang::EventObject& _rSource ) 
override final;
 
     protected:
         enum NAMEORIGIN
diff --git a/include/unotools/streamwrap.hxx b/include/unotools/streamwrap.hxx
index e6a105bd0e5f..dfe0134086a0 100644
--- a/include/unotools/streamwrap.hxx
+++ b/include/unotools/streamwrap.hxx
@@ -59,11 +59,11 @@ public:
     virtual ~OInputStreamWrapper() override;
 
 // css::io::XInputStream
-    virtual sal_Int32   SAL_CALL    readBytes(css::uno::Sequence< sal_Int8 >& 
aData, sal_Int32 nBytesToRead) override;
-    virtual sal_Int32   SAL_CALL    readSomeBytes(css::uno::Sequence< sal_Int8 
>& aData, sal_Int32 nMaxBytesToRead) override;
-    virtual void        SAL_CALL    skipBytes(sal_Int32 nBytesToSkip) override;
-    virtual sal_Int32   SAL_CALL    available() override;
-    virtual void        SAL_CALL    closeInput() override;
+    virtual sal_Int32   SAL_CALL    readBytes(css::uno::Sequence< sal_Int8 >& 
aData, sal_Int32 nBytesToRead) override final;
+    virtual sal_Int32   SAL_CALL    readSomeBytes(css::uno::Sequence< sal_Int8 
>& aData, sal_Int32 nMaxBytesToRead) override final;
+    virtual void        SAL_CALL    skipBytes(sal_Int32 nBytesToSkip) override 
final;
+    virtual sal_Int32   SAL_CALL    available() override final;
+    virtual void        SAL_CALL    closeInput() override final;
 
 // utl::ByteReader
     virtual sal_Int32 readSomeBytes( sal_Int8* aData, sal_Int32 
nMaxBytesToRead ) final override;
@@ -92,9 +92,9 @@ public:
     OSeekableInputStreamWrapper(SvStream* _pStream, bool _bOwner = false);
 
     // XSeekable
-    virtual void SAL_CALL seek( sal_Int64 _nLocation ) override;
-    virtual sal_Int64 SAL_CALL getPosition(  ) override;
-    virtual sal_Int64 SAL_CALL getLength(  ) override;
+    virtual void SAL_CALL seek( sal_Int64 _nLocation ) override final;
+    virtual sal_Int64 SAL_CALL getPosition(  ) override final;
+    virtual sal_Int64 SAL_CALL getLength(  ) override final;
 };
 
 //= OOutputStreamWrapper
@@ -108,9 +108,9 @@ protected:
     virtual ~OOutputStreamWrapper() override;
 
 // css::io::XOutputStream
-    virtual void SAL_CALL writeBytes(const css::uno::Sequence< sal_Int8 >& 
aData) override;
-    virtual void SAL_CALL flush() override;
-    virtual void SAL_CALL closeOutput() override;
+    virtual void SAL_CALL writeBytes(const css::uno::Sequence< sal_Int8 >& 
aData) override final;
+    virtual void SAL_CALL flush() override final;
+    virtual void SAL_CALL closeOutput() override final;
 
     /// throws an exception according to the error flag of m_pSvStream
     void checkError() const;
diff --git a/include/xmloff/XMLCharContext.hxx 
b/include/xmloff/XMLCharContext.hxx
index ede2940939e7..109bb89647a3 100644
--- a/include/xmloff/XMLCharContext.hxx
+++ b/include/xmloff/XMLCharContext.hxx
@@ -48,7 +48,7 @@ public:
     // EndElement is called before a context will be destructed, but
     // after an elements context has been parsed. It may be used for actions
     // that require virtual methods. The default is to do nothing.
-    virtual void SAL_CALL endFastElement(sal_Int32 nElement) override;
+    virtual void SAL_CALL endFastElement(sal_Int32 nElement) override final;
 
     virtual void InsertControlCharacter(sal_Int16   _nControl);
     virtual void InsertString(const OUString& _sString);
diff --git a/include/xmloff/XMLComplexColorHandler.hxx 
b/include/xmloff/XMLComplexColorHandler.hxx
index 7b7dcc10d165..52c3de04ff9a 100644
--- a/include/xmloff/XMLComplexColorHandler.hxx
+++ b/include/xmloff/XMLComplexColorHandler.hxx
@@ -19,18 +19,18 @@ class XMLOFF_DLLPUBLIC XMLComplexColorHandler : public 
XMLPropertyHandler
 {
 public:
     bool importXML(const OUString& /*rStrImpValue*/, css::uno::Any& /*rValue*/,
-                   const SvXMLUnitConverter&) const override
+                   const SvXMLUnitConverter&) const override final
     {
         return false;
     }
 
     bool exportXML(OUString& /*rStrExpValue*/, const css::uno::Any& /*rValue*/,
-                   const SvXMLUnitConverter&) const override
+                   const SvXMLUnitConverter&) const override final
     {
         return false;
     }
 
-    bool equals(const css::uno::Any& rAny1, const css::uno::Any& rAny2) const 
override
+    bool equals(const css::uno::Any& rAny1, const css::uno::Any& rAny2) const 
override final
     {
         uno::Reference<util::XComplexColor> xComplexColor1;
         uno::Reference<util::XComplexColor> xComplexColor2;
diff --git a/include/xmloff/XMLConstantsPropertyHandler.hxx 
b/include/xmloff/XMLConstantsPropertyHandler.hxx
index 8f93665d5b98..5fc6f735a8a8 100644
--- a/include/xmloff/XMLConstantsPropertyHandler.hxx
+++ b/include/xmloff/XMLConstantsPropertyHandler.hxx
@@ -51,13 +51,13 @@ public:
     virtual bool importXML(
             const OUString& rStrImpValue,
             css::uno::Any& rValue,
-            const SvXMLUnitConverter& rUnitConverter ) const override;
+            const SvXMLUnitConverter& rUnitConverter ) const override final;
 
     /// Exports the given value in case of the given XML-data-type
     virtual bool exportXML(
             OUString& rStrExpValue,
             const css::uno::Any& rValue,
-            const SvXMLUnitConverter& rUnitConverter ) const override;
+            const SvXMLUnitConverter& rUnitConverter ) const override final;
 };
 
 #endif // INCLUDED_XMLOFF_XMLCONSTANTSPROPERTYHANDLER_HXX
diff --git a/include/xmloff/XMLDrawingPageStyleContext.hxx 
b/include/xmloff/XMLDrawingPageStyleContext.hxx
index 9ef8d060bb56..68ddbeb5221b 100644
--- a/include/xmloff/XMLDrawingPageStyleContext.hxx
+++ b/include/xmloff/XMLDrawingPageStyleContext.hxx
@@ -32,7 +32,7 @@ public:
                                XmlStyleFamily const pFamilies[]);
 
     virtual void
-    FillPropertySet(css::uno::Reference<css::beans::XPropertySet> const& 
rPropSet) override;
+    FillPropertySet(css::uno::Reference<css::beans::XPropertySet> const& 
rPropSet) override final;
 
 private:
     std::unique_ptr<ContextID_Index_Pair[]> m_pContextIDs;
diff --git a/include/xmloff/XMLEventsImportContext.hxx 
b/include/xmloff/XMLEventsImportContext.hxx
index 910a12e55079..d33e8bab9254 100644
--- a/include/xmloff/XMLEventsImportContext.hxx
+++ b/include/xmloff/XMLEventsImportContext.hxx
@@ -94,7 +94,7 @@ public:
 protected:
 
     virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL 
createFastChildContext(
-            sal_Int32 nElement, const css::uno::Reference< 
css::xml::sax::XFastAttributeList >& AttrList ) override;
+            sal_Int32 nElement, const css::uno::Reference< 
css::xml::sax::XFastAttributeList >& AttrList ) override final;
 };
 
 #endif
diff --git a/include/xmloff/XMLTextMasterPageContext.hxx 
b/include/xmloff/XMLTextMasterPageContext.hxx
index 36243d6005b5..f9e28ee8f776 100644
--- a/include/xmloff/XMLTextMasterPageContext.hxx
+++ b/include/xmloff/XMLTextMasterPageContext.hxx
@@ -59,7 +59,7 @@ public:
 
     virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL 
createFastChildContext(
         sal_Int32 nElement,
-        const css::uno::Reference< css::xml::sax::XFastAttributeList >& 
AttrList ) override;
+        const css::uno::Reference< css::xml::sax::XFastAttributeList >& 
AttrList ) override final;
 
     virtual SvXMLImportContext *CreateHeaderFooterContext(
             sal_Int32 nElement,
diff --git a/include/xmloff/XMLTextMasterStylesContext.hxx 
b/include/xmloff/XMLTextMasterStylesContext.hxx
index ab1942b314f9..f73c75479e3d 100644
--- a/include/xmloff/XMLTextMasterStylesContext.hxx
+++ b/include/xmloff/XMLTextMasterStylesContext.hxx
@@ -29,7 +29,7 @@ class XMLOFF_DLLPUBLIC XMLTextMasterStylesContext : public 
SvXMLStylesContext
 protected:
     virtual SvXMLStyleContext* CreateStyleChildContext(
         sal_Int32 nElement,
-        const css::uno::Reference<css::xml::sax::XFastAttributeList>& 
xAttrList) override;
+        const css::uno::Reference<css::xml::sax::XFastAttributeList>& 
xAttrList) override final;
 
     virtual bool InsertStyleFamily(XmlStyleFamily nFamily) const override;
 
diff --git a/include/xmloff/XMLTextShapeImportHelper.hxx 
b/include/xmloff/XMLTextShapeImportHelper.hxx
index be5d179bb735..d23e7665d4f3 100644
--- a/include/xmloff/XMLTextShapeImportHelper.hxx
+++ b/include/xmloff/XMLTextShapeImportHelper.hxx
@@ -36,7 +36,7 @@ public:
     virtual void addShape(
         css::uno::Reference< css::drawing::XShape >& rShape,
         const css::uno::Reference< css::xml::sax::XFastAttributeList >& 
xAttrList,
-        css::uno::Reference< css::drawing::XShapes >& rShapes ) override;
+        css::uno::Reference< css::drawing::XShapes >& rShapes ) override final;
 };
 
 #endif
diff --git a/include/xmloff/txtparae.hxx b/include/xmloff/txtparae.hxx
index 436c2d2b629e..c003909795dd 100644
--- a/include/xmloff/txtparae.hxx
+++ b/include/xmloff/txtparae.hxx
@@ -210,7 +210,7 @@ protected:
         OUString *pMinWidthValue = nullptr );
 
     virtual void exportStyleAttributes(
-        const css::uno::Reference< css::style::XStyle > & rStyle ) override;
+        const css::uno::Reference< css::style::XStyle > & rStyle ) override 
final;
 
     void exportPageFrames( bool bProgress );
     void exportFrameFrames( bool bAutoStyles, bool bProgress,
diff --git a/include/xmloff/txtstyli.hxx b/include/xmloff/txtstyli.hxx
index aa5627c0e608..71a204b2903d 100644
--- a/include/xmloff/txtstyli.hxx
+++ b/include/xmloff/txtstyli.hxx
@@ -54,7 +54,7 @@ class XMLOFF_DLLPUBLIC XMLTextStyleContext : public 
XMLPropStyleContext
 protected:
 
     virtual void SetAttribute( sal_Int32 nElement,
-                               const OUString& rValue ) override;
+                               const OUString& rValue ) override final;
 
 public:
 
@@ -81,9 +81,9 @@ public:
     const OUString& GetDropCapStyleName() const { return 
m_sDropCapTextStyleName; }
     const OUString& GetDataStyleName() const { return m_sDataStyleName; }
 
-    virtual void CreateAndInsert( bool bOverwrite ) override;
+    virtual void CreateAndInsert( bool bOverwrite ) override final;
     virtual void Finish( bool bOverwrite ) override;
-    virtual void SetDefaults() override;
+    virtual void SetDefaults() override final;
 
     // override FillPropertySet, so we can get at the combined characters
     virtual void FillPropertySet(
diff --git a/include/xmloff/xmlexp.hxx b/include/xmloff/xmlexp.hxx
index f8bb5ca423c2..f6a6e8748054 100644
--- a/include/xmloff/xmlexp.hxx
+++ b/include/xmloff/xmlexp.hxx
@@ -304,8 +304,8 @@ public:
     virtual void SAL_CALL initialize( const css::uno::Sequence< css::uno::Any 
>& aArguments ) override;
 
     // XNamed
-    virtual OUString SAL_CALL getName(  ) override;
-    virtual void SAL_CALL setName( const OUString& aName ) override;
+    virtual OUString SAL_CALL getName(  ) override final;
+    virtual void SAL_CALL setName( const OUString& aName ) override final;
 
     // XServiceInfo
     virtual OUString SAL_CALL getImplementationName(  ) final override;
diff --git a/include/xmloff/xmlimp.hxx b/include/xmloff/xmlimp.hxx
index cac67404450b..aee75e7ab798 100644
--- a/include/xmloff/xmlimp.hxx
+++ b/include/xmloff/xmlimp.hxx
@@ -309,45 +309,45 @@ public:
 
     virtual void SAL_CALL startDocument() override;
     virtual void SAL_CALL endDocument() override;
-    virtual void SAL_CALL characters(const OUString& aChars) override;
+    virtual void SAL_CALL characters(const OUString& aChars) override final;
     virtual void SAL_CALL processingInstruction(const OUString& aTarget,
-                                                const OUString& aData) 
override;
-    virtual void SAL_CALL setDocumentLocator(const css::uno::Reference< 
css::xml::sax::XLocator > & xLocator) override;
+                                                const OUString& aData) 
override final;
+    virtual void SAL_CALL setDocumentLocator(const css::uno::Reference< 
css::xml::sax::XLocator > & xLocator) override final;
 
     // ::css::xml::sax::XFastContextHandler
     virtual void SAL_CALL startFastElement(sal_Int32 Element,
-        const css::uno::Reference< css::xml::sax::XFastAttributeList > & 
Attribs) override;
+        const css::uno::Reference< css::xml::sax::XFastAttributeList > & 
Attribs) override final;
     virtual void SAL_CALL startUnknownElement(const OUString & Namespace,
         const OUString & Name,
-        const css::uno::Reference< css::xml::sax::XFastAttributeList > & 
Attribs) override;
-    virtual void SAL_CALL endFastElement(sal_Int32 Element) override;
+        const css::uno::Reference< css::xml::sax::XFastAttributeList > & 
Attribs) override final;
+    virtual void SAL_CALL endFastElement(sal_Int32 Element) override final;
     virtual void SAL_CALL endUnknownElement(const OUString & Namespace,
-        const OUString & Name) override;
+        const OUString & Name) override final;
     virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL
     createFastChildContext(sal_Int32 Element,
-        const css::uno::Reference< css::xml::sax::XFastAttributeList > & 
Attribs) override;
+        const css::uno::Reference< css::xml::sax::XFastAttributeList > & 
Attribs) override final;
     virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL
     createUnknownChildContext(const OUString & Namespace, const OUString & 
Name,
-        const css::uno::Reference< css::xml::sax::XFastAttributeList > & 
Attribs) override;
+        const css::uno::Reference< css::xml::sax::XFastAttributeList > & 
Attribs) override final;
 
     // XFastParser
-e 
... etc. - the rest is truncated

Reply via email to