[ https://issues.apache.org/jira/browse/GROOVY-9074?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16825515#comment-16825515 ]
Eric Milles commented on GROOVY-9074: ------------------------------------- Looks like this method does the filtering: {{org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.chooseBestMethod}}. If I pass an obviously invalid argument type, this method filters a list of add methods to an empty list. {{chooseBestMethod}} calls {{makeRawTypes}} on the parameters, which removes the ability to handle the wildcard extends or super cases. > 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)