Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

AbstractClientConnector violates basic Java contract of equals and hashcode and therefore should be replaced #12329

Open
tangomannX opened this issue Jun 28, 2021 · 2 comments
Labels
Stale Stale bot label

Comments

@tangomannX
Copy link

tangomannX commented Jun 28, 2021

Vaadin Framework version: 8.x

In AbstractClientConnector.equals you define your own implementation of how vaadin handles equality of UI classes in order to handle proxies (see #5655). Since you are using this implementation in several other classes internally in vaadin core one should not be able to override this with different behaviour. So equals method of AbstractClientConnector should either be final or another internal method should be used for proxy handling.

A follow up problem of this design glitch is that any class inheriting from vaadin component will cause a sonar violation (java:S2160) unless you provide your own equals method. In order to not break the vaadin ccore code by accident this implementation could only be: return super.equals(); This will for sure cause antoher sonar violation...

@tangomannX
Copy link
Author

Two other problems I see here:

  1. hashcode() method has no proxy handling, and therefore violating the api contract of hashcode
  2. equals implementaion is violating the api contract since is is not symetric:
    myComponent.equals(myComponentProxied) => true
    myComponentProxied.equals(myComponent) => false

@tangomannX tangomannX changed the title AbstractClientConnector.equals should be final AbstractClientConnector.equals should be final or replaced Jun 29, 2021
@tangomannX tangomannX changed the title AbstractClientConnector.equals should be final or replaced AbstractClientConnector violates basic Java contract of equals and hashcode and therefore should be replaced Jul 2, 2021
@stale
Copy link

stale bot commented Jan 9, 2022

Hello there!

We are sorry that this issue hasn't progressed lately. We are prioritizing issues by severity and the number of customers we expect are experiencing this and haven't gotten around to fix this issue yet.

There are a couple of things you could help to get things rolling on this issue (this is an automated message, so expect that some of these are already in use):

  • Check if the issue is still valid for the latest version. There are dozens of duplicates in our issue tracker, so it is possible that the issue is already tackled. If it appears to be fixed, close the issue, otherwise report to the issue that it is still valid.
  • Provide more details how to reproduce the issue.
  • Explain why it is important to get this issue fixed and politely draw others attention to it e.g. via the forum or social media.
  • Add a reduced test case about the issue, so it is easier for somebody to start working on a solution.
  • Try fixing the issue yourself and create a pull request that contains the test case and/or a fix for it. Handling the pull requests is the top priority for the core team.
  • If the issue is clearly a bug, use the Warranty in your Vaadin subscription to raise its priority.

Thanks again for your contributions! Even though we haven't been able to get this issue fixed, we hope you to report your findings and enhancement ideas in the future too!

@stale stale bot added the Stale Stale bot label label Jan 9, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Stale Stale bot label
Projects
None yet
Development

No branches or pull requests

1 participant