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 <hunteke@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
Context
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.