Split getOverriddenBuiltinWithJvmDescriptor into two extensions
This commit is contained in:
+17
-1
@@ -206,7 +206,23 @@ fun <T : CallableMemberDescriptor> T.getOverriddenBuiltinWithDifferentJvmName():
|
||||
fun CallableMemberDescriptor.doesOverrideBuiltinWithDifferentJvmName(): Boolean = getOverriddenBuiltinWithDifferentJvmName() != null
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
fun <T : CallableMemberDescriptor> T.getOverriddenBuiltinWithDifferentJvmDescriptor(): T? {
|
||||
fun <T : CallableMemberDescriptor> T.getOverriddenSpecialBuiltin(): T? {
|
||||
getOverriddenBuiltinWithDifferentJvmName()?.let { return it }
|
||||
|
||||
if (!name.sameAsBuiltinMethodWithErasedValueParameters) return null
|
||||
|
||||
return firstOverridden {
|
||||
it.isFromBuiltins() && it.getSpecialSignatureInfo() != null
|
||||
} as T?
|
||||
}
|
||||
|
||||
// The subtle difference between getOverriddenBuiltinReflectingJvmDescriptor and getOverriddenSpecialBuiltin
|
||||
// is that first one return descriptor reflecting JVM signature (JVM descriptor)
|
||||
// E.g. it returns `contains(e: E): Boolean` instead of `contains(e: String): Boolean` for implementation of Collection<String>.contains
|
||||
// Implementation differs by getting 'original' for collection methods with erased value parameters
|
||||
// Also it ignores Collection<String>.containsAll overrides because they have the same JVM descriptor
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
fun <T : CallableMemberDescriptor> T.getOverriddenBuiltinReflectingJvmDescriptor(): T? {
|
||||
getOverriddenBuiltinWithDifferentJvmName()?.let { return it }
|
||||
|
||||
if (!name.sameAsBuiltinMethodWithErasedValueParameters) return null
|
||||
|
||||
Reference in New Issue
Block a user