Thanks All! - Ray
On Tue, Dec 5, 2017 at 9:03 AM, Timothy Ward <tim.w...@paremus.com> wrote: > No, because other people may be implementing the Foo interface in their > bundles. > > Tim > > > On 5 Dec 2017, at 12:42, Raymond Auge <raymond.a...@liferay.com> wrote: > > Does it matter that I'm getting a MINOR change while Foo and Bar are in > the same, exported package? > > - Ray > > On Dec 5, 2017 03:05, "Peter Kriens via osgi-dev" <osgi-dev@mail.osgi.org> > wrote: > >> Great minds think alike (and it helped we were both in this discussion) >> :-) >> >> P >> >> On 5 Dec 2017, at 09:03, Timothy Ward via osgi-dev < >> osgi-dev@mail.osgi.org> wrote: >> >> Ray - I assume that you’re asking why this is a MINOR change, rather than >> a MICRO change? It’s obviously not a major change because the method exists >> with the same signature everywhere both before and after. >> >> The reason that it’s a MINOR change is to do with the forward (rather >> than backward) guarantees that the semantic versioning rules must make. >> >> In your example you end up deleting the original doFoo() implementation >> from the Bar class. From this point on the Bar class has no knowledge of >> this method, and the implementation *must* come from either a super type >> (there aren’t any) or as a default method on the implemented interface. If >> this doesn’t happen then the whole type hierarchy of Bar is broken - the >> concrete types which subclass Bar simply don’t have an implementation of >> the interface method that the contract says they must have! >> >> The only way to enforce this is to ensure that the updated Bar class >> imports a version of Foo which is guaranteed to have the “default doFoo() >> feature”. In semantic versioning new features always require at least a >> MINOR bump so that people can reliably depend on them (depending on a MICRO >> is not a good idea). That is what is happening here. >> >> Tim >> >> PS - I have just seen Peter’s email come in, which thankfully agrees with >> what I’m saying! >> >> On 5 Dec 2017, at 06:43, Fauth Dirk (AA-AS/EIS2-EU) via osgi-dev < >> osgi-dev@mail.osgi.org> wrote: >> >> Hi, >> >> IMHO it is a MINOR change because it is not a breaking change. J >> >> With that change neither implementations of the Foo interface, nor >> classes that extend the abstract Bar class will break. >> >> Implementations of the Foo interface can still implement the doFoo() >> method and by doing this override the default behavior. Overriding a >> default is not a breaking change as you neither add a new public method or >> field, you just give a default implementation. >> >> Classes that extend Bar did not need to implement doFoo() before, as it >> was implemented in Bar. Removing that method would be typically a breaking >> change. But you are moving it as default method to the Foo interface. >> Therefore Bar still has the doFoo() method implemented, as it is provided >> by the Foo interface. >> >> I have to admit that I am not 100% sure about the byte code in the end >> and if that matters. But as a user of the interface and abstract class, >> nothing breaks. >> >> Mit freundlichen Grüßen / Best regards >> >> >> *Dirk Fauth* >> Automotive Service Solutions, ESI application (AA-AS/EIS2-EU) >> Robert Bosch GmbH | Postfach 11 29 | 73201 Plochingen | GERMANY | >> www.bosch.com >> Tel. +49 7153 666-1155 <+49%207153%206661155> | dirk.fa...@de.bosch.com >> >> Sitz: Stuttgart, Registergericht: Amtsgericht Stuttgart, HRB 14000; >> Aufsichtsratsvorsitzender: Franz Fehrenbach; Geschäftsführung: Dr. >> Volkmar Denner, >> Prof. Dr. Stefan Asenkerschbaumer, Dr. Rolf Bulander, Dr. Stefan Hartung, >> Dr. Markus Heyn, Dr. Dirk Hoheisel, >> Christoph Kübel, Uwe Raschke, Peter Tyroller >> >> >> *Von:* osgi-dev-boun...@mail.osgi.org [mailto:osgi-dev-bounces@mail. >> osgi.org <osgi-dev-boun...@mail.osgi.org>] *Im Auftrag von *Raymond Auge >> via osgi-dev >> *Gesendet:* Dienstag, 5. Dezember 2017 00:26 >> *An:* OSGi Developer Mail List <osgi-dev@mail.osgi.org> >> *Betreff:* [osgi-dev] making an existing interface method default causes >> MINOR baseline change >> >> >> Hey All, >> I think the answer is "Yes it's a MINOR change", but I wanted to clarify. >> >> Assume I have the following interface in an exported package: >> >> public interface Foo { >> public void doFoo(); >> } >> >> And in the same package I have abstract class Bar which implements Foo: >> >> public abstract class Bar implements Foo { >> public void doFoo() {...} >> public abstract void doBar(); >> } >> >> And I want to migrate to a default method because doFoo() logic rarely >> changes: >> >> public interface Foo { >> public default void doFoo() {...} >> } >> >> public abstract class Bar implements Foo { >> //public void doFoo() {...} >> public abstract void doBar(); >> } >> >> Can someone explain why this is a MINOR change? >> >> >> -- >> *Raymond Augé* <http://www.liferay.com/web/raymond.auge/profile> >> (@rotty3000) >> Senior Software Architect *Liferay, Inc.* <http://www.liferay.com/> >> (@Liferay) >> Board Member & EEG Co-Chair, OSGi Alliance <http://osgi.org/> >> (@OSGiAlliance) >> _______________________________________________ >> OSGi Developer Mail List >> osgi-dev@mail.osgi.org >> https://mail.osgi.org/mailman/listinfo/osgi-dev >> >> >> _______________________________________________ >> OSGi Developer Mail List >> osgi-dev@mail.osgi.org >> https://mail.osgi.org/mailman/listinfo/osgi-dev >> >> >> >> _______________________________________________ >> OSGi Developer Mail List >> osgi-dev@mail.osgi.org >> https://mail.osgi.org/mailman/listinfo/osgi-dev >> > > -- *Raymond Augé* <http://www.liferay.com/web/raymond.auge/profile> (@rotty3000) Senior Software Architect *Liferay, Inc.* <http://www.liferay.com> (@Liferay) Board Member & EEG Co-Chair, OSGi Alliance <http://osgi.org> (@OSGiAlliance)
_______________________________________________ OSGi Developer Mail List osgi-dev@mail.osgi.org https://mail.osgi.org/mailman/listinfo/osgi-dev