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)