[ 
https://issues.apache.org/jira/browse/GROOVY-11568?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17946267#comment-17946267
 ] 

Eric Milles commented on GROOVY-11568:
--------------------------------------

I usually don’t backport meta-object protocol changes. This has not been tested 
widely. The major release gives a better opportunity for testing and adaptation 
to changes in behavior. 

> 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
>            Assignee: Eric Milles
>            Priority: Major
>             Fix For: 5.0.0-alpha-13
>
>         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