[Libreoffice-commits] core.git: 2 commits - chart2/qa compilerplugins/clang include/svx sc/source svx/source
Tomaž Vajngerl
tomaz.vajngerl at collabora.co.uk
Mon Apr 10 06:52:12 UTC 2017
chart2/qa/extras/PivotChartTest.cxx | 55 ++-
compilerplugins/clang/inlinefields.cxx | 247 ++++++++++++++
compilerplugins/clang/inlinefields.py | 81 ++++
include/svx/nbdtmg.hxx | 4
sc/source/ui/unoobj/PivotTableDataProvider.cxx | 10
svx/source/accessibility/svxpixelctlaccessiblecontext.cxx | 8
svx/source/accessibility/svxrectctaccessiblecontext.cxx | 8
svx/source/form/formcontroller.cxx | 34 -
svx/source/inc/formcontroller.hxx | 4
svx/source/inc/svxpixelctlaccessiblecontext.hxx | 2
svx/source/inc/svxrectctaccessiblecontext.hxx | 3
svx/source/sidebar/nbdtmg.cxx | 34 -
12 files changed, 422 insertions(+), 68 deletions(-)
New commits:
commit abd8c3646e1295e68fe317bc1a02148a1b5f41a4
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
Date: Sat Apr 8 23:43:14 2017 +0200
pivotcharts: ignore subtotals, grand totals in pivot table data
Change-Id: I08cdd28aaae536fa8306446168dcdb977897dfcd
Reviewed-on: https://gerrit.libreoffice.org/36308
Tested-by: Jenkins <ci at libreoffice.org>
Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>
diff --git a/chart2/qa/extras/PivotChartTest.cxx b/chart2/qa/extras/PivotChartTest.cxx
index 7f7b0951faf4..ff1dd586fbdf 100644
--- a/chart2/qa/extras/PivotChartTest.cxx
+++ b/chart2/qa/extras/PivotChartTest.cxx
@@ -126,7 +126,6 @@ void PivotChartTest::testRoundtrip()
{
uno::Reference<sheet::XDataPilotTable> xDataPilotTable = lclGetPivotTableByName(1, "DataPilot1", mxComponent);
uno::Reference<sheet::XDataPilotDescriptor> xDataPilotDescriptor(xDataPilotTable, UNO_QUERY_THROW);
-
lclModifyOrientation(xDataPilotDescriptor, "Exp.", sheet::DataPilotFieldOrientation_HIDDEN);
}
@@ -161,13 +160,18 @@ void PivotChartTest::testChangePivotTable()
load("/chart2/qa/extras/data/ods/", "PivotTableExample.ods");
+ // Check we have the Pivot Table
+ OUString sPivotTableName("DataPilot1");
+ uno::Reference<sheet::XDataPilotTable> xDataPilotTable = lclGetPivotTableByName(1, sPivotTableName, mxComponent);
+ CPPUNIT_ASSERT(xDataPilotTable.is());
+
// Check that we don't have any pivot chart in the document
uno::Reference<table::XTablePivotCharts> xTablePivotCharts = getTablePivotChartsFromSheet(1, mxComponent);
uno::Reference<container::XIndexAccess> xIndexAccess(xTablePivotCharts, UNO_QUERY_THROW);
CPPUNIT_ASSERT_EQUAL(sal_Int32(0), xIndexAccess->getCount());
// Create a new pivot chart
- xTablePivotCharts->addNewByName("Chart", awt::Rectangle{0, 0, 9000, 9000}, "DataPilot1");
+ xTablePivotCharts->addNewByName("Chart", awt::Rectangle{0, 0, 9000, 9000}, sPivotTableName);
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xIndexAccess->getCount());
// Get the pivot chart document so we ca access its data
@@ -175,6 +179,8 @@ void PivotChartTest::testChangePivotTable()
CPPUNIT_ASSERT(xChartDoc.is());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), getNumberOfDataSeries(xChartDoc));
+
// Check first data series
{
std::vector<double> aReference { 10162.033139, 16614.523063, 27944.146101 };
@@ -197,9 +203,9 @@ void PivotChartTest::testChangePivotTable()
CPPUNIT_ASSERT_EQUAL(aExpectedLabel, lclGetLabel(xChartDoc, 1));
}
- // Modify the pivot table
+ // Modify the pivot table, move "Group Segment" to Column fields,
+ // add "Servie Month" to Row fields, remove "Rev." Data field
{
- uno::Reference<sheet::XDataPilotTable> xDataPilotTable = lclGetPivotTableByName(1, "DataPilot1", mxComponent);
uno::Reference<sheet::XDataPilotDescriptor> xDataPilotDescriptor(xDataPilotTable, UNO_QUERY_THROW);
lclModifyOrientation(xDataPilotDescriptor, "Service Month", sheet::DataPilotFieldOrientation_ROW);
@@ -209,7 +215,7 @@ void PivotChartTest::testChangePivotTable()
// Check the pivot chart again as we expect it has been updated when we updated the pivot table
- CPPUNIT_ASSERT(xChartDoc.is());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(3), getNumberOfDataSeries(xChartDoc));
// Check the first data series
{
@@ -244,17 +250,46 @@ void PivotChartTest::testChangePivotTable()
CPPUNIT_ASSERT_EQUAL(aExpectedLabel, lclGetLabel(xChartDoc, 2));
}
- // Modify the pivot table
+ // Remove "Service Month" so row fields are empty - check we handle empty rows
{
- uno::Reference<sheet::XDataPilotTable> xDataPilotTable = lclGetPivotTableByName(1, "DataPilot1", mxComponent);
- uno::Reference<sheet::XDataPilotDescriptor> xDataPilotDescriptor(xDataPilotTable, UNO_QUERY_THROW);
-
+ uno::Reference<sheet::XDataPilotDescriptor> xDataPilotDescriptor(xDataPilotTable, uno::UNO_QUERY_THROW);
lclModifyOrientation(xDataPilotDescriptor, "Service Month", sheet::DataPilotFieldOrientation_HIDDEN);
}
// Check the pivot chart again as we expect it has been updated when we updated the pivot table
- CPPUNIT_ASSERT(xChartDoc.is());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(3), getNumberOfDataSeries(xChartDoc));
+
+ // Check the first data series
+ {
+ std::vector<double> aReference { 10162.033139 };
+ xSequence = getDataSequenceFromDocByRole(xChartDoc, "values-y", 0)->getData();
+ lclCheckSequence(aReference, xSequence, 1E-3);
+ CPPUNIT_ASSERT_EQUAL(OUString("Big"), lclGetLabel(xChartDoc, 0));
+ }
+ // Check the second data series
+ {
+ std::vector<double> aReference { 16614.523063 };
+ xSequence = getDataSequenceFromDocByRole(xChartDoc, "values-y", 1)->getData();
+ lclCheckSequence(aReference, xSequence, 1E-3);
+ CPPUNIT_ASSERT_EQUAL(OUString("Medium"), lclGetLabel(xChartDoc, 1));
+ }
+ // Check the third data series
+ {
+ std::vector<double> aReference { 27944.146101 };
+ xSequence = getDataSequenceFromDocByRole(xChartDoc, "values-y", 2)->getData();
+ lclCheckSequence(aReference, xSequence, 1E-3);
+ CPPUNIT_ASSERT_EQUAL(OUString("Small"), lclGetLabel(xChartDoc, 2));
+ }
+
+ // Enable column totals and check the data is still unchanged
+ {
+ uno::Reference<sheet::XDataPilotDescriptor> xDataPilotDescriptor(xDataPilotTable, uno::UNO_QUERY_THROW);
+ uno::Reference<beans::XPropertySet> xProperties(xDataPilotTable, uno::UNO_QUERY_THROW);
+ xProperties->setPropertyValue("ColumnGrand", uno::makeAny(true));
+ }
+
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(3), getNumberOfDataSeries(xChartDoc));
// Check the first data series
{
diff --git a/sc/source/ui/unoobj/PivotTableDataProvider.cxx b/sc/source/ui/unoobj/PivotTableDataProvider.cxx
index 5eb66c65257a..df7b180c6892 100644
--- a/sc/source/ui/unoobj/PivotTableDataProvider.cxx
+++ b/sc/source/ui/unoobj/PivotTableDataProvider.cxx
@@ -265,9 +265,8 @@ void PivotTableDataProvider::collectPivotTableData()
{
ScDPCollection* pDPCollection = m_pDocument->GetDPCollection();
ScDPObject* pDPObject = pDPCollection->GetByName(m_sPivotTableName);
-
- uno::Reference<sheet::XDataPilotResults> xDPResults(pDPObject->GetSource(), uno::UNO_QUERY);
- uno::Sequence<uno::Sequence<sheet::DataResult>> xDataResultsSequence = xDPResults->getResults();
+ if (!pDPObject)
+ return;
m_aCategoriesColumnOrientation.clear();
m_aCategoriesRowOrientation.clear();
@@ -278,6 +277,9 @@ void PivotTableDataProvider::collectPivotTableData()
m_aPageFields.clear();
m_aDataFields.clear();
+ uno::Reference<sheet::XDataPilotResults> xDPResults(pDPObject->GetSource(), uno::UNO_QUERY);
+ uno::Sequence<uno::Sequence<sheet::DataResult>> xDataResultsSequence = xDPResults->getResults();
+
double fNan;
rtl::math::setNan(&fNan);
@@ -286,6 +288,8 @@ void PivotTableDataProvider::collectPivotTableData()
size_t nIndex = 0;
for (sheet::DataResult const & rDataResult : xDataResults)
{
+ if (rDataResult.Flags & css::sheet::DataResultFlags::SUBTOTAL)
+ continue;
if (rDataResult.Flags == 0 || rDataResult.Flags & css::sheet::DataResultFlags::HASDATA)
{
if (nIndex >= m_aDataRowVector.size())
commit 67af00a76a3bb86790447e2b223b03c5dddacc4a
Author: Noel Grandin <noel.grandin at collabora.co.uk>
Date: Fri Apr 7 14:45:20 2017 +0200
new loplugin:inlinefields
look for fields which can be declared inline in the parent class.
start with some likely candidates in svx
Change-Id: I56cdca273272b72bb728ed2e3f5e1e976f8c7c32
Reviewed-on: https://gerrit.libreoffice.org/36262
Tested-by: Jenkins <ci at libreoffice.org>
Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>
diff --git a/compilerplugins/clang/inlinefields.cxx b/compilerplugins/clang/inlinefields.cxx
new file mode 100644
index 000000000000..e663c118ed22
--- /dev/null
+++ b/compilerplugins/clang/inlinefields.cxx
@@ -0,0 +1,247 @@
+/* -*- 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 <string>
+#include <iostream>
+#include <fstream>
+#include <set>
+#include "plugin.hxx"
+#include "compat.hxx"
+
+/**
+if a field is
+- a pointer
+- only assigned to in the constructor via a new expression
+- unconditionally deleted in the destructor
+then it can probably just be allocated inline in the parent object
+
+TODO check for cases where the pointer is passed by non-const reference
+
+Be warned that it produces around 5G of log file.
+
+The process goes something like this:
+ $ make check
+ $ make FORCE_COMPILE_ALL=1 COMPILER_PLUGIN_TOOL='inlinefields' check
+ $ ./compilerplugins/clang/inlinefields.py
+
+and then
+ $ for dir in *; do make FORCE_COMPILE_ALL=1 UPDATE_FILES=$dir COMPILER_PLUGIN_TOOL='inlinefieldsremove' $dir; done
+to auto-remove the method declarations
+
+Note that the actual process may involve a fair amount of undoing, hand editing, and general messing around
+to get it to work :-)
+
+*/
+
+namespace {
+
+struct MyFieldInfo
+{
+ std::string parentClass;
+ std::string fieldName;
+ std::string sourceLocation;
+};
+bool operator < (const MyFieldInfo &lhs, const MyFieldInfo &rhs)
+{
+ return std::tie(lhs.parentClass, lhs.fieldName)
+ < std::tie(rhs.parentClass, rhs.fieldName);
+}
+
+
+// try to limit the voluminous output a little
+static std::set<MyFieldInfo> excludedSet;
+static std::set<MyFieldInfo> definitionSet;
+static std::set<MyFieldInfo> deletedInDestructorSet;
+static std::set<MyFieldInfo> newedInConstructorSet;
+
+class InlineFields:
+ public RecursiveASTVisitor<InlineFields>, public loplugin::Plugin
+{
+public:
+ explicit InlineFields(InstantiationData const & data): Plugin(data) {}
+
+ virtual void run() override
+ {
+ 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 MyFieldInfo & s : definitionSet)
+ output += "definition:\t" + s.parentClass + "\t" + s.fieldName + "\t" + s.sourceLocation + "\n";
+ for (const MyFieldInfo & s : excludedSet)
+ output += "excluded:\t" + s.parentClass + "\t" + s.fieldName + "\n";
+ for (const MyFieldInfo & s : deletedInDestructorSet)
+ output += "deletedInDestructor:\t" + s.parentClass + "\t" + s.fieldName + "\n";
+ for (const MyFieldInfo & s : newedInConstructorSet)
+ output += "newedInConstructor:\t" + s.parentClass + "\t" + s.fieldName + "\n";
+ ofstream myfile;
+ myfile.open( SRCDIR "/loplugin.inlinefields.log", ios::app | ios::out);
+ myfile << output;
+ myfile.close();
+ }
+
+ bool shouldVisitTemplateInstantiations () const { return true; }
+ bool shouldVisitImplicitCode() const { return true; }
+
+ bool VisitFieldDecl( const FieldDecl* );
+ bool VisitCXXConstructorDecl( const CXXConstructorDecl* );
+ bool VisitCXXDeleteExpr( const CXXDeleteExpr* );
+ bool VisitBinAssign( const BinaryOperator* );
+private:
+ MyFieldInfo niceName(const FieldDecl*);
+ void checkTouched(const FieldDecl* fieldDecl, const Expr* memberExpr);
+};
+
+MyFieldInfo InlineFields::niceName(const FieldDecl* fieldDecl)
+{
+ MyFieldInfo aInfo;
+
+ const RecordDecl* recordDecl = fieldDecl->getParent();
+
+ if (const CXXRecordDecl* cxxRecordDecl = dyn_cast<CXXRecordDecl>(recordDecl))
+ {
+ if (cxxRecordDecl->getTemplateInstantiationPattern())
+ cxxRecordDecl = cxxRecordDecl->getTemplateInstantiationPattern();
+ aInfo.parentClass = cxxRecordDecl->getQualifiedNameAsString();
+ }
+ else
+ aInfo.parentClass = recordDecl->getQualifiedNameAsString();
+
+ aInfo.fieldName = fieldDecl->getNameAsString();
+
+ SourceLocation expansionLoc = compiler.getSourceManager().getExpansionLoc( fieldDecl->getLocation() );
+ StringRef name = compiler.getSourceManager().getFilename(expansionLoc);
+ aInfo.sourceLocation = std::string(name.substr(strlen(SRCDIR)+1)) + ":" + std::to_string(compiler.getSourceManager().getSpellingLineNumber(expansionLoc));
+ normalizeDotDotInFilePath(aInfo.sourceLocation);
+
+ return aInfo;
+}
+
+bool InlineFields::VisitFieldDecl( const FieldDecl* fieldDecl )
+{
+ fieldDecl = fieldDecl->getCanonicalDecl();
+ if (ignoreLocation( fieldDecl )) {
+ return true;
+ }
+ // ignore stuff that forms part of the stable URE interface
+ if (isInUnoIncludeFile(compiler.getSourceManager().getSpellingLoc(fieldDecl->getLocation()))) {
+ return true;
+ }
+ QualType type = fieldDecl->getType();
+ if (!type->isPointerType())
+ return true;
+ definitionSet.insert(niceName(fieldDecl));
+ return true;
+}
+
+bool InlineFields::VisitCXXConstructorDecl( const CXXConstructorDecl* decl )
+{
+ if( ignoreLocation( decl ) )
+ return true;
+ if (decl->isCopyOrMoveConstructor())
+ return true;
+ for(auto it = decl->init_begin(); it != decl->init_end(); ++it)
+ {
+ const CXXCtorInitializer* init = *it;
+ const FieldDecl* fieldDecl = init->getMember();
+ if( !fieldDecl || !fieldDecl->getType()->isPointerType() )
+ continue;
+ auto e = init->getInit();
+ if (auto parentListExpr = dyn_cast<ParenListExpr>(e))
+ e = parentListExpr->getExpr(0);
+ e = e->IgnoreParenImpCasts();
+ if( isa<CXXNewExpr>(e) )
+ newedInConstructorSet.insert(niceName(fieldDecl));
+ else if( isa<CXXNullPtrLiteralExpr>(e) || isa<GNUNullExpr>(e))
+ ; // ignore
+ else
+ excludedSet.insert(niceName(fieldDecl));
+ }
+ return true;
+}
+
+static bool isSameParent(const CXXMethodDecl* cxxMethodDecl, const FieldDecl* fieldDecl)
+{
+ return cxxMethodDecl->getParent() == dyn_cast<CXXRecordDecl>(fieldDecl->getParent());
+}
+
+bool InlineFields::VisitBinAssign(const BinaryOperator * binaryOp)
+{
+ if( ignoreLocation( binaryOp ) )
+ return true;
+ auto memberExpr = dyn_cast<MemberExpr>(binaryOp->getLHS());
+ if (!memberExpr)
+ return true;
+ auto fieldDecl = dyn_cast<FieldDecl>(memberExpr->getMemberDecl());
+ if (!fieldDecl || !fieldDecl->getType()->isPointerType()) {
+ return true;
+ }
+ const FunctionDecl* parentFunction = parentFunctionDecl(binaryOp);
+ if (!parentFunction) {
+ return true;
+ }
+ // if the field is being assigned from outside it's own constructor or destructor, exclude
+ auto constructorDecl = dyn_cast<CXXConstructorDecl>(parentFunction);
+ if (constructorDecl && isSameParent(constructorDecl, fieldDecl)) {
+ if( isa<CXXNewExpr>(binaryOp->getRHS()) )
+ newedInConstructorSet.insert(niceName(fieldDecl));
+ else {
+ excludedSet.insert(niceName(fieldDecl));
+ std::cout << "assign in constructor:" << std::endl;
+ binaryOp->getRHS()->dump();
+ }
+ return true;
+ }
+ auto destructorDecl = dyn_cast<CXXDestructorDecl>(parentFunction);
+ if (destructorDecl && isSameParent(destructorDecl, fieldDecl)) {
+ auto e = binaryOp->getRHS()->IgnoreParenImpCasts();
+ if( !isa<CXXNullPtrLiteralExpr>(e) && !isa<GNUNullExpr>(e)) {
+ excludedSet.insert(niceName(fieldDecl));
+ std::cout << "assign in destructor:" << std::endl;
+ e->dump();
+ }
+ return true;
+ }
+ excludedSet.insert(niceName(fieldDecl));
+ return true;
+}
+
+bool InlineFields::VisitCXXDeleteExpr(const CXXDeleteExpr * deleteExpr)
+{
+ if( ignoreLocation( deleteExpr ) )
+ return true;
+ auto memberExpr = dyn_cast<MemberExpr>(deleteExpr->getArgument()->IgnoreParenImpCasts());
+ if (!memberExpr)
+ return true;
+ auto fieldDecl = dyn_cast<FieldDecl>(memberExpr->getMemberDecl());
+ if (!fieldDecl || !fieldDecl->getType()->isPointerType()) {
+ return true;
+ }
+ // TODO for some reason, this part is not working properly, it doesn't find the parent
+ // function for delete statements properly
+ const FunctionDecl* parentFunction = parentFunctionDecl(deleteExpr);
+ if (!parentFunction) {
+ return true;
+ }
+ auto destructorDecl = dyn_cast<CXXDestructorDecl>(parentFunction);
+ if (destructorDecl && isSameParent(destructorDecl, fieldDecl)) {
+ deletedInDestructorSet.insert(niceName(fieldDecl));
+ return true;
+ }
+ excludedSet.insert(niceName(fieldDecl));
+ return true;
+}
+
+loplugin::Plugin::Registration< InlineFields > X("inlinefields", false);
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/compilerplugins/clang/inlinefields.py b/compilerplugins/clang/inlinefields.py
new file mode 100755
index 000000000000..2605fd7bc173
--- /dev/null
+++ b/compilerplugins/clang/inlinefields.py
@@ -0,0 +1,81 @@
+#!/usr/bin/python
+
+import sys
+import re
+import io
+
+definitionToSourceLocationMap = dict() # dict of tuple(parentClass, fieldName) to sourceLocation
+definitionSet = set()
+excludedSet = set()
+deletedInDestructorSet = set()
+newedInConstructorSet = set();
+
+# clang does not always use exactly the same numbers in the type-parameter vars it generates
+# so I need to substitute them to ensure we can match correctly.
+normalizeTypeParamsRegex = re.compile(r"type-parameter-\d+-\d+")
+def normalizeTypeParams( line ):
+ return normalizeTypeParamsRegex.sub("type-parameter-?-?", line)
+
+# reading as binary (since we known it is pure ascii) is much faster than reading as unicode
+with io.open("loplugin.inlinefields.log", "rb", buffering=1024*1024) as txt:
+ for line in txt:
+ tokens = line.strip().split("\t")
+ if tokens[0] == "definition:":
+ parentClass = normalizeTypeParams(tokens[1])
+ fieldName = normalizeTypeParams(tokens[2])
+ sourceLocation = tokens[3]
+ fieldInfo = (parentClass, fieldName)
+ definitionSet.add(fieldInfo)
+ definitionToSourceLocationMap[fieldInfo] = sourceLocation
+ elif tokens[0] == "excluded:":
+ parentClass = normalizeTypeParams(tokens[1])
+ fieldName = normalizeTypeParams(tokens[2])
+ fieldInfo = (parentClass, fieldName)
+ excludedSet.add(fieldInfo)
+ elif tokens[0] == "deletedInDestructor:":
+ parentClass = normalizeTypeParams(tokens[1])
+ fieldName = normalizeTypeParams(tokens[2])
+ fieldInfo = (parentClass, fieldName)
+ deletedInDestructorSet.add(fieldInfo)
+ elif tokens[0] == "newedInConstructor:":
+ parentClass = normalizeTypeParams(tokens[1])
+ fieldName = normalizeTypeParams(tokens[2])
+ fieldInfo = (parentClass, fieldName)
+ newedInConstructorSet.add(fieldInfo)
+ else:
+ print( "unknown line: " + line)
+
+# Invert the definitionToSourceLocationMap
+# If we see more than one method at the same sourceLocation, it's being autogenerated as part of a template
+# and we should just ignore it
+sourceLocationToDefinitionMap = {}
+for k, v in definitionToSourceLocationMap.iteritems():
+ sourceLocationToDefinitionMap[v] = sourceLocationToDefinitionMap.get(v, [])
+ sourceLocationToDefinitionMap[v].append(k)
+for k, definitions in sourceLocationToDefinitionMap.iteritems():
+ if len(definitions) > 1:
+ for d in definitions:
+ definitionSet.remove(d)
+
+tmp1list = list()
+for d in definitionSet:
+# TODO see comment in InlineFields::VisitCXXDeleteExpr
+# if d in excludedSet or d not in deletedInDestructorSet or d not in newedInConstructorSet:
+ if d in excludedSet or d not in newedInConstructorSet:
+ continue
+ srcLoc = definitionToSourceLocationMap[d];
+ tmp1list.append((d[0] + " " + d[1], srcLoc))
+
+# sort results by filename:lineno
+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)]
+tmp1list.sort(key=lambda v: natural_sort_key(v[1]))
+
+# print out the results
+with open("loplugin.inlinefields.report", "wt") as f:
+ for v in tmp1list:
+ f.write(v[1] + "\n")
+ f.write(" " + v[0] + "\n")
+
+
diff --git a/include/svx/nbdtmg.hxx b/include/svx/nbdtmg.hxx
index 52285b1924e1..aeb4ae6651fb 100644
--- a/include/svx/nbdtmg.hxx
+++ b/include/svx/nbdtmg.hxx
@@ -180,8 +180,8 @@ class SVX_DLLPUBLIC NumberingTypeMgr: public NBOTypeMgrBase
private:
NumberingTypeMgr(const NumberingTypeMgr&) = delete;
public:
- NumberSettingsArr_Impl* pNumberSettingsArr;
- NumberSettingsArr_Impl* pDefaultNumberSettingsArr;
+ NumberSettingsArr_Impl maNumberSettingsArr;
+ NumberSettingsArr_Impl maDefaultNumberSettingsArr;
public:
NumberingTypeMgr();
virtual ~NumberingTypeMgr() override;
diff --git a/svx/source/accessibility/svxpixelctlaccessiblecontext.cxx b/svx/source/accessibility/svxpixelctlaccessiblecontext.cxx
index c93a67537432..31f509a11852 100644
--- a/svx/source/accessibility/svxpixelctlaccessiblecontext.cxx
+++ b/svx/source/accessibility/svxpixelctlaccessiblecontext.cxx
@@ -530,7 +530,7 @@ SvxPixelCtlAccessibleChild::SvxPixelCtlAccessibleChild(
mrParentWindow( rWindow ),
mxParent(rxParent),
m_bPixelColorOrBG(bPixelColorOrBG),
- mpBoundingBox( new tools::Rectangle( rBoundingBox ) ),
+ maBoundingBox( rBoundingBox ),
mnIndexInParent( nIndexInParent ),
mnClientId( 0 )
{
@@ -771,8 +771,6 @@ void SAL_CALL SvxPixelCtlAccessibleChild::disposing()
}
mxParent.clear();
-
- delete mpBoundingBox;
}
}
@@ -794,10 +792,10 @@ tools::Rectangle SvxPixelCtlAccessibleChild::GetBoundingBoxOnScreen()
tools::Rectangle const & SvxPixelCtlAccessibleChild::GetBoundingBox()
{
- // no guard necessary, because no one changes mpBoundingBox after creating it
+ // no guard necessary, because no one changes maBoundingBox after creating it
ThrowExceptionIfNotAlive();
- return *mpBoundingBox;
+ return maBoundingBox;
}
OUString SvxPixelCtlAccessibleChild::GetName()
diff --git a/svx/source/accessibility/svxrectctaccessiblecontext.cxx b/svx/source/accessibility/svxrectctaccessiblecontext.cxx
index 2f474038dacc..0b091932c1d1 100644
--- a/svx/source/accessibility/svxrectctaccessiblecontext.cxx
+++ b/svx/source/accessibility/svxrectctaccessiblecontext.cxx
@@ -660,7 +660,7 @@ SvxRectCtlChildAccessibleContext::SvxRectCtlChildAccessibleContext(
msDescription( rDescription ),
msName( rName ),
mxParent(rxParent),
- mpBoundingBox( new tools::Rectangle( rBoundingBox ) ),
+ maBoundingBox( rBoundingBox ),
mrParentWindow( rParentWindow ),
mnClientId( 0 ),
mnIndexInParent( nIndexInParent ),
@@ -986,8 +986,6 @@ void SAL_CALL SvxRectCtlChildAccessibleContext::disposing()
}
mxParent.clear();
-
- delete mpBoundingBox;
}
}
@@ -1009,10 +1007,10 @@ tools::Rectangle SvxRectCtlChildAccessibleContext::GetBoundingBoxOnScreen()
tools::Rectangle const & SvxRectCtlChildAccessibleContext::GetBoundingBox()
{
- // no guard necessary, because no one changes mpBoundingBox after creating it
+ // no guard necessary, because no one changes maBoundingBox after creating it
ThrowExceptionIfNotAlive();
- return *mpBoundingBox;
+ return maBoundingBox;
}
void SvxRectCtlChildAccessibleContext::setStateChecked( bool bChecked )
diff --git a/svx/source/form/formcontroller.cxx b/svx/source/form/formcontroller.cxx
index bd28d36b9a7e..55aeb92c3117 100644
--- a/svx/source/form/formcontroller.cxx
+++ b/svx/source/form/formcontroller.cxx
@@ -540,7 +540,6 @@ FormController::FormController(const Reference< css::uno::XComponentContext > &
,m_aRowSetApproveListeners(m_aMutex)
,m_aParameterListeners(m_aMutex)
,m_aFilterListeners(m_aMutex)
- ,m_pControlBorderManager( new ::svxform::ControlBorderManager )
,m_xFormOperations()
,m_aMode( OUString( "DataMode" ) )
,m_aLoadEvent( LINK( this, FormController, OnLoad ) )
@@ -610,9 +609,6 @@ FormController::~FormController()
m_xAggregate->setDelegator( nullptr );
m_xAggregate.clear();
}
-
- DELETEZ( m_pControlBorderManager );
-
}
@@ -1164,7 +1160,7 @@ void FormController::disposing()
removeBoundFieldListener();
stopFiltering();
- m_pControlBorderManager->restoreAll();
+ m_aControlBorderManager.restoreAll();
m_aFilterRows.clear();
@@ -1284,13 +1280,13 @@ void SAL_CALL FormController::propertyChange(const PropertyChangeEvent& evt)
bool bEnable = lcl_shouldUseDynamicControlBorder( evt.Source, evt.NewValue );
if ( bEnable )
{
- m_pControlBorderManager->enableDynamicBorderColor();
+ m_aControlBorderManager.enableDynamicBorderColor();
if ( m_xActiveControl.is() )
- m_pControlBorderManager->focusGained( m_xActiveControl.get() );
+ m_aControlBorderManager.focusGained( m_xActiveControl.get() );
}
else
{
- m_pControlBorderManager->disableDynamicBorderColor();
+ m_aControlBorderManager.disableDynamicBorderColor();
}
}
}
@@ -1621,7 +1617,7 @@ void FormController::focusGained(const FocusEvent& e)
::osl::ClearableMutexGuard aGuard( m_aMutex );
impl_checkDisposed_throw();
- m_pControlBorderManager->focusGained( e.Source );
+ m_aControlBorderManager.focusGained( e.Source );
Reference< XControl > xControl(e.Source, UNO_QUERY);
if (m_bDBConnection)
@@ -1772,7 +1768,7 @@ void FormController::focusLost(const FocusEvent& e)
{
OSL_ENSURE( !impl_isDisposed_nofail(), "FormController: already disposed!" );
- m_pControlBorderManager->focusLost( e.Source );
+ m_aControlBorderManager.focusLost( e.Source );
Reference< XControl > xControl(e.Source, UNO_QUERY);
Reference< XWindowPeer > xNext(e.NextFocus, UNO_QUERY);
@@ -1799,13 +1795,13 @@ void SAL_CALL FormController::mouseReleased( const awt::MouseEvent& /*_rEvent*/
void SAL_CALL FormController::mouseEntered( const awt::MouseEvent& _rEvent )
{
- m_pControlBorderManager->mouseEntered( _rEvent.Source );
+ m_aControlBorderManager.mouseEntered( _rEvent.Source );
}
void SAL_CALL FormController::mouseExited( const awt::MouseEvent& _rEvent )
{
- m_pControlBorderManager->mouseExited( _rEvent.Source );
+ m_aControlBorderManager.mouseExited( _rEvent.Source );
}
@@ -1817,7 +1813,7 @@ void SAL_CALL FormController::componentValidityChanged( const EventObject& _rSou
OSL_ENSURE( xControl.is() && xValidatable.is(), "FormController::componentValidityChanged: huh?" );
if ( xControl.is() && xValidatable.is() )
- m_pControlBorderManager->validityChanged( xControl, xValidatable );
+ m_aControlBorderManager.validityChanged( xControl, xValidatable );
}
@@ -1913,17 +1909,17 @@ void FormController::setModel(const Reference< XTabControllerModel > & Model)
bool bEnableDynamicControlBorder = lcl_shouldUseDynamicControlBorder(
xModelProps.get(), xModelProps->getPropertyValue( FM_PROP_DYNAMIC_CONTROL_BORDER ) );
if ( bEnableDynamicControlBorder )
- m_pControlBorderManager->enableDynamicBorderColor();
+ m_aControlBorderManager.enableDynamicBorderColor();
else
- m_pControlBorderManager->disableDynamicBorderColor();
+ m_aControlBorderManager.disableDynamicBorderColor();
sal_Int32 nColor = 0;
if ( xModelProps->getPropertyValue( FM_PROP_CONTROL_BORDER_COLOR_FOCUS ) >>= nColor )
- m_pControlBorderManager->setStatusColor( ControlStatus::Focused, nColor );
+ m_aControlBorderManager.setStatusColor( ControlStatus::Focused, nColor );
if ( xModelProps->getPropertyValue( FM_PROP_CONTROL_BORDER_COLOR_MOUSE ) >>= nColor )
- m_pControlBorderManager->setStatusColor( ControlStatus::MouseHover, nColor );
+ m_aControlBorderManager.setStatusColor( ControlStatus::MouseHover, nColor );
if ( xModelProps->getPropertyValue( FM_PROP_CONTROL_BORDER_COLOR_INVALID ) >>= nColor )
- m_pControlBorderManager->setStatusColor( ControlStatus::Invalid, nColor );
+ m_aControlBorderManager.setStatusColor( ControlStatus::Invalid, nColor );
}
}
}
@@ -2436,7 +2432,7 @@ void FormController::implControlInserted( const Reference< XControl>& _rxControl
if ( xValidatable.is() )
{
xValidatable->addFormComponentValidityListener( this );
- m_pControlBorderManager->validityChanged( _rxControl, xValidatable );
+ m_aControlBorderManager.validityChanged( _rxControl, xValidatable );
}
}
diff --git a/svx/source/inc/formcontroller.hxx b/svx/source/inc/formcontroller.hxx
index 5ee325731154..7fe54a170052 100644
--- a/svx/source/inc/formcontroller.hxx
+++ b/svx/source/inc/formcontroller.hxx
@@ -166,8 +166,8 @@ namespace svxform
Idle m_aTabActivationIdle;
Timer m_aFeatureInvalidationTimer;
- ::svxform::ControlBorderManager*
- m_pControlBorderManager;
+ ::svxform::ControlBorderManager
+ m_aControlBorderManager;
css::uno::Reference< css::form::runtime::XFormOperations >
m_xFormOperations;
diff --git a/svx/source/inc/svxpixelctlaccessiblecontext.hxx b/svx/source/inc/svxpixelctlaccessiblecontext.hxx
index 827fab99a0b2..618801734d3d 100644
--- a/svx/source/inc/svxpixelctlaccessiblecontext.hxx
+++ b/svx/source/inc/svxpixelctlaccessiblecontext.hxx
@@ -69,7 +69,7 @@ class SvxPixelCtlAccessibleChild :
SvxPixelCtl& mrParentWindow;
css::uno::Reference< css::accessibility::XAccessible > mxParent;
bool m_bPixelColorOrBG;//Pixel Color Or BackGround Color
- tools::Rectangle* mpBoundingBox;
+ tools::Rectangle maBoundingBox;
/// index of child in parent
long mnIndexInParent;
public:
diff --git a/svx/source/inc/svxrectctaccessiblecontext.hxx b/svx/source/inc/svxrectctaccessiblecontext.hxx
index 1a71e781d2ef..5cfe6f87d288 100644
--- a/svx/source/inc/svxrectctaccessiblecontext.hxx
+++ b/svx/source/inc/svxrectctaccessiblecontext.hxx
@@ -45,6 +45,7 @@
#include <comphelper/servicehelper.hxx>
#include <svx/rectenum.hxx>
#include <vcl/vclptr.hxx>
+#include <tools/gen.hxx>
namespace com { namespace sun { namespace star { namespace awt {
struct Point;
@@ -437,7 +438,7 @@ private:
mxParent;
/// Bounding box
- tools::Rectangle* mpBoundingBox;
+ tools::Rectangle maBoundingBox;
/// window of parent
const vcl::Window& mrParentWindow;
diff --git a/svx/source/sidebar/nbdtmg.cxx b/svx/source/sidebar/nbdtmg.cxx
index 6f9ef286743d..1e9f1b10e064 100644
--- a/svx/source/sidebar/nbdtmg.cxx
+++ b/svx/source/sidebar/nbdtmg.cxx
@@ -426,20 +426,14 @@ bool BulletsTypeMgr::IsCustomized(sal_uInt16 nIndex)
// Numbering Type lib
NumberingTypeMgr::NumberingTypeMgr()
: NBOTypeMgrBase()
- , pNumberSettingsArr (new NumberSettingsArr_Impl)
{
Init();
- pDefaultNumberSettingsArr = pNumberSettingsArr;
- pNumberSettingsArr = new NumberSettingsArr_Impl;
- //Initial the first time to store the default value. Then do it again for customized value
- Init();
+ maDefaultNumberSettingsArr = maNumberSettingsArr;
ImplLoad("standard.syb");
}
NumberingTypeMgr::~NumberingTypeMgr()
{
- delete pNumberSettingsArr;
- delete pDefaultNumberSettingsArr;
}
class theNumberingTypeMgr : public rtl::Static<NumberingTypeMgr, theNumberingTypeMgr> {};
@@ -472,7 +466,7 @@ void NumberingTypeMgr::Init()
pNumEntry->pNumSetting = pNew;
if ( i < 8 )
pNumEntry->sDescription = SVX_RESSTR( RID_SVXSTR_SINGLENUM_DESCRIPTIONS + i );
- pNumberSettingsArr->push_back(std::shared_ptr<NumberSettings_Impl>(pNumEntry));
+ maNumberSettingsArr.push_back(std::shared_ptr<NumberSettings_Impl>(pNumEntry));
}
}
catch(Exception&)
@@ -497,10 +491,10 @@ sal_uInt16 NumberingTypeMgr::GetNBOIndexForNumRule(SvxNumRule& aNum,sal_uInt16 m
OUString sLclSuffix = aFmt.GetSuffix();
sal_Int16 eNumType = aFmt.GetNumberingType();
- sal_uInt16 nCount = pNumberSettingsArr->size();
+ sal_uInt16 nCount = maNumberSettingsArr.size();
for(sal_uInt16 i = nFromIndex; i < nCount; ++i)
{
- NumberSettings_Impl* _pSet = (*pNumberSettingsArr)[i].get();
+ NumberSettings_Impl* _pSet = maNumberSettingsArr[i].get();
sal_Int16 eNType = _pSet->pNumSetting->nNumberType;
OUString sLocalPrefix = _pSet->pNumSetting->sPrefix;
OUString sLocalSuffix = _pSet->pNumSetting->sSuffix;
@@ -526,11 +520,11 @@ void NumberingTypeMgr::RelplaceNumRule(SvxNumRule& aNum, sal_uInt16 nIndex, sal_
SvxNumberFormat aFmt(aNum.GetLevel(nActLv));
SvxNumType eNumType = aFmt.GetNumberingType();
- sal_uInt16 nCount = pNumberSettingsArr->size();
+ sal_uInt16 nCount = maNumberSettingsArr.size();
if ( nIndex >= nCount )
return;
- NumberSettings_Impl* _pSet = (*pNumberSettingsArr)[nIndex].get();
+ NumberSettings_Impl* _pSet = maNumberSettingsArr[nIndex].get();
_pSet->pNumSetting->sPrefix = aFmt.GetPrefix();
_pSet->pNumSetting->sSuffix = aFmt.GetSuffix();
@@ -555,10 +549,10 @@ void NumberingTypeMgr::RelplaceNumRule(SvxNumRule& aNum, sal_uInt16 nIndex, sal_
void NumberingTypeMgr::ApplyNumRule(SvxNumRule& aNum, sal_uInt16 nIndex, sal_uInt16 mLevel, bool isDefault, bool isResetSize)
{
- if(pNumberSettingsArr->size() <= nIndex)
+ if(maNumberSettingsArr.size() <= nIndex)
return;
- NumberSettingsArr_Impl* pCurrentNumberSettingsArr=pNumberSettingsArr;
- if (isDefault) pCurrentNumberSettingsArr=pDefaultNumberSettingsArr;
+ NumberSettingsArr_Impl* pCurrentNumberSettingsArr = &maNumberSettingsArr;
+ if (isDefault) pCurrentNumberSettingsArr = &maDefaultNumberSettingsArr;
NumberSettings_Impl* _pSet = (*pCurrentNumberSettingsArr)[nIndex].get();
SvxNumType eNewType = _pSet->pNumSetting->nNumberType;
@@ -586,13 +580,13 @@ OUString NumberingTypeMgr::GetDescription(sal_uInt16 nIndex, bool isDefault)
{
OUString sRet;
sal_uInt16 nLength = 0;
- nLength = pNumberSettingsArr->size();
+ nLength = maNumberSettingsArr.size();
if ( nIndex >= nLength )
return sRet;
else
- sRet = (*pNumberSettingsArr)[nIndex]->sDescription;
- if (isDefault) sRet = (*pDefaultNumberSettingsArr)[nIndex]->sDescription;
+ sRet = maNumberSettingsArr[nIndex]->sDescription;
+ if (isDefault) sRet = maDefaultNumberSettingsArr[nIndex]->sDescription;
return sRet;
}
@@ -601,12 +595,12 @@ bool NumberingTypeMgr::IsCustomized(sal_uInt16 nIndex)
{
bool bRet = false;
sal_uInt16 nLength = 0;
- nLength = pNumberSettingsArr->size();
+ nLength = maNumberSettingsArr.size();
if ( nIndex >= nLength )
bRet = false;
else
- bRet = (*pNumberSettingsArr)[nIndex]->bIsCustomized;
+ bRet = maNumberSettingsArr[nIndex]->bIsCustomized;
return bRet;
}
More information about the Libreoffice-commits
mailing list