There is two presumably identical snippets:
// Verbose version
val typedArray = context.obtainStyledAttributes(attrs, styleable)
block(typedArray)
typedArray.recycle()
// One-line version
context.obtainStyledAttributes(attrs, styleable).also(block).recycle()
I'm wonder why verbose block of code looks fine to Android Studio, whereas one-line version highlights obtainStyledAttributes and gives following warning:
This TypedArray should be recycled after use with #recycle()
Does anyone know is it just an Android Studio lint check flaw or something is actually wrong with one-line version?
This is a bit of a guess, but I believe it's because the static analysis tool can't guarantee that the TypedArray
returned by also()
is the same instance as the one returned by obtainedStyledAttributes()
. It sees that a TypedArray is obtained but can't guarantee that it is recycled, so it issues the warning.
I would hesitate to call this a bug (or "flaw") in the linter, but it does mean that the warning can be ignored in this case.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With