Uploaded image for project: 'Maven Shared Components'
  1. Maven Shared Components
  2. MSHARED-1045

MSHARED-1024 breaks binary backwards compatibility

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Duplicate
    • None
    • None
    • maven-reporting-api
    • None

    Description

      https://github.com/apache/maven-reporting-api/pull/2 breaks binary backwards compatibility of interface `MavenReport`, because replacing `org.codehaus.doxia.sink.Sink` with `org.apache.maven.doxia.sink.Sink` changes the signature of method:

      void generate( Sink sink, Locale locale ) throws MavenReportException;

      So nothing compiled against version `3.0` of the `maven-reporting-api` works with `3.1.0` anymore.

      I suggest either reverting this commit in a new release or updating the code in a backwards-compatible manner with two mutually recursive default implementations for both the old and new signature (this requires Java 8 support though):

       

      @Deprecated
      default void generate( org.codehaus.doxia.sink.Sink sink, Locale locale ) throws MavenReportException {
          generate((Sink) sink, locale);
      }
      
      default void generate( Sink sink, Locale locale ) throws MavenReportException {
          generate((org.codehaus.doxia.sink.Sink) sink, locale);
      } 

      The solution above can result in `ClassCastException`s though, because some `org.apache.maven.doxia.sink.Sink` maybe do not implement `org.codehaus.doxia.sink`. I do not know any way of safely evolving the type of an input parameter for a method.

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              dragnea Andrei Silviu Dragnea
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: