Fix logic of isDerivedFrom function
From an email conversation with Stephen Bergmann "I think the real intent always was to actually look through all the returned getSuperclasses(), and the error that superclasses past the first one are effectively ignored has never been noticed."
This commit is contained in:
parent
23af334132
commit
a313cf8607
1 changed files with 7 additions and 18 deletions
|
@ -110,29 +110,18 @@ sal_Bool isDerivedFrom( Reference<XIdlClass> xToTestClass, Reference<XIdlClass>
|
|||
{
|
||||
Sequence< Reference<XIdlClass> > aClassesSeq = xToTestClass->getSuperclasses();
|
||||
const Reference<XIdlClass>* pClassesArray = aClassesSeq.getConstArray();
|
||||
|
||||
sal_Int32 nSuperClassCount = aClassesSeq.getLength();
|
||||
sal_Int32 i;
|
||||
for( i = 0 ;
|
||||
i < nSuperClassCount ;
|
||||
/* No "increment" expression needed as the body always
|
||||
* returns, and in fact MSVC warns about unreachable code if
|
||||
* we include one. On the other hand, what's the point in
|
||||
* using a for loop here then if all we ever will look at is
|
||||
* pClassesArray[0] ?
|
||||
*/ )
|
||||
for ( sal_Int32 i = 0; i < nSuperClassCount; ++i )
|
||||
{
|
||||
const Reference<XIdlClass>& rxClass = pClassesArray[i];
|
||||
if( xDerivedFromClass->equals( rxClass ) )
|
||||
{
|
||||
// Treffer
|
||||
|
||||
if ( xDerivedFromClass->equals( rxClass ) ||
|
||||
isDerivedFrom( rxClass, xDerivedFromClass )
|
||||
)
|
||||
return sal_True;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Rekursiv weitersuchen
|
||||
return isDerivedFrom( rxClass, xDerivedFromClass );
|
||||
}
|
||||
}
|
||||
|
||||
return sal_False;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue