[ https://issues.apache.org/jira/browse/GROOVY-9971?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17302580#comment-17302580 ]
mgroovy commented on GROOVY-9971: --------------------------------- * You mean [http://groovy.329449.n5.nabble.com/About-GROOVY-5559-td5710746.html] ? * TypeChecked vs CompileStatic is one of the problems, ok * In that case, I think there is still room for improvement, just in a different way: ## If Groovy had a "toString"-operator, then this would be much less of a hassle *** For Collection/Map I think it should apply to toString to each element, not to the collection as a whole ## I thought about using CharSequence as an alternative, as you suggested, but it has terrible semantics with regards to equals/hashCode *** Maybe if Groovy could treat CharSequence differently from Java, and add meaningful equals/hashCode semantics... ? > @TypeChecked: Closure<String> no longer compatible with Closure<GString> > argument > --------------------------------------------------------------------------------- > > Key: GROOVY-9971 > URL: https://issues.apache.org/jira/browse/GROOVY-9971 > Project: Groovy > Issue Type: Bug > Components: Compiler > Affects Versions: 3.0.7 > Environment: Windows 10 > jdk-11.0.10.9-hotspot > IntelliJ 2020.3.2 > Reporter: mgroovy > Priority: Major > > *Problem* > A Closure<String> is in Groovy 3 no longer compatible with a closure that > returns a GString (or String|GString), even though GString is autoconverted > to String in Groovy. > *Expected* > A Closure returning a GString or a String|GString should be compatible with > Closure<String> > *Sample Code* > {code:java} > import groovy.transform.TypeChecked > import org.junit.Ignore > import org.junit.Test > @TypeChecked > class Groovy3_ClosureOfString_GString_Compatible { > @Test @Ignore > void 'Groovy 3-0-7 Closure with String return type not compatible with > GString argument'() { > final x = 123 > // Cannot find matching method > execStringCls(Closure<groovy.lang.GString>) > assert execStringCls { "x=$x" } == 'x=123' > //assert execStringCls { "x=$x".toString() } == 'x=123' // > works > } > @Test @Ignore > void 'Groovy 3-0-7 Closure with String return type not compatible with > GString argument 2'() { > final x = 123 > // Cannot find matching method > execStringCls(Closure<java.io.Serializable>) > assert execStringCls { false ? 'abc' : "x=$x" } == 'x=123' > //assert execStringCls { true ? 'abc' : "x=$x".toString() } == > 'x=123' // works > } > String execStringCls(Closure<String> cls) { > cls() > } > } > {code} -- This message was sent by Atlassian Jira (v8.3.4#803005)