[ 
https://issues.apache.org/jira/browse/GROOVY-11508?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Eric Milles updated GROOVY-11508:
---------------------------------
    Description: 
When updating Grails from Groovy 3.x to 4.x we discovered that GROOVY-5106 
prevents us from updating to Groovy 4 for the 
[grails-data-mapping|https://github.com/grails/grails-data-mapping] (GORM) 
project.  Groovy-5106 does not take into account relationships between generic 
types and groovy does not support inheritance in generic types on traits so we 
have no workable solution for using Groovy 4.

 

For example, the following is not possible in Groovy 4:
{code:java}
class Parent extends GormEntity<Parent> {

}

class Child extends GormEntity<Child> {

} 

class GormEntity<? extends GormEntity> { // ? extends GormEntity is not allowed

}{code}
 

We have documented the impacts of this issue on the grails-data-mapping project 
here:  [https://github.com/grails/grails-data-mapping/issues/1811]   We have 
discovered that the original change could be reverted and continue to work with 
the latest Java & Groovy. 

 

For Grails Data Mapping (GORM), there is support for inheritance between a 
Parent & Child domain object.  This is often implemented like this:
{code:java}
class Parent extends GormEntity<Parent> {

}

class Child extends GormEntity<Child> {

}

trait GormEntity<D> { // Simplified for this ticket
    static D get(Serializable id)
   
    static List<D> getAll()
}
 {code}
This allows someone to do the following in code:
{code:java}
Parent.get(1L) // Will find either a Child or Parent
Child.get(1L) // Will find only child types{code}
 

Since Groovy-5106 does not take into account inheritance, can this change be 
reverted or changed to a warning until inheritance is taken into account?

  was:
When updating Grails from Groovy 3.x to 4.x we discovered that Groovy-5106 
prevents us from updating to Groovy 4 for the 
[grails-data-mapping|https://github.com/grails/grails-data-mapping] (GORM) 
project.  Groovy-5106 does not take into account relationships between generic 
types and groovy does not support inheritance in generic types on traits so we 
have no workable solution for using Groovy 4.

 

For example, the following is not possible in Groovy 4:
{code:java}
class Parent extends GormEntity<Parent> {

}

class Child extends GormEntity<Child> {

} 

class GormEntity<? extends GormEntity> { // ? extends GormEntity is not allowed

}{code}
 

We have documented the impacts of this issue on the grails-data-mapping project 
here:  [https://github.com/grails/grails-data-mapping/issues/1811]   We have 
discovered that the original change could be reverted and continue to work with 
the latest Java & Groovy. 

 

For Grails Data Mapping (GORM), there is support for inheritance between a 
Parent & Child domain object.  This is often implemented like this:
{code:java}
class Parent extends GormEntity<Parent> {

}

class Child extends GormEntity<Child> {

}

trait GormEntity<D> { // Simplified for this ticket
    static D get(Serializable id)
   
    static List<D> getAll()
}
 {code}
This allows someone to do the following in code:
{code:java}
Parent.get(1L) // Will find either a Child or Parent
Child.get(1L) // Will find only child types{code}
 

Since Groovy-5106 does not take into account inheritance, can this change be 
reverted or changed to a warning until inheritance is taken into account?


> Multiple traits with related generic types cannot be used
> ---------------------------------------------------------
>
>                 Key: GROOVY-11508
>                 URL: https://issues.apache.org/jira/browse/GROOVY-11508
>             Project: Groovy
>          Issue Type: Bug
>          Components: Compiler
>    Affects Versions: 4.0.0
>            Reporter: James Daugherty
>            Assignee: Eric Milles
>            Priority: Major
>
> When updating Grails from Groovy 3.x to 4.x we discovered that GROOVY-5106 
> prevents us from updating to Groovy 4 for the 
> [grails-data-mapping|https://github.com/grails/grails-data-mapping] (GORM) 
> project.  Groovy-5106 does not take into account relationships between 
> generic types and groovy does not support inheritance in generic types on 
> traits so we have no workable solution for using Groovy 4.
>  
> For example, the following is not possible in Groovy 4:
> {code:java}
> class Parent extends GormEntity<Parent> {
> }
> class Child extends GormEntity<Child> {
> } 
> class GormEntity<? extends GormEntity> { // ? extends GormEntity is not 
> allowed
> }{code}
>  
> We have documented the impacts of this issue on the grails-data-mapping 
> project here:  [https://github.com/grails/grails-data-mapping/issues/1811]   
> We have discovered that the original change could be reverted and continue to 
> work with the latest Java & Groovy. 
>  
> For Grails Data Mapping (GORM), there is support for inheritance between a 
> Parent & Child domain object.  This is often implemented like this:
> {code:java}
> class Parent extends GormEntity<Parent> {
> }
> class Child extends GormEntity<Child> {
> }
> trait GormEntity<D> { // Simplified for this ticket
>     static D get(Serializable id)
>    
>     static List<D> getAll()
> }
>  {code}
> This allows someone to do the following in code:
> {code:java}
> Parent.get(1L) // Will find either a Child or Parent
> Child.get(1L) // Will find only child types{code}
>  
> Since Groovy-5106 does not take into account inheritance, can this change be 
> reverted or changed to a warning until inheritance is taken into account?



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to