[
https://issues.apache.org/jira/browse/GROOVY-7014?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15413450#comment-15413450
]
Paul King edited comment on GROOVY-7014 at 8/9/16 12:33 PM:
------------------------------------------------------------
If you look at what is being produced with @CompileStatic it is replacing
getData() with Base.getData(). It obviously shouldn't but explains why it then
passes static type checking and you get the weird cast error.
Also, if you remove the @CompileStatic or change it to @TypeChecked, you then
get a VerifyError!
Changing the getData method to static of course works as expected.
was (Author: paulk):
If you look at what is being produced with @CompileStatic it is replacing
getData() with Base.getDate(). It obviously shouldn't but explains why it then
passes static type checking and you get the weird cast error.
Also, if you remove the @CompileStatic or change it to @TypeChecked, you then
get a VerifyError!
Changing the getData method to static of course works as expected.
> A Java compile time error results in a runtime exception in Groovy
> ------------------------------------------------------------------
>
> Key: GROOVY-7014
> URL: https://issues.apache.org/jira/browse/GROOVY-7014
> Project: Groovy
> Issue Type: Bug
> Components: Static compilation
> Affects Versions: 2.3.4, 2.4.0-rc-1
> Environment: Window 7
> Reporter: Harminder Singh
> Priority: Minor
>
> A Groovy class with CompileStatic annotation exhibit a different behavior
> than Java. The following code results in a compile time error in Java, but
> throws a runtime exception in Groovy.
> {code}
> @CompileStatic
> class Base
> {
> String getData() { return "ABCD" }
> Base() { this(getData()) } // Calling an instance method before the class
> is constructed
> Base(String arg) {}
> }
> @CompileStatic
> public class GMain
> {
> public static void main(String[] args)
> {
> Base b = new Base();
> }
> }
> {code}
> Java produces:
> {noformat}
> Java Compiler error: Error:(11, 11) java: cannot reference this before
> supertype constructor has been called
> {noformat}
> Groovy produces:
> {noformat}
> Groovy Runtime Error details:
> Exception in thread "main" java.lang.ClassCastException: java.lang.Class
> cannot be cast to main.groovy.Base
> at main.groovy.Base.<init>(Base.groovy:9)
> at main.groovy.Derived.<init>(Derived.groovy)
> at main.groovy.GMain.main(Base.groovy:18)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> ......
> {noformat}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)