Minor. Reformat builtinSpecialBridges.kt
This commit is contained in:
@@ -37,13 +37,14 @@ import org.jetbrains.kotlin.utils.addIfNotNull
|
|||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
class BridgeForBuiltinSpecial<out Signature : Any>(
|
class BridgeForBuiltinSpecial<out Signature : Any>(
|
||||||
val from: Signature, val to: Signature,
|
val from: Signature, val to: Signature,
|
||||||
val isSpecial: Boolean = false,
|
val isSpecial: Boolean = false,
|
||||||
val isDelegateToSuper: Boolean = false
|
val isDelegateToSuper: Boolean = false
|
||||||
)
|
)
|
||||||
|
|
||||||
object BuiltinSpecialBridgesUtil {
|
object BuiltinSpecialBridgesUtil {
|
||||||
@JvmStatic fun <Signature : Any> generateBridgesForBuiltinSpecial(
|
@JvmStatic
|
||||||
|
fun <Signature : Any> generateBridgesForBuiltinSpecial(
|
||||||
function: FunctionDescriptor,
|
function: FunctionDescriptor,
|
||||||
signatureByDescriptor: (FunctionDescriptor) -> Signature,
|
signatureByDescriptor: (FunctionDescriptor) -> Signature,
|
||||||
areDeclarationAndDefinitionSame: (CallableMemberDescriptor) -> Boolean
|
areDeclarationAndDefinitionSame: (CallableMemberDescriptor) -> Boolean
|
||||||
@@ -65,7 +66,7 @@ object BuiltinSpecialBridgesUtil {
|
|||||||
it.takeUnless { it === function }?.getSpecialBridgeSignatureIfExists(signatureByDescriptor)
|
it.takeUnless { it === function }?.getSpecialBridgeSignatureIfExists(signatureByDescriptor)
|
||||||
}
|
}
|
||||||
val isTherePossibleClashWithSpecialBridge =
|
val isTherePossibleClashWithSpecialBridge =
|
||||||
specialBridgeSignature in specialBridgesSignaturesInSuperClass
|
specialBridgeSignature in specialBridgesSignaturesInSuperClass
|
||||||
|| reachableDeclarations.any { it.modality == Modality.FINAL && signatureByDescriptor(it) == specialBridgeSignature }
|
|| reachableDeclarations.any { it.modality == Modality.FINAL && signatureByDescriptor(it) == specialBridgeSignature }
|
||||||
|
|
||||||
val specialBridge = if (specialBridgeExists && !isTherePossibleClashWithSpecialBridge)
|
val specialBridge = if (specialBridgeExists && !isTherePossibleClashWithSpecialBridge)
|
||||||
@@ -78,9 +79,12 @@ object BuiltinSpecialBridgesUtil {
|
|||||||
if (fake) {
|
if (fake) {
|
||||||
for (overridden in function.overriddenDescriptors.map { it.original }) {
|
for (overridden in function.overriddenDescriptors.map { it.original }) {
|
||||||
if (!DescriptorBasedFunctionHandle(overridden, areDeclarationAndDefinitionSame).isAbstract) {
|
if (!DescriptorBasedFunctionHandle(overridden, areDeclarationAndDefinitionSame).isAbstract) {
|
||||||
commonBridges.removeAll(findAllReachableDeclarations(overridden,
|
commonBridges.removeAll(
|
||||||
areDeclarationAndDefinitionSame
|
findAllReachableDeclarations(
|
||||||
).map(signatureByDescriptor))
|
overridden,
|
||||||
|
areDeclarationAndDefinitionSame
|
||||||
|
).map(signatureByDescriptor)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -88,13 +92,19 @@ object BuiltinSpecialBridgesUtil {
|
|||||||
val bridges: MutableSet<BridgeForBuiltinSpecial<Signature>> = mutableSetOf()
|
val bridges: MutableSet<BridgeForBuiltinSpecial<Signature>> = mutableSetOf()
|
||||||
|
|
||||||
val superImplementationDescriptor =
|
val superImplementationDescriptor =
|
||||||
if (specialBridge != null && fake && !functionHandle.isAbstract)
|
if (specialBridge != null && fake && !functionHandle.isAbstract)
|
||||||
findSuperImplementationForStubDelegation(function, areDeclarationAndDefinitionSame, signatureByDescriptor)
|
findSuperImplementationForStubDelegation(function, areDeclarationAndDefinitionSame, signatureByDescriptor)
|
||||||
else
|
else
|
||||||
null
|
null
|
||||||
|
|
||||||
if (superImplementationDescriptor != null) {
|
if (superImplementationDescriptor != null) {
|
||||||
bridges.add(BridgeForBuiltinSpecial(methodItself, signatureByDescriptor(superImplementationDescriptor), isDelegateToSuper = true))
|
bridges.add(
|
||||||
|
BridgeForBuiltinSpecial(
|
||||||
|
methodItself,
|
||||||
|
signatureByDescriptor(superImplementationDescriptor),
|
||||||
|
isDelegateToSuper = true
|
||||||
|
)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (commonBridges.remove(methodItself)) {
|
if (commonBridges.remove(methodItself)) {
|
||||||
@@ -113,8 +123,9 @@ object BuiltinSpecialBridgesUtil {
|
|||||||
return bridges
|
return bridges
|
||||||
}
|
}
|
||||||
|
|
||||||
@JvmStatic fun <Signature : Any> FunctionDescriptor.shouldHaveTypeSafeBarrier(
|
@JvmStatic
|
||||||
signatureByDescriptor: (FunctionDescriptor) -> Signature
|
fun <Signature : Any> FunctionDescriptor.shouldHaveTypeSafeBarrier(
|
||||||
|
signatureByDescriptor: (FunctionDescriptor) -> Signature
|
||||||
): Boolean {
|
): Boolean {
|
||||||
if (BuiltinMethodsWithSpecialGenericSignature.getDefaultValueForOverriddenBuiltinFunction(this) == null) return false
|
if (BuiltinMethodsWithSpecialGenericSignature.getDefaultValueForOverriddenBuiltinFunction(this) == null) return false
|
||||||
|
|
||||||
@@ -169,7 +180,7 @@ private fun findAllReachableDeclarations(
|
|||||||
).map { it.descriptor }.toMutableSet()
|
).map { it.descriptor }.toMutableSet()
|
||||||
|
|
||||||
private fun <Signature> CallableMemberDescriptor.getSpecialBridgeSignatureIfExists(
|
private fun <Signature> CallableMemberDescriptor.getSpecialBridgeSignatureIfExists(
|
||||||
signatureByDescriptor: (FunctionDescriptor) -> Signature
|
signatureByDescriptor: (FunctionDescriptor) -> Signature
|
||||||
): Signature? {
|
): Signature? {
|
||||||
// Only functions should be considered here (may be assertion)
|
// Only functions should be considered here (may be assertion)
|
||||||
if (this !is FunctionDescriptor) return null
|
if (this !is FunctionDescriptor) return null
|
||||||
@@ -189,8 +200,8 @@ private fun <Signature> CallableMemberDescriptor.getSpecialBridgeSignatureIfExis
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun isValueArgumentForCallToMethodWithTypeCheckBarrier(
|
fun isValueArgumentForCallToMethodWithTypeCheckBarrier(
|
||||||
element: KtElement,
|
element: KtElement,
|
||||||
bindingContext: BindingContext
|
bindingContext: BindingContext
|
||||||
): Boolean {
|
): Boolean {
|
||||||
|
|
||||||
val parentCall = element.getParentCall(bindingContext, strict = true) ?: return false
|
val parentCall = element.getParentCall(bindingContext, strict = true) ?: return false
|
||||||
@@ -198,7 +209,7 @@ fun isValueArgumentForCallToMethodWithTypeCheckBarrier(
|
|||||||
if (KtPsiUtil.deparenthesize(argumentExpression) !== element) return false
|
if (KtPsiUtil.deparenthesize(argumentExpression) !== element) return false
|
||||||
|
|
||||||
val candidateDescriptor = parentCall.getResolvedCall(bindingContext)?.candidateDescriptor as CallableMemberDescriptor?
|
val candidateDescriptor = parentCall.getResolvedCall(bindingContext)?.candidateDescriptor as CallableMemberDescriptor?
|
||||||
?: return false
|
?: return false
|
||||||
|
|
||||||
return candidateDescriptor.getSpecialSignatureInfo()?.isObjectReplacedWithTypeParameter ?: false
|
return candidateDescriptor.getSpecialSignatureInfo()?.isObjectReplacedWithTypeParameter ?: false
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user