You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Paul King (JIRA)" <ji...@apache.org> on 2017/02/01 23:19:05 UTC

[jira] [Closed] (GROOVY-6764) Problem Referring To Statically Imported Constants

     [ https://issues.apache.org/jira/browse/GROOVY-6764?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Paul King closed GROOVY-6764.
-----------------------------

> Problem Referring To Statically Imported Constants
> --------------------------------------------------
>
>                 Key: GROOVY-6764
>                 URL: https://issues.apache.org/jira/browse/GROOVY-6764
>             Project: Groovy
>          Issue Type: Bug
>    Affects Versions: 2.1.9, 2.4.0-rc-1
>            Reporter: Jeff Brown
>            Assignee: Paul King
>             Fix For: 2.4.8
>
>         Attachments: constantsquestion.zip
>
>
> It appears that if a class implements an interface which declares constants, Groovy code which statically imports the constant from the class (not the interface) doesn't work.  I think this is supposed to work.  It does work from Java.  See the attached app in constantsquestion.zip which includes the following code.  Extract the .zip and run "./gradlew test" to see that the Java test passes and the Groovy test fails.
> {code:borderStyle=solid|title=src/main/java/com/demo/Constants.java}
> package com.demo;
> public interface Constants {
>     int ANSWER = 42;
> }
> {code}
> {code:borderStyle=solid|title=src/main/java/com/demo/Helper.java}
> package com.demo;
> public class Helper implements Constants {
> }
> {code}
> {code:borderStyle=solid|title=test/java/com/demo/JavaHelperTests.java}
> package com.demo;
> import org.junit.Test;
> import org.junit.runner.RunWith;
> import org.junit.runners.JUnit4;
> import static org.junit.Assert.assertEquals;
> import static com.demo.Helper.ANSWER;
> @RunWith(JUnit4.class)
> public class JavaHelperTests {
>     @Test
>     public void testAccessingConstant() {
>         // this test passes...
>         assertEquals(42, ANSWER);
>     }
> }
> {code}
> {code:borderStyle=solid|title=test/groovy/com/demo/GroovyHelperSpec.groovy}
> package com.demo
> import spock.lang.Specification
> import static com.demo.Helper.ANSWER
> class GroovyHelperSpec extends Specification {
>     void 'test referring to statically imported constant'() {
>         // this test fails...
>         expect:
>         42 == ANSWER
>     }
> }
> {code}
> The error message from the Groovy spec is:
> {noformat}
> groovy.lang.MissingPropertyException: No such property: ANSWER for class: com.demo.GroovyHelperSpec
>     at com.demo.GroovyHelperSpec.test referring to statically imported constant(GroovyHelperSpec.groovy:10)
> {noformat}
> Note that everything works fine from Groovy if the constant is imported from the interface instead of from the class which implements the interface.
> Is this a bug?



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)