axtimwalde/mpicbg

Version 1.3.0 breaks backwards compatibility

Closed this issue · 5 comments

The 1.3.0 version breaks downstream builds:

TrakEM2
$ mvn -Dmpicbg.version=1.3.0 clean package
...
[ERROR] /Users/curtis/code/trakem2/TrakEM2/src/main/java/lenscorrection/PolynomialModel2D.java:[34,8] lenscorrection.PolynomialModel2D is not abstract and does not override abstract method reset() in mpicbg.models.Model
[ERROR] /Users/curtis/code/trakem2/TrakEM2/src/main/java/bunwarpj/trakem2/transform/CubicBSplineTransform.java:[37,8] bunwarpj.trakem2.transform.CubicBSplineTransform is not abstract and does not override abstract method reset() in mpicbg.models.Model
[ERROR] /Users/curtis/code/trakem2/TrakEM2/src/main/java/mpicbg/trakem2/align/GenericAffineTile2D.java:[41,73] no suitable method found for set(java.awt.geom.AffineTransform)
    method mpicbg.models.InterpolatedModel.set(mpicbg.models.InterpolatedModel) is not applicable
      (argument mismatch; java.awt.geom.AffineTransform cannot be converted to mpicbg.models.InterpolatedModel)
    method mpicbg.models.InterpolatedAffineModel2D.set(mpicbg.models.InterpolatedAffineModel2D) is not applicable
      (argument mismatch; java.awt.geom.AffineTransform cannot be converted to mpicbg.models.InterpolatedAffineModel2D)
...
SPIM_Registration
$ mvn -Dmpicbg.version=1.3.0 clean package
...
[ERROR] /Users/curtis/code/fiji/SPIM_Registration/src/main/java/mpicbg/spim/registration/bead/BeadRegistration.java:[653,41] set(double,double,double,double,double,double,double,double,double,double,double,double) has private access in mpicbg.models.RigidModel3D
[ERROR] /Users/curtis/code/fiji/SPIM_Registration/src/main/java/mpicbg/util/TransformUtils.java:[194,22] set(double,double,double,double,double,double,double,double,double,double,double,double) has private access in mpicbg.models.RigidModel3D
[ERROR] /Users/curtis/code/fiji/SPIM_Registration/src/main/java/mpicbg/spim/io/IOFunctions.java:[1039,54] set(double,double,double,double,double,double,double,double,double,double,double,double) has private access in mpicbg.models.RigidModel3D
[ERROR] /Users/curtis/code/fiji/SPIM_Registration/src/main/java/mpicbg/pointdescriptor/model/TranslationInvariantFixedModel.java:[34,8] mpicbg.pointdescriptor.model.TranslationInvariantFixedModel is not abstract and does not override abstract method reset() in mpicbg.models.Model
[ERROR] /Users/curtis/code/fiji/SPIM_Registration/src/main/java/mpicbg/pointdescriptor/model/FixedModel.java:[34,8] mpicbg.pointdescriptor.model.FixedModel is not abstract and does not override abstract method reset() in mpicbg.models.Model
[ERROR] /Users/curtis/code/fiji/SPIM_Registration/src/main/java/mpicbg/pointdescriptor/model/TranslationInvariantSimilarityModel3D.java:[44,8] mpicbg.pointdescriptor.model.TranslationInvariantSimilarityModel3D is not abstract and does not override abstract method reset() in mpicbg.models.Model
[ERROR] /Users/curtis/code/fiji/SPIM_Registration/src/main/java/mpicbg/pointdescriptor/model/TranslationInvariantAffineModel3D.java:[57,8] mpicbg.pointdescriptor.model.TranslationInvariantAffineModel3D is not abstract and does not override abstract method reset() in mpicbg.models.Model
[ERROR] /Users/curtis/code/fiji/SPIM_Registration/src/main/java/mpicbg/pointdescriptor/model/TranslationInvariantRigidModel3D.java:[47,8] mpicbg.pointdescriptor.model.TranslationInvariantRigidModel3D is not abstract and does not override abstract method reset() in mpicbg.models.Model
[ERROR] /Users/curtis/code/fiji/SPIM_Registration/src/main/java/mpicbg/pointdescriptor/model/TranslationInvariantRigidModel2D.java:[54,8] mpicbg.pointdescriptor.model.TranslationInvariantRigidModel2D is not abstract and does not override abstract method reset() in mpicbg.models.Model
...
bigwarp
$ mvn -Dmpicbg.version=1.3.0 clean package
...
[ERROR] /Users/curtis/code/fiji-ext/bigwarp/src/main/java/bdv/viewer/animate/SimilarityModel3D.java:[30,8] bdv.viewer.animate.SimilarityModel3D is not abstract and does not override abstract method reset() in mpicbg.models.Model
[INFO] 1 error
...

The Model interface gaining new methods is allowed according to our use of SemVer. But the changes to set methods are maybe an issue?

FWIW, here's the output of:

mvn revapi:check -Drevapi.oldVersion=1.2.0 -Drevapi.newVersion=1.3.0

after adding revapi-maven-plugin to the POM (see also scijava/scijava-scripts#27 (comment)):

[ERROR] java.class.nonPublicPartOfAPI: class mpicbg.ij.clahe.Apply<T extends ij.process.ImageProcessor>: Class 'mpicbg.ij.clahe.Apply<T extends ij.process.ImageProcessor>' is indirectly included in the API (by the means of method return type for example) but the class is not accessible (neither public nor protected).
[ERROR] java.method.finalMethodAddedToNonFinalClass: method void mpicbg.models.AffineModel1D::reset(): A final method has been added to an inheritable class.
[ERROR] java.method.finalMethodAddedToNonFinalClass: method void mpicbg.models.AffineModel1D::set(mpicbg.models.TranslationModel1D): A final method has been added to an inheritable class.
[ERROR] java.method.finalMethodAddedToNonFinalClass: method void mpicbg.models.AffineModel2D::reset(): A final method has been added to an inheritable class.
[ERROR] java.method.finalMethodAddedToNonFinalClass: method void mpicbg.models.AffineModel2D::set(mpicbg.models.RigidModel2D): A final method has been added to an inheritable class.
[ERROR] java.method.finalMethodAddedToNonFinalClass: method void mpicbg.models.AffineModel2D::set(mpicbg.models.SimilarityModel2D): A final method has been added to an inheritable class.
[ERROR] java.method.finalMethodAddedToNonFinalClass: method void mpicbg.models.AffineModel2D::set(mpicbg.models.TranslationModel2D): A final method has been added to an inheritable class.
[ERROR] java.method.finalMethodAddedToNonFinalClass: method void mpicbg.models.AffineModel3D::reset(): A final method has been added to an inheritable class.
[ERROR] java.method.finalMethodAddedToNonFinalClass: method void mpicbg.models.AffineModel3D::set(mpicbg.models.SimilarityModel3D): A final method has been added to an inheritable class.
[ERROR] java.method.finalMethodAddedToNonFinalClass: method void mpicbg.models.AffineModel3D::set(mpicbg.models.TranslationModel3D): A final method has been added to an inheritable class.
[ERROR] java.method.finalMethodAddedToNonFinalClass: method void mpicbg.models.AffineModel3D::set(mpicbg.models.RigidModel3D): A final method has been added to an inheritable class.
[ERROR] java.method.finalMethodAddedToNonFinalClass: method void mpicbg.models.ConstantModel<A extends mpicbg.models.Model<A extends mpicbg.models.Model<A>>, M extends mpicbg.models.ConstantModel<A extends mpicbg.models.Model<A>, M extends mpicbg.models.ConstantModel<A, M>>>::reset(): A final method has been added to an inheritable class.
[ERROR] java.method.finalMethodAddedToNonFinalClass: method void mpicbg.models.HomographyModel2D::reset(): A final method has been added to an inheritable class.
[ERROR] java.method.finalMethodAddedToNonFinalClass: method void mpicbg.models.IdentityModel::reset(): A final method has been added to an inheritable class.
[ERROR] java.method.removed: method void mpicbg.models.InterpolatedAffineModel1D<A extends mpicbg.models.Model<A>, mpicbg.models.Affine1D<A>, B extends mpicbg.models.Model<B>, mpicbg.models.Affine1D<B>>::set(float, float): Method was removed.
[ERROR] java.method.removed: method void mpicbg.models.InterpolatedAffineModel2D<A extends mpicbg.models.Model<A>, mpicbg.models.Affine2D<A>, B extends mpicbg.models.Model<B>, mpicbg.models.Affine2D<B>>::set(java.awt.geom.AffineTransform): Method was removed.
[ERROR] java.method.removed: method void mpicbg.models.InterpolatedAffineModel2D<A extends mpicbg.models.Model<A>, mpicbg.models.Affine2D<A>, B extends mpicbg.models.Model<B>, mpicbg.models.Affine2D<B>>::set(double, double, double, double, double, double): Method was removed.
[ERROR] java.method.addedToInterface: method void mpicbg.models.Model<M extends mpicbg.models.Model<M extends mpicbg.models.Model<M>>>::reset(): Method was added to an interface.
[ERROR] java.method.finalMethodAddedToNonFinalClass: method void mpicbg.models.RigidModel2D::reset(): A final method has been added to an inheritable class.
[ERROR] java.method.finalMethodAddedToNonFinalClass: method void mpicbg.models.RigidModel2D::set(mpicbg.models.TranslationModel2D): A final method has been added to an inheritable class.
[ERROR] java.method.finalMethodAddedToNonFinalClass: method void mpicbg.models.RigidModel3D::reset(): A final method has been added to an inheritable class.
[ERROR] java.method.visibilityReduced: method void mpicbg.models.RigidModel3D::set(double, double, double, double, double, double, double, double, double, double, double, double): visibility reduced
[ERROR] java.method.finalMethodAddedToNonFinalClass: method void mpicbg.models.RigidModel3D::set(mpicbg.models.TranslationModel3D): A final method has been added to an inheritable class.
[ERROR] java.method.finalMethodAddedToNonFinalClass: method void mpicbg.models.SimilarityModel2D::reset(): A final method has been added to an inheritable class.
[ERROR] java.method.finalMethodAddedToNonFinalClass: method void mpicbg.models.SimilarityModel2D::set(mpicbg.models.TranslationModel2D): A final method has been added to an inheritable class.
[ERROR] java.method.finalMethodAddedToNonFinalClass: method void mpicbg.models.SimilarityModel2D::set(mpicbg.models.RigidModel2D): A final method has been added to an inheritable class.
[ERROR] java.method.finalMethodAddedToNonFinalClass: method void mpicbg.models.SimilarityModel3D::reset(): A final method has been added to an inheritable class.
[ERROR] java.method.finalMethodAddedToNonFinalClass: method void mpicbg.models.SimilarityModel3D::set(mpicbg.models.RigidModel3D): A final method has been added to an inheritable class.
[ERROR] java.method.finalMethodAddedToNonFinalClass: method void mpicbg.models.SimilarityModel3D::set(mpicbg.models.TranslationModel3D): A final method has been added to an inheritable class.
[ERROR] java.method.finalMethodAddedToNonFinalClass: method void mpicbg.models.Tile<M extends mpicbg.models.Model<M extends mpicbg.models.Model<M>>>::setModel(M): A final method has been added to an inheritable class.
[ERROR] java.method.finalMethodAddedToNonFinalClass: method void mpicbg.models.TranslationModel1D::reset(): A final method has been added to an inheritable class.
[ERROR] java.method.finalMethodAddedToNonFinalClass: method double[] mpicbg.models.TranslationModel2D::getTranslation(): A final method has been added to an inheritable class.
[ERROR] java.method.finalMethodAddedToNonFinalClass: method void mpicbg.models.TranslationModel2D::reset(): A final method has been added to an inheritable class.
[ERROR] java.method.finalMethodAddedToNonFinalClass: method void mpicbg.models.TranslationModel3D::reset(): A final method has been added to an inheritable class.

It seems like this was addressed partially in #46.

Apologies for the caused problems (the breaking changes were introduced in my PR #42).
This indeed was shortly fixed in #46, but it looks like the release 1.3.0 was made in-between, and there is no newer release yet that actually contains the fixes.

I'll go over the change sets to make sure that there are no other remaining problems and will check with @axtimwalde to make a new release.

New release 1.4.0 with the fixes is out. Also created a PR with the version bump here: scijava/pom-scijava#118