You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Rodolfo Yanke (Jira)" <ji...@apache.org> on 2022/03/20 00:13:00 UTC
[jira] [Created] (GROOVY-10535) IF condition on empty Collection has different behavior than null Collection
Rodolfo Yanke created GROOVY-10535:
--------------------------------------
Summary: 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
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.1#820001)