You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Marcin Erdmann (JIRA)" <ji...@apache.org> on 2017/05/23 18:46:04 UTC
[jira] [Created] (GROOVY-8201) methodMissing() is incorrectly
called when calling a method on closure owner using this keyword
Marcin Erdmann created GROOVY-8201:
--------------------------------------
Summary: methodMissing() is incorrectly called when calling a method on closure owner using this keyword
Key: GROOVY-8201
URL: https://issues.apache.org/jira/browse/GROOVY-8201
Project: Groovy
Issue Type: Bug
Affects Versions: 2.5.0-alpha-1
Reporter: Marcin Erdmann
Priority: Minor
This is a really edge-case'y regression in 2.5.0-alpha-1 discovered while checking if Geb's codebase will compile and the tests succeed using that version.
Given the following class:
{code}
class RegressionReproducingClass {
Closure getClosure() {
{ -> this.getValue() }
}
String getValue() {
'foo'
}
def methodMissing(String name, args) {
throw new Exception("Should never get here!")
}
}
{code}
The following test:
{code}
class RegressionReproducingSpec extends Specification {
def test() {
given:
def closure = new RegressionReproducingClass().closure
expect:
closure() == 'foo'
}
}
{code}
Fails with:
{noformat}
Condition failed with Exception:
closure() == 'foo'
|
java.lang.Exception: Should never get here!
{noformat}
Any of the following actions makes this sample pass:
* reverting the version to 2.4.11
* removing {{methodMissing()}}
* changing the code in closure to use property access, i.e. {{this.value}}
* changing the code in closure not to use this, i.e. {{getValue()}}
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)