Caleb Ott created GROOVY-8905:
---------------------------------
Summary: MissingMethodException when private method is called on
parent class in a closure
Key: GROOVY-8905
URL: https://issues.apache.org/jira/browse/GROOVY-8905
Project: Groovy
Issue Type: Bug
Components: class generator
Affects Versions: 2.5.4, 3.0.0-alpha-3, 2.6.0-alpha-4
Reporter: Caleb Ott
This appears to be a bug since a MissingMethodException is being thrown when it
shouldn't be.
Here is the simplified code to reproduce the issue. I've tested on
2.5.4/2.6.0-alpha-4/3.0.0-alpha-3.
{code:java}
class Parent {
protected void doSomethingParent() {
// calling it outside of the closure works fine
theSomething(1_000, 'This works')
// setup a closure that calls another private method in the parent
Closure closure = { int num ->
// calling it inside the closure breaks
theSomething(num, 'this breaks')
}
closure(10)
}
// only breaks because it is "private"
private void theSomething(int num, String someValue) {
println "${num} = ${someValue}"
}
}
class Child extends Parent {
void doSomethingChild() {
// just calls the parent method
doSomethingParent()
}
}
// run the test
def test = new Child()
test.doSomethingChild()
{code}
Output:
{noformat}
1000 = This works
Caught: groovy.lang.MissingMethodException: No signature of method:
Child.theSomething() is applicable for argument types: (Integer, String)
values: [10, this breaks]
groovy.lang.MissingMethodException: No signature of method:
Child.theSomething() is applicable for argument types: (Integer, String)
values: [10, this breaks]
at Parent$_doSomethingParent_closure1.doCall(ScratchPad.groovy:10)
at Parent.doSomethingParent(ScratchPad.groovy:13)
at Child.doSomethingChild(ScratchPad.groovy:25)
at Child$doSomethingChild.call(Unknown Source)
at ScratchPad.run(ScratchPad.groovy:31){noformat}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)