Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Smart cast and exhaustive when check failures #436

Open
JarnaChao09 opened this issue Oct 17, 2023 · 3 comments
Open

Smart cast and exhaustive when check failures #436

JarnaChao09 opened this issue Oct 17, 2023 · 3 comments

Comments

@JarnaChao09
Copy link

Hi everyone, been working with datalore for a bit and came across something interesting that I was wondering if others would have an explanation for:
I have code that compiles fine locally with gradle and on play.kotlinlang.org, however, this same code does not compile in the latest kotlin kernel for datalore
the main errors I encountered were smart cast and exhaustive when check errors

  • could not smart cast a variable i checked with !! previously to the non-null version of the type
  • could not determine the when statement over a sealed interface type was exhaustive and recommended an else branch
    is the kotlin kernel (for jupyter? or is datalore different?) just behind on these analysis checks? or is there a reason for these analysis checks being dropped?

here is a gist of the code in the datalore notebook: https://gist.github.com/JarnaChao09/24ec66e1f4e13d96a2452977dc193851

thanks for your insight in advance!

@ileasile
Copy link
Member

Hi! Provided code samples seem to work for us. Do they fail for you or you have attached already fixed code samples? It would be also great to have minimal reproducers for both of the problems.

@JarnaChao09
Copy link
Author

Hi, sorry for the late response. I have attached the already fixed code. Lines 158 and 247 were added to satisfy the errors I stated before. This code was tested both in Datalore and the Kotlin Notebooks plugin and resulted in the same errors. Hope that clears things up.

@enolive
Copy link

enolive commented Jan 16, 2024

I discovered this issue when researching why exhaustive when statements don't work properly in the kotlin jupyter kernel. This seems to be the same problem I encountered.
Small reproduction sample (copied into a code cell in Jupyter):

sealed interface MyType
object A : MyType
object B : MyType

fun func(e: MyType) {
    when (e) {
      is A -> TODO()
      is B -> TODO()  
    }
}

Compiler message:

Line_0.jupyter.kts (6:5 - 9) 'when' expression must be exhaustive, add necessary 'else' branch

Screenshot from jupyter notebook

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants