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)