On Fri, Nov 08, 2013 at 08:57:31AM +0100, Stephan Bergmann wrote:
> Ouch.  I must admit I at least didn't carefully inspect all of the
> supportsService implementations cleaned up in
> <https://bugs.freedesktop.org/show_bug.cgi?id=54938> "Adapt
> supportsService implementations to cppu::supportsService" for this
> gotcha of deliberate incompatibility between supportsService and
> getSupportedServiceNames.

> Would it not be better here to change
> OShape::getSupportedServiceNames instead, to also report
> m_sServiceName?

On the face of it, it sounds reasonable.

I tried to do it with the attached patch.

However, rpt_component_getFactory in file
reportdesign/source/core/api/services.cxx wants to use
OShape::getSupportedServiceNames_Static

I'm not sure for what exactly; but I expect there it wants a static
function there (no "this" pointer).

So we are making getSupportedServiceNames and supportsService
compatible, but we are making getSupportedServiceNames incompatible
with getSupportedServiceNames_Static.

What are the consequences of that? Which incompatibility is
preferable? I don't know. Do you have an opinion on that?

> On 11/08/2013 03:10 AM, Lionel Elie Mamane wrote:
>> commit e7fad6da680631f82684d4f248ab77d53caa4189
>> Author: Lionel Elie Mamane <lio...@mamane.lu>
>> Date:   Fri Nov 8 03:06:09 2013 +0100

>>      fdo#71130 pretend to support service m_sServiceName
>>
>>      Which was the case before, and was probably erroneously changed in
>>      commit 196f980012739d94654e6863b85b2e49f7e1a1e5
>>          fdo#54938: Replace existsValue for cppu::supportsService
>>
>>      Change-Id: I20323bba1105d1844c79a5a0ad3c9e133a9d0d05

>> diff --git a/reportdesign/source/core/api/Shape.cxx 
>> b/reportdesign/source/core/api/Shape.cxx
>> index 47270d4..d22ed65 100644
>> --- a/reportdesign/source/core/api/Shape.cxx
>> +++ b/reportdesign/source/core/api/Shape.cxx
>> @@ -151,7 +151,7 @@ uno::Sequence< OUString > SAL_CALL 
>> OShape::getSupportedServiceNames(  ) throw(un
>>   sal_Bool SAL_CALL OShape::supportsService(const OUString& ServiceName) 
>> throw( uno::RuntimeException )
>>   {
>>
>> -    return cppu::supportsService(this, ServiceName);
>> +    return m_sServiceName == ServiceName || cppu::supportsService(this, 
>> ServiceName);
>>   }
>>   // 
>> -----------------------------------------------------------------------------
>>   // XReportComponent
diff --git a/reportdesign/source/core/api/Shape.cxx b/reportdesign/source/core/api/Shape.cxx
index d22ed65..e3a1f0e 100644
--- a/reportdesign/source/core/api/Shape.cxx
+++ b/reportdesign/source/core/api/Shape.cxx
@@ -128,14 +128,7 @@ OUString SAL_CALL OShape::getImplementationName(  ) throw(uno::RuntimeException)
 {
     return getImplementationName_Static();
 }
-//--------------------------------------------------------------------------
-uno::Sequence< OUString > OShape::getSupportedServiceNames_Static(  ) throw(uno::RuntimeException)
-{
-    uno::Sequence< OUString > aServices(1);
-    aServices.getArray()[0] = SERVICE_SHAPE;
 
-    return aServices;
-}
 //------------------------------------------------------------------------------
 uno::Reference< uno::XInterface > OShape::create(uno::Reference< uno::XComponentContext > const & xContext)
 {
@@ -145,13 +138,17 @@ uno::Reference< uno::XInterface > OShape::create(uno::Reference< uno::XComponent
 //--------------------------------------------------------------------------
 uno::Sequence< OUString > SAL_CALL OShape::getSupportedServiceNames(  ) throw(uno::RuntimeException)
 {
-    return getSupportedServiceNames_Static();
+    uno::Sequence< OUString > aServices(2);
+    aServices.getArray()[0] = SERVICE_SHAPE;
+    aServices.getArray()[1] = m_sServiceName;
+
+    return aServices;
 }
 //------------------------------------------------------------------------------
 sal_Bool SAL_CALL OShape::supportsService(const OUString& ServiceName) throw( uno::RuntimeException )
 {
 
-    return m_sServiceName == ServiceName || cppu::supportsService(this, ServiceName);
+    return cppu::supportsService(this, ServiceName);
 }
 // -----------------------------------------------------------------------------
 // XReportComponent
diff --git a/reportdesign/source/core/inc/Shape.hxx b/reportdesign/source/core/inc/Shape.hxx
index 463843f..2298fc1 100644
--- a/reportdesign/source/core/inc/Shape.hxx
+++ b/reportdesign/source/core/inc/Shape.hxx
@@ -89,7 +89,6 @@ namespace reportdesign
         virtual OUString SAL_CALL getImplementationName(  ) throw(::com::sun::star::uno::RuntimeException);
         virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames(  ) throw(::com::sun::star::uno::RuntimeException);
 
-        static ::com::sun::star::uno::Sequence< OUString > getSupportedServiceNames_Static(void) throw( ::com::sun::star::uno::RuntimeException );
         static OUString getImplementationName_Static(void) throw( ::com::sun::star::uno::RuntimeException );
         static ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL
             create(::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > const & xContext);
_______________________________________________
LibreOffice mailing list
LibreOffice@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice

Reply via email to