summaryrefslogtreecommitdiff
path: root/formula
AgeCommit message (Collapse)AuthorFilesLines
2018-08-01add operator+=(OUStringBuffer) method to OUStringNoel Grandin1-1/+1
to reduce needless object creation and copying some more And fix what looks like a bug in CSS hex color parsing at line 609 in sw/../parcss1.cxx that has been there since commit 7b0b5cdfeed656b279bc32cd929630d5fc25878b "initial import" Change-Id: Ibad42b23721a56493bd1edcd7165e6104494a5c3 Reviewed-on: https://gerrit.libreoffice.org/58357 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2018-07-31try to detect that a formula does not contain any implicit intersectionLuboš Luňák1-33/+31
Commit 67444cbe disabled svDoubleRef completely for OpenCL, which means many formulas weren't handled by OpenCL even if the implicit intersection problems are quite rare. This patch tries to detect formulas implicit intersections in formulas and if it's certain that a formula does not contain one, then it's ok to use OpenCL with svDoubleRef. The detection is done by having ScCompiler analyze each opcode call and its parameters, which should provide sufficient information to know if implicit intersection can take place or not. The extra compilation can be avoided by using OpenCL's compilation and doing the svDoubleRef conversion later on the RPN code, to be done later. This is opt-in, so if unsure don't do anything, if it turns out that some opcode needs special handling, it can be simply added. Change-Id: Iaa52fa7eb8b14dc8c2b92384a21e2ab8efe0ddd7 Reviewed-on: https://gerrit.libreoffice.org/57959 Tested-by: Jenkins Reviewed-by: Luboš Luňák <l.lunak@collabora.com>
2018-07-31protect against accessing before the start of pCode in FormulaCompilerLuboš Luňák1-1/+6
If the expression is bad, such as in sc/qa/.../sheet.fods, 'pCode - 1' may actually refer before the array of tokens, since nothing has been added yet. So make that element nullptr. This is a bit hackish, but checking in every place that pCode is valid seems tedious. Change-Id: Ia099a50583f60d93a2e20b1f7b5e44b0121a275b Reviewed-on: https://gerrit.libreoffice.org/58198 Reviewed-by: Michael Meeks <michael.meeks@collabora.com> Tested-by: Jenkins Reviewed-by: Luboš Luňák <l.lunak@collabora.com>
2018-07-31even more implicit intersection computationLuboš Luňák1-0/+64
This extends 60c5ca1b87 to do implicit intersection while generating RPN code for even more opcodes. This will serve as a basis for making it possible to know when ScGroupTokenConverter can convert svDoubleRef to a matrix without the problems mentioned in its convert() method. Change-Id: I8dfeefc026418bd5644bd266ad94c31f670e811c Reviewed-on: https://gerrit.libreoffice.org/57958 Tested-by: Jenkins Reviewed-by: Michael Meeks <michael.meeks@collabora.com>
2018-07-30Add missing sal/log.hxx headersGabor Kelemen5-0/+5
rtl/string.hxx and rtl/ustring.hxx both unnecessarily #include <sal/log.hxx> (and don't make use of it themselves), but many other files happen to depend on it. This is a continuation of commit 6ff2d84ade299cb3d14d4110e4cf1a4b8070c030 to be able to remove those unneeded includes. This commit adds missing headers to every file found by: grep -FwL sal/log.hxx $(git grep -Elw 'SAL_INFO|SAL_INFO_IF|SAL_WARN|SAL_WARN_IF|SAL_DETAIL_LOG_STREAM|SAL_WHERE|SAL_STREAM|SAL_DEBUG') to directories from filter to jvmfwk Change-Id: I2a73d63f2aaef5f26d7d08957daaa8a30b412ac5 Reviewed-on: https://gerrit.libreoffice.org/58204 Tested-by: Jenkins Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
2018-07-18Do not force all string results to be recalculated if no style setEike Rathke1-0/+1
Results are forced to recalculate for cells with General format in case they need to inherit a format that then can be set. However, a General format will never lead to some other format being set for any string results and almost all string result cells will have General format because the string is already what is being displayed. So for formula cells with a string result available do not allow to use ScFormulaCell::SetNeedNumberFormat() forcing the need to recalculate. This popped up during intercepting for tdf#118735 when the formula cell containing a WEBSERVICE() call is set dirty, through CompileXMLHandler::operator()(...) if (pCell->NeedsNumberFormat()) pCell->SetDirtyVar(); Which again, as WEBSERVICE() has to be recalculated to populate the link manager, made it necessary to add that to ScRecalcMode::ONLOAD_LENIENT (which it should already had been before (when that was ONLOAD), but no harm in this case). Change-Id: I0dc2cdfe35c56d9843f0edd24a6d14e3de79f7ef Reviewed-on: https://gerrit.libreoffice.org/57700 Reviewed-by: Eike Rathke <erack@redhat.com> Tested-by: Jenkins
2018-07-18loplugin:mergeclasses merge IFormulaToken into FormulaTokenNoel Grandin4-16/+17
Change-Id: I5dbf870ff27f1039e24f4350787cf5bfc5f4ccaf Reviewed-on: https://gerrit.libreoffice.org/57487 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2018-07-13Rework FormulaTokenArray ScRecalcMode in preparation for tdf#94925Eike Rathke2-16/+29
Strictly order the exclusive bits by priority, let AddRecalcMode() handle all sets except forced ALWAYS or NORMAL. Introduce ONLOAD_LENIENT and ONLOAD_MUST splitting ONLOAD to be able to distinguish later during OOXML import. Change-Id: I188de2d53a2d54df32d24eeeb148c4f9e87e7cfc Reviewed-on: https://gerrit.libreoffice.org/57402 Reviewed-by: Eike Rathke <erack@redhat.com> Tested-by: Jenkins
2018-06-26More Implicit intersection computationDennis Francis2-6/+20
Do implicit intersection computation for for single parameter functions while generating RPN token array when the argument is a doubleref with relative row references. This optimization is not done when under forced array mode or matrix formula mode. The computation logic was already present in ScInterpreter, so factored it out and reused. This also adds unit tests to ensure correctness of II computation for various cases. Change-Id: I509c3f6f811aa036b1dc3296e8f68904b26c3c49 Reviewed-on: https://gerrit.libreoffice.org/53885 Tested-by: Jenkins Reviewed-by: Eike Rathke <erack@redhat.com>
2018-06-05tdf#42949 remove unused compheler includes ..Jochen Nitschke2-2/+0
and fix the fallout Change-Id: I15bc5d626f4d157cbc69a87392078b41e621d14e Reviewed-on: https://gerrit.libreoffice.org/54882 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
2018-05-18tdf#116511: Drop questionable check for more keyboard inputTor Lillqvist1-23/+15
For some reason, on macOS, when this is being invoked through the shortcut, Application::AnyInput( VclInputFlags::KEYBOARD ) returns true, so the code thinks that there is more keyboard input and won't call UpdateTokenArray(), which sets m_pTokenArray. I think that optmisation is questionable, especially as the exact semantics of our event loop API, like Application::AnyInput(), is under-defined and probably can and will change in various minor ways when people work on improving it on the Mac (and perhaps other platforms, too). (The event loop etc certainly needs improvement on the Mac. Consider the "WindowServer grows to tens of gigabytes when running make check" issue which is closely related. Unfortunately nobody has come up with a simple fix for that yet, exactly because we use our event loop related APIs in so imaginative ways all over the code, and fixing one thing usually breaks another.) Change-Id: I865d46e5ee69609ad58bc915ff949e0f3602d8f5 Reviewed-on: https://gerrit.libreoffice.org/54448 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Tor Lillqvist <tml@collabora.com>
2018-05-17disable also ocStyle for Calc's threadingLuboš Luňák2-1/+27
The ocStyle token is only in the RPN tokens, the raw tokens array contains only ocName, so it's necessary to check also RPN tokens. Prevents a crash with tdf#91220/1 because of ScInterpreter::ScStyle() causing a SfxBroadcaster::Broadcast() call. Change-Id: I7fa04114b698918569014322c721751ab3d8c62f Reviewed-on: https://gerrit.libreoffice.org/54326 Reviewed-by: Michael Meeks <michael.meeks@collabora.com> Tested-by: Jenkins <ci@libreoffice.org>
2018-05-17loplugin:unusedfields in formula..registryNoel Grandin1-10/+8
Change-Id: I031654d8bb4f1788d364ef4f8d3bf7a05fadb148 Reviewed-on: https://gerrit.libreoffice.org/54454 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2018-05-14loplugin:useuniqueptr in FormulaTokenArrayNoel Grandin1-7/+8
Change-Id: I5716295d2f0c88c6daf0570941d5dd4c5ff03a33 Reviewed-on: https://gerrit.libreoffice.org/54168 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2018-04-28tdf#114479: compute implicit sum ranges for ocSumIf,ocAverageIf...Dennis Francis1-0/+20
and update the sum-range token in RPN array while creation of the RPN array itself. + Adds unit tests. + In ScParallelismTest unit test, enable threading in its setUp() method and restore the original setting in tearDown(). Change-Id: Iee9b7759210a82950181a418eb92766a6cf891fc Reviewed-on: https://gerrit.libreoffice.org/49465 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Eike Rathke <erack@redhat.com>
2018-04-14look for check buttons without underlinesCaolán McNamara1-0/+1
Change-Id: Ia9963190cf3dccbfa82951a3f2c0e29e00171429 Reviewed-on: https://gerrit.libreoffice.org/52847 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
2018-04-11new loplugin:unusedvariablemoreNoel Grandin1-3/+0
collection of heuristics to look for local variables that are never read from i.e. do not contribute to the surrounding logic This is an expensive plugin, since it walks up the parent tree, so it is off by default. Change-Id: Ib8ba292241bd16adf299e8bba4502cb473513a06 Reviewed-on: https://gerrit.libreoffice.org/52450 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2018-04-03pass area param to DBG_UNHANDLED_EXCEPTIONNoel Grandin1-2/+2
and update sallogareas plugin to enforce this Change-Id: Id0782c8a1f619372e10d931aec3c6a4743a4c86a Reviewed-on: https://gerrit.libreoffice.org/52249 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2018-04-01remove unused processfactory.hxx includesJochen Nitschke1-1/+0
and fix fallout Change-Id: Id06bf31f2075111e426ba40c84c885ae70697bee Reviewed-on: https://gerrit.libreoffice.org/52206 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Jochen Nitschke <j.nitschke+logerrit@ok.de>
2018-03-20Avoid creating a compiler for matrix check if there is no matrix supportEike Rathke1-5/+4
... as indicated by m_pBtnMatrix hidden for reportdesign. tdf#116468 cleansing. Change-Id: I1727dcc9875f0728805bac63cc6c1f1533394c6c
2018-03-20Resolves: tdf#116468 do not check array/matrix context for reportdesignEike Rathke1-10/+19
It doesn't have any, and worse, there's no currently active OpCode symbol map that could be used to create strings from tokens. Regression from commit bf1ffc64128f5b96d7c2fcc7adc81cbc25e232fd Date: Sun Jul 16 15:18:09 2017 +0200 FormulaDlg_Impl::UpdateValues: evaluate in force-array context if present Change-Id: I77c2035fdd0926f67fcc85e7090f30485b4e312c
2018-03-17Use for-range loops in embeddedobj, embedserv and formulaJulien Nabet2-10/+6
Change-Id: I56e1bace8ab8312524e681d3865a1a89d523812d Reviewed-on: https://gerrit.libreoffice.org/51459 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Julien Nabet <serval2412@yahoo.fr>
2018-03-06Resolves: tdf#116215 fewer array of references cases, tdf#58874 relatedEike Rathke2-1/+6
In particular if in any ForceArray context use the matrix result instead of the array of references list. Change-Id: I72328a690760637f6d31fadba447641c64711a67
2018-03-05Resolves: tdf#116188 set min version on all .ui files to 3.18Caolán McNamara4-4/+4
which is already the min for the runtime Change-Id: Ifebe099f1f94a36f65a31989689400327a823dcd Reviewed-on: https://gerrit.libreoffice.org/50776 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
2018-03-01drop old tools/gen methods in accessibility..formulaNoel Grandin1-1/+1
Change-Id: I075e29173945200854f2ef8e420867871659766a Reviewed-on: https://gerrit.libreoffice.org/50446 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2018-02-26use less RGB_COLORDATANoel Grandin1-1/+1
part of removing ColorData Change-Id: If31b5b88545529863377e9a178f45f4516bf6cbb Reviewed-on: https://gerrit.libreoffice.org/50345 Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk> Tested-by: Noel Grandin <noel.grandin@collabora.co.uk>
2018-02-25convert all help responses to gtk's -11Caolán McNamara1-3/+3
and ok responses to gtk's -5 and cancel responses to gtk's -6 and close responses to gtk's -7 and yes responses to gtk's -8 and no responses to gtk's -9 Change-Id: Ia1a261a3a711ed9f5d8c0b0c639897c3064bb08c Reviewed-on: https://gerrit.libreoffice.org/50206 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
2018-02-23no point in a checkbutton having a responseCaolán McNamara1-1/+0
Change-Id: I2376336617d5ef324e03fa8a93137d3273dabc60 Reviewed-on: https://gerrit.libreoffice.org/50195 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
2018-02-20Resolves: tdf#115879 treat NOT as the 1-parameter function that it isEike Rathke2-32/+6
... instead of a low precedence unary operator with an odd behaviour. This wasn't documented nor specified but maybe needed for old(est) binary file format compatibility. Generate an error for anything else than a context of a function with one argument. There might be some corner cases of documents where some old usage leads to error now, of which some may have worked by accident, but some not as intended. Related, the internal not exposed (but available) NEG was classified similar as a unary operator but corectly handled as function at all places. Classified as an ordinary 1-parameter function as well. Change-Id: I3d84a6382243c8d64313e37346f81c857e71be95 Reviewed-on: https://gerrit.libreoffice.org/50055 Reviewed-by: Eike Rathke <erack@redhat.com> Tested-by: Eike Rathke <erack@redhat.com>
2018-02-16Revert "loplugin:changetoolsgen in filter..framework" and reapply pluginNoel Grandin1-1/+1
because I (a) forgot to insert parentheses which changes the meaning of some expressions and (b) I now use the AdjustFoo calls when changing unary operations, which reads much better This reverts commit bf8a6cacd06d7c1961b5db8cc79ee4bbdb342e43. Change-Id: I4b5a9bf0c38ee1b57af91e6b7f184f1e8807f6f7 Reviewed-on: https://gerrit.libreoffice.org/49843 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2018-02-14loplugin:changetoolsgen in filter..frameworkNoel Grandin1-1/+1
Change-Id: I622da8a0c096c74efd97326451c4576b230f0483 Reviewed-on: https://gerrit.libreoffice.org/49701 Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk> Tested-by: Noel Grandin <noel.grandin@collabora.co.uk>
2018-02-14Fix typosAndrea Gelmini1-1/+1
Change-Id: I76d50754a660e006e5913b89caa491cc21d6f9dc Reviewed-on: https://gerrit.libreoffice.org/49588 Reviewed-by: Julien Nabet <serval2412@yahoo.fr> Tested-by: Julien Nabet <serval2412@yahoo.fr>
2018-02-12Use FormulaCompiler::IsOpCodeJumpCommand() where applicableEike Rathke1-5/+5
Change-Id: I295e842da0192c21d318357caa574062085acd9d
2018-01-16Fix typosAndrea Gelmini1-1/+1
Change-Id: I078626eaa3155cc429320cc8c1532003b382b22a Reviewed-on: https://gerrit.libreoffice.org/47855 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Julien Nabet <serval2412@yahoo.fr>
2018-01-15More loplugin:cstylecast: formulaStephan Bergmann1-1/+1
Change-Id: I0a6f4eaf49282a6aa74b24ea62736065d1786f58
2018-01-15convert a<b?a:b to std::min(a,b)Noel Grandin1-2/+2
with something like git grep -nP '(.*)\s*<\s*(.*)\s*\?\s*\g1\s*:\s*\g2' -- *.?xx Change-Id: Id5078b35961847feb78a66204fdb7598ee63fd23 Note: we also convert a>b?b:a Reviewed-on: https://gerrit.libreoffice.org/47736 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2018-01-12More loplugin:cstylecast: formulaStephan Bergmann4-10/+10
auto-rewrite with <https://gerrit.libreoffice.org/#/c/47798/> "Enable loplugin:cstylecast for some more cases" plus solenv/clang-format/reformat-formatted-files Change-Id: I924954aefd471386805082f11a2d33db2746c49a
2017-12-22lokdialog: Allow switching language of some of the ResMgr's.Jan Holesovsky1-2/+1
This way, it is possible to have all the strings translated in dialogs even when different users use different languages. [It was already possible to have different languages previously, but not everything in the dialog has switched - like the buttons at the bottom of the dialogs etc.] Change-Id: I29a5ae6d31a370eec60397884200b684ec1bf5b9 Reviewed-on: https://gerrit.libreoffice.org/46417 Reviewed-by: Michael Meeks <michael.meeks@collabora.com> Tested-by: Michael Meeks <michael.meeks@collabora.com> Reviewed-on: https://gerrit.libreoffice.org/46979 Tested-by: Jenkins <ci@libreoffice.org>
2017-12-20loplugin:unusedindexMike Kaganski1-7/+5
Change-Id: Id69dcfde5c8b5d39c272916e7c1bcc649f720888 Reviewed-on: https://gerrit.libreoffice.org/46829 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2017-12-19wrap scoped enum around css::util::NumberFormatNoel Grandin2-20/+20
Change-Id: Icab5ded8bccdb95f79b3fa35ea164f47919c68fa Reviewed-on: https://gerrit.libreoffice.org/46339 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Eike Rathke <erack@redhat.com>
2017-12-14No need to keep these whitelisted functions decorated with SAL_CALLStephan Bergmann1-3/+3
The only effect SAL_CALL effectively has on LO-internal code is to change non- static member functions from __thiscall to __cdecl in MSVC (where all other functions are __cdecl by default, anyway). (For 3rd-party code, it could be argued that SAL_CALL is useful on function declarations in the URE stable interface other than non-static member functions, too, in case 3rd-party code uses a compiler switch to change the default calling convention to something other than __cdecl. But loplugin:salcall exempts the URE stable interface, anyway.) One could argue that SAL_CALL, even if today it effectively only affects non- static member functions in MSVC, could be extended in the future to affect more functions on more platforms. However, the current code would already not support that. For example, 3af500580b1c82eabd60335c9ebc458a3f68850c "loplugin:salcall fix functions" changed FrameControl_createInstance in UnoControls/source/base/registercontrols.cxx to no longer be SAL_CALL, even though its address (in ctl_component_getFacrory, in the same file) is passed to cppuhelper::createSingleFactory as an argument of type cppu::ComponentInstantiation, which is a pointer to SAL_CALL function. Change-Id: I3acbf7314a3d7868ed70e35bb5c47bc11a0b7ff6 Reviewed-on: https://gerrit.libreoffice.org/46436 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2017-12-11loplugin:salcall fix functionsNoel Grandin1-1/+1
since cdecl is the default calling convention on Windows for such functions, the annotation is redundant. Change-Id: I1a85fa27e5ac65ce0e04a19bde74c90800ffaa2d Reviewed-on: https://gerrit.libreoffice.org/46164 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2017-12-08loplugin:salcall vcl builder methodsNoel Grandin1-1/+1
these don't need to be SAL_CALL, and the function pointer definition was not annotated SAL_CALL either Change-Id: I3082d3d34c53dc723ad8d2083010fd0de0e89a1e Reviewed-on: https://gerrit.libreoffice.org/46067 Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk> Tested-by: Noel Grandin <noel.grandin@collabora.co.uk>
2017-12-01loplugin:unusedfieldsNoel Grandin1-8/+8
The mnRequestedLength fields in formula/ were introduced in commit 6ef6dd0122b8e44d8547ec31f40def42173e4e41 Author: Kohei Yoshida <kohei.yoshida@collabora.com> Date: Wed Feb 26 14:32:57 2014 -0500 Store the length of originally requested array size prior to trimming. but then partially removed in commit d7f1f91b194da1cb96e66268ce7ef38602aa5754 Author: Noel Grandin <noel@peralex.com> Date: Mon Mar 3 13:29:43 2014 +0200 remove unused code in formula/vectortoken Change-Id: Ic56b6e42682131ee45df7838867145f980f3d601 Reviewed-on: https://gerrit.libreoffice.org/45571 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2017-11-21Assert also new FormulaToken::SetDoubleType() virtual dummyEike Rathke1-1/+1
Change-Id: I4532d0329dc7cd2609bc96abba140aba3f3d36f3
2017-11-21cache FormulaToken for doublesDennis Francis1-0/+10
Change-Id: Ic0b4dff6f03ef3f88bd150e798fa2d83dfb0f486
2017-11-15Assert all FormulaToken::Set...() virtual dummy methodsEike Rathke1-9/+10
Attempting to set on a wrong token type can never be right. Change-Id: I788221505a628f40dfbb9c2ee7c92ac789529303
2017-11-02loplugin:finalclasses in formsNoel Grandin3-9/+3
Change-Id: I0f849fd104699e2861aaba2d4be38168e80703b0 Reviewed-on: https://gerrit.libreoffice.org/44189 Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk> Tested-by: Noel Grandin <noel.grandin@collabora.co.uk>
2017-10-26vcl: make MapMode constructor explicitMichael Stahl3-3/+3
Insert constructor everywhere, except a couple places that apparently want to compare GetMapUnit(). Change-Id: I1910deb60562e5e949203435e827057f70a3f988
2017-10-23loplugin:includeform: formulaStephan Bergmann16-49/+49
Change-Id: I50b898e477e0842577bcc648540e7f4b66d5b693