You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Eric Milles (Jira)" <ji...@apache.org> on 2022/02/17 17:00:00 UTC

[jira] [Commented] (GROOVY-10494) Groovy 4 can not compile super.foo with generic interface (or trait) method

    [ https://issues.apache.org/jira/browse/GROOVY-10494?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17494076#comment-17494076 ] 

Eric Milles commented on GROOVY-10494:
--------------------------------------

Sorry, I may have been unclear when using "this".  I agree this ticket represents an issue for Groovy 4.  The STC error does not give any guidance that "IService.super.save(entity)" is the required form because the interface with default method has been converted to a trait.  Traits do not support plain "super.save(entity)" -- I think that is reserved for calling concrete methods in the super class hierarchy.

I referenced Groovy 5 because that is where an interface with default/private/static method(s) could be written natively (like Java 8+) instead of using traits.  See GROOVY-8299

> Groovy 4 can not compile super.foo with generic interface (or trait) method
> ---------------------------------------------------------------------------
>
>                 Key: GROOVY-10494
>                 URL: https://issues.apache.org/jira/browse/GROOVY-10494
>             Project: Groovy
>          Issue Type: Bug
>    Affects Versions: 4.0.0
>            Reporter: Xiaoguang Wang
>            Assignee: Eric Milles
>            Priority: Major
>         Attachments: image-2022-02-17-10-53-45-797.png, image-2022-02-17-10-56-36-832.png
>
>
> {code:java}
> package com.company.test
> import groovy.transform.CompileStatic
> @CompileStatic
> interface IService<T> {
>     default void save(T entity) {
>         System.out.println(entity);
>     }
> }
> @CompileStatic
> interface IServiceString {
>     default void save(String entity) {
>         System.out.println(entity);
>     }
> }
> @CompileStatic
> class TestGenericGroovy implements IService<String> {
>     void save(String entity) {
>         // IService<String>.super.save(entity) // works
>         super.save(entity) // doesn't work: Groovyc: [Static type checking] - Abstract method save(T) cannot be called directly
>     }
>     static void main(String[] args) {
>         new TestGenericGroovy().save("test")
>     }
> }
>  {code}



--
This message was sent by Atlassian Jira
(v8.20.1#820001)