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

Stephen Albrecht updated GROOVY-11761:
--------------------------------------
    Description: 
I found this issue in GrooCSS, an older library for writing CSS in Groovy with 
a DSL. It depends on Groovy 2.5.8 but using it with newer versions worked until 
5.0.1.

Possibly related to GROOVY-10800

example build.gradle dependencies
{code:java}
dependencies {
    implementation 'org.apache.groovy:groovy:4.0.28'
    implementation 'org.groocss:groocss:1.0-GA'
}{code}
This simple program outputs some CSS.
{code:java}
package org.example

import org.groocss.GrooCSS
import org.groocss.Selector

static void main(String[] args) {
    println GrooCSS.process {
        keyframes('fadeOutBackground') {
            0 % { backgroundColor blue }
        }
        a.foo {
            color red
        }
        Selector s = a % link
        s.foo {
            extend(a.foo)
        }
    }.toString()
} {code}
Output (Groovy 4.0.28)
{code:java}
a.foo,a:link.foo {
    color: Red;
}
@keyframes fadeOutBackground {
    0% {
        background-color: Blue;
    }
}@-webkit-keyframes fadeOutBackground {
    0% {
        background-color: Blue;
    }
}{code}
 

Updating to Groovy 5.0.1 breaks at runtime on the mod overload for keyframes
{code:java}
groovy.lang.MissingMethodException: No signature of method: remainder for 
class: java.lang.Integer is applicable for argument types: 
(org.example.Main$_main_closure1$_closure2$_closure5) values: 
[org.example.Main$_main_closure1$_closure2$_closure5@24fabd0f]
Possible solutions: remainder(java.lang.Number)
 at org.example.Main$_main_closure1$_closure2.doCall(Main.groovy:10)
 at org.groocss.GrooCSS.kf(GrooCSS.groovy:368)
 at org.groocss.GrooCSS.keyframes(GrooCSS.groovy:361)
 at org.example.Main$_main_closure1.doCall(Main.groovy:9) {code}
defined 
[here|https://github.com/adamldavis/groocss/blob/develop/src/main/groovy/org/groocss/ext/NumberExtension.groovy#L62]
{code:java}
class NumberExtension {
    // ... other overloads
    static KeyFrames mod(
        Integer n,
        @DelegatesTo(value=StyleGroup, strategy = Closure.DELEGATE_FIRST) 
Closure frameCl
    ) {
        def css = GrooCSS.threadLocalInstance.get()
        if (css) css.currentKf.frame(n, frameCl)
    }
}{code}
If you comment out the keyframes call, the result of `a % link` now returns 
null when it used to return a Selector object. That mod method is defined 
[here|https://github.com/adamldavis/groocss/blob/develop/src/main/groovy/org/groocss/Selector.groovy#L145]:
{code:java}
class Selector extends Selectable {
    // others
    Selector mod(PseudoClass pc) {
        new Selector("$value$pc", owner)
    }
}{code}
 

 

 

 

 

  was:
I found this issue in GrooCSS, an older library for writing CSS in Groovy with 
a DSL. It depends on Groovy 2.5.8 but using it with newer versions worked until 
5.0.1.

Possibly related to GROOVY-10800

example build.gradle dependencies

 
{code:java}
dependencies {
    implementation 'org.apache.groovy:groovy:4.0.28'
    implementation 'org.groocss:groocss:1.0-GA'
}{code}
This simple program outputs some CSS.

 

 
{code:java}
package org.example

import org.groocss.GrooCSS
import org.groocss.Selector

static void main(String[] args) {
    println GrooCSS.process {
        keyframes('fadeOutBackground') {
            0 % { backgroundColor blue }
        }
        a.foo {
            color red
        }
        Selector s = a % link
        s.foo {
            extend(a.foo)
        }
    }.toString()
} {code}
Output (Groovy 4.0.28)

 
{code:java}
a.foo,a:link.foo {
    color: Red;
}
@keyframes fadeOutBackground {
    0% {
        background-color: Blue;
    }
}@-webkit-keyframes fadeOutBackground {
    0% {
        background-color: Blue;
    }
}{code}
 

 

Updating to Groovy 5.0.1 breaks at runtime on the mod overload for keyframes

 
{code:java}
groovy.lang.MissingMethodException: No signature of method: remainder for 
class: java.lang.Integer is applicable for argument types: 
(org.example.Main$_main_closure1$_closure2$_closure5) values: 
[org.example.Main$_main_closure1$_closure2$_closure5@24fabd0f]
Possible solutions: remainder(java.lang.Number)
 at org.example.Main$_main_closure1$_closure2.doCall(Main.groovy:10)
 at org.groocss.GrooCSS.kf(GrooCSS.groovy:368)
 at org.groocss.GrooCSS.keyframes(GrooCSS.groovy:361)
 at org.example.Main$_main_closure1.doCall(Main.groovy:9) {code}
defined 
[here|https://github.com/adamldavis/groocss/blob/develop/src/main/groovy/org/groocss/ext/NumberExtension.groovy#L62]

 
{code:java}
class NumberExtension {
    // ... other overloads
    static KeyFrames mod(
        Integer n,
        @DelegatesTo(value=StyleGroup, strategy = Closure.DELEGATE_FIRST) 
Closure frameCl
    ) {
        def css = GrooCSS.threadLocalInstance.get()
        if (css) css.currentKf.frame(n, frameCl)
    }
}{code}
If you comment out the keyframes call, the result of `a % link` now returns 
null when it used to return a Selector object. That mod method is defined 
[here|https://github.com/adamldavis/groocss/blob/develop/src/main/groovy/org/groocss/Selector.groovy#L145]:

 
{code:java}
class Selector extends Selectable {
    // others
    Selector mod(PseudoClass pc) {
        new Selector("$value$pc", owner)
    }
}{code}
 

 

 

 

 


> mod overloads in older Groovy library fail in Groovy 5
> ------------------------------------------------------
>
>                 Key: GROOVY-11761
>                 URL: https://issues.apache.org/jira/browse/GROOVY-11761
>             Project: Groovy
>          Issue Type: Bug
>    Affects Versions: 5.0.1
>            Reporter: Stephen Albrecht
>            Priority: Major
>
> I found this issue in GrooCSS, an older library for writing CSS in Groovy 
> with a DSL. It depends on Groovy 2.5.8 but using it with newer versions 
> worked until 5.0.1.
> Possibly related to GROOVY-10800
> example build.gradle dependencies
> {code:java}
> dependencies {
>     implementation 'org.apache.groovy:groovy:4.0.28'
>     implementation 'org.groocss:groocss:1.0-GA'
> }{code}
> This simple program outputs some CSS.
> {code:java}
> package org.example
> import org.groocss.GrooCSS
> import org.groocss.Selector
> static void main(String[] args) {
>     println GrooCSS.process {
>         keyframes('fadeOutBackground') {
>             0 % { backgroundColor blue }
>         }
>         a.foo {
>             color red
>         }
>         Selector s = a % link
>         s.foo {
>             extend(a.foo)
>         }
>     }.toString()
> } {code}
> Output (Groovy 4.0.28)
> {code:java}
> a.foo,a:link.foo {
>     color: Red;
> }
> @keyframes fadeOutBackground {
>     0% {
>         background-color: Blue;
>     }
> }@-webkit-keyframes fadeOutBackground {
>     0% {
>         background-color: Blue;
>     }
> }{code}
>  
> Updating to Groovy 5.0.1 breaks at runtime on the mod overload for keyframes
> {code:java}
> groovy.lang.MissingMethodException: No signature of method: remainder for 
> class: java.lang.Integer is applicable for argument types: 
> (org.example.Main$_main_closure1$_closure2$_closure5) values: 
> [org.example.Main$_main_closure1$_closure2$_closure5@24fabd0f]
> Possible solutions: remainder(java.lang.Number)
>  at org.example.Main$_main_closure1$_closure2.doCall(Main.groovy:10)
>  at org.groocss.GrooCSS.kf(GrooCSS.groovy:368)
>  at org.groocss.GrooCSS.keyframes(GrooCSS.groovy:361)
>  at org.example.Main$_main_closure1.doCall(Main.groovy:9) {code}
> defined 
> [here|https://github.com/adamldavis/groocss/blob/develop/src/main/groovy/org/groocss/ext/NumberExtension.groovy#L62]
> {code:java}
> class NumberExtension {
>     // ... other overloads
>     static KeyFrames mod(
>         Integer n,
>         @DelegatesTo(value=StyleGroup, strategy = Closure.DELEGATE_FIRST) 
> Closure frameCl
>     ) {
>         def css = GrooCSS.threadLocalInstance.get()
>         if (css) css.currentKf.frame(n, frameCl)
>     }
> }{code}
> If you comment out the keyframes call, the result of `a % link` now returns 
> null when it used to return a Selector object. That mod method is defined 
> [here|https://github.com/adamldavis/groocss/blob/develop/src/main/groovy/org/groocss/Selector.groovy#L145]:
> {code:java}
> class Selector extends Selectable {
>     // others
>     Selector mod(PseudoClass pc) {
>         new Selector("$value$pc", owner)
>     }
> }{code}
>  
>  
>  
>  
>  



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

Reply via email to