KT-29340 Provide effective modality for enum class in IR
* if enum class has abstract members, then it is ABSTRACT * otherwise, if enum class has entries with members, then it is OPEN * otherwise, it is FINAL.
This commit is contained in:
@@ -5,6 +5,8 @@
|
||||
|
||||
package org.jetbrains.kotlin.resolve;
|
||||
|
||||
import kotlin.collections.CollectionsKt;
|
||||
import kotlin.jvm.functions.Function1;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
|
||||
@@ -30,6 +32,7 @@ import java.util.*;
|
||||
import static org.jetbrains.kotlin.builtins.KotlinBuiltIns.isAny;
|
||||
import static org.jetbrains.kotlin.builtins.KotlinBuiltIns.isNullableAny;
|
||||
import static org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.*;
|
||||
import static org.jetbrains.kotlin.descriptors.Modality.ABSTRACT;
|
||||
import static org.jetbrains.kotlin.resolve.descriptorUtil.DescriptorUtilsKt.getBuiltIns;
|
||||
|
||||
public class DescriptorUtils {
|
||||
@@ -331,6 +334,16 @@ public class DescriptorUtils {
|
||||
return descriptor instanceof ClassDescriptor && ((ClassDescriptor) descriptor).getKind() == classKind;
|
||||
}
|
||||
|
||||
public static boolean hasAbstractMembers(@NotNull ClassDescriptor classDescriptor) {
|
||||
for (DeclarationDescriptor member : getAllDescriptors(classDescriptor.getDefaultType().getMemberScope())) {
|
||||
if (member instanceof CallableMemberDescriptor &&
|
||||
((CallableMemberDescriptor) member).getModality() == ABSTRACT) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static List<ClassDescriptor> getSuperclassDescriptors(@NotNull ClassDescriptor classDescriptor) {
|
||||
Collection<KotlinType> superclassTypes = classDescriptor.getTypeConstructor().getSupertypes();
|
||||
|
||||
Reference in New Issue
Block a user