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.yosh...@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 <libreoff...@kohei.us> Tested-by: Kohei Yoshida <libreoff...@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); } } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits