Minor. Reformat builtinSpecialBridges.kt

This commit is contained in:
Denis Zharkov
2018-12-14 13:04:07 +03:00
parent 9973d59643
commit 9736975d52
@@ -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
} }