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)