[Libreoffice-commits] core.git: 2 commits - reportdesign/source svx/source

Stephan Bergmann sbergman at redhat.com
Fri Nov 8 02:09:03 PST 2013


On 11/08/2013 10:09 AM, Lionel Elie Mamane wrote:
> On Fri, Nov 08, 2013 at 08:57:31AM +0100, Stephan Bergmann wrote:
>> 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?

OShape::getSupportedServiceNames_Static is used by the UNO plumbing when 
processing a createInstance call on the global service manager, but only 
in a very limited way:  If reportdesign/util/rpt.component states that 
there is an implementation "com.sun.star.comp.report.Shape" of service 
"com.sun.star.report.Shape" in Library_rpt, that means that 
rpt_component_getFactory("com.sun.star.comp.report.Shape",...) shall 
return a factory object that (besides css.lang.XSingleComponentFactory) 
shall implement css.lang.XServiceInfo that duplicates the relevant 
information in reportdesign/util/rpt.component (getImplementationName 
returns "com.sun.star.comp.report.Shape", getSupportedServiceNames 
returns just "com.sun.star.report.Shape", and supportsService(x) is true 
iff x is an element of getSupportedServiceNames()).

When that factory object (via the css.lang.XSingleComponentFactory 
interface) delivers an object implementing the 
"com.sun.star.report.Shape" service, the expected behavior is that that 
implementation object's css.lang.XServiceInfo interface behaves the same 
as the factory object's one.

However, in the case of OShape, the implementation object claims to 
support an additional service compared to the factory (where that 
additional service name obviously cannot be used to obtain an instance 
of OShape via the global service manager; I didn't dig into the code to 
look what this hack in OShape is actually good for).

I think it is better here to strive for consistency between the 
implementation object's supportsService and getSupportedServiceNames 
methods, than to strive for consistency between the factory and 
implementation object's getSupportedServiceNames methods (as full 
consistency between the factory and implementation object's 
css.lang.XServiceInfo interfaces is apparently impossible anyway, safe 
for a potential redesign of OShape that avoids the hack).

Stephan


More information about the LibreOffice mailing list