Andreas Turban created GROOVY-11568:
---------------------------------------

             Summary: Call to private method fails when using Custom MetaClass
                 Key: GROOVY-11568
                 URL: https://issues.apache.org/jira/browse/GROOVY-11568
             Project: Groovy
          Issue Type: Bug
    Affects Versions: 4.0.25, 3.0.24
            Reporter: Andreas Turban
         Attachments: test.groovy

A call to a private method in a BaseClass fails, if the MetaClass of an 
instance of a SubType is replace with a non-standard MetaClass.

The attached reproducer should call the method privateMethod(), but does fail 
with:
{code:java}
groovy.lang.MissingMethodException: No signature of method: 
SubClass.privateMethod() is applicable for argument types: () values: []
        at CustomMetaClass.invokeMethod(test.groovy:40)
        at CustomMetaClass.super$2$invokeMethod(test.groovy)
        at CustomMetaClass.invokeMethod(test.groovy:30)
        at BaseClass.publicMethod(test.groovy:10)
        at CustomMetaClass.super$2$invokeMethod(test.groovy)
        at CustomMetaClass.invokeMethod(test.groovy:40)
        at CustomMetaClass.super$2$invokeMethod(test.groovy)
        at CustomMetaClass.invokeMethod(test.groovy:35)
        at test.run(test.groovy:5)
{code}

See also [Groovy 
WebConsole|https://gwc-experiment.appspot.com/?g=groovy_4_0&codez=eNq1U8tOwzAQvOcrVj0lUpQfqJCACqEeoBLlhjg4yZIYHLtaOyml6r9j5-GkrUAghA9xNDuenV2vgxxfIIMLkLiFdZ0uBNM6jAIHV2hYH1nU2qjqzgId4ZaUanbrnTZYJQUaH3nAgmtDuzCKvVwUOKWES244E_wDrX6W6Mmp0BEcuKlTwTOLlyq3rCDIXBiumcaWCPsA7GoUz-GY2wXc2hBvmEEv4rBD-w0m4V7jmDuKmJLUti39hkhROFuXqhY5lKxBSBElZEwIzJPZkOAwmB3KBnw3KPOJ-73nnPTTUz2yrDbCFttqnzb_rNlA_U8MnZwpu4QRjBXpeoMUjkzPmfcFtNvlqkEinmN3bpW-YmaAy0a9DV3qMdVu9pYNcVm4YbHBe1ZhPJxiVNQVSnNkg9DUJDs3yZHuIDhVGiX-y-XTMyjiBZdMXP3d77nUb313F6jtNCD5Tv6kCt-qGFKlBDIJXC_skD6qtTM_wi-kqqXU1sbZkHxd7eDo21uKT1OeppqPj-UTDs1_GA].

It also seams to need to be compiled with Indy, but with Indy it fails in 
Groovy 3.x and Groovy 4.x.

The culprit seams somewhere around 
"org.codehaus.groovy.vmplugin.v8.Selector.getMetaClassImpl()" where the type of 
the meta class is checked, and for non standard MetaClass the code path 
deviates.

And then the Sender Class "BaseClass" is not used in the CustomMetaClass 
anymore, then failing with it could not find the private method.


Note: It does not fail, if the class is not compile with Indy.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to