Renat Vasilyev created GROOVY-10456:
---------------------------------------

             Summary: Inconsistent exception upon accessing empty property
                 Key: GROOVY-10456
                 URL: https://issues.apache.org/jira/browse/GROOVY-10456
             Project: Groovy
          Issue Type: Bug
    Affects Versions: 3.0.9
            Reporter: Renat Vasilyev


consider the code
{code:java}
o = new Object()
o[""] {code}
Groovy 2.5.3 produces:

groovy.lang.MissingPropertyException: No such property:  for class: 
java.lang.Object

Groovy 3.0.9 produces:
{noformat}
java.lang.StringIndexOutOfBoundsException: String index out of range: 0
    at java.base/java.lang.StringLatin1.charAt(StringLatin1.java:48)
    at java.base/java.lang.String.charAt(String.java:1512)
    at 
groovy.lang.MetaClassImpl.createMetaMethodAndMetaProperty(MetaClassImpl.java:2132)
    at groovy.lang.MetaClassImpl.getProperty(MetaClassImpl.java:1887)
    at groovy.lang.MetaClassImpl.getProperty(MetaClassImpl.java:3843)
    at 
org.codehaus.groovy.runtime.InvokerHelper.getProperty(InvokerHelper.java:199)
    at 
org.codehaus.groovy.runtime.DefaultGroovyMethods.getAt(DefaultGroovyMethods.java:420)
    at org.codehaus.groovy.runtime.dgm$309.invoke(Unknown Source)
    at 
org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoMetaMethodSiteNoUnwrapNoCoerce.invoke(PojoMetaMethodSite.java:247)
    at 
org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:56)
    at 
org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
    at 
org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)
    at 
org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:139){noformat}
Expected behaviour is to have exception aligned with other missing properties 
like
{code:java}
> o = new Object()
> o["x"]
groovy.lang.MissingPropertyException: No such property: x for class: 
java.lang.Object
        at 
org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:65)
        at 
org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoMetaMethodSiteNoUnwrapNoCoerce.invoke(PojoMetaMethodSite.java:249)
        at 
org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:56)
        at 
org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
        at 
org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)
        at 
org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:139)
        at ideaGroovyConsole.run(ideaGroovyConsole.groovy:2)
        at 
groovy.lang.GroovyShell.runScriptOrMainOrTestOrRunnable(GroovyShell.java:254)
        at groovy.lang.GroovyShell.run(GroovyShell.java:360)
        at groovy.lang.GroovyShell.run(GroovyShell.java:339)
        at 
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
        at 
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:568)
        at 
org.codehaus.groovy.runtime.callsite.PlainObjectMetaMethodSite.doInvoke(PlainObjectMetaMethodSite.java:43)
        at 
org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSite.invoke(PogoMetaMethodSite.java:170)
        at 
org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.call(PogoMetaMethodSite.java:73)
        at 
org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:148)
        at console.run(console.groovy:11)
        at groovy.ui.GroovyMain.processReader(GroovyMain.java:631)
        at groovy.ui.GroovyMain.processFiles(GroovyMain.java:552)
        at groovy.ui.GroovyMain.run(GroovyMain.java:396)
        at groovy.ui.GroovyMain.access$1400(GroovyMain.java:68)
        at groovy.ui.GroovyMain$GroovyCommand.process(GroovyMain.java:322)
        at groovy.ui.GroovyMain.processArgs(GroovyMain.java:142)
        at groovy.ui.GroovyMain.main(GroovyMain.java:115)
        at 
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
        at 
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:568)
        at 
org.codehaus.groovy.tools.GroovyStarter.rootLoader(GroovyStarter.java:111)
        at org.codehaus.groovy.tools.GroovyStarter.main(GroovyStarter.java:129)
{code}



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to