summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Module_cross_toolset.mk1
-rw-r--r--Module_tail_build.mk1
-rw-r--r--Repository.mk1
-rw-r--r--RepositoryModule_ooo.mk1
-rw-r--r--cppuhelper/Library_cppuhelper.mk3
-rw-r--r--cppuhelper/Package_inc.mk1
-rw-r--r--cppuhelper/prj/build.lst2
-rw-r--r--cppuhelper/source/typedescriptionprovider.cxx598
-rw-r--r--cppuhelper/source/unoidlprovider.hxx54
-rw-r--r--sal/inc/sal/log-areas.dox1
-rwxr-xr-xscp2/source/ooo/ure.scp8
-rw-r--r--unoidl/Library_unoidl.mk26
-rw-r--r--unoidl/Makefile14
-rw-r--r--unoidl/Module_unoidl.mk17
-rw-r--r--unoidl/Package_inc.mk16
-rw-r--r--unoidl/inc/unoidl/detail/dllapi.hxx26
-rw-r--r--unoidl/inc/unoidl/detail/unoidldllapi.hxx26
-rw-r--r--unoidl/inc/unoidl/unoidl.hxx (renamed from cppuhelper/inc/cppuhelper/unoidl.hxx)165
-rw-r--r--unoidl/inc/unoidl/unoidlprovider.hxx57
-rw-r--r--unoidl/prj/build.lst2
-rw-r--r--unoidl/prj/d.lst0
-rw-r--r--unoidl/source/unoidl.cxx (renamed from cppuhelper/source/unoidl.cxx)13
-rw-r--r--unoidl/source/unoidlprovider.cxx (renamed from cppuhelper/source/unoidlprovider.cxx)704
-rw-r--r--ure/source/README2
24 files changed, 995 insertions, 744 deletions
diff --git a/Module_cross_toolset.mk b/Module_cross_toolset.mk
index fb475725bb47..e805979e2ef1 100644
--- a/Module_cross_toolset.mk
+++ b/Module_cross_toolset.mk
@@ -69,6 +69,7 @@ $(eval $(call gb_Module_add_moduledirs,cross_toolset,\
ucbhelper \
udkapi \
udm \
+ unoidl \
unoil \
unotest \
unotools \
diff --git a/Module_tail_build.mk b/Module_tail_build.mk
index f71a330ad246..eed19e672caf 100644
--- a/Module_tail_build.mk
+++ b/Module_tail_build.mk
@@ -205,6 +205,7 @@ $(eval $(call gb_Module_add_moduledirs,tail_build,\
UnoControls \
unodevtools \
unoil \
+ unoidl \
unotest \
unotools \
unoxml \
diff --git a/Repository.mk b/Repository.mk
index 5c1ca3737a0b..c2c0257fb234 100644
--- a/Repository.mk
+++ b/Repository.mk
@@ -443,6 +443,7 @@ $(eval $(call gb_Helper_register_libraries,PLAINLIBS_URE, \
sal_textenc \
sunjavaplugin \
sunpro5_uno \
+ unoidl \
unsafe_uno \
xmlreader \
))
diff --git a/RepositoryModule_ooo.mk b/RepositoryModule_ooo.mk
index 236c60a3a5e7..a2fefe78f24f 100644
--- a/RepositoryModule_ooo.mk
+++ b/RepositoryModule_ooo.mk
@@ -212,6 +212,7 @@ $(eval $(call gb_Module_add_moduledirs,ooo,\
UnoControls \
unodevtools \
unoil \
+ unoidl \
unotest \
unotools \
unoxml \
diff --git a/cppuhelper/Library_cppuhelper.mk b/cppuhelper/Library_cppuhelper.mk
index 2b849a109ac8..577efbcf942d 100644
--- a/cppuhelper/Library_cppuhelper.mk
+++ b/cppuhelper/Library_cppuhelper.mk
@@ -45,6 +45,7 @@ $(eval $(call gb_Library_use_libraries,cppuhelper,\
reg \
sal \
salhelper \
+ unoidl \
xmlreader \
$(gb_UWINAPI) \
))
@@ -76,8 +77,6 @@ $(eval $(call gb_Library_add_exception_objects,cppuhelper,\
cppuhelper/source/tdmgr \
cppuhelper/source/typedescriptionprovider \
cppuhelper/source/typeprovider \
- cppuhelper/source/unoidl \
- cppuhelper/source/unoidlprovider \
cppuhelper/source/unourl \
cppuhelper/source/weak \
))
diff --git a/cppuhelper/Package_inc.mk b/cppuhelper/Package_inc.mk
index 420eecf2fc47..af5a823c1d49 100644
--- a/cppuhelper/Package_inc.mk
+++ b/cppuhelper/Package_inc.mk
@@ -77,7 +77,6 @@ $(eval $(call gb_Package_add_file,cppuhelper_inc,inc/cppuhelper/queryinterface.h
$(eval $(call gb_Package_add_file,cppuhelper_inc,inc/cppuhelper/shlib.hxx,cppuhelper/shlib.hxx))
$(eval $(call gb_Package_add_file,cppuhelper_inc,inc/cppuhelper/supportsservice.hxx,cppuhelper/supportsservice.hxx))
$(eval $(call gb_Package_add_file,cppuhelper_inc,inc/cppuhelper/typeprovider.hxx,cppuhelper/typeprovider.hxx))
-$(eval $(call gb_Package_add_file,cppuhelper_inc,inc/cppuhelper/unoidl.hxx,cppuhelper/unoidl.hxx))
$(eval $(call gb_Package_add_file,cppuhelper_inc,inc/cppuhelper/unourl.hxx,cppuhelper/unourl.hxx))
$(eval $(call gb_Package_add_file,cppuhelper_inc,inc/cppuhelper/weakagg.hxx,cppuhelper/weakagg.hxx))
$(eval $(call gb_Package_add_file,cppuhelper_inc,inc/cppuhelper/weak.hxx,cppuhelper/weak.hxx))
diff --git a/cppuhelper/prj/build.lst b/cppuhelper/prj/build.lst
index f39e1a458b9c..02d54ffdc36c 100644
--- a/cppuhelper/prj/build.lst
+++ b/cppuhelper/prj/build.lst
@@ -1,2 +1,2 @@
-ch cppuhelper : BOOST:boost LIBXSLT:libxslt DESKTOP:codemaker cppu offapi registry salhelper xmlreader NULL
+ch cppuhelper : BOOST:boost LIBXSLT:libxslt DESKTOP:codemaker cppu offapi registry salhelper unoidl xmlreader NULL
ch cppuhelper\prj nmake - all ch_prj NULL
diff --git a/cppuhelper/source/typedescriptionprovider.cxx b/cppuhelper/source/typedescriptionprovider.cxx
index bf77491ea991..7dbe5e590b88 100644
--- a/cppuhelper/source/typedescriptionprovider.cxx
+++ b/cppuhelper/source/typedescriptionprovider.cxx
@@ -49,16 +49,16 @@
#include "com/sun/star/uno/XInterface.hpp"
#include "cppuhelper/compbase2.hxx"
#include "cppuhelper/implbase1.hxx"
-#include "cppuhelper/unoidl.hxx"
#include "osl/file.hxx"
#include "osl/mutex.hxx"
#include "rtl/ref.hxx"
#include "rtl/ustring.hxx"
#include "sal/types.h"
+#include "unoidl/unoidl.hxx"
+#include "unoidl/unoidlprovider.hxx"
#include "paths.hxx"
#include "typedescriptionprovider.hxx"
-#include "unoidlprovider.hxx"
namespace {
@@ -108,7 +108,7 @@ public:
ModuleDescription(
css::uno::Reference< css::uno::XComponentContext > const & context,
rtl::OUString const & name,
- rtl::Reference< cppu::unoidl::ModuleEntity > const & entity):
+ rtl::Reference< unoidl::ModuleEntity > const & entity):
context_(context), name_(name), entity_(entity)
{ assert(entity.is()); }
@@ -129,20 +129,26 @@ private:
css::uno::Reference< css::uno::XComponentContext > context_;
rtl::OUString name_;
- rtl::Reference< cppu::unoidl::ModuleEntity > entity_;
+ rtl::Reference< unoidl::ModuleEntity > entity_;
};
css::uno::Sequence< css::uno::Reference< css::reflection::XTypeDescription > >
ModuleDescription::getMembers() throw (css::uno::RuntimeException) {
- std::vector< rtl::OUString > names(entity_->getMemberNames());
- assert(names.size() <= SAL_MAX_INT32);
- sal_Int32 n = static_cast< sal_Int32 >(names.size());
- css::uno::Sequence<
- css::uno::Reference< css::reflection::XTypeDescription > > s(n);
- for (sal_Int32 i = 0; i != n; ++i) {
- s[i] = resolve(context_, name_ + "." + names[i]);
+ try {
+ std::vector< rtl::OUString > names(entity_->getMemberNames());
+ assert(names.size() <= SAL_MAX_INT32);
+ sal_Int32 n = static_cast< sal_Int32 >(names.size());
+ css::uno::Sequence<
+ css::uno::Reference< css::reflection::XTypeDescription > > s(n);
+ for (sal_Int32 i = 0; i != n; ++i) {
+ s[i] = resolve(context_, name_ + "." + names[i]);
+ }
+ return s;
+ } catch (unoidl::FileFormatException & e) {
+ throw css::uno::DeploymentException(
+ e.getUri() + ": " + e.getDetail(),
+ static_cast< cppu::OWeakObject * >(this));
}
- return s;
}
typedef cppu::ImplInheritanceHelper1<
@@ -153,7 +159,7 @@ class EnumTypeDescription: public EnumTypeDescription_Base {
public:
EnumTypeDescription(
rtl::OUString const & name,
- rtl::Reference< cppu::unoidl::EnumTypeEntity > const & entity):
+ rtl::Reference< unoidl::EnumTypeEntity > const & entity):
EnumTypeDescription_Base(entity->isPublished()), name_(name),
entity_(entity)
{ assert(entity.is()); }
@@ -179,7 +185,7 @@ private:
throw (css::uno::RuntimeException);
rtl::OUString name_;
- rtl::Reference< cppu::unoidl::EnumTypeEntity > entity_;
+ rtl::Reference< unoidl::EnumTypeEntity > entity_;
};
css::uno::Sequence< rtl::OUString > EnumTypeDescription::getEnumNames()
@@ -215,7 +221,7 @@ public:
PlainStructTypeDescription(
css::uno::Reference< css::uno::XComponentContext > const & context,
rtl::OUString const & name,
- rtl::Reference< cppu::unoidl::PlainStructTypeEntity > const & entity):
+ rtl::Reference< unoidl::PlainStructTypeEntity > const & entity):
PlainStructTypeDescription_Base(entity->isPublished()),
context_(context), name_(name), entity_(entity)
{ assert(entity.is()); }
@@ -259,7 +265,7 @@ private:
css::uno::Reference< css::uno::XComponentContext > context_;
rtl::OUString name_;
- rtl::Reference< cppu::unoidl::PlainStructTypeEntity > entity_;
+ rtl::Reference< unoidl::PlainStructTypeEntity > entity_;
};
css::uno::Sequence< css::uno::Reference< css::reflection::XTypeDescription > >
@@ -321,8 +327,8 @@ public:
PolymorphicStructTypeTemplateDescription(
css::uno::Reference< css::uno::XComponentContext > const & context,
rtl::OUString const & name,
- rtl::Reference< cppu::unoidl::PolymorphicStructTypeTemplateEntity >
- const & entity):
+ rtl::Reference< unoidl::PolymorphicStructTypeTemplateEntity > const &
+ entity):
PolymorphicStructTypeTemplateDescription_Base(entity->isPublished()),
context_(context), name_(name), entity_(entity)
{ assert(entity.is()); }
@@ -362,7 +368,7 @@ private:
css::uno::Reference< css::uno::XComponentContext > context_;
rtl::OUString name_;
- rtl::Reference< cppu::unoidl::PolymorphicStructTypeTemplateEntity > entity_;
+ rtl::Reference< unoidl::PolymorphicStructTypeTemplateEntity > entity_;
};
css::uno::Sequence< css::uno::Reference< css::reflection::XTypeDescription > >
@@ -417,7 +423,7 @@ public:
ExceptionTypeDescription(
css::uno::Reference< css::uno::XComponentContext > const & context,
rtl::OUString const & name,
- rtl::Reference< cppu::unoidl::ExceptionTypeEntity > const & entity):
+ rtl::Reference< unoidl::ExceptionTypeEntity > const & entity):
ExceptionTypeDescription_Base(entity->isPublished()), context_(context),
name_(name), entity_(entity)
{ assert(entity.is()); }
@@ -449,7 +455,7 @@ private:
css::uno::Reference< css::uno::XComponentContext > context_;
rtl::OUString name_;
- rtl::Reference< cppu::unoidl::ExceptionTypeEntity > entity_;
+ rtl::Reference< unoidl::ExceptionTypeEntity > entity_;
};
css::uno::Sequence< css::uno::Reference< css::reflection::XTypeDescription > >
@@ -551,7 +557,7 @@ public:
AttributeDescription(
css::uno::Reference< css::uno::XComponentContext > const & context,
rtl::OUString const & name,
- cppu::unoidl::InterfaceTypeEntity::Attribute const & attribute,
+ unoidl::InterfaceTypeEntity::Attribute const & attribute,
sal_Int32 position):
context_(context), name_(name), attribute_(attribute),
position_(position)
@@ -596,7 +602,7 @@ private:
css::uno::Reference< css::uno::XComponentContext > context_;
rtl::OUString name_;
- cppu::unoidl::InterfaceTypeEntity::Attribute attribute_;
+ unoidl::InterfaceTypeEntity::Attribute attribute_;
sal_Int32 position_;
};
@@ -637,7 +643,7 @@ class MethodParameter:
public:
MethodParameter(
css::uno::Reference< css::uno::XComponentContext > const & context,
- cppu::unoidl::InterfaceTypeEntity::Method::Parameter const & parameter,
+ unoidl::InterfaceTypeEntity::Method::Parameter const & parameter,
sal_Int32 position):
context_(context), parameter_(parameter), position_(position)
{}
@@ -655,20 +661,18 @@ private:
virtual sal_Bool SAL_CALL isIn() throw (css::uno::RuntimeException) {
return
(parameter_.direction
- == cppu::unoidl::InterfaceTypeEntity::Method::Parameter::
- DIRECTION_IN)
+ == unoidl::InterfaceTypeEntity::Method::Parameter::DIRECTION_IN)
|| (parameter_.direction
- == cppu::unoidl::InterfaceTypeEntity::Method::Parameter::
+ == unoidl::InterfaceTypeEntity::Method::Parameter::
DIRECTION_IN_OUT);
}
virtual sal_Bool SAL_CALL isOut() throw (css::uno::RuntimeException) {
return
(parameter_.direction
- == cppu::unoidl::InterfaceTypeEntity::Method::Parameter::
- DIRECTION_OUT)
+ == unoidl::InterfaceTypeEntity::Method::Parameter::DIRECTION_OUT)
|| (parameter_.direction
- == cppu::unoidl::InterfaceTypeEntity::Method::Parameter::
+ == unoidl::InterfaceTypeEntity::Method::Parameter::
DIRECTION_IN_OUT);
}
@@ -676,7 +680,7 @@ private:
{ return position_; }
css::uno::Reference< css::uno::XComponentContext > context_;
- cppu::unoidl::InterfaceTypeEntity::Method::Parameter parameter_;
+ unoidl::InterfaceTypeEntity::Method::Parameter parameter_;
sal_Int32 position_;
};
@@ -689,8 +693,7 @@ public:
MethodDescription(
css::uno::Reference< css::uno::XComponentContext > const & context,
rtl::OUString const & name,
- cppu::unoidl::InterfaceTypeEntity::Method const & method,
- sal_Int32 position):
+ unoidl::InterfaceTypeEntity::Method const & method, sal_Int32 position):
context_(context), name_(name), method_(method), position_(position)
{}
@@ -730,7 +733,7 @@ private:
css::uno::Reference< css::uno::XComponentContext > context_;
rtl::OUString name_;
- cppu::unoidl::InterfaceTypeEntity::Method method_;
+ unoidl::InterfaceTypeEntity::Method method_;
sal_Int32 position_;
};
@@ -767,7 +770,7 @@ public:
InterfaceTypeDescription(
css::uno::Reference< css::uno::XComponentContext > const & context,
rtl::OUString const & name,
- rtl::Reference< cppu::unoidl::InterfaceTypeEntity > const & entity):
+ rtl::Reference< unoidl::InterfaceTypeEntity > const & entity):
InterfaceTypeDescription_Base(entity->isPublished()), context_(context),
name_(name), entity_(entity)
{ assert(entity.is()); }
@@ -810,7 +813,7 @@ private:
css::uno::Reference< css::uno::XComponentContext > context_;
rtl::OUString name_;
- rtl::Reference< cppu::unoidl::InterfaceTypeEntity > entity_;
+ rtl::Reference< unoidl::InterfaceTypeEntity > entity_;
};
css::uno::Sequence<
@@ -905,7 +908,7 @@ public:
ConstantGroupDescription(
css::uno::Reference< css::uno::XComponentContext > const & context,
rtl::OUString const & name,
- rtl::Reference< cppu::unoidl::ConstantGroupEntity > const & entity):
+ rtl::Reference< unoidl::ConstantGroupEntity > const & entity):
ConstantGroupDescription_Base(entity->isPublished()), context_(context),
name_(name), entity_(entity)
{ assert(entity.is()); }
@@ -927,7 +930,7 @@ private:
css::uno::Reference< css::uno::XComponentContext > context_;
rtl::OUString name_;
- rtl::Reference< cppu::unoidl::ConstantGroupEntity > entity_;
+ rtl::Reference< unoidl::ConstantGroupEntity > entity_;
};
css::uno::Sequence<
@@ -955,7 +958,7 @@ public:
TypedefDescription(
css::uno::Reference< css::uno::XComponentContext > const & context,
rtl::OUString const & name,
- rtl::Reference< cppu::unoidl::TypedefEntity > const & entity):
+ rtl::Reference< unoidl::TypedefEntity > const & entity):
TypedefDescription_Base(entity->isPublished()), context_(context),
name_(name), entity_(entity)
{ assert(entity.is()); }
@@ -976,7 +979,7 @@ private:
css::uno::Reference< css::uno::XComponentContext > context_;
rtl::OUString name_;
- rtl::Reference< cppu::unoidl::TypedefEntity > entity_;
+ rtl::Reference< unoidl::TypedefEntity > entity_;
};
class ConstructorParameter:
@@ -986,7 +989,7 @@ class ConstructorParameter:
public:
ConstructorParameter(
css::uno::Reference< css::uno::XComponentContext > const & context,
- cppu::unoidl::SingleInterfaceBasedServiceEntity::Constructor::Parameter
+ unoidl::SingleInterfaceBasedServiceEntity::Constructor::Parameter
const & parameter,
sal_Int32 position):
context_(context), parameter_(parameter), position_(position)
@@ -1016,7 +1019,7 @@ private:
{ return parameter_.rest; }
css::uno::Reference< css::uno::XComponentContext > context_;
- cppu::unoidl::SingleInterfaceBasedServiceEntity::Constructor::Parameter
+ unoidl::SingleInterfaceBasedServiceEntity::Constructor::Parameter
parameter_;
sal_Int32 position_;
};
@@ -1029,7 +1032,7 @@ class ConstructorDescription:
public:
ConstructorDescription(
css::uno::Reference< css::uno::XComponentContext > const & context,
- cppu::unoidl::SingleInterfaceBasedServiceEntity::Constructor const &
+ unoidl::SingleInterfaceBasedServiceEntity::Constructor const &
constructor):
context_(context), constructor_(constructor)
{}
@@ -1055,7 +1058,7 @@ private:
SAL_CALL getExceptions() throw (css::uno::RuntimeException);
css::uno::Reference< css::uno::XComponentContext > context_;
- cppu::unoidl::SingleInterfaceBasedServiceEntity::Constructor constructor_;
+ unoidl::SingleInterfaceBasedServiceEntity::Constructor constructor_;
};
css::uno::Sequence< css::uno::Reference< css::reflection::XParameter > >
@@ -1097,8 +1100,8 @@ public:
SingleInterfaceBasedServiceDescription(
css::uno::Reference< css::uno::XComponentContext > const & context,
rtl::OUString const & name,
- rtl::Reference< cppu::unoidl::SingleInterfaceBasedServiceEntity >
- const & entity):
+ rtl::Reference< unoidl::SingleInterfaceBasedServiceEntity > const &
+ entity):
SingleInterfaceBasedServiceDescription_Base(entity->isPublished()),
context_(context), name_(name), entity_(entity)
{ assert(entity.is()); }
@@ -1176,7 +1179,7 @@ private:
css::uno::Reference< css::uno::XComponentContext > context_;
rtl::OUString name_;
- rtl::Reference< cppu::unoidl::SingleInterfaceBasedServiceEntity > entity_;
+ rtl::Reference< unoidl::SingleInterfaceBasedServiceEntity > entity_;
};
css::uno::Sequence<
@@ -1203,8 +1206,7 @@ class PropertyDescription:
public:
PropertyDescription(
css::uno::Reference< css::uno::XComponentContext > const & context,
- cppu::unoidl::AccumulationBasedServiceEntity::Property const &
- property):
+ unoidl::AccumulationBasedServiceEntity::Property const & property):
context_(context), property_(property)
{}
@@ -1227,7 +1229,7 @@ private:
{ return resolve(context_, property_.type); }
css::uno::Reference< css::uno::XComponentContext > context_;
- cppu::unoidl::AccumulationBasedServiceEntity::Property property_;
+ unoidl::AccumulationBasedServiceEntity::Property property_;
};
typedef cppu::ImplInheritanceHelper1<
@@ -1241,7 +1243,7 @@ public:
AccumulationBasedServiceDescription(
css::uno::Reference< css::uno::XComponentContext > const & context,
rtl::OUString const & name,
- rtl::Reference< cppu::unoidl::AccumulationBasedServiceEntity > const &
+ rtl::Reference< unoidl::AccumulationBasedServiceEntity > const &
entity):
AccumulationBasedServiceDescription_Base(entity->isPublished()),
context_(context), name_(name), entity_(entity)
@@ -1302,7 +1304,7 @@ private:
css::uno::Reference< css::uno::XComponentContext > context_;
rtl::OUString name_;
- rtl::Reference< cppu::unoidl::AccumulationBasedServiceEntity > entity_;
+ rtl::Reference< unoidl::AccumulationBasedServiceEntity > entity_;
};
css::uno::Sequence<
@@ -1411,8 +1413,7 @@ public:
InterfaceBasedSingletonDescription(
css::uno::Reference< css::uno::XComponentContext > const & context,
rtl::OUString const & name,
- rtl::Reference< cppu::unoidl::InterfaceBasedSingletonEntity > const &
- entity):
+ rtl::Reference< unoidl::InterfaceBasedSingletonEntity > const & entity):
InterfaceBasedSingletonDescription_Base(entity->isPublished()),
context_(context), name_(name), entity_(entity)
{ assert(entity.is()); }
@@ -1444,7 +1445,7 @@ private:
css::uno::Reference< css::uno::XComponentContext > context_;
rtl::OUString name_;
- rtl::Reference< cppu::unoidl::InterfaceBasedSingletonEntity > entity_;
+ rtl::Reference< unoidl::InterfaceBasedSingletonEntity > entity_;
};
typedef cppu::ImplInheritanceHelper1<
@@ -1458,8 +1459,7 @@ public:
ServiceBasedSingletonDescription(
css::uno::Reference< css::uno::XComponentContext > const & context,
rtl::OUString const & name,
- rtl::Reference< cppu::unoidl::ServiceBasedSingletonEntity > const &
- entity):
+ rtl::Reference< unoidl::ServiceBasedSingletonEntity > const & entity):
ServiceBasedSingletonDescription_Base(entity_->isPublished()),
context_(context), name_(name), entity_(entity)
{ assert(entity.is()); }
@@ -1491,7 +1491,7 @@ private:
css::uno::Reference< css::uno::XComponentContext > context_;
rtl::OUString name_;
- rtl::Reference< cppu::unoidl::ServiceBasedSingletonEntity > entity_;
+ rtl::Reference< unoidl::ServiceBasedSingletonEntity > entity_;
};
class Enumeration:
@@ -1503,7 +1503,7 @@ public:
Enumeration(
css::uno::Reference< css::uno::XComponentContext > const & context,
rtl::OUString const & prefix,
- rtl::Reference< cppu::unoidl::MapCursor > const & cursor,
+ rtl::Reference< unoidl::MapCursor > const & cursor,
css::uno::Sequence< css::uno::TypeClass > const & types, bool deep):
context_(context), types_(types), deep_(deep)
{
@@ -1536,22 +1536,22 @@ private:
struct Position {
Position(
rtl::OUString const & thePrefix,
- rtl::Reference< cppu::unoidl::MapCursor > const & theCursor):
+ rtl::Reference< unoidl::MapCursor > const & theCursor):
prefix(thePrefix), cursor(theCursor)
{ assert(theCursor.is()); }
Position(
rtl::OUString const & thePrefix,
- rtl::Reference< cppu::unoidl::ConstantGroupEntity > const &
+ rtl::Reference< unoidl::ConstantGroupEntity > const &
theConstantGroup):
prefix(thePrefix), constantGroup(theConstantGroup),
constantGroupIndex(constantGroup->getMembers().begin())
{ assert(theConstantGroup.is()); }
rtl::OUString prefix;
- rtl::Reference< cppu::unoidl::MapCursor > cursor;
- rtl::Reference< cppu::unoidl::ConstantGroupEntity > constantGroup;
- std::vector< cppu::unoidl::ConstantGroupEntity::Member >::const_iterator
+ rtl::Reference< unoidl::MapCursor > cursor;
+ rtl::Reference< unoidl::ConstantGroupEntity > constantGroup;
+ std::vector< unoidl::ConstantGroupEntity::Member >::const_iterator
constantGroupIndex;
};
@@ -1595,87 +1595,93 @@ bool Enumeration::matches(css::uno::TypeClass tc) const {
}
void Enumeration::findNextMatch() {
- for (;;) {
- assert(!positions_.empty());
- rtl::OUString name;
- if (positions_.top().cursor.is()) { // root or module
- rtl::Reference< cppu::unoidl::Entity > ent(
- positions_.top().cursor->getNext(&name));
- if (!ent.is()) {
- positions_.pop();
- if (positions_.empty()) {
+ try {
+ for (;;) {
+ assert(!positions_.empty());
+ rtl::OUString name;
+ if (positions_.top().cursor.is()) { // root or module
+ rtl::Reference< unoidl::Entity > ent(
+ positions_.top().cursor->getNext(&name));
+ if (!ent.is()) {
+ positions_.pop();
+ if (positions_.empty()) {
+ break;
+ }
+ continue;
+ }
+ name = positions_.top().prefix + name;
+ css::uno::TypeClass tc;
+ switch (ent->getSort()) {
+ case unoidl::Entity::SORT_MODULE:
+ tc = css::uno::TypeClass_MODULE;
+ if (deep_) {
+ positions_.push(
+ Position(
+ name + ".",
+ static_cast< unoidl::ModuleEntity * >(
+ ent.get())->createCursor()));
+ }
+ break;
+ case unoidl::Entity::SORT_ENUM_TYPE:
+ tc = css::uno::TypeClass_ENUM;
+ break;
+ case unoidl::Entity::SORT_PLAIN_STRUCT_TYPE:
+ case unoidl::Entity::SORT_POLYMORPHIC_STRUCT_TYPE_TEMPLATE:
+ tc = css::uno::TypeClass_STRUCT;
+ break;
+ case unoidl::Entity::SORT_EXCEPTION_TYPE:
+ tc = css::uno::TypeClass_EXCEPTION;
+ break;
+ case unoidl::Entity::SORT_INTERFACE_TYPE:
+ tc = css::uno::TypeClass_INTERFACE;
+ break;
+ case unoidl::Entity::SORT_TYPEDEF:
+ tc = css::uno::TypeClass_TYPEDEF;
+ break;
+ case unoidl::Entity::SORT_CONSTANT_GROUP:
+ tc = css::uno::TypeClass_CONSTANTS;
+ if (deep_ && matches(css::uno::TypeClass_CONSTANT)) {
+ positions_.push(
+ Position(
+ name + ".",
+ static_cast< unoidl::ConstantGroupEntity * >(
+ ent.get())));
+ }
break;
+ case unoidl::Entity::SORT_SINGLE_INTERFACE_BASED_SERVICE:
+ case unoidl::Entity::SORT_ACCUMULATION_BASED_SERVICE:
+ tc = css::uno::TypeClass_SERVICE;
+ break;
+ case unoidl::Entity::SORT_INTERFACE_BASED_SINGLETON:
+ case unoidl::Entity::SORT_SERVICE_BASED_SINGLETON:
+ tc = css::uno::TypeClass_SINGLETON;
+ break;
+ default:
+ for (;;) { std::abort(); } // this cannot happen
}
- continue;
- }
- name = positions_.top().prefix + name;
- css::uno::TypeClass tc;
- switch (ent->getSort()) {
- case cppu::unoidl::Entity::SORT_MODULE:
- tc = css::uno::TypeClass_MODULE;
- if (deep_) {
- positions_.push(
- Position(
- name + ".",
- static_cast< cppu::unoidl::ModuleEntity * >(
- ent.get())->createCursor()));
+ if (matches(tc)) {
+ current_ = name;
+ break;
}
- break;
- case cppu::unoidl::Entity::SORT_ENUM_TYPE:
- tc = css::uno::TypeClass_ENUM;
- break;
- case cppu::unoidl::Entity::SORT_PLAIN_STRUCT_TYPE:
- case cppu::unoidl::Entity::SORT_POLYMORPHIC_STRUCT_TYPE_TEMPLATE:
- tc = css::uno::TypeClass_STRUCT;
- break;
- case cppu::unoidl::Entity::SORT_EXCEPTION_TYPE:
- tc = css::uno::TypeClass_EXCEPTION;
- break;
- case cppu::unoidl::Entity::SORT_INTERFACE_TYPE:
- tc = css::uno::TypeClass_INTERFACE;
- break;
- case cppu::unoidl::Entity::SORT_TYPEDEF:
- tc = css::uno::TypeClass_TYPEDEF;
- break;
- case cppu::unoidl::Entity::SORT_CONSTANT_GROUP:
- tc = css::uno::TypeClass_CONSTANTS;
- if (deep_ && matches(css::uno::TypeClass_CONSTANT)) {
- positions_.push(
- Position(
- name + ".",
- static_cast< cppu::unoidl::ConstantGroupEntity * >(
- ent.get())));
+ } else { // constant group
+ if (positions_.top().constantGroupIndex
+ == positions_.top().constantGroup->getMembers().end())
+ {
+ positions_.pop();
+ if (positions_.empty()) {
+ break;
+ }
+ continue;
}
+ current_ = positions_.top().prefix
+ + positions_.top().constantGroupIndex++->name;
break;
- case cppu::unoidl::Entity::SORT_SINGLE_INTERFACE_BASED_SERVICE:
- case cppu::unoidl::Entity::SORT_ACCUMULATION_BASED_SERVICE:
- tc = css::uno::TypeClass_SERVICE;
- break;
- case cppu::unoidl::Entity::SORT_INTERFACE_BASED_SINGLETON:
- case cppu::unoidl::Entity::SORT_SERVICE_BASED_SINGLETON:
- tc = css::uno::TypeClass_SINGLETON;
- break;
- default:
- for (;;) { std::abort(); } // this cannot happen
- }
- if (matches(tc)) {
- current_ = name;
- break;
- }
- } else { // constant group
- if (positions_.top().constantGroupIndex
- == positions_.top().constantGroup->getMembers().end())
- {
- positions_.pop();
- if (positions_.empty()) {
- break;
- }
- continue;
}
- current_ = positions_.top().prefix
- + positions_.top().constantGroupIndex++->name;
- break;
}
+ } catch (unoidl::FileFormatException & e) {
+ throw css::uno::DeploymentException(
+ e.getUri() + ": " + e.getDetail(),
+ static_cast< cppu::OWeakObject * >(this));
}
}
@@ -1688,11 +1694,12 @@ class Provider:
private osl::Mutex, public Provider_Base, private boost::noncopyable
{
public:
+ // throws unoidl::FileFormatException, unoidl::NoSuchFileException:
Provider(
css::uno::Reference< css::uno::XComponentContext > const & context,
rtl::OUString const & uri):
Provider_Base(*static_cast< osl::Mutex * >(this)), context_(context),
- provider_(new cppu::UnoidlProvider(uri))
+ provider_(new unoidl::UnoidlProvider(uri))
{}
using Provider_Base::acquire;
@@ -1709,8 +1716,7 @@ private:
css::container::NoSuchElementException, css::uno::RuntimeException);
virtual sal_Bool SAL_CALL hasByHierarchicalName(
- rtl::OUString const & aName) throw (css::uno::RuntimeException)
- { return provider_->find(aName) != 0; }
+ rtl::OUString const & aName) throw (css::uno::RuntimeException);
virtual css::uno::Reference< css::reflection::XTypeDescriptionEnumeration >
SAL_CALL createTypeDescriptionEnumeration(
@@ -1723,117 +1729,169 @@ private:
css::uno::RuntimeException);
css::uno::Reference< css::uno::XComponentContext > context_;
- rtl::Reference< cppu::UnoidlProvider > provider_;
+ rtl::Reference< unoidl::UnoidlProvider > provider_;
};
css::uno::Any Provider::getByHierarchicalName(rtl::OUString const & aName)
throw (css::container::NoSuchElementException, css::uno::RuntimeException)
{
- bool cnst;
- sal_uInt32 off = provider_->find(aName, &cnst);
- if (off == 0) {
- throw css::container::NoSuchElementException(
- aName, static_cast< cppu::OWeakObject * >(this));
- }
- if (cnst) {
- return css::uno::makeAny<
- css::uno::Reference< css::reflection::XTypeDescription > >(
- new ConstantDescription(aName, provider_->getConstant(off)));
- } else {
- rtl::Reference< cppu::unoidl::Entity > ent(provider_->getEntity(off));
- switch (ent->getSort()) {
- case cppu::unoidl::Entity::SORT_MODULE:
- return css::uno::makeAny<
- css::uno::Reference< css::reflection::XTypeDescription > >(
- new ModuleDescription(
- context_, aName,
- static_cast< cppu::unoidl::ModuleEntity * >(
- ent.get())));
- case cppu::unoidl::Entity::SORT_ENUM_TYPE:
- return css::uno::makeAny<
- css::uno::Reference< css::reflection::XTypeDescription > >(
- new EnumTypeDescription(
- aName,
- static_cast< cppu::unoidl::EnumTypeEntity * >(
- ent.get())));
- case cppu::unoidl::Entity::SORT_PLAIN_STRUCT_TYPE:
- return css::uno::makeAny<
- css::uno::Reference< css::reflection::XTypeDescription > >(
- new PlainStructTypeDescription(
- context_, aName,
- static_cast< cppu::unoidl::PlainStructTypeEntity * >(
- ent.get())));
- case cppu::unoidl::Entity::SORT_POLYMORPHIC_STRUCT_TYPE_TEMPLATE:
- return css::uno::makeAny<
- css::uno::Reference< css::reflection::XTypeDescription > >(
- new PolymorphicStructTypeTemplateDescription(
- context_, aName,
- static_cast<
- cppu::unoidl::PolymorphicStructTypeTemplateEntity *
- >(ent.get())));
- case cppu::unoidl::Entity::SORT_EXCEPTION_TYPE:
- return css::uno::makeAny<
- css::uno::Reference< css::reflection::XTypeDescription > >(
- new ExceptionTypeDescription(
- context_, aName,
- static_cast< cppu::unoidl::ExceptionTypeEntity * >(
- ent.get())));
- case cppu::unoidl::Entity::SORT_INTERFACE_TYPE:
- return css::uno::makeAny<
- css::uno::Reference< css::reflection::XTypeDescription > >(
- new InterfaceTypeDescription(
- context_, aName,
- static_cast< cppu::unoidl::InterfaceTypeEntity * >(
- ent.get())));
- case cppu::unoidl::Entity::SORT_TYPEDEF:
- return css::uno::makeAny<
- css::uno::Reference< css::reflection::XTypeDescription > >(
- new TypedefDescription(
- context_, aName,
- static_cast< cppu::unoidl::TypedefEntity * >(
- ent.get())));
- case cppu::unoidl::Entity::SORT_CONSTANT_GROUP:
- return css::uno::makeAny<
- css::uno::Reference< css::reflection::XTypeDescription > >(
- new ConstantGroupDescription(
- context_, aName,
- static_cast< cppu::unoidl::ConstantGroupEntity * >(
- ent.get())));
- case cppu::unoidl::Entity::SORT_SINGLE_INTERFACE_BASED_SERVICE:
+ try {
+ bool cnst;
+ sal_uInt32 off = provider_->find(aName, &cnst);
+ if (off == 0) {
+ throw css::container::NoSuchElementException(
+ aName, static_cast< cppu::OWeakObject * >(this));
+ }
+ if (cnst) {
+ unoidl::ConstantValue val1(provider_->getConstant(off));
+ css::uno::Any val2;
+ switch (val1.type) {
+ case unoidl::ConstantValue::TYPE_BOOLEAN:
+ val2 <<= val1.booleanValue;
+ break;
+ case unoidl::ConstantValue::TYPE_BYTE:
+ val2 <<= val1.byteValue;
+ break;
+ case unoidl::ConstantValue::TYPE_SHORT:
+ val2 <<= val1.shortValue;
+ break;
+ case unoidl::ConstantValue::TYPE_UNSIGNED_SHORT:
+ val2 <<= val1.unsignedShortValue;
+ break;
+ case unoidl::ConstantValue::TYPE_LONG:
+ val2 <<= val1.longValue;
+ break;
+ case unoidl::ConstantValue::TYPE_UNSIGNED_LONG:
+ val2 <<= val1.unsignedLongValue;
+ break;
+ case unoidl::ConstantValue::TYPE_HYPER:
+ val2 <<= val1.hyperValue;
+ break;
+ case unoidl::ConstantValue::TYPE_UNSIGNED_HYPER:
+ val2 <<= val1.unsignedHyperValue;
+ break;
+ case unoidl::ConstantValue::TYPE_FLOAT:
+ val2 <<= val1.floatValue;
+ break;
+ case unoidl::ConstantValue::TYPE_DOUBLE:
+ val2 <<= val1.doubleValue;
+ break;
+ default:
+ for (;;) { std::abort(); } // this cannot happen
+ }
return css::uno::makeAny<
css::uno::Reference< css::reflection::XTypeDescription > >(
- new SingleInterfaceBasedServiceDescription(
- context_, aName,
- static_cast<
- cppu::unoidl::SingleInterfaceBasedServiceEntity * >(
+ new ConstantDescription(aName, val2));
+ } else {
+ rtl::Reference< unoidl::Entity > ent(provider_->getEntity(off));
+ switch (ent->getSort()) {
+ case unoidl::Entity::SORT_MODULE:
+ return css::uno::makeAny<
+ css::uno::Reference< css::reflection::XTypeDescription > >(
+ new ModuleDescription(
+ context_, aName,
+ static_cast< unoidl::ModuleEntity * >(ent.get())));
+ case unoidl::Entity::SORT_ENUM_TYPE:
+ return css::uno::makeAny<
+ css::uno::Reference< css::reflection::XTypeDescription > >(
+ new EnumTypeDescription(
+ aName,
+ static_cast< unoidl::EnumTypeEntity * >(
ent.get())));
- case cppu::unoidl::Entity::SORT_ACCUMULATION_BASED_SERVICE:
- return css::uno::makeAny<
- css::uno::Reference< css::reflection::XTypeDescription > >(
- new AccumulationBasedServiceDescription(
- context_, aName,
- static_cast<
- cppu::unoidl::AccumulationBasedServiceEntity * >(
+ case unoidl::Entity::SORT_PLAIN_STRUCT_TYPE:
+ return css::uno::makeAny<
+ css::uno::Reference< css::reflection::XTypeDescription > >(
+ new PlainStructTypeDescription(
+ context_, aName,
+ static_cast< unoidl::PlainStructTypeEntity * >(
ent.get())));
- case cppu::unoidl::Entity::SORT_INTERFACE_BASED_SINGLETON:
- return css::uno::makeAny<
- css::uno::Reference< css::reflection::XTypeDescription > >(
- new InterfaceBasedSingletonDescription(
- context_, aName,
- static_cast<
- cppu::unoidl::InterfaceBasedSingletonEntity * >(
+ case unoidl::Entity::SORT_POLYMORPHIC_STRUCT_TYPE_TEMPLATE:
+ return css::uno::makeAny<
+ css::uno::Reference< css::reflection::XTypeDescription > >(
+ new PolymorphicStructTypeTemplateDescription(
+ context_, aName,
+ static_cast<
+ unoidl::PolymorphicStructTypeTemplateEntity * >(
+ ent.get())));
+ case unoidl::Entity::SORT_EXCEPTION_TYPE:
+ return css::uno::makeAny<
+ css::uno::Reference< css::reflection::XTypeDescription > >(
+ new ExceptionTypeDescription(
+ context_, aName,
+ static_cast< unoidl::ExceptionTypeEntity * >(
ent.get())));
- case cppu::unoidl::Entity::SORT_SERVICE_BASED_SINGLETON:
- return css::uno::makeAny<
- css::uno::Reference< css::reflection::XTypeDescription > >(
- new ServiceBasedSingletonDescription(
- context_, aName,
- static_cast<
- cppu::unoidl::ServiceBasedSingletonEntity * >(
+ case unoidl::Entity::SORT_INTERFACE_TYPE:
+ return css::uno::makeAny<
+ css::uno::Reference< css::reflection::XTypeDescription > >(
+ new InterfaceTypeDescription(
+ context_, aName,
+ static_cast< unoidl::InterfaceTypeEntity * >(
ent.get())));
- default:
- for (;;) { std::abort(); } // this cannot happen
+ case unoidl::Entity::SORT_TYPEDEF:
+ return css::uno::makeAny<
+ css::uno::Reference< css::reflection::XTypeDescription > >(
+ new TypedefDescription(
+ context_, aName,
+ static_cast< unoidl::TypedefEntity * >(ent.get())));
+ case unoidl::Entity::SORT_CONSTANT_GROUP:
+ return css::uno::makeAny<
+ css::uno::Reference< css::reflection::XTypeDescription > >(
+ new ConstantGroupDescription(
+ context_, aName,
+ static_cast< unoidl::ConstantGroupEntity * >(
+ ent.get())));
+ case unoidl::Entity::SORT_SINGLE_INTERFACE_BASED_SERVICE:
+ return css::uno::makeAny<
+ css::uno::Reference< css::reflection::XTypeDescription > >(
+ new SingleInterfaceBasedServiceDescription(
+ context_, aName,
+ static_cast<
+ unoidl::SingleInterfaceBasedServiceEntity * >(
+ ent.get())));
+ case unoidl::Entity::SORT_ACCUMULATION_BASED_SERVICE:
+ return css::uno::makeAny<
+ css::uno::Reference< css::reflection::XTypeDescription > >(
+ new AccumulationBasedServiceDescription(
+ context_, aName,
+ static_cast<
+ unoidl::AccumulationBasedServiceEntity * >(
+ ent.get())));
+ case unoidl::Entity::SORT_INTERFACE_BASED_SINGLETON:
+ return css::uno::makeAny<
+ css::uno::Reference< css::reflection::XTypeDescription > >(
+ new InterfaceBasedSingletonDescription(
+ context_, aName,
+ static_cast<
+ unoidl::InterfaceBasedSingletonEntity * >(
+ ent.get())));
+ case unoidl::Entity::SORT_SERVICE_BASED_SINGLETON:
+ return css::uno::makeAny<
+ css::uno::Reference< css::reflection::XTypeDescription > >(
+ new ServiceBasedSingletonDescription(
+ context_, aName,
+ static_cast<
+ unoidl::ServiceBasedSingletonEntity * >(
+ ent.get())));
+ default:
+ for (;;) { std::abort(); } // this cannot happen
+ }
}
+ } catch (unoidl::FileFormatException & e) {
+ throw css::uno::DeploymentException(
+ e.getUri() + ": " + e.getDetail(),
+ static_cast< cppu::OWeakObject * >(this));
+ }
+}
+
+sal_Bool Provider::hasByHierarchicalName(
+ rtl::OUString const & aName) throw (css::uno::RuntimeException)
+{
+ try {
+ return provider_->find(aName) != 0;
+ } catch (unoidl::FileFormatException & e) {
+ throw css::uno::DeploymentException(
+ e.getUri() + ": " + e.getDetail(),
+ static_cast< cppu::OWeakObject * >(this));
}
}
@@ -1846,33 +1904,39 @@ Provider::createTypeDescriptionEnumeration(
css::reflection::NoSuchTypeNameException,
css::reflection::InvalidTypeNameException, css::uno::RuntimeException)
{
- rtl::OUString prefix;
- rtl::Reference< cppu::unoidl::MapCursor > cursor;
- if (moduleName.isEmpty()) {
- cursor = provider_->createRootCursor();
- } else {
- prefix = moduleName + ".";
- bool cnst;
- sal_uInt32 off = provider_->find(moduleName, &cnst);
- if (off == 0) {
- throw css::reflection::NoSuchTypeNameException(
- moduleName, static_cast< cppu::OWeakObject * >(this));
- }
- if (cnst) {
- throw css::reflection::InvalidTypeNameException(
- moduleName, static_cast< cppu::OWeakObject * >(this));
- }
- rtl::Reference< cppu::unoidl::Entity > ent(provider_->getEntity(off));
- if (ent->getSort() != cppu::unoidl::Entity::SORT_MODULE) {
- throw css::reflection::InvalidTypeNameException(
- moduleName, static_cast< cppu::OWeakObject * >(this));
+ try {
+ rtl::OUString prefix;
+ rtl::Reference< unoidl::MapCursor > cursor;
+ if (moduleName.isEmpty()) {
+ cursor = provider_->createRootCursor();
+ } else {
+ prefix = moduleName + ".";
+ bool cnst;
+ sal_uInt32 off = provider_->find(moduleName, &cnst);
+ if (off == 0) {
+ throw css::reflection::NoSuchTypeNameException(
+ moduleName, static_cast< cppu::OWeakObject * >(this));
+ }
+ if (cnst) {
+ throw css::reflection::InvalidTypeNameException(
+ moduleName, static_cast< cppu::OWeakObject * >(this));
+ }
+ rtl::Reference< unoidl::Entity > ent(provider_->getEntity(off));
+ if (ent->getSort() != unoidl::Entity::SORT_MODULE) {
+ throw css::reflection::InvalidTypeNameException(
+ moduleName, static_cast< cppu::OWeakObject * >(this));
+ }
+ cursor = static_cast< unoidl::ModuleEntity * >(ent.get())->
+ createCursor();
}
- cursor = static_cast< cppu::unoidl::ModuleEntity * >(ent.get())->
- createCursor();
+ return new Enumeration(
+ context_, prefix, cursor, types,
+ depth == css::reflection::TypeDescriptionSearchDepth_INFINITE);
+ } catch (unoidl::FileFormatException & e) {
+ throw css::uno::DeploymentException(
+ e.getUri() + ": " + e.getDetail(),
+ static_cast< cppu::OWeakObject * >(this));
}
- return new Enumeration(
- context_, prefix, cursor, types,
- depth == css::reflection::TypeDescriptionSearchDepth_INFINITE);
}
css::uno::Reference< css::container::XHierarchicalNameAccess >
@@ -1916,7 +1980,7 @@ void readRdbFile(
css::uno::Reference< css::container::XHierarchicalNameAccess > prov;
try {
prov = new Provider(context, uri);
- } catch (css::container::NoSuchElementException &) {
+ } catch (unoidl::NoSuchFileException &) {
if (optional) {
SAL_INFO("cppuhelper", "Ignored optional " << uri);
return;
@@ -1924,7 +1988,7 @@ void readRdbFile(
throw css::uno::DeploymentException(
uri + ": no such file",
css::uno::Reference< css::uno::XInterface >());
- } catch (css::registry::InvalidRegistryException &) {
+ } catch (unoidl::FileFormatException &) {
prov = readLegacyRdbFile(uri, serviceManager, context);
}
assert(prov.is());
diff --git a/cppuhelper/source/unoidlprovider.hxx b/cppuhelper/source/unoidlprovider.hxx
deleted file mode 100644
index 45089b9d688b..000000000000
--- a/cppuhelper/source/unoidlprovider.hxx
+++ /dev/null
@@ -1,54 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#ifndef INCLUDED_CPPUHELPER_SOURCE_UNOIDLPROVIDER_HXX
-#define INCLUDED_CPPUHELPER_SOURCE_UNOIDLPROVIDER_HXX
-
-#include "sal/config.h"
-
-#include "cppuhelper/unoidl.hxx"
-#include "rtl/ref.hxx"
-#include "sal/types.h"
-
-namespace com { namespace sun { namespace star { namespace uno {
- class Any;
-} } } }
-namespace cppu {
- class MappedFile;
- struct MapEntry;
-}
-namespace rtl { class OUString; }
-
-namespace cppu {
-
-class UnoidlProvider: public unoidl::Provider {
-public:
- explicit UnoidlProvider(rtl::OUString const & uri);
-
- virtual rtl::Reference< unoidl::MapCursor > createRootCursor() const;
-
- sal_uInt32 find(rtl::OUString const & name, bool * constant = 0) const;
-
- rtl::Reference< unoidl::Entity > getEntity(sal_uInt32 offset) const;
-
- css::uno::Any getConstant(sal_uInt32 offset) const;
-
-private:
- virtual ~UnoidlProvider() throw ();
-
- rtl::Reference< MappedFile > file_;
- MapEntry const * mapBegin_;
- sal_uInt32 mapSize_;
-};
-
-}
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/inc/sal/log-areas.dox b/sal/inc/sal/log-areas.dox
index 647bf8d11e1d..384f211dd915 100644
--- a/sal/inc/sal/log-areas.dox
+++ b/sal/inc/sal/log-areas.dox
@@ -290,6 +290,7 @@ certain functionality.
@li @c svg
@li @c svx
@li @c ucbhelper
+@li @c unoidl
@li @c xmlhelp
@li @c xmloff
@li @c xmlreader
diff --git a/scp2/source/ooo/ure.scp b/scp2/source/ooo/ure.scp
index ea409f373e79..c24225c00203 100755
--- a/scp2/source/ooo/ure.scp
+++ b/scp2/source/ooo/ure.scp
@@ -277,6 +277,13 @@ File gid_File_Dl_Store
End
+File gid_File_Dl_Unoidl
+ LIB_FILE_BODY;
+ Dir = SCP2_URE_DL_DIR;
+ Name = SCP2_URE_DL_NORMAL("unoidl");
+ Styles = (PACKED);
+End
+
File gid_File_Dl_Xmlreader
LIB_FILE_BODY;
Dir = SCP2_URE_DL_DIR;
@@ -998,6 +1005,7 @@ Module gid_Module_Root_Ure_Hidden
gid_Unixlink_File_Dl_Rmcxt,
gid_File_Dl_Store,
gid_Unixlink_File_Dl_Store,
+ gid_File_Dl_Unoidl,
gid_File_Dl_Xmlreader,
gid_File_Dl_Jvmaccess,
gid_Unixlink_File_Dl_Jvmaccess,
diff --git a/unoidl/Library_unoidl.mk b/unoidl/Library_unoidl.mk
new file mode 100644
index 000000000000..8a7a668299e7
--- /dev/null
+++ b/unoidl/Library_unoidl.mk
@@ -0,0 +1,26 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+$(eval $(call gb_Library_Library,unoidl))
+
+$(eval $(call gb_Library_add_defs,unoidl,-DLO_DLLIMPLEMENTATION_UNOIDL))
+
+$(eval $(call gb_Library_add_exception_objects,unoidl, \
+ unoidl/source/unoidl \
+ unoidl/source/unoidlprovider \
+))
+
+$(eval $(call gb_Library_use_libraries,unoidl, \
+ sal \
+ salhelper \
+))
+
+$(eval $(call gb_Library_use_package,unoidl,unoidl_inc))
+
+# vim: set noet sw=4 ts=4:
diff --git a/unoidl/Makefile b/unoidl/Makefile
new file mode 100644
index 000000000000..0997e628485b
--- /dev/null
+++ b/unoidl/Makefile
@@ -0,0 +1,14 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+module_directory:=$(dir $(realpath $(firstword $(MAKEFILE_LIST))))
+
+include $(module_directory)/../solenv/gbuild/partial_build.mk
+
+# vim: set noet sw=4 ts=4:
diff --git a/unoidl/Module_unoidl.mk b/unoidl/Module_unoidl.mk
new file mode 100644
index 000000000000..7017b80a897c
--- /dev/null
+++ b/unoidl/Module_unoidl.mk
@@ -0,0 +1,17 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+$(eval $(call gb_Module_Module,unoidl))
+
+$(eval $(call gb_Module_add_targets,unoidl, \
+ Library_unoidl \
+ Package_inc \
+))
+
+# vim: set noet sw=4 ts=4:
diff --git a/unoidl/Package_inc.mk b/unoidl/Package_inc.mk
new file mode 100644
index 000000000000..563ae365d07c
--- /dev/null
+++ b/unoidl/Package_inc.mk
@@ -0,0 +1,16 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+$(eval $(call gb_Package_Package,unoidl_inc,$(SRCDIR)/unoidl/inc/unoidl))
+
+$(eval $(call gb_Package_add_file,unoidl_inc,inc/unoidl/detail/dllapi.hxx,detail/dllapi.hxx))
+$(eval $(call gb_Package_add_file,unoidl_inc,inc/unoidl/unoidl.hxx,unoidl.hxx))
+$(eval $(call gb_Package_add_file,unoidl_inc,inc/unoidl/unoidlprovider.hxx,unoidlprovider.hxx))
+
+# vim: set noet sw=4 ts=4:
diff --git a/unoidl/inc/unoidl/detail/dllapi.hxx b/unoidl/inc/unoidl/detail/dllapi.hxx
new file mode 100644
index 000000000000..ad011ad4eb77
--- /dev/null
+++ b/unoidl/inc/unoidl/detail/dllapi.hxx
@@ -0,0 +1,26 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+
+#ifndef INCLUDED_UNOIDL_DETAIL_DLLAPI_HXX
+#define INCLUDED_UNOIDL_DETAIL_DLLAPI_HXX
+
+#include "sal/config.h"
+
+#include "sal/types.h"
+
+#if defined LO_DLLIMPLEMENTATION_UNOIDL
+#define LO_DLLPUBLIC_UNOIDL SAL_DLLPUBLIC_EXPORT
+#else
+#define LO_DLLPUBLIC_UNOIDL SAL_DLLPUBLIC_IMPORT
+#endif
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/unoidl/inc/unoidl/detail/unoidldllapi.hxx b/unoidl/inc/unoidl/detail/unoidldllapi.hxx
new file mode 100644
index 000000000000..cfb1e90fd488
--- /dev/null
+++ b/unoidl/inc/unoidl/detail/unoidldllapi.hxx
@@ -0,0 +1,26 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+
+#ifndef INCLUDED_UNOIDL_DETAIL_UNOIDLDLLAPI_HXX
+#define INCLUDED_UNOIDL_DETAIL_UNOIDLDLLAPI_HXX
+
+#include "sal/config.h"
+
+#include "sal/types.h"
+
+#if defined LO_DLLIMPLEMENTATION_UNOIDL
+#define LO_DLLPUBLIC_UNOIDL SAL_DLLPUBLIC_EXPORT
+#else
+#define LO_DLLPUBLIC_UNOIDL SAL_DLLPUBLIC_IMPORT
+#endif
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/cppuhelper/inc/cppuhelper/unoidl.hxx b/unoidl/inc/unoidl/unoidl.hxx
index 589f8462063a..372ed3889ade 100644
--- a/cppuhelper/inc/cppuhelper/unoidl.hxx
+++ b/unoidl/inc/unoidl/unoidl.hxx
@@ -7,38 +7,71 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
-#ifndef INCLUDED_CPPUHELPER_UNOIDL_HXX
-#define INCLUDED_CPPUHELPER_UNOIDL_HXX
+#ifndef INCLUDED_UNOIDL_UNOIDL_HXX
+#define INCLUDED_UNOIDL_UNOIDL_HXX
#include "sal/config.h"
#include <cassert>
#include <vector>
-#include "com/sun/star/uno/Any.hxx"
-#include "cppuhelper/cppuhelperdllapi.h"
#include "rtl/ref.hxx"
#include "rtl/ustring.hxx"
#include "sal/types.h"
#include "salhelper/simplereferenceobject.hxx"
+#include "unoidl/detail/dllapi.hxx"
-namespace cppu { namespace unoidl {
+namespace unoidl {
-class CPPUHELPER_DLLPUBLIC Entity: public salhelper::SimpleReferenceObject {
+class LO_DLLPUBLIC_UNOIDL NoSuchFileException {
+public:
+ SAL_DLLPRIVATE NoSuchFileException(rtl::OUString const & uri): uri_(uri) {}
+
+ SAL_DLLPRIVATE NoSuchFileException(NoSuchFileException const & other):
+ uri_(other.uri_) {}
+
+ virtual SAL_DLLPRIVATE ~NoSuchFileException() throw ();
+
+ rtl::OUString getUri() const { return uri_; }
+
+private:
+ void operator =(NoSuchFileException) SAL_DELETED_FUNCTION;
+
+ rtl::OUString uri_;
+};
+
+class LO_DLLPUBLIC_UNOIDL FileFormatException {
+public:
+ SAL_DLLPRIVATE FileFormatException(
+ rtl::OUString const & uri, rtl::OUString const & detail):
+ uri_(uri), detail_(detail)
+ {}
+
+ SAL_DLLPRIVATE FileFormatException(FileFormatException const & other):
+ uri_(other.uri_), detail_(other.detail_)
+ {}
+
+ virtual SAL_DLLPRIVATE ~FileFormatException() throw ();
+
+ rtl::OUString getUri() const { return uri_; }
+
+ rtl::OUString getDetail() const { return detail_; }
+
+private:
+ void operator =(FileFormatException) SAL_DELETED_FUNCTION;
+
+ rtl::OUString uri_;
+ rtl::OUString detail_;
+};
+
+class LO_DLLPUBLIC_UNOIDL Entity: public salhelper::SimpleReferenceObject {
public:
enum Sort {
- SORT_MODULE,
- SORT_ENUM_TYPE,
- SORT_PLAIN_STRUCT_TYPE,
- SORT_POLYMORPHIC_STRUCT_TYPE_TEMPLATE,
- SORT_EXCEPTION_TYPE,
- SORT_INTERFACE_TYPE,
- SORT_TYPEDEF,
- SORT_CONSTANT_GROUP,
- SORT_SINGLE_INTERFACE_BASED_SERVICE,
- SORT_ACCUMULATION_BASED_SERVICE,
- SORT_INTERFACE_BASED_SINGLETON,
- SORT_SERVICE_BASED_SINGLETON
+ SORT_MODULE, SORT_ENUM_TYPE, SORT_PLAIN_STRUCT_TYPE,
+ SORT_POLYMORPHIC_STRUCT_TYPE_TEMPLATE, SORT_EXCEPTION_TYPE,
+ SORT_INTERFACE_TYPE, SORT_TYPEDEF, SORT_CONSTANT_GROUP,
+ SORT_SINGLE_INTERFACE_BASED_SERVICE, SORT_ACCUMULATION_BASED_SERVICE,
+ SORT_INTERFACE_BASED_SINGLETON, SORT_SERVICE_BASED_SINGLETON
};
Sort getSort() const { return sort_; }
@@ -52,8 +85,9 @@ private:
Sort sort_;
};
-class CPPUHELPER_DLLPUBLIC MapCursor: public salhelper::SimpleReferenceObject {
+class LO_DLLPUBLIC_UNOIDL MapCursor: public salhelper::SimpleReferenceObject {
public:
+ // throws FileFormatException:
virtual rtl::Reference< Entity > getNext(rtl::OUString * name) = 0;
protected:
@@ -62,10 +96,12 @@ protected:
virtual SAL_DLLPRIVATE ~MapCursor() throw();
};
-class CPPUHELPER_DLLPUBLIC ModuleEntity: public Entity {
+class LO_DLLPUBLIC_UNOIDL ModuleEntity: public Entity {
public:
+ // throws FileFormatException:
virtual std::vector< rtl::OUString > getMemberNames() const = 0;
+ // throws FileFormatException:
virtual rtl::Reference< MapCursor > createCursor() const = 0;
protected:
@@ -74,7 +110,7 @@ protected:
virtual SAL_DLLPRIVATE ~ModuleEntity() throw ();
};
-class CPPUHELPER_DLLPUBLIC PublishableEntity: public Entity {
+class LO_DLLPUBLIC_UNOIDL PublishableEntity: public Entity {
public:
bool isPublished() const { return published_; }
@@ -89,7 +125,7 @@ private:
bool published_;
};
-class CPPUHELPER_DLLPUBLIC EnumTypeEntity: public PublishableEntity {
+class LO_DLLPUBLIC_UNOIDL EnumTypeEntity: public PublishableEntity {
public:
struct Member {
Member(rtl::OUString const & theName, sal_Int32 theValue):
@@ -114,7 +150,7 @@ private:
std::vector< Member > members_;
};
-class CPPUHELPER_DLLPUBLIC PlainStructTypeEntity: public PublishableEntity {
+class LO_DLLPUBLIC_UNOIDL PlainStructTypeEntity: public PublishableEntity {
public:
struct Member {
Member(rtl::OUString const & theName, rtl::OUString const & theType):
@@ -145,7 +181,7 @@ private:
std::vector< Member > directMembers_;
};
-class CPPUHELPER_DLLPUBLIC PolymorphicStructTypeTemplateEntity:
+class LO_DLLPUBLIC_UNOIDL PolymorphicStructTypeTemplateEntity:
public PublishableEntity
{
public:
@@ -182,7 +218,7 @@ private:
std::vector< Member > members_;
};
-class CPPUHELPER_DLLPUBLIC ExceptionTypeEntity: public PublishableEntity {
+class LO_DLLPUBLIC_UNOIDL ExceptionTypeEntity: public PublishableEntity {
public:
struct Member {
Member(rtl::OUString const & theName, rtl::OUString const & theType):
@@ -213,7 +249,7 @@ private:
std::vector< Member > directMembers_;
};
-class CPPUHELPER_DLLPUBLIC InterfaceTypeEntity: public PublishableEntity {
+class LO_DLLPUBLIC_UNOIDL InterfaceTypeEntity: public PublishableEntity {
public:
struct Attribute {
Attribute(
@@ -306,7 +342,7 @@ private:
std::vector< Method > directMethods_;
};
-class CPPUHELPER_DLLPUBLIC TypedefEntity: public PublishableEntity {
+class LO_DLLPUBLIC_UNOIDL TypedefEntity: public PublishableEntity {
public:
SAL_DLLPRIVATE TypedefEntity(bool published, rtl::OUString const & type):
PublishableEntity(SORT_TYPEDEF, published), type_(type)
@@ -320,16 +356,69 @@ private:
rtl::OUString type_;
};
-class CPPUHELPER_DLLPUBLIC ConstantGroupEntity: public PublishableEntity {
+struct LO_DLLPUBLIC_UNOIDL ConstantValue {
+ enum Type {
+ TYPE_BOOLEAN, TYPE_BYTE, TYPE_SHORT, TYPE_UNSIGNED_SHORT, TYPE_LONG,
+ TYPE_UNSIGNED_LONG, TYPE_HYPER, TYPE_UNSIGNED_HYPER, TYPE_FLOAT,
+ TYPE_DOUBLE };
+
+ explicit ConstantValue(bool value): type(TYPE_BOOLEAN), booleanValue(value)
+ {}
+
+ explicit ConstantValue(sal_Int8 value): type(TYPE_BYTE), byteValue(value) {}
+
+ explicit ConstantValue(sal_Int16 value): type(TYPE_SHORT), shortValue(value)
+ {}
+
+ explicit ConstantValue(sal_uInt16 value):
+ type(TYPE_UNSIGNED_SHORT), unsignedShortValue(value)
+ {}
+
+ explicit ConstantValue(sal_Int32 value): type(TYPE_LONG), longValue(value)
+ {}
+
+ explicit ConstantValue(sal_uInt32 value):
+ type(TYPE_UNSIGNED_LONG), unsignedLongValue(value)
+ {}
+
+ explicit ConstantValue(sal_Int64 value): type(TYPE_HYPER), hyperValue(value)
+ {}
+
+ explicit ConstantValue(sal_uInt64 value):
+ type(TYPE_UNSIGNED_HYPER), unsignedHyperValue(value)
+ {}
+
+ explicit ConstantValue(float value): type(TYPE_FLOAT), floatValue(value) {}
+
+ explicit ConstantValue(double value): type(TYPE_DOUBLE), doubleValue(value)
+ {}
+
+ Type type;
+
+ union {
+ bool booleanValue;
+ sal_Int8 byteValue;
+ sal_Int16 shortValue;
+ sal_uInt16 unsignedShortValue;
+ sal_Int32 longValue;
+ sal_uInt32 unsignedLongValue;
+ sal_Int64 hyperValue;
+ sal_uInt64 unsignedHyperValue;
+ float floatValue;
+ double doubleValue;
+ };
+};
+
+class LO_DLLPUBLIC_UNOIDL ConstantGroupEntity: public PublishableEntity {
public:
struct Member {
- Member(rtl::OUString const & theName, css::uno::Any const & theValue):
+ Member(rtl::OUString const & theName, ConstantValue const & theValue):
name(theName), value(theValue)
{}
rtl::OUString name;
- css::uno::Any value;
+ ConstantValue value;
};
SAL_DLLPRIVATE ConstantGroupEntity(
@@ -345,7 +434,7 @@ private:
std::vector< Member > members_;
};
-class CPPUHELPER_DLLPUBLIC SingleInterfaceBasedServiceEntity:
+class LO_DLLPUBLIC_UNOIDL SingleInterfaceBasedServiceEntity:
public PublishableEntity
{
public:
@@ -402,7 +491,7 @@ private:
std::vector< Constructor > constructors_;
};
-class CPPUHELPER_DLLPUBLIC AccumulationBasedServiceEntity:
+class LO_DLLPUBLIC_UNOIDL AccumulationBasedServiceEntity:
public PublishableEntity
{
public:
@@ -473,7 +562,7 @@ private:
std::vector< Property > directProperties_;
};
-class CPPUHELPER_DLLPUBLIC InterfaceBasedSingletonEntity:
+class LO_DLLPUBLIC_UNOIDL InterfaceBasedSingletonEntity:
public PublishableEntity
{
public:
@@ -491,7 +580,7 @@ private:
rtl::OUString base_;
};
-class CPPUHELPER_DLLPUBLIC ServiceBasedSingletonEntity: public PublishableEntity
+class LO_DLLPUBLIC_UNOIDL ServiceBasedSingletonEntity: public PublishableEntity
{
public:
SAL_DLLPRIVATE ServiceBasedSingletonEntity(
@@ -507,8 +596,9 @@ private:
rtl::OUString base_;
};
-class CPPUHELPER_DLLPUBLIC Provider: public salhelper::SimpleReferenceObject {
+class LO_DLLPUBLIC_UNOIDL Provider: public salhelper::SimpleReferenceObject {
public:
+ // throws FileFormatException:
virtual rtl::Reference< MapCursor > createRootCursor() const = 0;
protected:
@@ -517,10 +607,11 @@ protected:
virtual SAL_DLLPRIVATE ~Provider() throw ();
};
-CPPUHELPER_DLLPUBLIC rtl::Reference< Provider > loadProvider(
+// throws FileFormatException, NoSuchFileException:
+LO_DLLPUBLIC_UNOIDL rtl::Reference< Provider > loadProvider(
rtl::OUString const & uri);
-} }
+}
#endif
diff --git a/unoidl/inc/unoidl/unoidlprovider.hxx b/unoidl/inc/unoidl/unoidlprovider.hxx
new file mode 100644
index 000000000000..07388a604034
--- /dev/null
+++ b/unoidl/inc/unoidl/unoidlprovider.hxx
@@ -0,0 +1,57 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#ifndef INCLUDED_UNOIDL_UNOIDLPROVIDER_HXX
+#define INCLUDED_UNOIDL_UNOIDLPROVIDER_HXX
+
+#include "sal/config.h"
+
+#include "rtl/ref.hxx"
+#include "sal/types.h"
+#include "unoidl/detail/dllapi.hxx"
+#include "unoidl/unoidl.hxx"
+
+namespace rtl { class OUString; }
+namespace unoidl { namespace detail {
+ class MappedFile;
+ struct MapEntry;
+} }
+
+namespace unoidl {
+
+class LO_DLLPUBLIC_UNOIDL UnoidlProvider: public Provider {
+public:
+ // throws FileFormatException, NoSuchFileException:
+ explicit UnoidlProvider(rtl::OUString const & uri);
+
+ // throws FileFormatException:
+ virtual rtl::Reference< MapCursor > createRootCursor() const;
+
+ // throws FileFormatException:
+ sal_uInt32 find(rtl::OUString const & name, bool * constant = 0) const;
+
+ // throws FileFormatException:
+ rtl::Reference< Entity > getEntity(sal_uInt32 offset) const;
+
+ // throws FileFormatException:
+ ConstantValue getConstant(sal_uInt32 offset) const;
+
+private:
+ virtual SAL_DLLPRIVATE ~UnoidlProvider() throw ();
+
+ rtl::Reference< detail::MappedFile > file_;
+ detail::MapEntry const * mapBegin_;
+ sal_uInt32 mapSize_;
+};
+
+}
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/unoidl/prj/build.lst b/unoidl/prj/build.lst
new file mode 100644
index 000000000000..32409d2a0b63
--- /dev/null
+++ b/unoidl/prj/build.lst
@@ -0,0 +1,2 @@
+un unoidl: sal salhelper NULL
+un unoidl\prj nmake - all un_prj NULL
diff --git a/unoidl/prj/d.lst b/unoidl/prj/d.lst
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/unoidl/prj/d.lst
diff --git a/cppuhelper/source/unoidl.cxx b/unoidl/source/unoidl.cxx
index b9109af0416f..f34eee0ae7a6 100644
--- a/cppuhelper/source/unoidl.cxx
+++ b/unoidl/source/unoidl.cxx
@@ -11,13 +11,16 @@
#include <vector>
-#include "cppuhelper/unoidl.hxx"
#include "rtl/ref.hxx"
#include "rtl/ustring.hxx"
+#include "unoidl/unoidl.hxx"
+#include "unoidl/unoidlprovider.hxx"
-#include "unoidlprovider.hxx"
+namespace unoidl {
-namespace cppu { namespace unoidl {
+NoSuchFileException::~NoSuchFileException() throw () {}
+
+FileFormatException::~FileFormatException() throw () {}
Entity::~Entity() throw () {}
@@ -54,10 +57,10 @@ ServiceBasedSingletonEntity::~ServiceBasedSingletonEntity() throw () {}
Provider::~Provider() throw () {}
-rtl::Reference< Provider > loadProvider(rtl::OUString const & uri) {
+rtl::Reference< Provider > loadProvider(OUString const & uri) {
return new UnoidlProvider(uri);
}
-} }
+}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/cppuhelper/source/unoidlprovider.cxx b/unoidl/source/unoidlprovider.cxx
index 12b497490c87..03daf5aac222 100644
--- a/cppuhelper/source/unoidlprovider.cxx
+++ b/unoidl/source/unoidlprovider.cxx
@@ -14,13 +14,6 @@
#include <cstring>
#include <vector>
-#include "com/sun/star/container/NoSuchElementException.hpp"
-#include "com/sun/star/registry/InvalidRegistryException.hpp"
-#include "com/sun/star/uno/Any.hxx"
-#include "com/sun/star/uno/DeploymentException.hpp"
-#include "com/sun/star/uno/Reference.hxx"
-#include "com/sun/star/uno/XInterface.hpp"
-#include "cppuhelper/unoidl.hxx"
#include "osl/endian.h"
#include "osl/file.h"
#include "rtl/ref.hxx"
@@ -28,8 +21,8 @@
#include "sal/log.hxx"
#include "sal/types.h"
#include "salhelper/simplereferenceobject.hxx"
-
-#include "unoidlprovider.hxx"
+#include "unoidl/unoidl.hxx"
+#include "unoidl/unoidlprovider.hxx"
// New binary format:
//
@@ -292,11 +285,13 @@ struct Memory64 {
}
-namespace cppu {
+namespace unoidl {
+
+namespace detail {
class MappedFile: public salhelper::SimpleReferenceObject {
public:
- explicit MappedFile(rtl::OUString const & fileUrl);
+ explicit MappedFile(OUString const & fileUrl);
sal_uInt8 read8(sal_uInt32 offset) const;
@@ -310,11 +305,11 @@ public:
double readIso60599Binary64(sal_uInt32 offset) const;
- rtl::OUString readNameNul(sal_uInt32 offset) const;
+ OUString readNameNul(sal_uInt32 offset) const;
- rtl::OUString readNameLen(sal_uInt32 offset, sal_uInt32 * newOffset = 0)
- const;
+ OUString readNameLen(sal_uInt32 offset, sal_uInt32 * newOffset = 0) const;
+ OUString uri;
oslFileHandle handle;
sal_uInt64 size;
void * address;
@@ -335,19 +330,15 @@ private:
double getIso60599Binary64(sal_uInt32 offset) const;
};
-MappedFile::MappedFile(rtl::OUString const & fileUrl) {
- oslFileError e = osl_openFile(
- fileUrl.pData, &handle, osl_File_OpenFlag_Read);
+MappedFile::MappedFile(OUString const & fileUrl): uri(fileUrl) {
+ oslFileError e = osl_openFile(uri.pData, &handle, osl_File_OpenFlag_Read);
switch (e) {
case osl_File_E_None:
break;
case osl_File_E_NOENT:
- throw css::container::NoSuchElementException(
- fileUrl, css::uno::Reference< css::uno::XInterface >());
+ throw NoSuchFileException(uri);
default:
- throw css::uno::RuntimeException(
- "cannot open " + fileUrl + ": " + rtl::OUString::number(e),
- css::uno::Reference< css::uno::XInterface >());
+ throw FileFormatException(uri, "cannot open: " + OUString::number(e));
}
e = osl_getFileSize(handle, &size);
if (e == osl_File_E_None) {
@@ -357,20 +348,17 @@ MappedFile::MappedFile(rtl::OUString const & fileUrl) {
if (e != osl_File_E_None) {
oslFileError e2 = osl_closeFile(handle);
SAL_WARN_IF(
- e2 != osl_File_E_None, "cppuhelper",
- "cannot close " << fileUrl << ": " << +e2);
- throw css::uno::RuntimeException(
- "cannot mmap " + fileUrl + ": " + rtl::OUString::number(e),
- css::uno::Reference< css::uno::XInterface >());
+ e2 != osl_File_E_None, "unoidl",
+ "cannot close " << uri << ": " << +e2);
+ throw FileFormatException(uri, "cannot mmap: " + OUString::number(e));
}
}
sal_uInt8 MappedFile::read8(sal_uInt32 offset) const {
assert(size >= 8);
if (offset > size - 1) {
- throw css::uno::DeploymentException(
- "broken UNOIDL file: offset for 8-bit value too large",
- css::uno::Reference< css::uno::XInterface >());
+ throw FileFormatException(
+ uri, "UNOIDL format: offset for 8-bit value too large");
}
return get8(offset);
}
@@ -378,9 +366,8 @@ sal_uInt8 MappedFile::read8(sal_uInt32 offset) const {
sal_uInt16 MappedFile::read16(sal_uInt32 offset) const {
assert(size >= 8);
if (offset > size - 2) {
- throw css::uno::DeploymentException(
- "broken UNOIDL file: offset for 16-bit value too large",
- css::uno::Reference< css::uno::XInterface >());
+ throw FileFormatException(
+ uri, "UNOIDL format: offset for 16-bit value too large");
}
return get16(offset);
}
@@ -388,9 +375,8 @@ sal_uInt16 MappedFile::read16(sal_uInt32 offset) const {
sal_uInt32 MappedFile::read32(sal_uInt32 offset) const {
assert(size >= 8);
if (offset > size - 4) {
- throw css::uno::DeploymentException(
- "broken UNOIDL file: offset for 32-bit value too large",
- css::uno::Reference< css::uno::XInterface >());
+ throw FileFormatException(
+ uri, "UNOIDL format: offset for 32-bit value too large");
}
return get32(offset);
}
@@ -398,9 +384,8 @@ sal_uInt32 MappedFile::read32(sal_uInt32 offset) const {
sal_uInt64 MappedFile::read64(sal_uInt32 offset) const {
assert(size >= 8);
if (offset > size - 8) {
- throw css::uno::DeploymentException(
- "broken UNOIDL file: offset for 64-bit value too large",
- css::uno::Reference< css::uno::XInterface >());
+ throw FileFormatException(
+ uri, "UNOIDL format: offset for 64-bit value too large");
}
return get64(offset);
}
@@ -408,9 +393,8 @@ sal_uInt64 MappedFile::read64(sal_uInt32 offset) const {
float MappedFile::readIso60599Binary32(sal_uInt32 offset) const {
assert(size >= 8);
if (offset > size - 4) {
- throw css::uno::DeploymentException(
- "broken UNOIDL file: offset for 32-bit value too large",
- css::uno::Reference< css::uno::XInterface >());
+ throw FileFormatException(
+ uri, "UNOIDL format: offset for 32-bit value too large");
}
return getIso60599Binary32(offset);
}
@@ -418,36 +402,31 @@ float MappedFile::readIso60599Binary32(sal_uInt32 offset) const {
double MappedFile::readIso60599Binary64(sal_uInt32 offset) const {
assert(size >= 8);
if (offset > size - 8) {
- throw css::uno::DeploymentException(
- "broken UNOIDL file: offset for 64-bit value too large",
- css::uno::Reference< css::uno::XInterface >());
+ throw FileFormatException(
+ uri, "UNOIDL format: offset for 64-bit value too large");
}
return getIso60599Binary64(offset);
}
-rtl::OUString MappedFile::readNameNul(sal_uInt32 offset) const {
+OUString MappedFile::readNameNul(sal_uInt32 offset) const {
if (offset > size) {
- throw css::uno::DeploymentException(
- "broken UNOIDL file: offset for string too large",
- css::uno::Reference< css::uno::XInterface >());
+ throw FileFormatException(
+ uri, "UNOIDL format: offset for string too large");
}
sal_uInt64 end = offset;
for (;; ++end) {
if (end == size) {
- throw css::uno::DeploymentException(
- "broken UNOIDL file: string misses trailing NUL",
- css::uno::Reference< css::uno::XInterface >());
+ throw FileFormatException(
+ uri, "UNOIDL format: string misses trailing NUL");
}
if (static_cast< char const * >(address)[end] == 0) {
break;
}
}
if (end - offset > SAL_MAX_INT32) {
- throw css::uno::DeploymentException(
- "broken UNOIDL file: string too long",
- css::uno::Reference< css::uno::XInterface >());
+ throw FileFormatException(uri, "UNOIDL format: string too long");
}
- rtl::OUString name;
+ OUString name;
if (!rtl_convertStringToUString(
&name.pData, static_cast< char const * >(address) + offset,
end - offset, RTL_TEXTENCODING_ASCII_US,
@@ -455,14 +434,12 @@ rtl::OUString MappedFile::readNameNul(sal_uInt32 offset) const {
| RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
| RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR)))
{
- throw css::uno::DeploymentException(
- "broken UNOIDL file: name is not ASCII",
- css::uno::Reference< css::uno::XInterface >());
+ throw FileFormatException(uri, "UNOIDL format: name is not ASCII");
}
return name;
}
-rtl::OUString MappedFile::readNameLen(sal_uInt32 offset, sal_uInt32 * newOffset)
+OUString MappedFile::readNameLen(sal_uInt32 offset, sal_uInt32 * newOffset)
const
{
sal_uInt32 len = read32(offset);
@@ -473,9 +450,8 @@ rtl::OUString MappedFile::readNameLen(sal_uInt32 offset, sal_uInt32 * newOffset)
offset = len;
len = read32(offset);
if ((len & 0x80000000) == 0) {
- throw css::uno::DeploymentException(
- "broken UNOIDL file: name length high bit unset",
- css::uno::Reference< css::uno::XInterface >());
+ throw FileFormatException(
+ uri, "UNOIDL format: name length high bit unset");
}
len &= ~0x80000000;
} else {
@@ -485,11 +461,10 @@ rtl::OUString MappedFile::readNameLen(sal_uInt32 offset, sal_uInt32 * newOffset)
}
}
if (len > SAL_MAX_INT32 || len > size - offset - 4) {
- throw css::uno::DeploymentException(
- "broken UNOIDL file: size of name is too large",
- css::uno::Reference< css::uno::XInterface >());
+ throw FileFormatException(
+ uri, "UNOIDL format: size of name is too large");
}
- rtl::OUString name;
+ OUString name;
if (!rtl_convertStringToUString(
&name.pData, static_cast< char const * >(address) + offset + 4, len,
RTL_TEXTENCODING_ASCII_US,
@@ -497,18 +472,16 @@ rtl::OUString MappedFile::readNameLen(sal_uInt32 offset, sal_uInt32 * newOffset)
| RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
| RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR)))
{
- throw css::uno::DeploymentException(
- "broken UNOIDL file: name is not ASCII",
- css::uno::Reference< css::uno::XInterface >());
+ throw FileFormatException(uri, "UNOIDL format: name is not ASCII");
}
return name;
}
MappedFile::~MappedFile() {
oslFileError e = osl_unmapMappedFile(handle, address, size);
- SAL_WARN_IF(e != osl_File_E_None, "cppuhelper", "cannot unmap: " << +e);
+ SAL_WARN_IF(e != osl_File_E_None, "unoidl", "cannot unmap: " << +e);
e = osl_closeFile(handle);
- SAL_WARN_IF(e != osl_File_E_None, "cppuhelper", "cannot close: " << +e);
+ SAL_WARN_IF(e != osl_File_E_None, "unoidl", "cannot close: " << +e);
}
sal_uInt8 MappedFile::get8(sal_uInt32 offset) const {
@@ -558,21 +531,22 @@ struct MapEntry {
Memory32 data;
};
+}
+
namespace {
enum Compare { COMPARE_LESS, COMPARE_GREATER, COMPARE_EQUAL };
Compare compare(
- rtl::Reference< MappedFile > const & file, rtl::OUString const & name,
- sal_Int32 nameOffset, sal_Int32 nameLength, MapEntry const * entry)
+ rtl::Reference< detail::MappedFile > const & file, OUString const & name,
+ sal_Int32 nameOffset, sal_Int32 nameLength, detail::MapEntry const * entry)
{
assert(file.is());
assert(entry != 0);
sal_uInt32 off = entry->name.getUnsigned32();
if (off > file->size - 1) { // at least a trailing NUL
- throw css::uno::DeploymentException(
- "broken UNOIDL file: string offset too large",
- css::uno::Reference< css::uno::XInterface >());
+ throw FileFormatException(
+ file->uri, "UNOIDL format: string offset too large");
}
assert(nameLength >= 0);
sal_uInt64 min = std::min(
@@ -591,9 +565,8 @@ Compare compare(
}
if (static_cast< sal_uInt64 >(nameLength) == min) {
if (file->size - off == min) {
- throw css::uno::DeploymentException(
- "broken UNOIDL file: string misses trailing NUL",
- css::uno::Reference< css::uno::XInterface >());
+ throw FileFormatException(
+ file->uri, "UNOIDL format: string misses trailing NUL");
}
return
static_cast< unsigned char const * >(file->address)[off + min] == 0
@@ -604,15 +577,15 @@ Compare compare(
}
sal_uInt32 findInMap(
- rtl::Reference< MappedFile > const & file, MapEntry const * mapBegin,
- sal_uInt32 mapSize, rtl::OUString const & name, sal_Int32 nameOffset,
- sal_Int32 nameLength)
+ rtl::Reference< detail::MappedFile > const & file,
+ detail::MapEntry const * mapBegin, sal_uInt32 mapSize,
+ OUString const & name, sal_Int32 nameOffset, sal_Int32 nameLength)
{
if (mapSize == 0) {
return 0;
}
sal_uInt32 n = mapSize / 2;
- MapEntry const * p = mapBegin + n;
+ detail::MapEntry const * p = mapBegin + n;
switch (compare(file, name, nameOffset, nameLength, p)) {
case COMPARE_LESS:
return findInMap(file, mapBegin, n, name, nameOffset, nameLength);
@@ -624,15 +597,14 @@ sal_uInt32 findInMap(
}
sal_uInt32 off = mapBegin[n].data.getUnsigned32();
if (off == 0) {
- throw css::uno::DeploymentException(
- "broken UNOIDL file: map entry data offset is null",
- css::uno::Reference< css::uno::XInterface >());
+ throw FileFormatException(
+ file->uri, "UNOIDL format: map entry data offset is null");
}
return off;
}
-css::uno::Any readConstant(
- rtl::Reference< MappedFile > const & file, sal_uInt32 offset)
+ConstantValue readConstant(
+ rtl::Reference< detail::MappedFile > const & file, sal_uInt32 offset)
{
assert(file.is());
int v = file->read8(offset);
@@ -643,74 +615,75 @@ css::uno::Any readConstant(
v = file->read8(offset + 1);
switch (v) {
case 0:
- return css::uno::makeAny(false);
+ return ConstantValue(false);
case 1:
- return css::uno::makeAny(true);
+ return ConstantValue(true);
default:
- throw css::uno::DeploymentException(
- ("broken UNOIDL file: bad boolean constant value "
- + rtl::OUString::number(v)),
- css::uno::Reference< css::uno::XInterface >());
+ throw FileFormatException(
+ file->uri,
+ ("UNOIDL format: bad boolean constant value "
+ + OUString::number(v)));
}
- break;
case 1: // BYTE
- return css::uno::makeAny< sal_Int8 >(file->read8(offset + 1));
+ return ConstantValue(static_cast< sal_Int8 >(file->read8(offset + 1)));
//TODO: implementation-defined behavior of conversion from sal_uInt8
// to sal_Int8 relies on two's complement representation
case 2: // SHORT
- return css::uno::makeAny< sal_Int16 >(file->read16(offset + 1));
+ return ConstantValue(
+ static_cast< sal_Int16 >(file->read16(offset + 1)));
//TODO: implementation-defined behavior of conversion from
// sal_uInt16 to sal_Int16 relies on two's complement representation
case 3: // UNSIGNED SHORT
- return css::uno::makeAny(file->read16(offset + 1));
+ return ConstantValue(file->read16(offset + 1));
case 4: // LONG
- return css::uno::makeAny< sal_Int32 >(file->read32(offset + 1));
+ return ConstantValue(
+ static_cast< sal_Int32 >(file->read32(offset + 1)));
//TODO: implementation-defined behavior of conversion from
// sal_uInt32 to sal_Int32 relies on two's complement representation
case 5: // UNSIGNED LONG
- return css::uno::makeAny(file->read32(offset + 1));
+ return ConstantValue(file->read32(offset + 1));
case 6: // HYPER
- return css::uno::makeAny< sal_Int64 >(file->read64(offset + 1));
+ return ConstantValue(
+ static_cast< sal_Int64 >(file->read64(offset + 1)));
//TODO: implementation-defined behavior of conversion from
// sal_uInt64 to sal_Int64 relies on two's complement representation
case 7: // UNSIGNED HYPER
- return css::uno::makeAny(file->read64(offset + 1));
+ return ConstantValue(file->read64(offset + 1));
case 8: // FLOAT
- return css::uno::makeAny(file->readIso60599Binary32(offset + 1));
+ return ConstantValue(file->readIso60599Binary32(offset + 1));
case 9: // DOUBLE
- return css::uno::makeAny(file->readIso60599Binary64(offset + 1));
+ return ConstantValue(file->readIso60599Binary64(offset + 1));
default:
- throw css::uno::DeploymentException(
- ("broken UNOIDL file: bad constant type byte "
- + rtl::OUString::number(v)),
- css::uno::Reference< css::uno::XInterface >());
+ throw FileFormatException(
+ file->uri,
+ "UNOIDL format: bad constant type byte " + OUString::number(v));
}
}
-rtl::Reference< unoidl::Entity > readEntity(
- rtl::Reference< MappedFile > const & file, sal_uInt32 offset);
+rtl::Reference< Entity > readEntity(
+ rtl::Reference< detail::MappedFile > const & file, sal_uInt32 offset);
-class UnoidlCursor: public unoidl::MapCursor {
+class UnoidlCursor: public MapCursor {
public:
UnoidlCursor(
- rtl::Reference< MappedFile > file, MapEntry const * mapBegin,
- sal_uInt32 mapSize):
+ rtl::Reference< detail::MappedFile > file,
+ detail::MapEntry const * mapBegin, sal_uInt32 mapSize):
file_(file), mapIndex_(mapBegin), mapEnd_(mapBegin + mapSize)
{}
private:
virtual ~UnoidlCursor() throw () {}
- virtual rtl::Reference< unoidl::Entity > getNext(rtl::OUString * name);
+ virtual rtl::Reference< Entity > getNext(OUString * name);
- rtl::Reference< MappedFile > file_;
- MapEntry const * mapIndex_;
- MapEntry const * mapEnd_;
+ rtl::Reference< detail::MappedFile > file_;
+ detail::MapEntry const * mapIndex_;
+ detail::MapEntry const * mapEnd_;
};
-rtl::Reference< unoidl::Entity > UnoidlCursor::getNext(rtl::OUString * name) {
+rtl::Reference< Entity > UnoidlCursor::getNext(OUString * name) {
assert(name != 0);
- rtl::Reference< unoidl::Entity > ent;
+ rtl::Reference< Entity > ent;
if (mapIndex_ != mapEnd_) {
*name = file_->readNameNul(mapIndex_->name.getUnsigned32());
ent = readEntity(file_, mapIndex_->data.getUnsigned32());
@@ -719,14 +692,14 @@ rtl::Reference< unoidl::Entity > UnoidlCursor::getNext(rtl::OUString * name) {
return ent;
}
-class UnoidlModuleEntity: public unoidl::ModuleEntity {
+class UnoidlModuleEntity: public ModuleEntity {
public:
UnoidlModuleEntity(
- rtl::Reference< MappedFile > const & file, sal_uInt32 mapOffset,
+ rtl::Reference< detail::MappedFile > const & file, sal_uInt32 mapOffset,
sal_uInt32 mapSize):
file_(file),
mapBegin_(
- reinterpret_cast< MapEntry const * >(
+ reinterpret_cast< detail::MapEntry const * >(
static_cast< char const * >(file_->address) + mapOffset)),
mapSize_(mapSize)
{ assert(file.is()); }
@@ -734,26 +707,26 @@ public:
private:
virtual ~UnoidlModuleEntity() throw () {}
- virtual std::vector< rtl::OUString > getMemberNames() const;
+ virtual std::vector< OUString > getMemberNames() const;
- virtual rtl::Reference< unoidl::MapCursor > createCursor() const
+ virtual rtl::Reference< MapCursor > createCursor() const
{ return new UnoidlCursor(file_, mapBegin_, mapSize_); }
- rtl::Reference< MappedFile > file_;
- MapEntry const * mapBegin_;
+ rtl::Reference< detail::MappedFile > file_;
+ detail::MapEntry const * mapBegin_;
sal_uInt32 mapSize_;
};
-std::vector< rtl::OUString > UnoidlModuleEntity::getMemberNames() const {
- std::vector< rtl::OUString > names;
+std::vector< OUString > UnoidlModuleEntity::getMemberNames() const {
+ std::vector< OUString > names;
for (sal_uInt32 i = 0; i != mapSize_; ++i) {
names.push_back(file_->readNameNul(mapBegin_[i].name.getUnsigned32()));
}
return names;
}
-rtl::Reference< unoidl::Entity > readEntity(
- rtl::Reference< MappedFile > const & file, sal_uInt32 offset)
+rtl::Reference< Entity > readEntity(
+ rtl::Reference< detail::MappedFile > const & file, sal_uInt32 offset)
{
assert(file.is());
int v = file->read8(offset);
@@ -765,21 +738,20 @@ rtl::Reference< unoidl::Entity > readEntity(
case 0: // module
{
if (v != 0) {
- throw css::uno::DeploymentException(
- ("broken UNOIDL file: bad module type byte "
- + rtl::OUString::number(v)),
- css::uno::Reference< css::uno::XInterface >());
+ throw FileFormatException(
+ file->uri,
+ ("UNOIDL format: bad module type byte "
+ + OUString::number(v)));
}
sal_uInt32 n = file->read32(offset + 1);
if (n > SAL_MAX_INT32) {
- throw css::uno::DeploymentException(
- "broken UNOIDL file: too many items in module",
- css::uno::Reference< css::uno::XInterface >());
+ throw FileFormatException(
+ file->uri, "UNOIDL format: too many items in module");
}
if (offset + 5 + 8 * n > file->size) { //TODO: overflow
- throw css::uno::DeploymentException(
- "broken UNOIDL file: module map offset + size too large",
- css::uno::Reference< css::uno::XInterface >());
+ throw FileFormatException(
+ file->uri,
+ "UNOIDL format: module map offset + size too large");
}
return new UnoidlModuleEntity(file, offset + 5, n);
}
@@ -787,198 +759,191 @@ rtl::Reference< unoidl::Entity > readEntity(
{
sal_uInt32 n = file->read32(offset + 1);
if (n > SAL_MAX_INT32) {
- throw css::uno::DeploymentException(
- "broken UNOIDL file: too many members of enum type",
- css::uno::Reference< css::uno::XInterface >());
+ throw FileFormatException(
+ file->uri, "UNOIDL format: too many members of enum type");
}
offset += 5;
- std::vector< unoidl::EnumTypeEntity::Member > mems;
+ std::vector< EnumTypeEntity::Member > mems;
for (sal_uInt32 i = 0; i != n; ++i) {
- rtl::OUString memName(file->readNameLen(offset, &offset));
+ OUString memName(file->readNameLen(offset, &offset));
sal_Int32 memValue = static_cast< sal_Int32 >(
file->read32(offset));
//TODO: implementation-defined behavior of conversion from
// sal_uInt32 to sal_Int32 relies on two's complement
// representation
offset += 4;
- mems.push_back(
- unoidl::EnumTypeEntity::Member(memName, memValue));
+ mems.push_back(EnumTypeEntity::Member(memName, memValue));
}
- return new unoidl::EnumTypeEntity(published, mems);
+ return new EnumTypeEntity(published, mems);
}
case 2: // plain struct type without base
case 2 | 0x20: // plain struct type with base
{
++offset;
- rtl::OUString base;
+ OUString base;
if (flag) {
base = file->readNameLen(offset, &offset);
if (base.isEmpty()) {
- throw css::uno::DeploymentException(
- ("broken UNOIDL file: empty base type name of plain"
- " struct type"),
- css::uno::Reference< css::uno::XInterface >());
+ throw FileFormatException(
+ file->uri,
+ ("UNOIDL format: empty base type name of plain struct"
+ " type"));
}
}
sal_uInt32 n = file->read32(offset);
if (n > SAL_MAX_INT32) {
- throw css::uno::DeploymentException(
- ("broken UNOIDL file: too many direct members of plain"
- " struct type"),
- css::uno::Reference< css::uno::XInterface >());
+ throw FileFormatException(
+ file->uri,
+ ("UNOIDL format: too many direct members of plain struct"
+ " type"));
}
offset += 4;
- std::vector< unoidl::PlainStructTypeEntity::Member > mems;
+ std::vector< PlainStructTypeEntity::Member > mems;
for (sal_uInt32 i = 0; i != n; ++i) {
- rtl::OUString memName(file->readNameLen(offset, &offset));
- rtl::OUString memType(file->readNameLen(offset, &offset));
- mems.push_back(
- unoidl::PlainStructTypeEntity::Member(memName, memType));
+ OUString memName(file->readNameLen(offset, &offset));
+ OUString memType(file->readNameLen(offset, &offset));
+ mems.push_back(PlainStructTypeEntity::Member(memName, memType));
}
- return new unoidl::PlainStructTypeEntity(published, base, mems);
+ return new PlainStructTypeEntity(published, base, mems);
}
case 3: // polymorphic struct type template
{
sal_uInt32 n = file->read32(offset + 1);
if (n > SAL_MAX_INT32) {
- throw css::uno::DeploymentException(
- ("broken UNOIDL file: too many type parameters of"
- " polymorphic struct type template"),
- css::uno::Reference< css::uno::XInterface >());
+ throw FileFormatException(
+ file->uri,
+ ("UNOIDL format: too many type parameters of polymorphic"
+ " struct type template"));
}
offset += 5;
- std::vector< rtl::OUString > params;
+ std::vector< OUString > params;
for (sal_uInt32 i = 0; i != n; ++i) {
params.push_back(file->readNameLen(offset, &offset));
}
n = file->read32(offset);
if (n > SAL_MAX_INT32) {
- throw css::uno::DeploymentException(
- ("broken UNOIDL file: too many members of polymorphic"
- " struct type template"),
- css::uno::Reference< css::uno::XInterface >());
+ throw FileFormatException(
+ file->uri,
+ ("UNOIDL format: too many members of polymorphic struct"
+ " type template"));
}
offset += 4;
- std::vector< unoidl::PolymorphicStructTypeTemplateEntity::Member >
- mems;
+ std::vector< PolymorphicStructTypeTemplateEntity::Member > mems;
for (sal_uInt32 i = 0; i != n; ++i) {
v = file->read8(offset);
++offset;
- rtl::OUString memName(file->readNameLen(offset, &offset));
- rtl::OUString memType(file->readNameLen(offset, &offset));
+ OUString memName(file->readNameLen(offset, &offset));
+ OUString memType(file->readNameLen(offset, &offset));
if (v > 1) {
- throw css::uno::DeploymentException(
- ("broken UNOIDL file: bad flags "
- + rtl::OUString::number(v) + " for member " + memName
- + " of polymorphic struct type template"),
- css::uno::Reference< css::uno::XInterface >());
+ throw FileFormatException(
+ file->uri,
+ ("UNOIDL format: bad flags " + OUString::number(v)
+ + " for member " + memName
+ + " of polymorphic struct type template"));
}
mems.push_back(
- unoidl::PolymorphicStructTypeTemplateEntity::Member(
+ PolymorphicStructTypeTemplateEntity::Member(
memName, memType, v == 1));
}
- return new unoidl::PolymorphicStructTypeTemplateEntity(
+ return new PolymorphicStructTypeTemplateEntity(
published, params, mems);
}
case 4: // exception type without base
case 4 | 0x20: // exception type with base
{
++offset;
- rtl::OUString base;
+ OUString base;
if (flag) {
base = file->readNameLen(offset, &offset);
if (base.isEmpty()) {
- throw css::uno::DeploymentException(
- ("broken UNOIDL file: empty base type name of"
- " exception type"),
- css::uno::Reference< css::uno::XInterface >());
+ throw FileFormatException(
+ file->uri,
+ ("UNOIDL format: empty base type name of exception"
+ " type"));
}
}
sal_uInt32 n = file->read32(offset);
if (n > SAL_MAX_INT32) {
- throw css::uno::DeploymentException(
- ("broken UNOIDL file: too many direct members of"
- " exception type"),
- css::uno::Reference< css::uno::XInterface >());
+ throw FileFormatException(
+ file->uri,
+ "UNOIDL format: too many direct members of exception type");
}
offset += 4;
- std::vector< unoidl::ExceptionTypeEntity::Member > mems;
+ std::vector< ExceptionTypeEntity::Member > mems;
for (sal_uInt32 i = 0; i != n; ++i) {
- rtl::OUString memName(file->readNameLen(offset, &offset));
- rtl::OUString memType(file->readNameLen(offset, &offset));
- mems.push_back(
- unoidl::ExceptionTypeEntity::Member(memName, memType));
+ OUString memName(file->readNameLen(offset, &offset));
+ OUString memType(file->readNameLen(offset, &offset));
+ mems.push_back(ExceptionTypeEntity::Member(memName, memType));
}
- return new unoidl::ExceptionTypeEntity(published, base, mems);
+ return new ExceptionTypeEntity(published, base, mems);
}
case 5: // interface type
{
sal_uInt32 n = file->read32(offset + 1);
if (n > SAL_MAX_INT32) {
- throw css::uno::DeploymentException(
- ("broken UNOIDL file: too many direct mandatory bases of"
- " interface type"),
- css::uno::Reference< css::uno::XInterface >());
+ throw FileFormatException(
+ file->uri,
+ ("UNOIDL format: too many direct mandatory bases of"
+ " interface type"));
}
offset += 5;
- std::vector< rtl::OUString > mandBases;
+ std::vector< OUString > mandBases;
for (sal_uInt32 i = 0; i != n; ++i) {
mandBases.push_back(file->readNameLen(offset, &offset));
}
n = file->read32(offset);
if (n > SAL_MAX_INT32) {
- throw css::uno::DeploymentException(
- ("broken UNOIDL file: too many direct optional bases of"
- " interface type"),
- css::uno::Reference< css::uno::XInterface >());
+ throw FileFormatException(
+ file->uri,
+ ("UNOIDL format: too many direct optional bases of"
+ " interface type"));
}
offset += 4;
- std::vector< rtl::OUString > optBases;
+ std::vector< OUString > optBases;
for (sal_uInt32 i = 0; i != n; ++i) {
optBases.push_back(file->readNameLen(offset, &offset));
}
sal_uInt32 nAttrs = file->read32(offset);
if (nAttrs > SAL_MAX_INT32) {
- throw css::uno::DeploymentException(
- ("broken UNOIDL file: too many direct attributes of"
- " interface type"),
- css::uno::Reference< css::uno::XInterface >());
+ throw FileFormatException(
+ file->uri,
+ ("UNOIDL format: too many direct attributes of interface"
+ " type"));
}
offset += 4;
- std::vector< unoidl::InterfaceTypeEntity::Attribute > attrs;
+ std::vector< InterfaceTypeEntity::Attribute > attrs;
for (sal_uInt32 i = 0; i != nAttrs; ++i) {
v = file->read8(offset);
++offset;
- rtl::OUString attrName(file->readNameLen(offset, &offset));
- rtl::OUString attrType(file->readNameLen(offset, &offset));
+ OUString attrName(file->readNameLen(offset, &offset));
+ OUString attrType(file->readNameLen(offset, &offset));
if (v > 0x03) {
- throw css::uno::DeploymentException(
- ("broken UNOIDL file: bad flags for direct attribute "
- + attrName + " of interface type"),
- css::uno::Reference< css::uno::XInterface >());
+ throw FileFormatException(
+ file->uri,
+ ("UNOIDL format: bad flags for direct attribute "
+ + attrName + " of interface type"));
}
- std::vector< rtl::OUString > getExcs;
+ std::vector< OUString > getExcs;
sal_uInt32 m = file->read32(offset);
if (m > SAL_MAX_INT32) {
- throw css::uno::DeploymentException(
- ("broken UNOIDL file: too many getter exceptions for"
- " direct attribute " + attrName
- + " of interface type"),
- css::uno::Reference< css::uno::XInterface >());
+ throw FileFormatException(
+ file->uri,
+ ("UNOIDL format: too many getter exceptions for direct"
+ " attribute " + attrName + " of interface type"));
}
offset += 4;
for (sal_uInt32 j = 0; j != m; ++j) {
getExcs.push_back(file->readNameLen(offset, &offset));
}
- std::vector< rtl::OUString > setExcs;
+ std::vector< OUString > setExcs;
if ((v & 0x02) == 0) {
m = file->read32(offset);
if (m > SAL_MAX_INT32) {
- throw css::uno::DeploymentException(
- ("broken UNOIDL file: too many setter exceptions"
- " for direct attribute " + attrName
- + " of interface type"),
- css::uno::Reference< css::uno::XInterface >());
+ throw FileFormatException(
+ file->uri,
+ ("UNOIDL format: too many setter exceptions for"
+ " direct attribute " + attrName
+ + " of interface type"));
}
offset += 4;
for (sal_uInt32 j = 0; j != m; ++j) {
@@ -986,153 +951,145 @@ rtl::Reference< unoidl::Entity > readEntity(
}
}
attrs.push_back(
- unoidl::InterfaceTypeEntity::Attribute(
+ InterfaceTypeEntity::Attribute(
attrName, attrType, (v & 0x01) != 0, (v & 0x02) != 0,
getExcs, setExcs));
}
sal_uInt32 nMeths = file->read32(offset);
if (nMeths > SAL_MAX_INT32 - nAttrs) {
- throw css::uno::DeploymentException(
- ("broken UNOIDL file: too many direct attributes and"
- " methods of interface type"),
- css::uno::Reference< css::uno::XInterface >());
+ throw FileFormatException(
+ file->uri,
+ ("UNOIDL format: too many direct attributes and methods of"
+ " interface type"));
}
offset += 4;
- std::vector< unoidl::InterfaceTypeEntity::Method > meths;
+ std::vector< InterfaceTypeEntity::Method > meths;
for (sal_uInt32 i = 0; i != nMeths; ++i) {
- rtl::OUString methName(file->readNameLen(offset, &offset));
- rtl::OUString methType(file->readNameLen(offset, &offset));
+ OUString methName(file->readNameLen(offset, &offset));
+ OUString methType(file->readNameLen(offset, &offset));
sal_uInt32 m = file->read32(offset);
if (m > SAL_MAX_INT32) {
- throw css::uno::DeploymentException(
- ("broken UNOIDL file: too many parameters for method "
- + methName + " of interface type"),
- css::uno::Reference< css::uno::XInterface >());
+ throw FileFormatException(
+ file->uri,
+ ("UNOIDL format: too many parameters for method "
+ + methName + " of interface type"));
}
offset += 4;
- std::vector< unoidl::InterfaceTypeEntity::Method::Parameter >
- params;
+ std::vector< InterfaceTypeEntity::Method::Parameter > params;
for (sal_uInt32 j = 0; j != m; ++j) {
v = file->read8(offset);
++offset;
- rtl::OUString paramName(
- file->readNameLen(offset, &offset));
- rtl::OUString paramType(
- file->readNameLen(offset, &offset));
- unoidl::InterfaceTypeEntity::Method::Parameter::Direction
- dir;
+ OUString paramName(file->readNameLen(offset, &offset));
+ OUString paramType(file->readNameLen(offset, &offset));
+ InterfaceTypeEntity::Method::Parameter::Direction dir;
switch (v) {
case 0:
- dir = unoidl::InterfaceTypeEntity::Method::Parameter::
+ dir = InterfaceTypeEntity::Method::Parameter::
DIRECTION_IN;
break;
case 1:
- dir = unoidl::InterfaceTypeEntity::Method::Parameter::
+ dir = InterfaceTypeEntity::Method::Parameter::
DIRECTION_OUT;
break;
case 2:
- dir = unoidl::InterfaceTypeEntity::Method::Parameter::
+ dir = InterfaceTypeEntity::Method::Parameter::
DIRECTION_IN_OUT;
break;
default:
- throw css::uno::DeploymentException(
- ("broken UNOIDL file: bad direction "
- + rtl::OUString::number(v) + " of parameter "
+ throw FileFormatException(
+ file->uri,
+ ("UNOIDL format: bad direction "
+ + OUString::number(v) + " of parameter "
+ paramName + " for method " + methName
- + " of interface type"),
- css::uno::Reference< css::uno::XInterface >());
+ + " of interface type"));
}
params.push_back(
- unoidl::InterfaceTypeEntity::Method::Parameter(
+ InterfaceTypeEntity::Method::Parameter(
paramName, paramType, dir));
}
- std::vector< rtl::OUString > excs;
+ std::vector< OUString > excs;
m = file->read32(offset);
if (m > SAL_MAX_INT32) {
- throw css::uno::DeploymentException(
- ("broken UNOIDL file: too many exceptions for method "
- + methName + " of interface type"),
- css::uno::Reference< css::uno::XInterface >());
+ throw FileFormatException(
+ file->uri,
+ ("UNOIDL format: too many exceptions for method "
+ + methName + " of interface type"));
}
offset += 4;
for (sal_uInt32 j = 0; j != m; ++j) {
excs.push_back(file->readNameLen(offset, &offset));
}
meths.push_back(
- unoidl::InterfaceTypeEntity::Method(
+ InterfaceTypeEntity::Method(
methName, methType, params, excs));
}
- return new unoidl::InterfaceTypeEntity(
+ return new InterfaceTypeEntity(
published, mandBases, optBases, attrs, meths);
}
case 6: // typedef
- return new unoidl::TypedefEntity(
- published, file->readNameLen(offset + 1));
+ return new TypedefEntity(published, file->readNameLen(offset + 1));
case 7: // constant group
{
sal_uInt32 n = file->read32(offset + 1);
if (n > SAL_MAX_INT32) {
- throw css::uno::DeploymentException(
- "broken UNOIDL file: too many constants in constant group",
- css::uno::Reference< css::uno::XInterface >());
+ throw FileFormatException(
+ file->uri,
+ "UNOIDL format: too many constants in constant group");
}
if (offset + 5 + 8 * n > file->size) { //TODO: overflow
- throw css::uno::DeploymentException(
- ("broken UNOIDL file: constant group map offset + size too"
- " large"),
- css::uno::Reference< css::uno::XInterface >());
+ throw FileFormatException(
+ file->uri,
+ ("UNOIDL format: constant group map offset + size too"
+ " large"));
}
- MapEntry const * p = reinterpret_cast< MapEntry const * >(
- static_cast< char const * >(file->address) + offset + 5);
- std::vector< unoidl::ConstantGroupEntity::Member > mems;
+ detail::MapEntry const * p
+ = reinterpret_cast< detail::MapEntry const * >(
+ static_cast< char const * >(file->address) + offset + 5);
+ std::vector< ConstantGroupEntity::Member > mems;
for (sal_uInt32 i = 0; i != n; ++i) {
mems.push_back(
- unoidl::ConstantGroupEntity::Member(
+ ConstantGroupEntity::Member(
file->readNameNul(p[i].name.getUnsigned32()),
readConstant(file, p[i].data.getUnsigned32())));
}
- return new unoidl::ConstantGroupEntity(published, mems);
+ return new ConstantGroupEntity(published, mems);
}
case 8: // single-interface--based service without default constructor
case 8 | 0x20: // single-interface--based service with default constructor
{
- rtl::OUString base(file->readNameLen(offset + 1, &offset));
- std::vector<
- unoidl::SingleInterfaceBasedServiceEntity::Constructor >
- ctors;
+ OUString base(file->readNameLen(offset + 1, &offset));
+ std::vector< SingleInterfaceBasedServiceEntity::Constructor > ctors;
if (flag) {
ctors.push_back(
- unoidl::SingleInterfaceBasedServiceEntity::Constructor());
+ SingleInterfaceBasedServiceEntity::Constructor());
} else {
sal_uInt32 n = file->read32(offset);
if (n > SAL_MAX_INT32) {
- throw css::uno::DeploymentException(
- ("broken UNOIDL file: too many constructors of"
- " single-interface--based service"),
- css::uno::Reference< css::uno::XInterface >());
+ throw FileFormatException(
+ file->uri,
+ ("UNOIDL format: too many constructors of"
+ " single-interface--based service"));
}
offset += 4;
for (sal_uInt32 i = 0; i != n; ++i) {
- rtl::OUString ctorName(file->readNameLen(offset, &offset));
+ OUString ctorName(file->readNameLen(offset, &offset));
sal_uInt32 m = file->read32(offset);
if (m > SAL_MAX_INT32) {
- throw css::uno::DeploymentException(
- ("broken UNOIDL file: too many parameters for"
+ throw FileFormatException(
+ file->uri,
+ ("UNOIDL format: too many parameters for"
" constructor " + ctorName
- + " of single-interface--based service"),
- css::uno::Reference< css::uno::XInterface >());
+ + " of single-interface--based service"));
}
offset += 4;
std::vector<
- unoidl::SingleInterfaceBasedServiceEntity::Constructor::
+ SingleInterfaceBasedServiceEntity::Constructor::
Parameter > params;
for (sal_uInt32 j = 0; j != m; ++j) {
v = file->read8(offset);
++offset;
- rtl::OUString paramName(
- file->readNameLen(offset, &offset));
- rtl::OUString paramType(
- file->readNameLen(offset, &offset));
+ OUString paramName(file->readNameLen(offset, &offset));
+ OUString paramType(file->readNameLen(offset, &offset));
bool rest;
switch (v) {
case 0:
@@ -1142,164 +1099,160 @@ rtl::Reference< unoidl::Entity > readEntity(
rest = true;
break;
default:
- throw css::uno::DeploymentException(
- ("broken UNOIDL file: bad mode "
- + rtl::OUString::number(v) + " of parameter "
+ throw FileFormatException(
+ file->uri,
+ ("UNOIDL format: bad mode "
+ + OUString::number(v) + " of parameter "
+ paramName + " for constructor " + ctorName
- + " of single-interface--based service"),
- css::uno::Reference< css::uno::XInterface >());
+ + " of single-interface--based service"));
}
params.push_back(
- unoidl::SingleInterfaceBasedServiceEntity::
- Constructor::Parameter(
+ SingleInterfaceBasedServiceEntity::Constructor::
+ Parameter(
paramName, paramType, rest));
}
- std::vector< rtl::OUString > excs;
+ std::vector< OUString > excs;
m = file->read32(offset);
if (m > SAL_MAX_INT32) {
- throw css::uno::DeploymentException(
- ("broken UNOIDL file: too many exceptions for"
+ throw FileFormatException(
+ file->uri,
+ ("UNOIDL format: too many exceptions for"
" constructor " + ctorName
- + " of single-interface--based service"),
- css::uno::Reference< css::uno::XInterface >());
+ + " of single-interface--based service"));
}
offset += 4;
for (sal_uInt32 j = 0; j != m; ++j) {
excs.push_back(file->readNameLen(offset, &offset));
}
ctors.push_back(
- unoidl::SingleInterfaceBasedServiceEntity::Constructor(
+ SingleInterfaceBasedServiceEntity::Constructor(
ctorName, params, excs));
}
}
- return new unoidl::SingleInterfaceBasedServiceEntity(
+ return new SingleInterfaceBasedServiceEntity(
published, base, ctors);
}
case 9: // accumulation-based service
{
sal_uInt32 n = file->read32(offset + 1);
if (n > SAL_MAX_INT32) {
- throw css::uno::DeploymentException(
- ("broken UNOIDL file: too many direct mandatory service"
- " bases of accumulation-based service"),
- css::uno::Reference< css::uno::XInterface >());
+ throw FileFormatException(
+ file->uri,
+ ("UNOIDL format: too many direct mandatory service bases of"
+ " accumulation-based service"));
}
offset += 5;
- std::vector< rtl::OUString > mandServs;
+ std::vector< OUString > mandServs;
for (sal_uInt32 i = 0; i != n; ++i) {
mandServs.push_back(file->readNameLen(offset, &offset));
}
n = file->read32(offset);
if (n > SAL_MAX_INT32) {
- throw css::uno::DeploymentException(
- ("broken UNOIDL file: too many direct optional service"
- " bases of accumulation-based servcie"),
- css::uno::Reference< css::uno::XInterface >());
+ throw FileFormatException(
+ file->uri,
+ ("UNOIDL format: too many direct optional service bases of"
+ " accumulation-based service"));
}
offset += 4;
- std::vector< rtl::OUString > optServs;
+ std::vector< OUString > optServs;
for (sal_uInt32 i = 0; i != n; ++i) {
optServs.push_back(file->readNameLen(offset, &offset));
}
n = file->read32(offset);
if (n > SAL_MAX_INT32) {
- throw css::uno::DeploymentException(
- ("broken UNOIDL file: too many direct mandatory interface"
- " bases of accumulation-based servcie"),
- css::uno::Reference< css::uno::XInterface >());
+ throw FileFormatException(
+ file->uri,
+ ("UNOIDL format: too many direct mandatory interface bases"
+ " of accumulation-based service"));
}
offset += 4;
- std::vector< rtl::OUString > mandIfcs;
+ std::vector< OUString > mandIfcs;
for (sal_uInt32 i = 0; i != n; ++i) {
mandIfcs.push_back(file->readNameLen(offset, &offset));
}
n = file->read32(offset);
if (n > SAL_MAX_INT32) {
- throw css::uno::DeploymentException(
- ("broken UNOIDL file: too many direct optional interface"
- " bases of accumulation-based servcie"),
- css::uno::Reference< css::uno::XInterface >());
+ throw FileFormatException(
+ file->uri,
+ ("UNOIDL format: too many direct optional interface bases"
+ " of accumulation-based service"));
}
offset += 4;
- std::vector< rtl::OUString > optIfcs;
+ std::vector< OUString > optIfcs;
for (sal_uInt32 i = 0; i != n; ++i) {
optIfcs.push_back(file->readNameLen(offset, &offset));
}
n = file->read32(offset);
if (n > SAL_MAX_INT32) {
- throw css::uno::DeploymentException(
- ("broken UNOIDL file: too many direct properties of"
- " accumulation-based servcie"),
- css::uno::Reference< css::uno::XInterface >());
+ throw FileFormatException(
+ file->uri,
+ ("UNOIDL format: too many direct properties of"
+ " accumulation-based service"));
}
offset += 4;
- std::vector< unoidl::AccumulationBasedServiceEntity::Property >
- props;
+ std::vector< AccumulationBasedServiceEntity::Property > props;
for (sal_uInt32 i = 0; i != n; ++i) {
sal_uInt16 attrs = file->read16(offset);
offset += 2;
- rtl::OUString propName(file->readNameLen(offset, &offset));
- rtl::OUString propType(file->readNameLen(offset, &offset));
+ OUString propName(file->readNameLen(offset, &offset));
+ OUString propType(file->readNameLen(offset, &offset));
if (attrs > 0x01FF) { // see css.beans.PropertyAttribute
- throw css::uno::DeploymentException(
- ("broken UNOIDL file: bad mode "
- + rtl::OUString::number(v) + " of property " + propName
- + " for accumulation-based servcie"),
- css::uno::Reference< css::uno::XInterface >());
+ throw FileFormatException(
+ file->uri,
+ ("UNOIDL format: bad mode " + OUString::number(v)
+ + " of property " + propName
+ + " for accumulation-based servcie"));
}
props.push_back(
- unoidl::AccumulationBasedServiceEntity::Property(
+ AccumulationBasedServiceEntity::Property(
propName, propType,
static_cast<
- unoidl::AccumulationBasedServiceEntity::Property::
+ AccumulationBasedServiceEntity::Property::
Attributes >(
attrs)));
}
- return new unoidl::AccumulationBasedServiceEntity(
+ return new AccumulationBasedServiceEntity(
published, mandServs, optServs, mandIfcs, optIfcs, props);
}
case 10: // interface-based singleton
- return new unoidl::InterfaceBasedSingletonEntity(
+ return new InterfaceBasedSingletonEntity(
published, file->readNameLen(offset + 1));
case 11: // service-based singleton
- return new unoidl::ServiceBasedSingletonEntity(
+ return new ServiceBasedSingletonEntity(
published, file->readNameLen(offset + 1));
default:
- throw css::uno::DeploymentException(
- "broken UNOIDL file: bad type byte " + rtl::OUString::number(v),
- css::uno::Reference< css::uno::XInterface >());
+ throw FileFormatException(
+ file->uri, "UNOIDL format: bad type byte " + OUString::number(v));
}
}
}
-UnoidlProvider::UnoidlProvider(rtl::OUString const & uri):
- file_(new MappedFile(uri))
+UnoidlProvider::UnoidlProvider(OUString const & uri):
+ file_(new detail::MappedFile(uri))
{
if (file_->size < 8 || std::memcmp(file_->address, "UNOIDL\0\xFF", 8) != 0)
{
- throw css::registry::InvalidRegistryException(
- uri, css::uno::Reference< css::uno::XInterface >());
+ throw FileFormatException(
+ file_->uri,
+ "UNOIDL format: does not begin with magic UNOIDL\\0\\xFF");
}
sal_uInt32 off = file_->read32(8);
mapSize_ = file_->read32(12);
if (off + 8 * mapSize_ > file_->size) { //TODO: overflow
- throw css::uno::DeploymentException(
- "broken UNOIDL file: root map offset + size too large",
- css::uno::Reference< css::uno::XInterface >());
+ throw FileFormatException(
+ file_->uri, "UNOIDL format: root map offset + size too large");
}
- mapBegin_ = reinterpret_cast< MapEntry const * >(
+ mapBegin_ = reinterpret_cast< detail::MapEntry const * >(
static_cast< char const * >(file_->address) + off);
}
-rtl::Reference< unoidl::MapCursor > UnoidlProvider::createRootCursor() const {
+rtl::Reference< MapCursor > UnoidlProvider::createRootCursor() const {
return new UnoidlCursor(file_, mapBegin_, mapSize_);
}
-sal_uInt32 UnoidlProvider::find(rtl::OUString const & name, bool * constant)
- const
-{
- MapEntry const * mapBegin = mapBegin_;
+sal_uInt32 UnoidlProvider::find(OUString const & name, bool * constant) const {
+ detail::MapEntry const * mapBegin = mapBegin_;
sal_uInt32 mapSize = mapSize_;
bool cgroup = false;
for (sal_Int32 i = 0;;) {
@@ -1336,23 +1289,20 @@ sal_uInt32 UnoidlProvider::find(rtl::OUString const & name, bool * constant)
}
mapSize = file_->read32(off + 1);
if (8 * mapSize > file_->size - off - 5) { //TODO: overflow
- throw css::uno::DeploymentException(
- "broken UNOIDL file: map offset + size too large",
- css::uno::Reference< css::uno::XInterface >());
+ throw FileFormatException(
+ file_->uri, "UNOIDL format: map offset + size too large");
}
- mapBegin = reinterpret_cast< MapEntry const * >(
+ mapBegin = reinterpret_cast< detail::MapEntry const * >(
static_cast< char const * >(file_->address) + off + 5);
i = j + 1;
}
}
-rtl::Reference< unoidl::Entity > UnoidlProvider::getEntity(sal_uInt32 offset)
- const
-{
+rtl::Reference< Entity > UnoidlProvider::getEntity(sal_uInt32 offset) const {
return readEntity(file_, offset);
}
-css::uno::Any UnoidlProvider::getConstant(sal_uInt32 offset) const {
+ConstantValue UnoidlProvider::getConstant(sal_uInt32 offset) const {
return readConstant(file_, offset);
}
diff --git a/ure/source/README b/ure/source/README
index 04368d7c3b1a..345a3e7742aa 100644
--- a/ure/source/README
+++ b/ure/source/README
@@ -50,6 +50,7 @@ Linux x86, Solaris x86, and Solaris SPARC:
/opt/openoffice.org/ure/lib/unorc [private]
/opt/openoffice.org/ure/lib/libreg.so.3 [private]
/opt/openoffice.org/ure/lib/libstore.so.3 [private]
+/opt/openoffice.org/ure/lib/libunoidl.so [private]
/opt/openoffice.org/ure/lib/libxmlreader.so [private]
/opt/openoffice.org/ure/lib/libjvmaccessgcc3.so.3 [private; Linux x86 only]
/opt/openoffice.org/ure/lib/libjvmaccessC52.so.3 [private; Solaris only]
@@ -110,6 +111,7 @@ Program Files\URE\bin\libxml2.dll [external]
Program Files\URE\bin\uno.ini [private]
Program Files\URE\bin\reg3.dll [private]
Program Files\URE\bin\store3.dll [private]
+Program Files\URE\bin\unoidl.dll [private]
Program Files\URE\bin\xmlreader.dll [private]
Program Files\URE\bin\jvmaccess3MSC.dll [private]
Program Files\URE\bin\jvmfwk3.dll [private]