Minor. Extract function
This commit is contained in:
@@ -128,24 +128,35 @@ private fun <Signature> needGenerateSpecialBridge(
|
|||||||
if (signatureByDescriptor(functionDescriptor) == overriddenBuiltinSignature) return false
|
if (signatureByDescriptor(functionDescriptor) == overriddenBuiltinSignature) return false
|
||||||
|
|
||||||
// Is there Kotlin superclass that already has generated special bridge
|
// Is there Kotlin superclass that already has generated special bridge
|
||||||
if (functionDescriptor.firstOverridden { overridden ->
|
if (functionDescriptor.firstOverridden {
|
||||||
// Ignore itself and non-functions (the latter may be assertion)
|
overridden ->
|
||||||
if (overridden === functionDescriptor || overridden !is FunctionDescriptor) return@firstOverridden false
|
overridden !== functionDescriptor && overridden.getSpecialBridgeSignatureIfExists(signatureByDescriptor) != null
|
||||||
|
|
||||||
// is not Kotlin class
|
|
||||||
if (overridden.containingDeclaration is JavaClassDescriptor
|
|
||||||
|| DescriptorUtils.isInterface(overridden.containingDeclaration)) return@firstOverridden false
|
|
||||||
|
|
||||||
val originalOverridden = overridden.original
|
|
||||||
val overriddenSpecial = originalOverridden.getOverriddenBuiltinReflectingJvmDescriptor()?.original ?: return@firstOverridden false
|
|
||||||
|
|
||||||
signatureByDescriptor(originalOverridden) != signatureByDescriptor(overriddenSpecial)
|
|
||||||
} != null) return false
|
} != null) return false
|
||||||
|
|
||||||
return reachableDeclarations.none { it.modality == Modality.FINAL
|
return reachableDeclarations.none { it.modality == Modality.FINAL
|
||||||
&& signatureByDescriptor(it) == overriddenBuiltinSignature }
|
&& signatureByDescriptor(it) == overriddenBuiltinSignature }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun <Signature> CallableMemberDescriptor.getSpecialBridgeSignatureIfExists(
|
||||||
|
signatureByDescriptor: (FunctionDescriptor) -> Signature
|
||||||
|
): Signature? {
|
||||||
|
// Ignore itself and non-functions (may be assertion)
|
||||||
|
if (this !is FunctionDescriptor) return null
|
||||||
|
|
||||||
|
// Only Kotlin classes can have special bridges
|
||||||
|
if (containingDeclaration is JavaClassDescriptor || DescriptorUtils.isInterface(containingDeclaration)) return null
|
||||||
|
|
||||||
|
// Getting original is necessary here, because we want to determine JVM signature of descriptor as it was declared in containing class
|
||||||
|
val originalOverridden = original
|
||||||
|
val overriddenSpecial = originalOverridden.getOverriddenBuiltinReflectingJvmDescriptor()?.original ?: return null
|
||||||
|
val specialBridgeSignature = signatureByDescriptor(overriddenSpecial)
|
||||||
|
|
||||||
|
// Does special bridge has different signature
|
||||||
|
if (signatureByDescriptor(originalOverridden) == specialBridgeSignature) return null
|
||||||
|
|
||||||
|
return specialBridgeSignature
|
||||||
|
}
|
||||||
|
|
||||||
fun isValueArgumentForCallToMethodWithTypeCheckBarrier(
|
fun isValueArgumentForCallToMethodWithTypeCheckBarrier(
|
||||||
element: KtElement,
|
element: KtElement,
|
||||||
bindingContext: BindingContext
|
bindingContext: BindingContext
|
||||||
|
|||||||
Reference in New Issue
Block a user