It has to be as “Adding method to the public class”. See the following bug for an example of how adding a seemingly-innocuous default method caused issues downstream:
https://bugs.eclipse.org/bugs/show_bug.cgi?id=477779#c3 I don’t think it would be a runtime problem though. Brian. > On 16-Jun-2016, at 8:47 AM, Mikaël Barbero <mik...@eclipse.org> wrote: > > Hi Andrey, > > You may be interested in John's presentation about API design with Java 8 > https://jarthorn.github.io/EclipseCon2014/java8/. > > Cheers, > Mikael > >> Le 16 juin 2016 à 13:59, Andrey Loskutov <losku...@gmx.de> a écrit : >> >> Hi all, >> >> I'm trying to understand if "adding default method to interface" API change >> is binary compatible for Eclipse project or not? >> >> I've just checked [1] and have not found a hint how should we deal with the >> new "default" methods (Java 8) added to the existing interfaces. >> >> Are we considering this as "Add API method -> If method need not be >> implemented by Client -> Binary compatible (0)" case from [1]? >> >> Or do we threat this case as "Adding method to the public class" from [2], >> which has a very detailed but fuzzy example which says basically "yes and >> not", quote: >> >> "However, if the method is added to a class which Clients may subclass, then >> the change should ordinarily be viewed as a breaking change. The reason for >> this harsh conclusion is because of the possibility that a Client's subclass >> already has its own implementation of a method by that name. Adding the API >> method to the superclass undercuts the Client's code since it would be sheer >> coincidence if the Client's existing method met the API contract of the >> newly added method. In practice, if the likelihood of this kind of name >> coincidence is sufficiently low, this kind of change is often treated as if >> it were non-breaking." >> >> So which way do we like to deal with that? >> >> I personally would love to see this change as "binary compatible", because >> this would allow easier interface evolution. >> >> It would be nice to extend the guideline [1] by explicitly adding this case: >> "Add API method -> If the new method has "default" qualifier (Java 8) -> >> Binary compatible (0)" >> >> Also if this is true, and we consider this case as binary compatible, how >> about the existing guideline regarding "numbered" interfaces? (Example: >> IPerspectiveListener4 extends IPerspectiveListener3 extends >> IPerspectiveListener2 extends IPerspectiveListener) >> >> Would we then also change this and allow interface evolution with new >> *default* methods without creating new interface? >> >> See also Oracle guideline which strictly speaking says: it will be binary >> compatible but *can* in theory lead to runtime issues [3]. >> >> [1] >> https://wiki.eclipse.org/Evolving_Java-based_APIs_2#Evolving_API_Interfaces >> [2] >> https://wiki.eclipse.org/Evolving_Java-based_APIs#Example_4_-_Adding_an_API_method >> [3] https://docs.oracle.com/javase/specs/jls/se8/html/jls-13.html#jls-13.5.6 >> >> Kind regards, >> Andrey Loskutov >> >> http://google.com/+AndreyLoskutov >> _______________________________________________ >> cross-project-issues-dev mailing list >> cross-project-issues-dev@eclipse.org >> To change your delivery options, retrieve your password, or unsubscribe from >> this list, visit >> https://dev.eclipse.org/mailman/listinfo/cross-project-issues-dev > > _______________________________________________ > cross-project-issues-dev mailing list > cross-project-issues-dev@eclipse.org > To change your delivery options, retrieve your password, or unsubscribe from > this list, visit > https://dev.eclipse.org/mailman/listinfo/cross-project-issues-dev _______________________________________________ cross-project-issues-dev mailing list cross-project-issues-dev@eclipse.org To change your delivery options, retrieve your password, or unsubscribe from this list, visit https://dev.eclipse.org/mailman/listinfo/cross-project-issues-dev