[Libreoffice-commits] core.git: sc/inc sc/source
Kohei Yoshida
kohei.yoshida at collabora.com
Thu Nov 10 12:17:43 UTC 2016
sc/inc/formulalogger.hxx | 5 +-
sc/source/core/tool/formulalogger.cxx | 73 ++++++++++++++++++++--------------
2 files changed, 47 insertions(+), 31 deletions(-)
New commits:
commit 6eb3d90aeb9438bd3249aaae32a445e81f278879
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date: Wed Nov 9 21:00:02 2016 -0500
Avoid writing to the log for the same group twice.
This can happen when the group calculation is disabled and falls
back to non-group calculations. And we only care about the first
entry in case of non-group calculation of grouped cells.
Change-Id: I545980acf8e35b4d0504aa2a77f86bdc85799e29
Reviewed-on: https://gerrit.libreoffice.org/30738
Reviewed-by: Kohei Yoshida <libreoffice at kohei.us>
Tested-by: Kohei Yoshida <libreoffice at kohei.us>
diff --git a/sc/inc/formulalogger.hxx b/sc/inc/formulalogger.hxx
index 0d992da..6265947 100644
--- a/sc/inc/formulalogger.hxx
+++ b/sc/inc/formulalogger.hxx
@@ -17,6 +17,7 @@
class ScFormulaCell;
class ScDocument;
class ScAddress;
+struct ScFormulaCellGroup;
namespace formula {
@@ -38,6 +39,7 @@ class FormulaLogger
std::vector<OUString> maMessages;
sal_Int32 mnNestLevel = 0;
+ const ScFormulaCellGroup* mpLastGroup = nullptr;
void writeAscii( const char* s );
void writeAscii( const char* s, size_t n );
@@ -70,7 +72,8 @@ public:
private:
GroupScope(
FormulaLogger& rLogger, const OUString& rPrefix,
- const ScDocument& rDoc, const ScFormulaCell& rCell );
+ const ScDocument& rDoc, const ScFormulaCell& rCell,
+ bool bOutputEnabled );
public:
GroupScope( GroupScope&& r );
diff --git a/sc/source/core/tool/formulalogger.cxx b/sc/source/core/tool/formulalogger.cxx
index a9480aa..036be66 100644
--- a/sc/source/core/tool/formulalogger.cxx
+++ b/sc/source/core/tool/formulalogger.cxx
@@ -64,56 +64,66 @@ struct FormulaLogger::GroupScope::Impl
OUString maPrefix;
std::vector<OUString> maMessages;
- bool mbCalcComplete = false;
+ bool mbCalcComplete;
+ bool mbOutputEnabled;
- Impl( FormulaLogger& rLogger, const OUString& rPrefix, const ScDocument& rDoc, const ScFormulaCell& rCell ) :
- mrLogger(rLogger), mrDoc(rDoc), maPrefix(rPrefix)
+ Impl( FormulaLogger& rLogger, const OUString& rPrefix, const ScDocument& rDoc,
+ const ScFormulaCell& rCell, bool bOutputEnabled ) :
+ mrLogger(rLogger), mrDoc(rDoc), maPrefix(rPrefix),
+ mbCalcComplete(false), mbOutputEnabled(bOutputEnabled)
{
++mrLogger.mnNestLevel;
- sc::TokenStringContext aCxt(&rDoc, rDoc.GetGrammar());
- OUString aFormula = rCell.GetCode()->CreateString(aCxt, rCell.aPos);
+ if (mbOutputEnabled)
+ {
+ sc::TokenStringContext aCxt(&rDoc, rDoc.GetGrammar());
+ OUString aFormula = rCell.GetCode()->CreateString(aCxt, rCell.aPos);
- mrLogger.write(maPrefix);
- mrLogger.writeNestLevel();
+ mrLogger.write(maPrefix);
+ mrLogger.writeNestLevel();
- mrLogger.writeAscii("-- enter (formula='");
- mrLogger.write(aFormula);
- mrLogger.writeAscii("', size=");
- mrLogger.write(rCell.GetSharedLength());
- mrLogger.writeAscii(")\n");
+ mrLogger.writeAscii("-- enter (formula='");
+ mrLogger.write(aFormula);
+ mrLogger.writeAscii("', size=");
+ mrLogger.write(rCell.GetSharedLength());
+ mrLogger.writeAscii(")\n");
+ }
}
~Impl()
{
- for (const OUString& rMsg : maMessages)
+ if (mbOutputEnabled)
{
+ for (const OUString& rMsg : maMessages)
+ {
+ mrLogger.write(maPrefix);
+ mrLogger.writeNestLevel();
+ mrLogger.writeAscii(" * ");
+ mrLogger.write(rMsg);
+ mrLogger.writeAscii("\n");
+ }
+
mrLogger.write(maPrefix);
mrLogger.writeNestLevel();
- mrLogger.writeAscii(" * ");
- mrLogger.write(rMsg);
- mrLogger.writeAscii("\n");
- }
-
- mrLogger.write(maPrefix);
- mrLogger.writeNestLevel();
- mrLogger.writeAscii("-- exit (");
- if (mbCalcComplete)
- mrLogger.writeAscii("calculation complete");
- else
- mrLogger.writeAscii("without calculation");
+ mrLogger.writeAscii("-- exit (");
+ if (mbCalcComplete)
+ mrLogger.writeAscii("calculation complete");
+ else
+ mrLogger.writeAscii("without calculation");
- mrLogger.writeAscii(")\n");
+ mrLogger.writeAscii(")\n");
- mrLogger.sync();
+ mrLogger.sync();
+ }
--mrLogger.mnNestLevel;
}
};
FormulaLogger::GroupScope::GroupScope(
- FormulaLogger& rLogger, const OUString& rPrefix, const ScDocument& rDoc, const ScFormulaCell& rCell ) :
- mpImpl(o3tl::make_unique<Impl>(rLogger, rPrefix, rDoc, rCell)) {}
+ FormulaLogger& rLogger, const OUString& rPrefix, const ScDocument& rDoc,
+ const ScFormulaCell& rCell, bool bOutputEnabled ) :
+ mpImpl(o3tl::make_unique<Impl>(rLogger, rPrefix, rDoc, rCell, bOutputEnabled)) {}
FormulaLogger::GroupScope::GroupScope( GroupScope&& r ) : mpImpl(std::move(r.mpImpl)) {}
@@ -327,7 +337,10 @@ FormulaLogger::GroupScope FormulaLogger::enterGroup(
aGroupPrefix += rCell.aPos.Format(ScRefFlags::VALID | ScRefFlags::TAB_3D, &rDoc, rDoc.GetAddressConvention());
aGroupPrefix += ": ";
- return GroupScope(*this, aGroupPrefix, rDoc, rCell);
+ bool bOutputEnabled = mpLastGroup != rCell.GetCellGroup().get();
+ mpLastGroup = rCell.GetCellGroup().get();
+
+ return GroupScope(*this, aGroupPrefix, rDoc, rCell, bOutputEnabled);
}
}
More information about the Libreoffice-commits
mailing list