From ce2991ee863e2e5faef95462242552515e1cf89c Mon Sep 17 00:00:00 2001 From: Stephan Bergmann Date: Wed, 3 Apr 2013 11:30:06 +0200 Subject: [PATCH] Forbid old-style services/singletons inheriting new-style services ...does not make sense. Adapted some old-style services accordingly, where the inherited service had been changed to new-style after the fact. Change-Id: I5f3e4ddf99160778a319062a6c84f83529ff177b --- cppu/qa/cppumaker/types.idl | 2 +- idlc/CustomTarget_parser_test.mk | 5 ++++ idlc/inc/idlc/astservice.hxx | 9 ++++++ idlc/source/parser.y | 3 +- idlc/test/parser/oldstyle.tests | 28 ++++++++++++++++++ .../vba/VBASpreadsheetEventProcessor.idl | 4 +-- .../star/script/vba/VBATextEventProcessor.idl | 4 +-- offapi/com/sun/star/sdb/Query.idl | 4 +-- offapi/type_reference/types.rdb | Bin 7439872 -> 7439872 bytes udkapi/com/sun/star/loader/Java2.idl | 8 ++--- 10 files changed, 55 insertions(+), 12 deletions(-) create mode 100644 idlc/test/parser/oldstyle.tests diff --git a/cppu/qa/cppumaker/types.idl b/cppu/qa/cppumaker/types.idl index da5aa8fe62cd..2c0a0559af7a 100644 --- a/cppu/qa/cppumaker/types.idl +++ b/cppu/qa/cppumaker/types.idl @@ -181,7 +181,7 @@ service S2: XTest; service S3 { interface XTest; }; -singleton S4 { service S2; }; +singleton S4 { service S3; }; module services { diff --git a/idlc/CustomTarget_parser_test.mk b/idlc/CustomTarget_parser_test.mk index 1c3e44b2b0ba..6be490aed38b 100644 --- a/idlc/CustomTarget_parser_test.mk +++ b/idlc/CustomTarget_parser_test.mk @@ -50,6 +50,11 @@ $(call gb_CustomTarget_get_target,idlc/parser_test) : \ $(call gb_Executable_get_command,idlc) \ -O $(call gb_CustomTarget_get_workdir,idlc/parser_test) \ -stdin && \ + $(PERL) $(SRCDIR)/solenv/bin/exectest.pl \ + $(SRCDIR)/idlc/test/parser/oldstyle.tests \ + $(call gb_Executable_get_command,idlc) \ + -O $(call gb_CustomTarget_get_workdir,idlc/parser_test) \ + -stdin && \ $(PERL) $(SRCDIR)/solenv/bin/exectest.pl \ $(SRCDIR)/idlc/test/parser/polystruct.tests \ $(call gb_Executable_get_command,idlc) \ diff --git a/idlc/inc/idlc/astservice.hxx b/idlc/inc/idlc/astservice.hxx index 6760462a4c22..d3e0b643b5d9 100644 --- a/idlc/inc/idlc/astservice.hxx +++ b/idlc/inc/idlc/astservice.hxx @@ -29,22 +29,31 @@ public: AstService(const ::rtl::OString& name, AstScope* pScope) : AstDeclaration(NT_service, name, pScope) , AstScope(NT_service) + , m_singleInterfaceBasedService(false) , m_defaultConstructor(false) {} AstService(const NodeType type, const ::rtl::OString& name, AstScope* pScope) : AstDeclaration(type, name, pScope) , AstScope(type) + , m_singleInterfaceBasedService(false) , m_defaultConstructor(false) {} virtual ~AstService() {} virtual sal_Bool dump(RegistryKey& rKey); + void setSingleInterfaceBasedService() + { m_singleInterfaceBasedService = true; } + void setDefaultConstructor(bool b) { m_defaultConstructor = b; } + bool isSingleInterfaceBasedService() const + { return m_singleInterfaceBasedService; } + bool checkLastConstructor() const; private: + bool m_singleInterfaceBasedService; bool m_defaultConstructor; }; diff --git a/idlc/source/parser.y b/idlc/source/parser.y index 8729a63ade7e..e338e57be7aa 100644 --- a/idlc/source/parser.y +++ b/idlc/source/parser.y @@ -1707,7 +1707,7 @@ service_export : pDecl = pScope->lookupByName(*iter); if ( pDecl && (pDecl->getNodeType() == NT_service) ) { - if ( pScope->getScopeNodeType() == NT_singleton && pScope->nMembers() > 0 ) + if ( static_cast< AstService * >(pDecl)->isSingleInterfaceBasedService() || pScope->getScopeNodeType() == NT_singleton && pScope->nMembers() > 0 ) idlc()->error()->error0(EIDL_ILLEGAL_ADD); else if ( idlc()->error()->checkPublished(pDecl) ) { @@ -1907,6 +1907,7 @@ service_interface_dfn: { AstService * s = static_cast< AstService * >(idlc()->scopes()->top()); if (s != 0) { + s->setSingleInterfaceBasedService(); s->setDefaultConstructor(!$4); } } diff --git a/idlc/test/parser/oldstyle.tests b/idlc/test/parser/oldstyle.tests new file mode 100644 index 000000000000..c6692b977d72 --- /dev/null +++ b/idlc/test/parser/oldstyle.tests @@ -0,0 +1,28 @@ +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +EXPECT SUCCESS "oldstyle.tests 1": +service S1 {}; +service S2 { service S1; }; + + +EXPECT FAILURE "oldstyle.tests 2": +interface X {}; +service S1: X; +service S2 { service S1; }; + + +EXPECT SUCCESS "oldstyle.tests 3": +service S1 {}; +singleton S2 { service S1; }; + + +EXPECT FAILURE "oldstyle.tests 4": +interface X {}; +service S1: X; +singleton S2 { service S1; }; diff --git a/offapi/com/sun/star/script/vba/VBASpreadsheetEventProcessor.idl b/offapi/com/sun/star/script/vba/VBASpreadsheetEventProcessor.idl index 6cb61f5fa0f2..ac306b0424c5 100644 --- a/offapi/com/sun/star/script/vba/VBASpreadsheetEventProcessor.idl +++ b/offapi/com/sun/star/script/vba/VBASpreadsheetEventProcessor.idl @@ -20,7 +20,7 @@ #ifndef __com_sun_star_script_vba_VBASpreadsheetEventProcessor_idl__ #define __com_sun_star_script_vba_VBASpreadsheetEventProcessor_idl__ -#include +#include module com { module sun { module star { module script { module vba { @@ -28,7 +28,7 @@ module com { module sun { module star { module script { module vba { service VBASpreadsheetEventProcessor { - service VBAEventProcessor; + interface XVBAEventProcessor; }; diff --git a/offapi/com/sun/star/script/vba/VBATextEventProcessor.idl b/offapi/com/sun/star/script/vba/VBATextEventProcessor.idl index 2535831511aa..816163fbb915 100644 --- a/offapi/com/sun/star/script/vba/VBATextEventProcessor.idl +++ b/offapi/com/sun/star/script/vba/VBATextEventProcessor.idl @@ -20,7 +20,7 @@ #ifndef __com_sun_star_script_vba_VBATextEventProcessor_idl__ #define __com_sun_star_script_vba_VBATextEventProcessor_idl__ -#include +#include module com { module sun { module star { module script { module vba { @@ -28,7 +28,7 @@ module com { module sun { module star { module script { module vba { service VBATextEventProcessor { - service VBAEventProcessor; + interface XVBAEventProcessor; }; diff --git a/offapi/com/sun/star/sdb/Query.idl b/offapi/com/sun/star/sdb/Query.idl index 38f97e3e6848..13cc935929cb 100644 --- a/offapi/com/sun/star/sdb/Query.idl +++ b/offapi/com/sun/star/sdb/Query.idl @@ -29,7 +29,7 @@ #include -#include +#include module com { module sun { module star { module sdb { @@ -47,7 +47,7 @@ published service Query /** defines the command of the query. */ - service com::sun::star::sdb::QueryDefinition; + interface com::sun::star::sdb::XQueryDefinition; /** is used for customization of data appearance. diff --git a/offapi/type_reference/types.rdb b/offapi/type_reference/types.rdb index b0c2c88a8ae87e44807315f2094118861a0c630e..dd399691137370a4a1f7aa406f3f8e24565fb9bb 100644 GIT binary patch delta 620 zcmYk$IY?V^0Knm>@8vzO`qZk)^S;`&Y7^ttXsd}wyxVxx+j=BMtyjT8ii?E@E>dWP z{1F5ttE(6g3z;$(3J!u(mkusnq=G|#?bPAhzn#5U!p>htoDpv%7?L3y=2OMtSFO>n zA4~zowC|B8_kD7rI84pf#aXvS6EVM%FX}$kr;F%!yCkj;6g3o3Eb+_h;@8hntB8)s zlDOJdG~o>>AH~gWg&O%ClGV7+Zrc~Lv?~P_s7OQ-l97T`JU|*Wq$2~Fc!(@yBL@~( zBT`VWbg6e!TTaul{$JLWS0pZGGLuAXJWCUoN4h3DoVgjQ!<6FRShH`2j&+OpcB0!N z-aXqnGxNV$Sl^YxxyVC43Q&k56r%*CC__0O;W2D@f~TlJC93cYb~sQCCu&fOI@F^9 z&*4HNn(zWI(ToDOs>pLrRIg-+kp`J*LRw*Nm!* zZd?5zGSNE2-LchbDf?GZ=H;Xc4PG2TF-mX{r8oo~K9u1wj=+zjI0ggduADSOZQ4{| zd)l*X{+ImL6%_fcR$cs9GIbHytnzu&mfb&IAGIbHmQ6#l+?tQUZRvAZ%M{7;a?V5r zj-wJ)IDu-^;3Q7rGyy&y+}NMped52-ivR!s diff --git a/udkapi/com/sun/star/loader/Java2.idl b/udkapi/com/sun/star/loader/Java2.idl index 49553b7fcc0e..6e3417789f59 100644 --- a/udkapi/com/sun/star/loader/Java2.idl +++ b/udkapi/com/sun/star/loader/Java2.idl @@ -19,8 +19,7 @@ #ifndef __com_sun_star_loader_Java2_idl__ #define __com_sun_star_loader_Java2_idl__ -#include - +#include module com { module sun { module star { module loader { /**the same as Java. @@ -28,11 +27,12 @@ module com { module sun { module star { module loader { Java service was intended for UNO 2 components. Since UNO 2 is not supported anymore, the service name is reused again. + + @deprecated */ published service Java2 { - service Java; - + interface XImplementationLoader; };