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)