El comstackdor de Kotlin no puede deducir que la variable no puede contener nulos en el ciclo do-while

Tengo el siguiente método. Su lógica es muy simple, si se establece el derecho, llama a la izquierda mientras tiene un valor (no nulo). Cuando lo escribo de la siguiente manera, funciona.

fun goNext(from: Node): Node? { var prev : Node = from var next : Node? = from.right if (next != null) { prev = next next = next.left while (next != null) { prev = next next = next.left } } return prev } 

Si, en cambio, trato de acortar el código usando un ciclo do-while, ya no se arroja de forma inteligente next a Node . Muestra este error:

 Type mismatch. Requinetworking: Node<T> Found: Node<T>? 

El código sigue:

 fun goNext(from: Node): Node? { var prev : Node = from var next : Node? = from.right if (next != null) { do { prev = next // Error is here, even though next can't be null next = next.left } while (next != null) } return prev } 

El comstackdor probablemente asum que el siguiente se puede cambiar entre la instrucción if y el ciclo de otra secuencia. Como puede asegurar que el próximo no es nulo, solo agregue !! al siguiente cuando lo use en el ciclo: ¡siguiente!