You may want to disable the int optimization (on by default; off for indy). I think then primitives would get converted to wrappers and MOP would be available consistently.
________________________________ From: mg <[email protected]> Sent: Monday, August 20, 2018 7:17 AM To: [email protected] Subject: Re: Inconsistent overriding of Interger methods Without having looked at the implementation: Wouldn't "performance" be a plausible explanation why these cases can't be moped up... ? -------- Ursprüngliche Nachricht -------- Von: Paul King <[email protected]> Datum: 20.08.18 02:59 (GMT+01:00) An: [email protected] Betreff: Re: Inconsistent overriding of Interger methods It appears to be most (all?) primitive/wrapper types not just Integer. On Sun, Aug 19, 2018 at 11:00 PM ocs@ocs <[email protected]<mailto:[email protected]>> wrote: Ladies and gentlemen, the debate of null-propagation led me to bumping into a wildly inconsistent behaviour when one overrides Integer methods through the metaclass. To me, this looks like a bug; even if this mess happens to be an intended behaviour, it is pretty weird (in this case, is it documented anywhere?) === 768 /tmp> <q.groovy java.lang.Integer.metaClass.byteValue={ -> "OK" } java.lang.Integer.metaClass.plus={ o -> "OK" } println "byteValue works: ${1.byteValue()}" println "plus does not: ${1+2}" println "not even: ${1.plus(2)}" ArrayList.metaClass.plus={ o -> "OK" } println "Elsewhere plus works: ${[]+1}" 768 /tmp> /usr/local/groovy-3.0.0-alpha-3/bin/groovy q WARNING: Using incubator modules: jdk.incubator.httpclient byteValue works: OK plus does not: 3 not even: 3 Elsewhere plus works: OK 769 /tmp> === Thanks and all the best, OC
