[ https://issues.apache.org/jira/browse/GROOVY-9059?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16822042#comment-16822042 ]
Eric Milles commented on GROOVY-9059: ------------------------------------- This last line in {{Verifier.getCovariantImplementation}} fails to identify the link between {{String foo(String o)}} in the impl and {{<O extends T> O foo(O o)}} in the interface. And so, without the covariant method, the abstract method errors are produced. {code:java} private MethodNode getCovariantImplementation(final MethodNode oldMethod, final MethodNode overridingMethod, Map genericsSpec, boolean ignoreError) { // method name if (!oldMethod.getName().equals(overridingMethod.getName())) return null; if ((overridingMethod.getModifiers() & ACC_BRIDGE) != 0) return null; if (oldMethod.isPrivate()) return null; // parameters boolean normalEqualParameters = equalParametersNormal(overridingMethod, oldMethod); boolean genericEqualParameters = equalParametersWithGenerics(overridingMethod, oldMethod, genericsSpec); {code} > 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.4.16, 3.0.0-alpha-4, 2.5.6 > Reporter: Xiaoguang Wang > Priority: Major > 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)