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:
Kevin Hunter 2011-10-04 12:58:10 -04:00 committed by Stephan Bergmann
parent 23af334132
commit a313cf8607

View file

@ -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;
}