You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Xiaoguang Wang (JIRA)" <ji...@apache.org> on 2019/03/30 05:11:00 UTC

[jira] [Created] (GROOVY-9059) Failed to parse/compile generic methods with "extends"

Xiaoguang Wang created GROOVY-9059:
--------------------------------------

             Summary: Failed to parse/compile generic methods with "extends"
                 Key: GROOVY-9059
                 URL: https://issues.apache.org/jira/browse/GROOVY-9059
             Project: Groovy
          Issue Type: Bug
          Components: Static compilation
    Affects Versions: 2.5.6, 3.0.0-alpha-4, 2.4.16
            Reporter: Xiaoguang Wang
         Attachments: image-2019-03-30-13-10-20-819.png

 
{code:java}
import groovy.transform.CompileStatic

// This bug affects: groovy-2.4.16, groovy-2.5.6, groovy-3.0.0-alpha-4
// This bug also affect IDEA's syntax parser

interface X<T> {
    // Intellij IDEA reports that 'public' is not necessary
    // BUT without the 'public' modifier, there is a syntax error
    public <T> T foo(T o);
}
interface Y<T> {
    public <O extends T> O foo(O o);
}

@CompileStatic
class TestGroovyGeneric {
    static void main(String[] args) {
        def x = new X<String>() {
            // it compiles
            // BUT: Intellij IDEA reports: ERROR: Method 'foo' is not implemented
            @Override
            String foo(String o) { return o }
        }

        // Strangely, such code compiles
        // BUT: Intellij IDEA reports: ERROR: Method 'foo' is not implemented
        def y1 = new Y<String>() {
            @Override
            public <String> String foo(String o) { return o }
        }

        // Can not compile:
        // BUT: Intellij IDEA reports no error ....
        def y2 = new Y<String>() {
            @Override
            String foo(String o) { return o }
        }
    }
}

{code}
!image-2019-03-30-13-10-20-819.png!

 



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)