diff options
Diffstat (limited to 'idl')
-rw-r--r-- | idl/inc/basobj.hxx | 10 | ||||
-rw-r--r-- | idl/source/objects/basobj.cxx | 2 | ||||
-rw-r--r-- | idl/source/objects/object.cxx | 2 |
3 files changed, 9 insertions, 5 deletions
diff --git a/idl/inc/basobj.hxx b/idl/inc/basobj.hxx index 71dc13675b46..f63e1580f569 100644 --- a/idl/inc/basobj.hxx +++ b/idl/inc/basobj.hxx @@ -23,7 +23,7 @@ #include <tools/ref.hxx> #include <bastype.hxx> #include <tools/pstm.hxx> - +#include <functional> class SvTokenStream; class SvMetaObject; class SvIdlDataBase; @@ -67,6 +67,10 @@ public: virtual bool Test( SvIdlDataBase &, SvTokenStream & rInStm ); virtual bool ReadSvIdl( SvIdlDataBase &, SvTokenStream & rInStm ); }; +template<class T> bool checkSvMetaObject(const SvMetaObject* pObject) +{ + return dynamic_cast<const T*>(pObject) != nullptr; +} class SvMetaObjectMemberStack { @@ -77,10 +81,10 @@ public: void Push( SvMetaObject * pObj ) { aList.push_back( pObj ); } SvMetaObject * Pop() { return aList.pop_back(); } - SvMetaObject * Get( TypeId nType ) + SvMetaObject * Get( std::function<bool ( const SvMetaObject* )> isSvMetaObject ) { for( SvMetaObjectMemberList::reverse_iterator it = aList.rbegin(); it != aList.rend(); ++it ) - if( (*it)->IsA( nType ) ) + if( isSvMetaObject(*it) ) return *it; return NULL; } diff --git a/idl/source/objects/basobj.cxx b/idl/source/objects/basobj.cxx index 59a832ecb503..a9a90624774e 100644 --- a/idl/source/objects/basobj.cxx +++ b/idl/source/objects/basobj.cxx @@ -188,7 +188,7 @@ const SvGlobalName & SvMetaExtern::GetUUId() const void SvMetaExtern::SetModule( SvIdlDataBase & rBase ) { - pModule = static_cast<SvMetaModule *>(rBase.GetStack().Get( TYPE( SvMetaModule ) )); + pModule = static_cast<SvMetaModule *>(rBase.GetStack().Get( checkSvMetaObject<SvMetaModule> )); } void SvMetaExtern::ReadAttributesSvIdl( SvIdlDataBase & rBase, diff --git a/idl/source/objects/object.cxx b/idl/source/objects/object.cxx index 3310770334a1..218504f18487 100644 --- a/idl/source/objects/object.cxx +++ b/idl/source/objects/object.cxx @@ -176,7 +176,7 @@ bool SvMetaClass::ReadSvIdl( SvIdlDataBase & rBase, SvTokenStream & rInStm ) bool SvMetaClass::TestAttribute( SvIdlDataBase & rBase, SvTokenStream & rInStm, SvMetaAttribute & rAttr ) const { - if ( !rAttr.GetRef() && rAttr.IsA( TYPE( SvMetaSlot ) ) ) + if ( !rAttr.GetRef() && dynamic_cast<const SvMetaSlot *>(&rAttr) != nullptr ) { OSL_FAIL( "Neuer Slot : " ); OSL_FAIL( rAttr.GetSlotId().getString().getStr() ); |