Secondary constructors delegation calls and body resolve
This commit is contained in:
@@ -301,6 +301,18 @@ public class DescriptorUtils {
|
||||
return superClassDescriptors;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static JetType getSuperClassType(@NotNull ClassDescriptor classDescriptor) {
|
||||
Collection<JetType> superclassTypes = classDescriptor.getTypeConstructor().getSupertypes();
|
||||
for (JetType type : superclassTypes) {
|
||||
ClassDescriptor superClassDescriptor = getClassDescriptorForType(type);
|
||||
if (!isAny(superClassDescriptor) && superClassDescriptor.getKind() != ClassKind.TRAIT) {
|
||||
return type;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static ClassDescriptor getClassDescriptorForType(@NotNull JetType type) {
|
||||
return getClassDescriptorForTypeConstructor(type.getConstructor());
|
||||
|
||||
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||
import org.jetbrains.kotlin.descriptors.ClassKind.*
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||
|
||||
public fun ClassDescriptor.getClassObjectReferenceTarget(): ClassDescriptor = getDefaultObjectDescriptor() ?: this
|
||||
|
||||
@@ -81,4 +82,17 @@ public val DeclarationDescriptorWithVisibility.isEffectivelyPublicApi: Boolean
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
public fun ClassDescriptor.getSuperClassNotAny(): ClassDescriptor? {
|
||||
for (supertype in getDefaultType().getConstructor().getSupertypes()) {
|
||||
val superClassifier = supertype.getConstructor().getDeclarationDescriptor()
|
||||
if (!KotlinBuiltIns.isAnyOrNullableAny(supertype) &&
|
||||
(DescriptorUtils.isClass(superClassifier) || DescriptorUtils.isEnumClass(superClassifier))) {
|
||||
return superClassifier as ClassDescriptor
|
||||
}
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
public fun ClassDescriptor.getSuperClassOrAny(): ClassDescriptor = getSuperClassNotAny() ?: KotlinBuiltIns.getInstance().getAny()
|
||||
|
||||
Reference in New Issue
Block a user