-
Notifications
You must be signed in to change notification settings - Fork 300
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
ArchUnit thinks "Switch with arrows" produces non-final fields #1313
Comments
I guess this can be handled by skipping fields with JavaModifier.SYNTHETIC. Even if we don't want to do that in the default haveOnlyFinalFields method, maybe it would be good to show/document this workaround somehow. I suppose one way is to check this using ArchRuleDefinition::fields, filtering with MembersThatInternal::doNotHaveModifier(JavaModifier.SYNTHETIC) and then check for the final modifier. |
Is this going to be fixed in some version or is there a workaround? We are having this issue with java 21. |
Here is a proper example of the workaround example for anyone wondering:
|
Sorry for the late reply and thanks for the workaround! It might make sense to ignore this by default in reasonable predicates. This is a good case where it likely never makes sense to consider synthetic fields. |
Example code:
having some method with a call inside it like:
causes a violation like
Field <com.controller.Controller.$SWITCH_TABLE$...$StatusEnum> is not final in (Controller.java:0)
with a test
Maybe this is the fault of the compiler used (Eclipse), but I wonder if ArchUnit can ignore these switch tables when checking the rule?
The text was updated successfully, but these errors were encountered: