You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
MC_OVERRIDABLE_METHOD_CALL_IN_CONSTRUCTOR is reported for mere method references, without them being invoked. This happens with SpotBugs version 4.8.3 (current release).
Both predicate1 and predicate2 produce the bug. In case of predicate1, the method is clearly not called. In the case of predicate2, it might of course theoretically be called, but there are also a lot of use cases (like here) where the method reference is just passed to be stored for later use. (One of the actual use cases I have is a memoization wrapper for the overridable method, stored as a field.)
One issue is that this also cannot be worked around by adding @SuppressFBWarnings("MC_OVERRIDABLE_METHOD_CALL_IN_CONSTRUCTOR") to the field declaration.
Maybe, if the analysis cannot determine that the overridable method is being passed for immediate invocation (like when passed to well-known methods like Map::compute), this should instead map to a separate bug code.
The text was updated successfully, but these errors were encountered:
… referencing but not calling an overridable method (#2900)
* test: issue #2837 reproducer
* fix: do not consider a method reference assigned to a field
* test: added false positive check for issue #1867
It looks like the problem for #1867 was fixed elsewhere
* test: added a true positive test for a lambda called in constructor
* doc: added changelog entry
* test: fixed tests
* fix: removed unused variable
* test: added a 2nd overridable method for the true positive case
Overridable methods are only reported once, add a 2nd one to make sure
the unit test shows the problem when assigning a method reference to a
field
MC_OVERRIDABLE_METHOD_CALL_IN_CONSTRUCTOR is reported for mere method references, without them being invoked. This happens with SpotBugs version 4.8.3 (current release).
Example code:
Both
predicate1
andpredicate2
produce the bug. In case ofpredicate1
, the method is clearly not called. In the case ofpredicate2
, it might of course theoretically be called, but there are also a lot of use cases (like here) where the method reference is just passed to be stored for later use. (One of the actual use cases I have is a memoization wrapper for the overridable method, stored as a field.)One issue is that this also cannot be worked around by adding
@SuppressFBWarnings("MC_OVERRIDABLE_METHOD_CALL_IN_CONSTRUCTOR")
to the field declaration.Maybe, if the analysis cannot determine that the overridable method is being passed for immediate invocation (like when passed to well-known methods like
Map::compute
), this should instead map to a separate bug code.The text was updated successfully, but these errors were encountered: