[ https://issues.apache.org/jira/browse/GROOVY-10535?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17531375#comment-17531375 ]
Jochen Theodorou commented on GROOVY-10535: ------------------------------------------- [~emilles] your first change looked pretty good to me. Why did you decide to change it to use InvokerHelper#invokeMethod? The idea of binding to asBoolean is, to select and call that method "directly". The handle later gains guards to deal with a changing runtime type (at least that was how I did it back then) > IF condition on empty Collection has different behavior than null Collection > ---------------------------------------------------------------------------- > > Key: GROOVY-10535 > URL: https://issues.apache.org/jira/browse/GROOVY-10535 > Project: Groovy > Issue Type: Bug > Affects Versions: 3.0.10 > Environment: Groovy 3.0.10/OpenJDK 17.0.2 - Ubuntu 21.10 > Reporter: Rodolfo Yanke > Assignee: Eric Milles > Priority: Major > Fix For: 5.0.0-alpha-1, 3.0.11, 4.0.3 > > > I believe this code should print "something" but doesn't work: > {code:java} > @CompileStatic > class NotWorkingExample { > static void main(String[] args) { > Collection<String> values = null > for (i in 0..<200_000) { > printSomethingIfNotEmpty(values) > } > //never printed but it should > values = ['A'] > printSomethingIfNotEmpty(values) > } > static printSomethingIfNotEmpty(Collection<String> values) { > if(values) { > println 'something' > } > } > } > {code} > This one does print "something" because we pass an empty collection [] > instead of null: > {code:java} > @CompileStatic > class ItWorks { > static void main(String[] args) { > Collection<String> values = [] > for (i in 0..<200_000) { > printSomethingIfNotEmpty(values) > } > //it works because [] was passed in the previous 200k calls > values = ['A'] > printSomethingIfNotEmpty(values) > } > static printSomethingIfNotEmpty(Collection<String> values) { > if(values) { > println 'something' > } > } > }{code} > Some optimization is done differently when the condition is skipped too many > times. Both classes should output "something" on the last method call. > Thank you for the support. -- This message was sent by Atlassian Jira (v8.20.7#820007)