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

Eric Milles commented on GROOVY-11813:
--------------------------------------

You could set the system property "groovy.indy.logging" to true for your script 
runner process to get some more info about the call site binding.  In order for 
the TimeCategory to be considered for "minus" overload, 
{{GroovyCategorySupport.hasCategoryInCurrentThread()}} must return true.  It 
seems logical that this is the case since the "months" property also requires 
the time category.  If the line runs successfully at least once, all the 
indexing is in place.  If it stops working after some time, then I suspect some 
of the indy guards or fallback is running into trouble.

> groovy.lang.MissingMethodException: No signature of method: minus for class: 
> java.util.Date is applicable for argument types: 
> (groovy.time.DatumDependentDuration)
> ------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: GROOVY-11813
>                 URL: https://issues.apache.org/jira/browse/GROOVY-11813
>             Project: Groovy
>          Issue Type: Question
>    Affects Versions: 5.0.2
>            Reporter: Saravanan Subiramaniam
>            Priority: Major
>
> Could you please help me with TimeCategory? The following script worked fine 
> in Groovy 4.0.x, but fails after we upgraded to 5.0.2.
> {code}
> use(groovy.time.TimeCategory)  { 
>    new Date() - 7.months 
> }
> {code}
> Please note that this script works when running using standalone Groovy (eg: 
> using groovy command), but fails in our application (Java based) with this 
> error. Both groovy-dateutil and groovy-datetime dependencies are in the 
> classpath. Our application uses Java 21.
> {code}
> Dynamic logic TESTUNIT_2:
> 1: *ERROR* -->       use(groovy.time.TimeCategory)  { 
> 2:                    new Date() - 7.months 
> 3:                    }
> groovy.lang.MissingMethodException: No signature of method: minus for class: 
> java.util.Date is applicable for argument types: 
> (groovy.time.DatumDependentDuration) values: [7 months]
> Possible solutions: minus(java.util.Date), minus(int), find(), 
> find(groovy.lang.Closure), is(java.lang.Object), plus(int)
>       at 
> org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:74)
>       at 
> org.codehaus.groovy.vmplugin.v8.IndyGuardsFiltersAndSignatures.unwrap(IndyGuardsFiltersAndSignatures.java:163)
>       at 
> org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:344)
>       at 
> custom.dynamiclogic.testunit_2.TESTUNIT_2$_run_closure1.doCall(custom.dynamiclogic.testunit_2.TESTUNIT_2.groovy:2)
>       at 
> custom.dynamiclogic.testunit_2.TESTUNIT_2$_run_closure1.doCall(custom.dynamiclogic.testunit_2.TESTUNIT_2.groovy)
>       at 
> java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
>       at java.base/java.lang.reflect.Method.invoke(Method.java:580)
>       at 
> org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:338)
>       at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:274)
>       at 
> org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:270)
>       at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1008)
>       at groovy.lang.Closure.call(Closure.java:471)
>       at groovy.lang.Closure.call(Closure.java:450)
>       at 
> org.codehaus.groovy.runtime.GroovyCategorySupport$ThreadCategoryInfo.use(GroovyCategorySupport.java:124)
>       at 
> org.codehaus.groovy.runtime.GroovyCategorySupport.use(GroovyCategorySupport.java:262)
>       at 
> org.codehaus.groovy.runtime.DefaultGroovyMethods.use(DefaultGroovyMethods.java:17206)
>       at org.codehaus.groovy.runtime.dgm$1263.doMethodInvoke(Unknown Source)
>       at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1235)
>       at 
> org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:344)
>       at 
> custom.dynamiclogic.testunit_2.TESTUNIT_2.run(custom.dynamiclogic.testunit_2.TESTUNIT_2.groovy:1)
> {code}



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

Reply via email to