summaryrefslogtreecommitdiff
path: root/svx/source/table
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2019-11-19 16:32:49 +0100
committerStephan Bergmann <sbergman@redhat.com>2019-11-22 12:57:32 +0100
commitf853ec317f6af1b8c65cc5bd758371689c75118d (patch)
treeb86d729bf9a9465ee619ead3b5635efa62a1804e /svx/source/table
parentf31d36966bceb90e261cbecd42634bde4448d527 (diff)
Extend loplugin:external to warn about classes
...following up on 314f15bff08b76bf96acf99141776ef64d2f1355 "Extend loplugin:external to warn about enums". Cases where free functions were moved into an unnamed namespace along with a class, to not break ADL, are in: filter/source/svg/svgexport.cxx sc/source/filter/excel/xelink.cxx sc/source/filter/excel/xilink.cxx svx/source/sdr/contact/viewobjectcontactofunocontrol.cxx All other free functions mentioning moved classes appear to be harmless and not give rise to (silent, even) ADL breakage. (One remaining TODO in compilerplugins/clang/external.cxx is that derived classes are not covered by computeAffectedTypes, even though they could also be affected by ADL-breakage--- but don't seem to be in any acutal case across the code base.) For friend declarations using elaborate type specifiers, like class C1 {}; class C2 { friend class C1; }; * If C2 (but not C1) is moved into an unnamed namespace, the friend declaration must be changed to not use an elaborate type specifier (i.e., "friend C1;"; see C++17 [namespace.memdef]/3: "If the name in a friend declaration is neither qualified nor a template-id and the declaration is a function or an elaborated-type-specifier, the lookup to determine whether the entity has been previously declared shall not consider any scopes outside the innermost enclosing namespace.") * If C1 (but not C2) is moved into an unnamed namespace, the friend declaration must be changed too, see <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71882> "elaborated-type-specifier friend not looked up in unnamed namespace". Apart from that, to keep changes simple and mostly mechanical (which should help avoid regressions), out-of-line definitions of class members have been left in the enclosing (named) namespace. But explicit specializations of class templates had to be moved into the unnamed namespace to appease <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92598> "explicit specialization of template from unnamed namespace using unqualified-id in enclosing namespace". Also, accompanying declarations (of e.g. typedefs or static variables) that could arguably be moved into the unnamed namespace too have been left alone. And in some cases, mention of affected types in blacklists in other loplugins needed to be adapted. And sc/qa/unit/mark_test.cxx uses a hack of including other .cxx, one of which is sc/source/core/data/segmenttree.cxx where e.g. ScFlatUInt16SegmentsImpl is not moved into an unnamed namespace (because it is declared in sc/inc/segmenttree.hxx), but its base ScFlatSegmentsImpl is. GCC warns about such combinations with enabled-by-default -Wsubobject-linkage, but "The compiler doesn’t give this warning for types defined in the main .C file, as those are unlikely to have multiple definitions." (<https://gcc.gnu.org/onlinedocs/gcc-9.2.0/gcc/Warning-Options.html>) The warned-about classes also don't have multiple definitions in the given test, so disable the warning when including the .cxx. Change-Id: Ib694094c0d8168be68f8fe90dfd0acbb66a3f1e4 Reviewed-on: https://gerrit.libreoffice.org/83239 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
Diffstat (limited to 'svx/source/table')
-rw-r--r--svx/source/table/svdotable.cxx8
-rw-r--r--svx/source/table/tablecontroller.cxx3
-rw-r--r--svx/source/table/tabledesign.cxx8
-rw-r--r--svx/source/table/tablehandles.cxx2
-rw-r--r--svx/source/table/tablertfimporter.cxx8
-rw-r--r--svx/source/table/viewcontactoftableobj.cxx4
6 files changed, 33 insertions, 0 deletions
diff --git a/svx/source/table/svdotable.cxx b/svx/source/table/svdotable.cxx
index b6aede0dd926..68386971fb88 100644
--- a/svx/source/table/svdotable.cxx
+++ b/svx/source/table/svdotable.cxx
@@ -84,6 +84,8 @@ using namespace ::com::sun::star::style;
namespace sdr { namespace table {
+namespace {
+
class TableProperties : public TextProperties
{
protected:
@@ -103,6 +105,8 @@ public:
virtual void ItemChange(const sal_uInt16 nWhich, const SfxPoolItem* pNewItem = nullptr) override;
};
+}
+
TableProperties::TableProperties(SdrObject& rObj)
: TextProperties(rObj)
{
@@ -143,12 +147,16 @@ std::unique_ptr<SfxItemSet> TableProperties::CreateObjectSpecificItemSet(SfxItem
EE_ITEMS_START, EE_ITEMS_END>{});
}
+namespace {
+
class TableObjectGeoData : public SdrTextObjGeoData
{
public:
tools::Rectangle maLogicRect;
};
+}
+
TableStyleSettings::TableStyleSettings()
: mbUseFirstRow(true)
, mbUseLastRow(false)
diff --git a/svx/source/table/tablecontroller.cxx b/svx/source/table/tablecontroller.cxx
index d4c5ab1ad43b..2690e1d5062f 100644
--- a/svx/source/table/tablecontroller.cxx
+++ b/svx/source/table/tablecontroller.cxx
@@ -112,6 +112,8 @@ namespace o3tl
namespace sdr { namespace table {
+namespace {
+
class SvxTableControllerModifyListener : public ::cppu::WeakImplHelper< css::util::XModifyListener >
{
public:
@@ -127,6 +129,7 @@ public:
SvxTableController* mpController;
};
+}
// XModifyListener
diff --git a/svx/source/table/tabledesign.cxx b/svx/source/table/tabledesign.cxx
index 0a4f81417f63..c80f4ace3f60 100644
--- a/svx/source/table/tabledesign.cxx
+++ b/svx/source/table/tabledesign.cxx
@@ -67,6 +67,8 @@ typedef std::map< OUString, sal_Int32 > CellStyleNameMap;
typedef ::cppu::WeakComponentImplHelper< XStyle, XNameReplace, XServiceInfo, XIndexAccess, XModifyBroadcaster, XModifyListener > TableDesignStyleBase;
+namespace {
+
class TableDesignStyle : private ::cppu::BaseMutex, public TableDesignStyleBase
{
public:
@@ -122,8 +124,12 @@ public:
Reference< XStyle > maCellStyles[style_count];
};
+}
+
typedef std::vector< Reference< XStyle > > TableDesignStyleVector;
+namespace {
+
class TableDesignFamily : public ::cppu::WeakImplHelper< XNameContainer, XNamed, XIndexAccess, XSingleServiceFactory, XServiceInfo, XComponent, XPropertySet >
{
public:
@@ -177,6 +183,8 @@ public:
TableDesignStyleVector maDesigns;
};
+}
+
TableDesignStyle::TableDesignStyle()
: TableDesignStyleBase(m_aMutex)
{
diff --git a/svx/source/table/tablehandles.cxx b/svx/source/table/tablehandles.cxx
index 776768affc53..abf7c55f85ba 100644
--- a/svx/source/table/tablehandles.cxx
+++ b/svx/source/table/tablehandles.cxx
@@ -41,6 +41,7 @@
namespace sdr { namespace table {
+namespace {
class OverlayTableEdge : public sdr::overlay::OverlayObject
{
@@ -55,6 +56,7 @@ public:
OverlayTableEdge( const basegfx::B2DPolyPolygon& rPolyPolygon, bool bVisible );
};
+}
TableEdgeHdl::TableEdgeHdl( const Point& rPnt, bool bHorizontal, sal_Int32 nMin, sal_Int32 nMax, sal_Int32 nEdges )
: SdrHdl( rPnt, SdrHdlKind::User )
diff --git a/svx/source/table/tablertfimporter.cxx b/svx/source/table/tablertfimporter.cxx
index 43b7f44b2e78..267c6a9c6519 100644
--- a/svx/source/table/tablertfimporter.cxx
+++ b/svx/source/table/tablertfimporter.cxx
@@ -49,6 +49,8 @@ using namespace ::com::sun::star::beans;
namespace sdr { namespace table {
+namespace {
+
struct RTFCellDefault
{
SfxItemSet maItemSet;
@@ -59,8 +61,12 @@ struct RTFCellDefault
explicit RTFCellDefault( SfxItemPool* pPool ) : maItemSet( *pPool ), mnRowSpan(1), mnColSpan(1), mnCellX(0) {}
};
+}
+
typedef std::vector< std::shared_ptr< RTFCellDefault > > RTFCellDefaultVector;
+namespace {
+
struct RTFCellInfo
{
SfxItemSet const maItemSet;
@@ -73,6 +79,8 @@ struct RTFCellInfo
explicit RTFCellInfo( SfxItemPool& rPool ) : maItemSet( rPool ), mnStartPara(0), mnParaCount(0), mnCellX(0), mnRowSpan(1) {}
};
+}
+
typedef std::shared_ptr< RTFCellInfo > RTFCellInfoPtr;
typedef std::vector< RTFCellInfoPtr > RTFColumnVector;
diff --git a/svx/source/table/viewcontactoftableobj.cxx b/svx/source/table/viewcontactoftableobj.cxx
index 10a6173fab56..3687df3424e9 100644
--- a/svx/source/table/viewcontactoftableobj.cxx
+++ b/svx/source/table/viewcontactoftableobj.cxx
@@ -54,6 +54,8 @@ namespace drawinglayer
{
namespace primitive2d
{
+ namespace {
+
class SdrCellPrimitive2D : public BufferedDecompositionPrimitive2D
{
private:
@@ -85,6 +87,8 @@ namespace drawinglayer
DeclPrimitive2DIDBlock()
};
+ }
+
void SdrCellPrimitive2D::create2DDecomposition(Primitive2DContainer& rContainer, const geometry::ViewInformation2D& /*aViewInformation*/) const
{
// prepare unit polygon