[jira] [Commented] (GROOVY-8645) ClassCastException after checking of instanceOf

2020-05-27 Thread Eric Milles (Jira)


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

Eric Milles commented on GROOVY-8645:
-

One note, if you check {{instanceof}} in an if condition, you do not need to 
cast or coerce within the block.  Flow typing will see your variable "domain" 
as type {{WarningsHolder}} and your method and property references should pass 
the type checker.

Coerce translates to the {{asType}} method and there may be more behind that 
then you expect.

> ClassCastException after checking of instanceOf
> ---
>
> Key: GROOVY-8645
> URL: https://issues.apache.org/jira/browse/GROOVY-8645
> Project: Groovy
>  Issue Type: Bug
>  Components: groovy-runtime
>Affects Versions: 2.4.11
>Reporter: Aram Arabyan
>Priority: Minor
>
>  Have grails (version 3.2.11) application (it includes groovy-2.4.11.jar). 
> And following code
> {code:groovy}
>  @CompileStatic
> def removeAllErrors(DomainClass domainInstance) {
> newAssociationOperationRunnerBuilder(domainInstance)
> .setSkipChain({DomainObjectDetails 
> domainObjectDetails ->
> skipValidation(domainObjectDetails.currentDomain.domainObject, 
> domainObjectDetails.associationProp?.name)})
> .build().run({DomainObjectDetails 
> domainObjectDetails ->
> DomainClass domain = 
> domainObjectDetails.currentDomain.domainObject
> if (domain instanceof GormValidateable) {
> ((GormValidateable)domain).clearErrors()
> }
> if(domain instanceof WarningsHolder) {
> WarningsHolder warningsHolder = domain as WarningsHolder 
> //<--line 120
> Warnings warnings = warningsHolder.getWarnings()
> warnings.clearWarnings(false, true)
> }
> })
> }
> {code}
> And I am getting following exception
> {code}
> java.lang.IllegalArgumentException: java.lang.ClassCastException@58798bfb
>   at sun.reflect.GeneratedMethodAccessor5958.invoke(Unknown Source)
>   at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>   at java.lang.reflect.Method.invoke(Method.java:498)
>   at 
> org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
>   at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
>   at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1213)
>   at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1125)
>   at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1022)
>   at 
> org.codehaus.groovy.runtime.InvokerHelper.invokePogoMethod(InvokerHelper.java:925)
>   at 
> org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:908)
>   at 
> org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodN(ScriptBytecodeAdapter.java:168)
>   at 
> org.codehaus.groovy.runtime.ScriptBytecodeAdapter.asType(ScriptBytecodeAdapter.java:591)
>   at 
> com.webbfontaine.grails.plugins.validation.rules.DocVerificationService$_removeAllErrors_closure5.doCall(DocVerificationService.groovy:120)
>   at sun.reflect.GeneratedMethodAccessor2559.invoke(Unknown Source)
>   at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>   at java.lang.reflect.Method.invoke(Method.java:498)
>   at 
> org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
>   at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325){code}
> Any idea what can be the reason ? Pay attention that I have @CompileStatic 
> there also.
> = 
> Previous version of this code was without @CompileStatic
> {code:groovy}
>  def removeAllErrors(def domainInstance) {
> newAssociationOperationRunnerBuilder(domainInstance)
> .setSkipChain({DomainObjectDetails 
> domainObjectDetails ->
> skipValidation(domainObjectDetails.currentDomain.domainObject, 
> domainObjectDetails.associationProp?.name)})
> .build().run({DomainObjectDetails 
> domainObjectDetails ->
> domainObjectDetails.currentDomain.domainObject.clearErrors()
> if(domainObjectDetails.currentDomain.domainObject instanceof 
> WarningsHolder) {
> Warnings warnings = 
> domainObjectDetails.currentDomain.domainObject.getWarnings()
> warnings.clearWarnings(false, true)
> }
> })
> }
> {code}
> And I was getting this exception
> {code}
> com.webbfontaine.sw.sad.ci.Item cannot be cast to 
> com.webbfontaine.sw.sad.ci.Item_$$_jvst840_3. Stacktrace follows: 
> java.lang.ClassCastException: com.webbfontaine.sw.sad.ci.Item cannot be cast 
> to 

[jira] [Commented] (GROOVY-8645) ClassCastException after checking of instanceOf

2019-01-21 Thread Paul King (JIRA)


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

Paul King commented on GROOVY-8645:
---

Do you have a self-contained example illustrating the problem? We have fixed a 
number of related issues (some further ones are still underway). I am unsure 
whether your case has been already fixed.

> ClassCastException after checking of instanceOf
> ---
>
> Key: GROOVY-8645
> URL: https://issues.apache.org/jira/browse/GROOVY-8645
> Project: Groovy
>  Issue Type: Bug
>  Components: groovy-runtime
>Affects Versions: 2.4.11
>Reporter: Aram Arabyan
>Priority: Minor
>
>  Have grails (version 3.2.11) application (it includes groovy-2.4.11.jar). 
> And following code
> {code:groovy}
>  @CompileStatic
> def removeAllErrors(DomainClass domainInstance) {
> newAssociationOperationRunnerBuilder(domainInstance)
> .setSkipChain({DomainObjectDetails 
> domainObjectDetails ->
> skipValidation(domainObjectDetails.currentDomain.domainObject, 
> domainObjectDetails.associationProp?.name)})
> .build().run({DomainObjectDetails 
> domainObjectDetails ->
> DomainClass domain = 
> domainObjectDetails.currentDomain.domainObject
> if (domain instanceof GormValidateable) {
> ((GormValidateable)domain).clearErrors()
> }
> if(domain instanceof WarningsHolder) {
> WarningsHolder warningsHolder = domain as WarningsHolder 
> //<--line 120
> Warnings warnings = warningsHolder.getWarnings()
> warnings.clearWarnings(false, true)
> }
> })
> }
> {code}
> And I am getting following exception
> {code}
> java.lang.IllegalArgumentException: java.lang.ClassCastException@58798bfb
>   at sun.reflect.GeneratedMethodAccessor5958.invoke(Unknown Source)
>   at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>   at java.lang.reflect.Method.invoke(Method.java:498)
>   at 
> org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
>   at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
>   at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1213)
>   at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1125)
>   at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1022)
>   at 
> org.codehaus.groovy.runtime.InvokerHelper.invokePogoMethod(InvokerHelper.java:925)
>   at 
> org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:908)
>   at 
> org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodN(ScriptBytecodeAdapter.java:168)
>   at 
> org.codehaus.groovy.runtime.ScriptBytecodeAdapter.asType(ScriptBytecodeAdapter.java:591)
>   at 
> com.webbfontaine.grails.plugins.validation.rules.DocVerificationService$_removeAllErrors_closure5.doCall(DocVerificationService.groovy:120)
>   at sun.reflect.GeneratedMethodAccessor2559.invoke(Unknown Source)
>   at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>   at java.lang.reflect.Method.invoke(Method.java:498)
>   at 
> org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
>   at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325){code}
> Any idea what can be the reason ? Pay attention that I have @CompileStatic 
> there also.
> = 
> Previous version of this code was without @CompileStatic
> {code:groovy}
>  def removeAllErrors(def domainInstance) {
> newAssociationOperationRunnerBuilder(domainInstance)
> .setSkipChain({DomainObjectDetails 
> domainObjectDetails ->
> skipValidation(domainObjectDetails.currentDomain.domainObject, 
> domainObjectDetails.associationProp?.name)})
> .build().run({DomainObjectDetails 
> domainObjectDetails ->
> domainObjectDetails.currentDomain.domainObject.clearErrors()
> if(domainObjectDetails.currentDomain.domainObject instanceof 
> WarningsHolder) {
> Warnings warnings = 
> domainObjectDetails.currentDomain.domainObject.getWarnings()
> warnings.clearWarnings(false, true)
> }
> })
> }
> {code}
> And I was getting this exception
> {code}
> com.webbfontaine.sw.sad.ci.Item cannot be cast to 
> com.webbfontaine.sw.sad.ci.Item_$$_jvst840_3. Stacktrace follows: 
> java.lang.ClassCastException: com.webbfontaine.sw.sad.ci.Item cannot be cast 
> to com.webbfontaine.sw.sad.ci.Item_$$_jvst840_3 at 
>