paulk-asert commented on PR #3007:
URL: https://github.com/apache/groovy/pull/3007#issuecomment-6405311480
Thanks Daniel. Answers to your points, all checked against a local build of
this head:
- Bridge: Bridger turns abs$$bridge into abs(Number)I flagged
ACC_BRIDGE|ACC_SYNTHETIC. A Java class and a @CompileStatic class compiled
against 6.0.0-beta-2 run unchanged on the new jar, still with the old
truncating result as intended for legacy callers. Same pattern as the existing
chop$$bridge and findIndexValues$$bridge. The bridge name is not visible to
dynamic dispatch.
- Static selection: Integer receivers resolve to abs(Integer) → int;
receivers typed as Number resolve to abs(Number) → Number.
- Long.MIN_VALUE: NumberMath.abs delegates to Math.abs(long), so
Long.MIN_VALUE stays Long.MIN_VALUE, identical to the existing abs(Long) and to
Java. I'll add a sentence to the javadoc.
- @since: 6.0.1, assuming backport to 6_0_X.
One side effect worth calling out. Under @CompileStatic, `int x = n.abs()`
with a Number-typed receiver is now an STC error ("Cannot assign value of type
java.lang.Number to variable of type int"), and Java callers assigning the
result to int get the equivalent javac error. For Number receivers that code
was already producing wrong values, so I think the compile error is the right
outcome.
Short and byte receivers were correct before, though, and would have fallen
into the same error since they resolve to abs(Number). I've added int
abs(Short) and int abs(Byte) overloads so those keep compiling and keep
returning int, with tests covering the static int assignment, Short.MIN_VALUE
and Byte.MIN_VALUE, and the dynamic result type. The remaining source change is
confined to receivers whose static type is Number itself. I'll note that in
COMPATIBILITY.md.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]