[jira] [Commented] (GROOVY-8645) ClassCastException after checking of instanceOf
[ 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
[ 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 >