cppuhelper/source/typemanager.cxx | 47 ++++++++++++++++++++------------------ cppuhelper/source/typemanager.hxx | 1 2 files changed, 26 insertions(+), 22 deletions(-)
New commits: commit 19d2de7d5561073f81112974569b98b93d6b7334 Author: Stephan Bergmann <sberg...@redhat.com> Date: Fri Apr 26 10:37:56 2013 +0200 Fix TypeManager * Make use of unoidl::Manager::createCursor in TypeManager::createTypeDescriptionEnumeration * ConstantDescription::getName returned unprefixed name Change-Id: I4b2e1ce6a240d8f6292375ad36f71e0b19699367 diff --git a/cppuhelper/source/typemanager.cxx b/cppuhelper/source/typemanager.cxx index 4185ddc..8044d82 100644 --- a/cppuhelper/source/typemanager.cxx +++ b/cppuhelper/source/typemanager.cxx @@ -64,6 +64,10 @@ using rtl::OUString; namespace { +rtl::OUString makePrefix(rtl::OUString const & name) { + return name.isEmpty() ? name : name + "."; +} + css::uno::Any resolveTypedefs(css::uno::Any const & type) { for (css::uno::Any t(type);;) { css::uno::Reference< css::reflection::XIndirectTypeDescription > ind( @@ -182,7 +186,7 @@ ModuleDescription::getMembers() throw (css::uno::RuntimeException) { css::uno::Sequence< css::uno::Reference< css::reflection::XTypeDescription > > s(n); for (sal_Int32 i = 0; i != n; ++i) { - s[i] = manager_->resolve(name_ + "." + names[i]); + s[i] = manager_->resolve(makePrefix(name_) + names[i]); } return s; } catch (unoidl::FileFormatException & e) { @@ -1008,7 +1012,8 @@ class ConstantDescription: public cppu::WeakImplHelper1< css::reflection::XConstantTypeDescription > { public: - explicit ConstantDescription( + ConstantDescription( + rtl::OUString const & constantGroupName, unoidl::ConstantGroupEntity::Member const & member); private: @@ -1030,8 +1035,9 @@ private: }; ConstantDescription::ConstantDescription( + rtl::OUString const & constantGroupName, unoidl::ConstantGroupEntity::Member const & member): - name_(member.name) + name_(makePrefix(constantGroupName) + member.name) { switch (member.value.type) { case unoidl::ConstantValue::TYPE_BOOLEAN: @@ -1109,7 +1115,7 @@ ConstantGroupDescription::getConstants() throw (css::uno::RuntimeException) { css::uno::Sequence< css::uno::Reference< css::reflection::XConstantTypeDescription > > s(n); for (sal_Int32 i = 0; i != n; ++i) { - s[i] = new ConstantDescription(entity_->getMembers()[i]); + s[i] = new ConstantDescription(name_, entity_->getMembers()[i]); } return s; } @@ -1778,7 +1784,7 @@ void Enumeration::findNextMatch() { if (deep_) { positions_.push( Position( - name + ".", + makePrefix(name), static_cast< unoidl::ModuleEntity * >( ent.get())->createCursor())); } @@ -1804,7 +1810,7 @@ void Enumeration::findNextMatch() { if (deep_ && matches(css::uno::TypeClass_CONSTANT)) { positions_.push( Position( - name + ".", + makePrefix(name), static_cast< unoidl::ConstantGroupEntity * >( ent.get()))); } @@ -1904,7 +1910,8 @@ css::uno::Any cppuhelper::TypeManager::find(rtl::OUString const & name) { } i = name.lastIndexOf('.'); if (i != -1) { - ent = findEntity(name.copy(0, i)); + rtl::OUString parent(name.copy(0, i)); + ent = findEntity(parent); if (ent.is()) { switch (ent->getSort()) { case unoidl::Entity::SORT_ENUM_TYPE: @@ -1913,6 +1920,7 @@ css::uno::Any cppuhelper::TypeManager::find(rtl::OUString const & name) { name.copy(i + 1)); case unoidl::Entity::SORT_CONSTANT_GROUP: return getConstant( + parent, static_cast< unoidl::ConstantGroupEntity * >(ent.get()), name.copy(i + 1)); default: @@ -2054,29 +2062,23 @@ cppuhelper::TypeManager::createTypeDescriptionEnumeration( css::reflection::InvalidTypeNameException, css::uno::RuntimeException) { - //TODO: This fails for modules spread across multiple providers, esp. for - // the empty moduleName - rtl::Reference< unoidl::Entity > ent(findEntity(moduleName)); - if (!ent.is()) { - throw css::reflection::NoSuchTypeNameException( - moduleName, static_cast< cppu::OWeakObject * >(this)); - } - if (ent->getSort() != unoidl::Entity::SORT_MODULE) { - throw css::reflection::InvalidTypeNameException( - moduleName, static_cast< cppu::OWeakObject * >(this)); - } rtl::Reference< unoidl::MapCursor > cursor; try { - cursor = static_cast< unoidl::ModuleEntity * >(ent.get())-> - createCursor(); + cursor = manager_->createCursor(moduleName); } catch (unoidl::FileFormatException & e) { throw css::uno::DeploymentException( ("unoidl::FileFormatException for <" + e.getUri() + ">: " + e.getDetail()), static_cast< cppu::OWeakObject * >(this)); } + if (!cursor.is()) { + //TODO: css::reflection::InvalidTypeNameException if moduleName names a + // non-module + throw css::reflection::NoSuchTypeNameException( + moduleName, static_cast< cppu::OWeakObject * >(this)); + } return new Enumeration( - this, moduleName + ".", cursor, types, + this, makePrefix(moduleName), cursor, types, depth == css::reflection::TypeDescriptionSearchDepth_INFINITE); } @@ -2338,6 +2340,7 @@ css::uno::Any cppuhelper::TypeManager::getEnumMember( } css::uno::Any cppuhelper::TypeManager::getConstant( + rtl::OUString const & constantGroupName, rtl::Reference< unoidl::ConstantGroupEntity > entity, rtl::OUString const & member) { @@ -2348,7 +2351,7 @@ css::uno::Any cppuhelper::TypeManager::getConstant( if (i->name == member) { return css::uno::makeAny< css::uno::Reference< css::reflection::XTypeDescription > >( - new ConstantDescription(*i)); + new ConstantDescription(constantGroupName, *i)); } } return css::uno::Any(); diff --git a/cppuhelper/source/typemanager.hxx b/cppuhelper/source/typemanager.hxx index a84a231..5488aea 100644 --- a/cppuhelper/source/typemanager.hxx +++ b/cppuhelper/source/typemanager.hxx @@ -136,6 +136,7 @@ private: rtl::OUString const & member); css::uno::Any getConstant( + rtl::OUString const & constantGroupName, rtl::Reference< unoidl::ConstantGroupEntity > entity, rtl::OUString const & member); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits