Turn off incorrect switch-optimization for when by enums
#KT-24708 Fixed
This commit is contained in:
+12
-5
@@ -959,11 +959,18 @@ class CodegenAnnotatingVisitor extends KtVisitorVoid {
|
||||
}
|
||||
|
||||
private boolean isWhenWithEnums(@NotNull KtWhenExpression expression) {
|
||||
return WhenChecker.isWhenByEnum(expression, bindingContext) &&
|
||||
switchCodegenProvider.checkAllItemsAreConstantsSatisfying(
|
||||
expression,
|
||||
constant -> constant instanceof EnumValue || constant instanceof NullValue
|
||||
);
|
||||
ClassId enumClassId = WhenChecker.getClassIdForEnumSubject(expression, bindingContext);
|
||||
if (enumClassId == null) return false;
|
||||
|
||||
return switchCodegenProvider.checkAllItemsAreConstantsSatisfying(
|
||||
expression,
|
||||
constant -> isEnumEntryOrNull(enumClassId, constant)
|
||||
);
|
||||
}
|
||||
|
||||
private static boolean isEnumEntryOrNull(ClassId enumClassId, ConstantValue<?> constant) {
|
||||
return (constant instanceof EnumValue && ((EnumValue) constant).getEnumClassId().equals(enumClassId)) ||
|
||||
constant instanceof NullValue;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
Reference in New Issue
Block a user