move some more slot parsing to SvIdlParser
Change-Id: I186e80ed0446585aceaf4d25f32ecca7e8ed396c
This commit is contained in:
@@ -33,6 +33,7 @@ class SvClassElement
|
|||||||
tools::SvRef<SvMetaClass> xClass;
|
tools::SvRef<SvMetaClass> xClass;
|
||||||
public:
|
public:
|
||||||
SvClassElement();
|
SvClassElement();
|
||||||
|
SvClassElement(SvMetaClass* pClass) { xClass = pClass; }
|
||||||
|
|
||||||
void SetPrefix( const OString& rPrefix )
|
void SetPrefix( const OString& rPrefix )
|
||||||
{ aPrefix = rPrefix; }
|
{ aPrefix = rPrefix; }
|
||||||
|
@@ -37,25 +37,26 @@ class SvIdlParser
|
|||||||
SvTokenStream & rInStm;
|
SvTokenStream & rInStm;
|
||||||
public:
|
public:
|
||||||
SvIdlParser( SvIdlDataBase& rBase_, SvTokenStream & rInStrm_) : rBase(rBase_), rInStm(rInStrm_) {}
|
SvIdlParser( SvIdlDataBase& rBase_, SvTokenStream & rInStrm_) : rBase(rBase_), rInStm(rInStrm_) {}
|
||||||
void ReadSvIdl( bool bImported, const OUString & rPath );
|
void ReadSvIdl( bool bImported, const OUString & rPath );
|
||||||
void ReadModuleHeader(SvMetaModule& rModule);
|
void ReadModuleHeader(SvMetaModule& rModule);
|
||||||
void ReadModuleBody(SvMetaModule& rModule);
|
void ReadModuleBody(SvMetaModule& rModule);
|
||||||
void ReadModuleElement( SvMetaModule& rModule );
|
void ReadModuleElement( SvMetaModule& rModule );
|
||||||
void ReadInclude( SvMetaModule& rModule );
|
void ReadInclude( SvMetaModule& rModule );
|
||||||
void ReadInterfaceOrShell( SvMetaModule& rModule, MetaTypeType aMetaTypeType );
|
void ReadInterfaceOrShell( SvMetaModule& rModule, MetaTypeType aMetaTypeType );
|
||||||
void ReadInterfaceOrShellEntry( SvMetaClass& rClass );
|
void ReadInterfaceOrShellEntry( SvMetaClass& rClass );
|
||||||
bool ReadInterfaceOrShellSlot( SvMetaSlot& rSlot );
|
bool ReadInterfaceOrShellSlot( SvMetaSlot& rSlot );
|
||||||
bool ReadInterfaceOrShellMethodOrAttribute( SvMetaAttribute& rAttr );
|
bool ReadInterfaceOrShellMethodOrAttribute( SvMetaAttribute& rAttr );
|
||||||
void ReadItem();
|
void ReadItem();
|
||||||
void ReadStruct();
|
void ReadStruct();
|
||||||
void ReadEnum();
|
void ReadEnum();
|
||||||
void ReadEnumValue( SvMetaTypeEnum& rEnum );
|
void ReadEnumValue( SvMetaTypeEnum& rEnum );
|
||||||
SvMetaType* ReadKnownType();
|
SvMetaClass* ReadKnownClass();
|
||||||
void ReadChar(char cChar);
|
SvMetaType* ReadKnownType();
|
||||||
void ReadDelimiter();
|
void ReadChar(char cChar);
|
||||||
OString ReadIdentifier();
|
void ReadDelimiter();
|
||||||
OString ReadString();
|
OString ReadIdentifier();
|
||||||
void ReadToken(SvStringHashEntry*);
|
OString ReadString();
|
||||||
|
void ReadToken(SvStringHashEntry*);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // INCLUDED_IDL_INC_PARSER_HXX
|
#endif // INCLUDED_IDL_INC_PARSER_HXX
|
||||||
|
@@ -282,9 +282,7 @@ void SvIdlParser::ReadInterfaceOrShell( SvMetaModule& rModule, MetaTypeType aMet
|
|||||||
|
|
||||||
if( rInStm.ReadIf( ':' ) )
|
if( rInStm.ReadIf( ':' ) )
|
||||||
{
|
{
|
||||||
aClass->aSuperClass = rBase.ReadKnownClass( rInStm );
|
aClass->aSuperClass = ReadKnownClass();
|
||||||
if( !aClass->aSuperClass.Is() )
|
|
||||||
throw SvParseException( rInStm, "unknown super class" );
|
|
||||||
}
|
}
|
||||||
if( rInStm.ReadIf( '{' ) )
|
if( rInStm.ReadIf( '{' ) )
|
||||||
{
|
{
|
||||||
@@ -309,19 +307,15 @@ void SvIdlParser::ReadInterfaceOrShellEntry(SvMetaClass& rClass)
|
|||||||
|
|
||||||
if( rTok.Is( SvHash_import() ) )
|
if( rTok.Is( SvHash_import() ) )
|
||||||
{
|
{
|
||||||
SvMetaClass * pClass = rBase.ReadKnownClass( rInStm );
|
SvMetaClass * pClass = ReadKnownClass();
|
||||||
if( !pClass )
|
SvClassElement xEle(pClass);
|
||||||
throw SvParseException( rInStm, "unknown imported interface" );
|
|
||||||
SvClassElement xEle;
|
|
||||||
xEle.SetClass( pClass );
|
|
||||||
rClass.aClassElementList.push_back( xEle );
|
|
||||||
|
|
||||||
rTok = rInStm.GetToken();
|
rTok = rInStm.GetToken();
|
||||||
if( rTok.IsString() )
|
if( rTok.IsString() )
|
||||||
{
|
{
|
||||||
xEle.SetPrefix( rTok.GetString() );
|
xEle.SetPrefix( rTok.GetString() );
|
||||||
rInStm.GetToken_Next();
|
rInStm.GetToken_Next();
|
||||||
}
|
}
|
||||||
|
rClass.aClassElementList.push_back( xEle );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -363,12 +357,22 @@ bool SvIdlParser::ReadInterfaceOrShellSlot(SvMetaSlot& rSlot)
|
|||||||
SvMetaAttribute * pAttr = rBase.ReadKnownAttr( rInStm, rSlot.GetType() );
|
SvMetaAttribute * pAttr = rBase.ReadKnownAttr( rInStm, rSlot.GetType() );
|
||||||
if( pAttr )
|
if( pAttr )
|
||||||
{
|
{
|
||||||
SvMetaSlot * pKnownSlot = dynamic_cast<SvMetaSlot*>( pAttr );
|
SvMetaSlot * pKnownSlot = dynamic_cast<SvMetaSlot*>( pAttr );
|
||||||
if( !pKnownSlot )
|
if( !pKnownSlot )
|
||||||
throw SvParseException( rInStm, "attribute " + pAttr->GetName() + " is method or variable but not a slot" );
|
throw SvParseException( rInStm, "attribute " + pAttr->GetName() + " is method or variable but not a slot" );
|
||||||
rSlot.SetRef( pKnownSlot );
|
rSlot.SetRef( pKnownSlot );
|
||||||
rSlot.SetName( pKnownSlot->GetName() );
|
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
|
else
|
||||||
{
|
{
|
||||||
@@ -376,7 +380,7 @@ bool SvIdlParser::ReadInterfaceOrShellSlot(SvMetaSlot& rSlot)
|
|||||||
SvMetaAttribute *pAttr2 = rBase.SearchKnownAttr( rSlot.GetSlotId() );
|
SvMetaAttribute *pAttr2 = rBase.SearchKnownAttr( rSlot.GetSlotId() );
|
||||||
if( pAttr2 )
|
if( pAttr2 )
|
||||||
{
|
{
|
||||||
SvMetaSlot * pKnownSlot = dynamic_cast<SvMetaSlot*>( pAttr2 );
|
SvMetaSlot * pKnownSlot = dynamic_cast<SvMetaSlot*>( pAttr2 );
|
||||||
if( !pKnownSlot )
|
if( !pKnownSlot )
|
||||||
throw SvParseException( rInStm, "attribute " + pAttr2->GetName() + " is method or variable but not a slot" );
|
throw SvParseException( rInStm, "attribute " + pAttr2->GetName() + " is method or variable but not a slot" );
|
||||||
rSlot.SetRef( pKnownSlot );
|
rSlot.SetRef( pKnownSlot );
|
||||||
@@ -435,6 +439,14 @@ bool SvIdlParser::ReadInterfaceOrShellMethodOrAttribute( SvMetaAttribute& rAttr
|
|||||||
return bOk;
|
return bOk;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SvMetaClass * SvIdlParser::ReadKnownClass()
|
||||||
|
{
|
||||||
|
SvMetaClass* pClass = rBase.ReadKnownClass( rInStm );
|
||||||
|
if( !pClass )
|
||||||
|
throw SvParseException( rInStm, "unknown class" );
|
||||||
|
return pClass;
|
||||||
|
}
|
||||||
|
|
||||||
SvMetaType * SvIdlParser::ReadKnownType()
|
SvMetaType * SvIdlParser::ReadKnownType()
|
||||||
{
|
{
|
||||||
OString aName = ReadIdentifier();
|
OString aName = ReadIdentifier();
|
||||||
|
Reference in New Issue
Block a user