I am confused by the requirement for element!!
after element?.node != null &&
. Does not the element?.node
not being null
imply that element
is also not null
?
In the first while()
code element
after element?.node != null
is smart cast in the second while()
it is not.
class Sample {
fun sample(element: PsiElement) {
var useElement: PsiElement? = element
while (useElement?.node != null
&& !TokenTypeSets.BLOCK_ELEMENTS.contains(useElement.node.elementType)) {
useElement = useElement.parent
}
if (useElement?.node == null || useElement is PsiFile) return
// collapse to the innermost block quote that is a single child
while (useElement?.node != null
&& useElement.node.elementType == MultiMarkdownTypes.BLOCK_QUOTE
&& useElement.children.size == 1
&& useElement.lastChild.node.elementType == MultiMarkdownTypes.BLOCK_QUOTE) {
useElement = useElement.lastChild
}
if (useElement == null) return
}
}
If I comment out the line:
if (useElement?.node == null || useElement is PsiFile) return
Then the second while()
also smart casts. Am I missing something or is this a bug?
Kotlin version: 1.3.11-release-IJ2018.3-1