At 4:15pm -0400 Tue, 04 Oct 2011, Stephan Bergmann wrote:
Thanks a lot for the patch. 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.
Excellent. Was wondering, but don't yet know LO well enough to make such declarations. Well, modulo any errors on my part, the logic I sent in patch 1 should be the same as what was originally there, but I hope easier to read/see for comparison/fixing.
Here is a second patch that compiles, /should/ respond to what you just confirmed was the original intent, but is untested. (It was a random drive by patching.) Specifically, I suppose it's obvious that this now changes the semantics of it actually used to do. If you know how to test it ...
Cheers, Kevin
>From 0543ea7fad724856ee1ed837129808815eb44480 Mon Sep 17 00:00:00 2001 From: Kevin Hunter <hunt...@earlham.edu> Date: Tue, 4 Oct 2011 12:58:10 -0400 Subject: [PATCH] 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 files changed, 7 insertions(+), 18 deletions(-) diff --git a/stoc/source/inspect/introspection.cxx b/stoc/source/inspect/introspection.cxx index 36f1acc..7d62578 100644 --- a/stoc/source/inspect/introspection.cxx +++ b/stoc/source/inspect/introspection.cxx @@ -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; } -- 1.7.1
_______________________________________________ LibreOffice mailing list LibreOffice@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice