Am 14.08.2018 um 19:10 schrieb ocs@ocs:
Jochen,

On 14 Aug 2018, at 6:34 PM, Jochen Theodorou <blackd...@gmx.org <mailto:blackd...@gmx.org>> wrote:
[...]
are you saying x?.foo will NPE if x is null? Or that x?.getFoo() will NPE in that case? Not sure how to read your comment.

Provided only (a) “the Null.metaclass; returning null from invokeMethod” is used and no ASTT, then yes, it would NPE. Easiest thing on earth to try:

===
262 */tmp>* <q.groovy
class q {
     static main(args) {
        // ExpandoMetaClass.enableGlobally() // I thought this is needed; seems not (though my application use it anyway)
         def mc=new OCSNMC(org.codehaus.groovy.runtime.NullObject)
         mc.initialize()
         org.codehaus.groovy.runtime.NullObject.metaClass=mc

         println "null.foo() is OK: ${null.foo()==null}"
         println "null.foo we won't see: ${null.foo==null}"
     }
}

class OCSNMC extends DelegatingMetaClass {
     OCSNMC(Class clazz){
         super(clazz)
     }
    Object invokeMethod(Object object, String methodName, Object[] arguments) {
         null
     }
}

null.foo will of course NPE, if you only take care of invokeMethod. have to do the same treatment for get/setProperty, potentially also for get/setAttribute


[...]
For all I know, this probably would not work properly with @CompileStatic (which I do not use at all myself, but others do frequently).

the result type could be a problem... Worth to check.

Definitely :)

judging by this small snippet:

@groovy.transform.CompileStatic
def m() {
  def foo = "s"
  def bar = foo?.toUpperCase()
  println bar.toUpperCase()
}

and that it compiles (and runs fine) I would say the correct type is preserved.

Trust me, been there, done that. I am pretty darn sure it would be /infinitely/ easier and, what's important, more reliable in the core with an explicit compiler support.

How about making a small github project to dump the current state there?

Not that easy, for my code is mixed up with other ASTT and runtime stuff; but I'll try to make some simple proof-of-concept ASAP and send here.

would help a lot

bye Jochen

Reply via email to