Closed FloEdelmann closed 8 months ago
This is equivalent to:
I think you're wrong. Test below succeeds:
@Test
fun `Issue 2501`() {
assertThat(doSomething(true, "bar", "baz")).isEqualTo("bar")
assertThat(doSomething(true, null, "baz")).isNull()
assertThat(doSomething(false, "bar", "baz")).isEqualTo("baz")
}
fun doSomething(
foo: Boolean,
bar: String?,
baz: String?,
): String? {
return if (foo) bar else null
?: baz
}
Also, the PSI parser of kotlint shows that the elvis operator is part of the else branch only:
When using parenthesis around the if-else, the PSI structure changes to:
Oh, you're right, so it only worked in the code I linked above because the if
branch's value was never null
and it then makes no difference whether to put the Elvis operator inside the else
branch or outside the whole if
/else
statement. Thanks for checking!
Expected Behavior
This is equivalent to:
Observed Behavior
Note that the Elvis operator no longer acts on the whole
if
/else
statement, but only on theelse
branch.Steps to Reproduce
Real codebase example: https://github.com/streetcomplete/StreetComplete/blob/v56.0/app/src/main/java/de/westnordost/streetcomplete/util/NameAndLocationLabel.kt#L116-L123
Your Environment
Version of ktlint used: v1.1.1
Relevant parts of the
.editorconfig
settings:Operating System and version: Ubuntu 22.04