[ 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)