Uploaded image for project: 'Groovy'
  1. Groovy
  2. GROOVY-4458

NPE in org.codehaus.groovy.runtime.dgmimpl.NumberNumberPlus$DoubleInteger

Agile BoardAttach filesAttach ScreenshotVotersWatch issueWatchersCreate sub-taskLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 1.7.5
    • 1.8.9, 2.0.7, 2.1.1
    • None
    • None
    • Windows XP SP3, JDK 1.6.0

    Description

      We enhance the NullObject to have a more graceful null handling.

      def emc = new ExpandoMetaClass( org.codehaus.groovy.runtime.NullObject.getNullObject().getClass())
      emc.plus = {b -> b}
      emc.initialize()
      org.codehaus.groovy.runtime.NullObject.getNullObject().setMetaClass(emc)
      
      It works fine except for some variants of array access:
      Double[][] a = new Double[10][10]
      for (def i = 0; i <= 9; i++ ) {
          for (def j = 0; j <= 9; j++ ) {
              println("i=$i j=$j a[0][i]=$a[0][i]")
              a[0][i] = a[0][i] + 1
          }
      }
      

      We get a NPE:

      java.lang.NullPointerException
          at org.codehaus.groovy.runtime.dgmimpl.NumberNumberPlus$DoubleInteger.call(NumberNumberPlus.java:170)
          at ConsoleScript6.run(ConsoleScript6:10)
          at groovy.lang.GroovyShell.runScriptOrMainOrTestOrRunnable(GroovyShell.java:264)
          at groovy.lang.GroovyShell.run(GroovyShell.java:513)
          at groovy.lang.GroovyShell.run(GroovyShell.java:170)
          at groovy.lang.GroovyShell$run$0.call(Unknown Source)
          at groovy.ui.Console$_runScriptImpl_closure16.doCall(Console.groovy:890)
          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
          at java.lang.reflect.Method.invoke(Method.java:597)
          at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:88)
          at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)
          at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:273)
          at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886)
          at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:66)
          at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:149)
          at groovy.ui.Console$_runScriptImpl_closure16.doCall(Console.groovy)
          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
          at java.lang.reflect.Method.invoke(Method.java:597)
          at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:88)
          at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)
          at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:273)
          at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886)
          at groovy.lang.Closure.call(Closure.java:276)
          at groovy.lang.Closure.call(Closure.java:271)
          at groovy.lang.Closure.run(Closure.java:354)
          at java.lang.Thread.run(Thread.java:619) 
      

      A script to reproduce this in the GroovyConsole is attached.

      Attachments

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

            blackdrag Jochen Theodorou
            uwekirsch Uwe Kirsch
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Slack

                Issue deployment