summaryrefslogtreecommitdiff
path: root/idl
diff options
context:
space:
mode:
Diffstat (limited to 'idl')
-rw-r--r--idl/inc/basobj.hxx10
-rw-r--r--idl/source/objects/basobj.cxx2
-rw-r--r--idl/source/objects/object.cxx2
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() );