You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Viplav Soni (Jira)" <ji...@apache.org> on 2019/12/25 08:39:00 UTC

[jira] [Created] (GROOVY-9353) Metaclass constructor overriding not working for a method inside of @CompileStatic annotated class

Viplav Soni created GROOVY-9353:
-----------------------------------

             Summary: Metaclass constructor overriding not working for a method inside of @CompileStatic annotated class
                 Key: GROOVY-9353
                 URL: https://issues.apache.org/jira/browse/GROOVY-9353
             Project: Groovy
          Issue Type: Bug
          Components: groovy-jdk
    Affects Versions: 2.4.10
         Environment: ```
------------------------------------------------------------
Gradle 3.5
------------------------------------------------------------

Groovy:       2.4.10,
Ant:          Apache Ant(TM) version 1.9.6 compiled on June 29 2015,
JVM:          1.8.0_221 (Oracle Corporation 25.221-b11),
OS:           Mac OS X 10.15.2 x86_64
```
            Reporter: Viplav Soni
             Fix For: 2.4.10


When we use `{{someClass.metaClass.constructor}} for any specific class (like [{{RESTClient}}|https://github.com/jgritman/httpbuilder/wiki/RESTClient]) available inside the method of a class which is annotated with {{@CompileStatic}}, constructor overriding is not working at all.

When we removed the {{`@CompileStatic`}} annotation, this works properly. Am I missing something?

 

Sample Code:

 

```

{{@CompileStatic}}

{{class FooClass {}}

{{ }}{{String getDataFromProvider() {}}

{{        String url = "https://www.example.com"}}

{{        RESTClient restClient = new RESTClient(url)                            HttpResponseDecorator response = restClient.post([:]) }}

{{              as HttpResponseDecorator  }}

{{        return response}}

{{  }}}

{{}}}
```

And the test case:

```
 
{{import groovyx.net.http.HttpResponseDecorator}}

{{import groovyx.net.http.RESTClient}}

{{import spock.lang.Specification}}

{{class FooContentSpec extends Specification {}}

{{     void "test getDataFromProvider method"() {}}

{{        given: "Rest url"}}

{{        String restURL = "https://www.example.com"}}

{{        and: "Mock RESTClient"}}

{{        RESTClient mockedRestClient = Mock(RESTClient)}}

{{        // THIS IS NOT WORKING}}

{{        RESTClient.metaClass.constructor = { Object url ->}}

{{          assert restURL == url}}

{{          return mockedRestClient}}

{{        }}}

{{        mockedRestClient.metaClass.post = { Map<String, ?> args ->            return ""}}

{{        }}}

{{        when: "We hit the method"}}

{{        HttpResponseDecorator response = Content.getDataFromProvider()}}

{{}}

{{         then: "We should get status 200"        response.statusCode==200     }}}

{{}}}
```



--
This message was sent by Atlassian Jira
(v8.3.4#803005)