[ https://issues.apache.org/jira/browse/GROOVY-9074?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16825401#comment-16825401 ]
Eric Milles commented on GROOVY-9074: ------------------------------------- Similarly, this does not raise a type check error: {code:groovy} abstract class Shape { abstract void draw(Canvas c) } class Circle extends Shape { private int x, y, radius @Override void draw(Canvas c) {} } class Rectangle extends Shape { private int x, y, width, height @Override void draw(Canvas c) {} } @groovy.transform.TypeChecked void addRectangle(List<? extends Shape> shapes) { shapes.add(0, new Rectangle()) // TODO: compile-time error! } {code} > CompileStatic does not throw expected exception > ----------------------------------------------- > > Key: GROOVY-9074 > URL: https://issues.apache.org/jira/browse/GROOVY-9074 > Project: Groovy > Issue Type: Bug > Components: Compiler > Affects Versions: 2.5.5 > Reporter: Robert Stagner > Assignee: Daniel Sun > Priority: Major > > While reading about Java Generics and wildcards (see > [https://docs.oracle.com/javase/tutorial/extra/generics/wildcards.html]), I > came across the following code in the referenced oracle document > {code:java} > Collection<?> c = new ArrayList<String>(); > c.add(new Object()); // Compile time error{code} > Now, I decided to wrap this in a class and try it out in Java and then in > Groovy. > Here is the Java code > > {code:java} > import java.util.*; > public class TestCollection { > static Collection<?> c = new ArrayList<String>(); > public static void main(String[] args) { > c.add(new Object()); // Compile time error > } > } > {code} > > > and here is the groovy code > > {code:java} > import java.util.*; > import groovy.transform.CompileStatic; > @CompileStatic > public class TestCollection { > static Collection<?> c = new ArrayList<String>(); > public static void main(String[] args) { > c.add(new Object()); // Compile time error > println c.first(); > } > } > {code} > > When I attempt to compile the Java code I get the following expected error > {code:java} > $ javac TestCollection.java > TestCollection.java:7: error: incompatible types: Object cannot be converted > to CAP#1 > c.add(new Object()); // Compile time error > ^ > where CAP#1 is a fresh type-variable: > CAP#1 extends Object from capture of ?{code} > But, when I run the code through Groovy, I do not get a compile-time error. > Instead, I get the following output > {code:java} > java.lang.Object@41a0aa7d{code} -- This message was sent by Atlassian JIRA (v7.6.3#76005)