sc/inc/addincol.hxx | 3 ++- sc/source/core/tool/addincol.cxx | 12 ++++++------ sc/source/core/tool/compiler.cxx | 6 ++++-- 3 files changed, 12 insertions(+), 9 deletions(-)
New commits: commit 86b2bfd34a4f07c54f03c8c8dfe48e0810834628 Author: Eike Rathke <er...@redhat.com> AuthorDate: Tue Aug 2 22:34:46 2022 +0200 Commit: Eike Rathke <er...@redhat.com> CommitDate: Wed Aug 3 00:08:18 2022 +0200 Avoid multiple conversions to LanguageTag, specifically in loops Change-Id: I47a969d7476df32e0c9d525d416467c59358d9ce Reviewed-on: https://gerrit.libreoffice.org/c/core/+/137712 Reviewed-by: Eike Rathke <er...@redhat.com> Tested-by: Jenkins diff --git a/sc/inc/addincol.hxx b/sc/inc/addincol.hxx index 2602624da287..14af12006637 100644 --- a/sc/inc/addincol.hxx +++ b/sc/inc/addincol.hxx @@ -42,6 +42,7 @@ namespace com::sun::star::uno { class XInterface; } class SfxObjectShell; class ScUnoAddInFuncData; class ScFuncDesc; +class LanguageTag; typedef std::unordered_map< OUString, const ScUnoAddInFuncData* > ScAddInHashMap; @@ -123,7 +124,7 @@ public: const OString& GetHelpId() const { return sHelpId; } const ::std::vector< LocalizedName >& GetCompNames() const; - bool GetExcelName( LanguageType eDestLang, OUString& rRetExcelName, + bool GetExcelName( const LanguageTag& rDestLang, OUString& rRetExcelName, bool bFallbackToAny = true ) const; void SetFunction( const css::uno::Reference< css::reflection::XIdlMethod>& rNewFunc, diff --git a/sc/source/core/tool/addincol.cxx b/sc/source/core/tool/addincol.cxx index 7ccf8b6c5c32..ea2184233f62 100644 --- a/sc/source/core/tool/addincol.cxx +++ b/sc/source/core/tool/addincol.cxx @@ -138,13 +138,12 @@ void ScUnoAddInFuncData::SetCompNames( ::std::vector< ScUnoAddInFuncData::Locali bCompInitialized = true; } -bool ScUnoAddInFuncData::GetExcelName( LanguageType eDestLang, OUString& rRetExcelName, bool bFallbackToAny ) const +bool ScUnoAddInFuncData::GetExcelName( const LanguageTag& rDestLang, OUString& rRetExcelName, bool bFallbackToAny ) const { const ::std::vector<LocalizedName>& rCompNames = GetCompNames(); if ( !rCompNames.empty() ) { - LanguageTag aLanguageTag( eDestLang); - const OUString& aSearch( aLanguageTag.getBcp47()); + const OUString& aSearch( rDestLang.getBcp47()); // First, check exact match without fallback overhead. ::std::vector<LocalizedName>::const_iterator itNames = std::find_if(rCompNames.begin(), rCompNames.end(), @@ -157,7 +156,7 @@ bool ScUnoAddInFuncData::GetExcelName( LanguageType eDestLang, OUString& rRetExc // Second, try match of fallback search with fallback locales, // appending also 'en-US' and 'en' to search if not queried. - ::std::vector< OUString > aFallbackSearch( aLanguageTag.getFallbackStrings( true)); + ::std::vector< OUString > aFallbackSearch( rDestLang.getFallbackStrings( true)); if (aSearch != "en-US") { aFallbackSearch.emplace_back("en-US"); @@ -582,7 +581,7 @@ bool ScUnoAddInCollection::GetExcelName( const OUString& rCalcName, { const ScUnoAddInFuncData* pFuncData = GetFuncData( rCalcName ); if ( pFuncData ) - return pFuncData->GetExcelName( eDestLang, rRetExcelName); + return pFuncData->GetExcelName( LanguageTag( eDestLang), rRetExcelName); return false; } @@ -770,6 +769,7 @@ void ScUnoAddInCollection::ReadFromAddIn( const uno::Reference<uno::XInterface>& if ( !pEnglishHashMap ) pEnglishHashMap.reset( new ScAddInHashMap ); + const LanguageTag aEnglishLanguageTag(LANGUAGE_ENGLISH_US); const uno::Reference<reflection::XIdlMethod>* pArray = aMethods.getConstArray(); for (tools::Long nFuncPos=0; nFuncPos<nNewCount; nFuncPos++) { @@ -932,7 +932,7 @@ void ScUnoAddInCollection::ReadFromAddIn( const uno::Reference<uno::XInterface>& pData ); OUString aEnglishName; - if (!pData->GetExcelName( LANGUAGE_ENGLISH_US, aEnglishName, false /*bFallbackToAny*/)) + if (!pData->GetExcelName( aEnglishLanguageTag, aEnglishName, false /*bFallbackToAny*/)) SAL_WARN("sc.core", "no English name for " << aLocalName << " " << aFuncName); else { diff --git a/sc/source/core/tool/compiler.cxx b/sc/source/core/tool/compiler.cxx index 14ae448f06b9..0de38ad001b2 100644 --- a/sc/source/core/tool/compiler.cxx +++ b/sc/source/core/tool/compiler.cxx @@ -148,6 +148,7 @@ void ScCompiler::fillFromAddInCollectionUpperName( const NonConstOpCodeMapPtr& x void ScCompiler::fillFromAddInCollectionEnglishName( const NonConstOpCodeMapPtr& xMap ) const { + const LanguageTag aEnglishLanguageTag(LANGUAGE_ENGLISH_US); ScUnoAddInCollection* pColl = ScGlobal::GetAddInCollection(); tools::Long nCount = pColl->GetFuncCount(); for (tools::Long i=0; i < nCount; ++i) @@ -156,7 +157,7 @@ void ScCompiler::fillFromAddInCollectionEnglishName( const NonConstOpCodeMapPtr& if (pFuncData) { OUString aName; - if (pFuncData->GetExcelName( LANGUAGE_ENGLISH_US, aName)) + if (pFuncData->GetExcelName( aEnglishLanguageTag, aName)) xMap->putExternalSoftly( aName, pFuncData->GetOriginalName()); else xMap->putExternalSoftly( pFuncData->GetUpperName(), @@ -5505,6 +5506,7 @@ void ScCompiler::fillAddInToken(::std::vector< css::sheet::FormulaOpCodeMapEntry sheet::FormulaOpCodeMapEntry aEntry; aEntry.Token.OpCode = ocExternal; + const LanguageTag aEnglishLanguageTag(LANGUAGE_ENGLISH_US); ScUnoAddInCollection* pColl = ScGlobal::GetAddInCollection(); const tools::Long nCount = pColl->GetFuncCount(); for (tools::Long i=0; i < nCount; ++i) @@ -5515,7 +5517,7 @@ void ScCompiler::fillAddInToken(::std::vector< css::sheet::FormulaOpCodeMapEntry if ( _bIsEnglish ) { OUString aName; - if (pFuncData->GetExcelName( LANGUAGE_ENGLISH_US, aName)) + if (pFuncData->GetExcelName( aEnglishLanguageTag, aName)) aEntry.Name = aName; else aEntry.Name = pFuncData->GetUpperName();