Turn off incorrect switch-optimization for when by enums

#KT-24708 Fixed
This commit is contained in:
Denis Zharkov
2018-08-09 16:34:32 +07:00
parent fc3c4ad883
commit c1cc722ac4
13 changed files with 181 additions and 11 deletions
@@ -35,6 +35,7 @@ import org.jetbrains.kotlin.resolve.DescriptorUtils.isEnumClass
import org.jetbrains.kotlin.resolve.DescriptorUtils.isEnumEntry
import org.jetbrains.kotlin.resolve.constants.CompileTimeConstant
import org.jetbrains.kotlin.resolve.constants.evaluate.ConstantExpressionEvaluator
import org.jetbrains.kotlin.resolve.descriptorUtil.classId
import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.kotlin.types.TypeUtils
import java.util.*
@@ -265,8 +266,12 @@ object WhenChecker {
)
@JvmStatic
fun isWhenByEnum(expression: KtWhenExpression, context: BindingContext) =
getClassDescriptorOfTypeIfEnum(whenSubjectType(expression, context)) != null
fun getClassIdForEnumSubject(expression: KtWhenExpression, context: BindingContext) =
getClassIdForTypeIfEnum(whenSubjectType(expression, context))
@JvmStatic
fun getClassIdForTypeIfEnum(type: KotlinType?) =
getClassDescriptorOfTypeIfEnum(type)?.classId
@JvmStatic
fun getClassDescriptorOfTypeIfEnum(type: KotlinType?): ClassDescriptor? {