From a313cf86071795bbd051feb9b99258be0a5c8c48 Mon Sep 17 00:00:00 2001 From: Kevin Hunter Date: Tue, 4 Oct 2011 12:58:10 -0400 Subject: 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." --- stoc/source/inspect/introspection.cxx | 25 +++++++------------------ 1 file changed, 7 insertions(+), 18 deletions(-) (limited to 'stoc') diff --git a/stoc/source/inspect/introspection.cxx b/stoc/source/inspect/introspection.cxx index 36f1acce8e02..dd6e32cb9db4 100644 --- a/stoc/source/inspect/introspection.cxx +++ b/stoc/source/inspect/introspection.cxx @@ -110,29 +110,18 @@ sal_Bool isDerivedFrom( Reference xToTestClass, Reference { Sequence< Reference > aClassesSeq = xToTestClass->getSuperclasses(); const Reference* 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& 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; } -- cgit