Graeme Rocher created GROOVY-7926:
-------------------------------------
Summary: Method that returns void in a Trait with generics
produces questionable byte code
Key: GROOVY-7926
URL: https://issues.apache.org/jira/browse/GROOVY-7926
Project: Groovy
Issue Type: Bug
Affects Versions: 2.4.7
Reporter: Graeme Rocher
Given the following trait:
{code}
trait MyTrait<D> {
void delete() {
// no-op
}
}
class MyImpl implements MyTrait<MyImpl> {
}
{code}
The delete method produces byte code that when decompiled looks like:
{code}
public void delete() {
CallSite[] var1 = $getCallSiteArray();
void var10000 = (void)var1[1].call(Helper.class, this);
}
{code}
As you can see "void" is used as a type of a variable. This results in the
following exception on the IBM JVM (it works fine in Oracle and OpenJDK):
{code}
Caused by: java.lang.NoClassDefFoundError: void
at it.dedagroup.Test.delete(Test.groovy)
at org.grails.datastore.gorm.GormEntity$delete$0.call(Unknown Source)
at
org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
{code}
Since the issue occurs only in IBM JVM it could be argued that this is a
problem with that JVM, however the byte code produced does seem suspicious to
me as "void" cannot be used as a type of a local variable. Thoughts?
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)