Kaydet (Commit) def066bb authored tarafından Stephan Bergmann's avatar Stephan Bergmann

fdo#67109: Order of XConstantsTypeDescription.getConstants is unspecified

...it looks like it used to be the order the constants appeared in the .idl
file, while now it happens to be the lexicographical order of the constant's
names.  For all the constant groups in com.sun.star.report the order expected by
the code appears to be the order of the constant's numeric values (which happens
to coincide with the order of appearance in the .idl files), so explicitly sort
them that way.

Change-Id: I550401b2742fffb7c96a7787498967a7cd78fff8
üst 876ae5ed
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
#include <com/sun/star/util/Date.hpp> #include <com/sun/star/util/Date.hpp>
#include <com/sun/star/util/Time.hpp> #include <com/sun/star/util/Time.hpp>
#include <comphelper/sequence.hxx> #include <comphelper/sequence.hxx>
#include <comphelper/sequenceasvector.hxx>
#include <connectivity/dbconversion.hxx> #include <connectivity/dbconversion.hxx>
#include "formresid.hrc" #include "formresid.hrc"
#include <tools/debug.hxx> #include <tools/debug.hxx>
...@@ -223,6 +224,24 @@ uno::Any SAL_CALL StringRepresentation::convertToPropertyValue(const OUString & ...@@ -223,6 +224,24 @@ uno::Any SAL_CALL StringRepresentation::convertToPropertyValue(const OUString &
return aReturn; return aReturn;
} }
namespace {
// This comparison functor assumes an underlying set of constants with pairwise
// unequal values that are all of UNO SHORT or LONG type:
struct CompareConstants {
bool operator ()(
css::uno::Reference< css::reflection::XConstantTypeDescription > const &
c1,
css::uno::Reference< css::reflection::XConstantTypeDescription > const &
c2) const
{
return c1->getConstantValue().get<sal_Int32>()
< c2->getConstantValue().get<sal_Int32>();
}
};
}
// lang::XInitialization: // lang::XInitialization:
void SAL_CALL StringRepresentation::initialize(const uno::Sequence< uno::Any > & aArguments) throw (uno::RuntimeException, uno::Exception) void SAL_CALL StringRepresentation::initialize(const uno::Sequence< uno::Any > & aArguments) throw (uno::RuntimeException, uno::Exception)
{ {
...@@ -244,7 +263,11 @@ void SAL_CALL StringRepresentation::initialize(const uno::Sequence< uno::Any > & ...@@ -244,7 +263,11 @@ void SAL_CALL StringRepresentation::initialize(const uno::Sequence< uno::Any > &
uno::UNO_QUERY_THROW ); uno::UNO_QUERY_THROW );
m_xTypeDescription.set( xTypeDescProv->getByHierarchicalName( sConstantName ), uno::UNO_QUERY_THROW ); m_xTypeDescription.set( xTypeDescProv->getByHierarchicalName( sConstantName ), uno::UNO_QUERY_THROW );
m_aConstants = m_xTypeDescription->getConstants(); comphelper::SequenceAsVector<
uno::Reference< reflection::XConstantTypeDescription > >
cs(m_xTypeDescription->getConstants());
std::sort(cs.begin(), cs.end(), CompareConstants());
cs >> m_aConstants;
} }
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment