You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Robert Stagner (JIRA)" <ji...@apache.org> on 2019/04/10 17:31:00 UTC

[jira] [Updated] (GROOVY-9074) CompileStatic does not throw expected exception

     [ https://issues.apache.org/jira/browse/GROOVY-9074?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Robert Stagner updated GROOVY-9074:
-----------------------------------
    Summary: CompileStatic does not throw expected exception  (was: CompileStatic )

> 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
>            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)