You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Paul King (Jira)" <ji...@apache.org> on 2026/10/20 01:28:01 UTC
[jira] [Closed] (GROOVY-11929) Generic type information erased for super call
[ https://issues.apache.org/jira/browse/GROOVY-11929?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Paul King closed GROOVY-11929.
------------------------------
> Generic type information erased for super call
> ----------------------------------------------
>
> Key: GROOVY-11929
> URL: https://issues.apache.org/jira/browse/GROOVY-11929
> Project: Groovy
> Issue Type: Bug
> Affects Versions: 5.0.5
> Environment: Groovy 5.0.5, groovy-eclipse-compiler 3.9.1, groovy-eclipse-batch 5.0.5-01, JDK 21, macOS 26
> Reporter: Tommi Ratamaa
> Assignee: Eric Milles
> Priority: Major
> Fix For: 6.0.0-alpha-1
>
>
> MissingMethodException runtime exception from dynamic invocation when calling super method with parameter type bound by interface and base class generic type.
> Simplified code example (in real case classes and interfaces are not inner but that does not matter) that used to work with Groovy 3, Groovy 4 and also works as Java code with JDK21 or with @CompileStatic, but fails to bind to super method on runtime when compiled with Groovy 5 using dynamic invocation:
> {code:java}
> class GroovyBug {
> static interface Dao<T> {
> T save(T entity)
> }
> static abstract class AbstractDao<T> implements Dao<T> {
> T save(T entity) {
> return entity
> }
> }
> static interface EntityDao extends Dao<Entity> {
> @Override
> Entity save(Entity entity)
> }
> static class EntityDaoImpl extends AbstractDao<Entity> implements EntityDao {
> @Override
> //@CompileStatic // would fix it
> Entity save(Entity entity) {
> //return super.save((Object) entity) // would fix it
> return super.save(entity)
> }
> }
> static class Entity {
> long id
> }
> static void main(String[] args) {
> new EntityDaoImpl().save(new Entity())
> /* Exception from save ^ call:
> groovy.lang.MissingMethodException: No signature of method: save for class: GroovyBug$EntityDaoImpl is applicable for argument types: (GroovyBug$Entity) values: [GroovyBug$Entity@1c05a54d]
> Possible solutions: save(GroovyBug2$Entity), save(java.lang.Object), save(java.lang.Object), wait(), any(), wait(long)
> at GroovyBug$EntityDaoImpl.methodMissing(GroovyBug.groovy)
> at GroovyBug$EntityDaoImpl.save(GroovyBug.groovy:24)
> at GroovyBug.main(GroovyBug.groovy:33)
> */
> }
> }{code}
> The generic type information provided for the implemented interface/base class is erased and argument would need to be casted to Object (as save(java.lang.Object) in possible solutions suggests).
> Also removing the overridden declaration from interface would solve it.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)