From cd3bb3047d3f4c9cc9b4aa0c0eb8a42930b9bb86 Mon Sep 17 00:00:00 2001 From: Noel Grandin Date: Tue, 16 Feb 2016 15:18:33 +0200 Subject: move some more slot parsing to SvIdlParser Change-Id: I186e80ed0446585aceaf4d25f32ecca7e8ed396c --- idl/source/prj/parser.cxx | 38 +++++++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 13 deletions(-) (limited to 'idl/source') diff --git a/idl/source/prj/parser.cxx b/idl/source/prj/parser.cxx index d1793c89de2b..01cab6285d5e 100644 --- a/idl/source/prj/parser.cxx +++ b/idl/source/prj/parser.cxx @@ -282,9 +282,7 @@ void SvIdlParser::ReadInterfaceOrShell( SvMetaModule& rModule, MetaTypeType aMet if( rInStm.ReadIf( ':' ) ) { - aClass->aSuperClass = rBase.ReadKnownClass( rInStm ); - if( !aClass->aSuperClass.Is() ) - throw SvParseException( rInStm, "unknown super class" ); + aClass->aSuperClass = ReadKnownClass(); } if( rInStm.ReadIf( '{' ) ) { @@ -309,19 +307,15 @@ void SvIdlParser::ReadInterfaceOrShellEntry(SvMetaClass& rClass) if( rTok.Is( SvHash_import() ) ) { - SvMetaClass * pClass = rBase.ReadKnownClass( rInStm ); - if( !pClass ) - throw SvParseException( rInStm, "unknown imported interface" ); - SvClassElement xEle; - xEle.SetClass( pClass ); - rClass.aClassElementList.push_back( xEle ); - + SvMetaClass * pClass = ReadKnownClass(); + SvClassElement xEle(pClass); rTok = rInStm.GetToken(); if( rTok.IsString() ) { xEle.SetPrefix( rTok.GetString() ); rInStm.GetToken_Next(); } + rClass.aClassElementList.push_back( xEle ); return; } else @@ -363,12 +357,22 @@ bool SvIdlParser::ReadInterfaceOrShellSlot(SvMetaSlot& rSlot) SvMetaAttribute * pAttr = rBase.ReadKnownAttr( rInStm, rSlot.GetType() ); if( pAttr ) { - SvMetaSlot * pKnownSlot = dynamic_cast( pAttr ); + SvMetaSlot * pKnownSlot = dynamic_cast( pAttr ); if( !pKnownSlot ) throw SvParseException( rInStm, "attribute " + pAttr->GetName() + " is method or variable but not a slot" ); rSlot.SetRef( pKnownSlot ); rSlot.SetName( pKnownSlot->GetName() ); - bOk = rSlot.SvMetaObject::ReadSvIdl( rBase, rInStm ); + if( rInStm.ReadIf( '[' ) ) + { + sal_uInt32 nBeginPos = 0; // can not happen with Tell + while( nBeginPos != rInStm.Tell() ) + { + nBeginPos = rInStm.Tell(); + rSlot.ReadAttributesSvIdl( rBase, rInStm ); + rInStm.ReadIfDelimiter(); + } + bOk = rInStm.ReadIf( ']' ); + } } else { @@ -376,7 +380,7 @@ bool SvIdlParser::ReadInterfaceOrShellSlot(SvMetaSlot& rSlot) SvMetaAttribute *pAttr2 = rBase.SearchKnownAttr( rSlot.GetSlotId() ); if( pAttr2 ) { - SvMetaSlot * pKnownSlot = dynamic_cast( pAttr2 ); + SvMetaSlot * pKnownSlot = dynamic_cast( pAttr2 ); if( !pKnownSlot ) throw SvParseException( rInStm, "attribute " + pAttr2->GetName() + " is method or variable but not a slot" ); rSlot.SetRef( pKnownSlot ); @@ -435,6 +439,14 @@ bool SvIdlParser::ReadInterfaceOrShellMethodOrAttribute( SvMetaAttribute& rAttr return bOk; } +SvMetaClass * SvIdlParser::ReadKnownClass() +{ + SvMetaClass* pClass = rBase.ReadKnownClass( rInStm ); + if( !pClass ) + throw SvParseException( rInStm, "unknown class" ); + return pClass; +} + SvMetaType * SvIdlParser::ReadKnownType() { OString aName = ReadIdentifier(); -- cgit