Giter Site home page Giter Site logo

Comments (15)

garydgregory avatar garydgregory commented on June 2, 2024 1

OK. It is helpful to know that these two issues are related though.

from japicmp.

siom79 avatar siom79 commented on June 2, 2024 1

Unfortunately it is not that easy, because we need to change the incompatibility for each occurrence. I think we need to change the list of incompatibilities from a pure enum to an object, on which we can change the incompatibility level. :(

from japicmp.

siom79 avatar siom79 commented on June 2, 2024

But the method return type changed, didn't it? The change of the access modifier is not the problem.

from japicmp.

scordio avatar scordio commented on June 2, 2024

Yes, it changed, but it shouldn't be a problem as it was originally package-private, or not?

Or do you have in mind split-package usage?

from japicmp.

garydgregory avatar garydgregory commented on June 2, 2024

This seems to duplicate #265

from japicmp.

scordio avatar scordio commented on June 2, 2024

@garydgregory the only reason I didn't mention it as a duplicate of #265 is the potential split-package usage of an existing package-private method (my case), while a private one (your case) wouldn't be affected.

from japicmp.

siom79 avatar siom79 commented on June 2, 2024

It is a difficult decision.
If you only have the point of view of the users of your library, then every package protected method should not be used (although some users might do it) and it becomes visible for your users with public access.
From a theoretical point of view, changing the return type and the modifier from package protected to public is incompatible with respect to inner package usage.
Back then I have assumed that the accessModifier filter would solve the problem. But it looks like users only see the problem from their users point of view. Do we need a new option to solve this?

from japicmp.

scordio avatar scordio commented on June 2, 2024

A separate error that I can exclude in my config would work for me 👍

If there are split-package users that are impacted by this change, it means they are already dancing on the edge of brokenness and we don't provide support for such usage 😉

from japicmp.

scordio avatar scordio commented on June 2, 2024

Re-reading your last message, how is accessModifier supposed to be used?

I set it to protected (assuming it means it will analyze only elements that were protected and public before the change?) but I still received a METHOD_RETURN_TYPE_CHANGED error (see assertj/assertj@684063f).

from japicmp.

siom79 avatar siom79 commented on June 2, 2024

I thought about an implementation and as it looks, it might introduce a new concept. The point is that currently the relation between type of change (like e.g. METHOD_RETURN_TYPE_CHANGED) and the incompatibility level was fix (see e.g. here).
Now we need something like METHOD_RETURN_TYPE_CHANGED but because the access modifier also changed to more visible it is not binary incompatible. Not sure how to implement this in a concise way.

from japicmp.

scordio avatar scordio commented on June 2, 2024

My rough idea was to approach it in a way similar to #311.

I haven't looked at the code in detail yet, but I trust you can spot better than me whether this is feasible with such a strategy.

from japicmp.

siom79 avatar siom79 commented on June 2, 2024

Committed the changes mentioned above to a new branch. Will have to sleep a night, before I merge it.

from japicmp.

scordio avatar scordio commented on June 2, 2024

Thanks a lot for looking into it!

from japicmp.

siom79 avatar siom79 commented on June 2, 2024

Fixed with 0.19.0.

from japicmp.

scordio avatar scordio commented on June 2, 2024

Thank you!

from japicmp.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.