Minor. Move hasRealKotlinSuperClassWithOverrideOf to descriptor.loader.java
This commit is contained in:
@@ -16,23 +16,24 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.codegen
|
package org.jetbrains.kotlin.codegen
|
||||||
|
|
||||||
import org.jetbrains.kotlin.backend.common.bridges.*
|
import org.jetbrains.kotlin.backend.common.bridges.DescriptorBasedFunctionHandle
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.backend.common.bridges.findAllReachableDeclarations
|
||||||
|
import org.jetbrains.kotlin.backend.common.bridges.findConcreteSuperDeclaration
|
||||||
|
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
|
||||||
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||||
|
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||||
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
import org.jetbrains.kotlin.load.java.BuiltinMethodsWithSpecialGenericSignature
|
import org.jetbrains.kotlin.load.java.BuiltinMethodsWithSpecialGenericSignature
|
||||||
import org.jetbrains.kotlin.load.java.BuiltinMethodsWithSpecialGenericSignature.getSpecialSignatureInfo
|
import org.jetbrains.kotlin.load.java.BuiltinMethodsWithSpecialGenericSignature.getSpecialSignatureInfo
|
||||||
import org.jetbrains.kotlin.load.java.descriptors.JavaClassDescriptor
|
import org.jetbrains.kotlin.load.java.descriptors.JavaClassDescriptor
|
||||||
import org.jetbrains.kotlin.load.java.getOverriddenBuiltinWithDifferentJvmDescriptor
|
import org.jetbrains.kotlin.load.java.getOverriddenBuiltinWithDifferentJvmDescriptor
|
||||||
import org.jetbrains.kotlin.psi.KtCallElement
|
import org.jetbrains.kotlin.load.java.hasRealKotlinSuperClassWithOverrideOf
|
||||||
import org.jetbrains.kotlin.psi.KtElement
|
import org.jetbrains.kotlin.psi.KtElement
|
||||||
import org.jetbrains.kotlin.psi.KtPsiUtil
|
import org.jetbrains.kotlin.psi.KtPsiUtil
|
||||||
import org.jetbrains.kotlin.psi.KtValueArgument
|
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
|
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||||
import org.jetbrains.kotlin.resolve.calls.callUtil.getParentCall
|
import org.jetbrains.kotlin.resolve.calls.callUtil.getParentCall
|
||||||
import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
|
import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns
|
|
||||||
import org.jetbrains.kotlin.types.checker.TypeCheckingProcedure
|
|
||||||
import org.jetbrains.kotlin.utils.singletonOrEmptyList
|
import org.jetbrains.kotlin.utils.singletonOrEmptyList
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
@@ -117,33 +118,6 @@ private fun needGenerateSpecialBridge(
|
|||||||
&& reachableDeclarations.none { it.containingDeclaration is JavaClassDescriptor && it.modality == Modality.FINAL }
|
&& reachableDeclarations.none { it.containingDeclaration is JavaClassDescriptor && it.modality == Modality.FINAL }
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun ClassDescriptor.hasRealKotlinSuperClassWithOverrideOf(
|
|
||||||
specialCallableDescriptor: CallableDescriptor
|
|
||||||
): Boolean {
|
|
||||||
val builtinContainerDefaultType = (specialCallableDescriptor.containingDeclaration as ClassDescriptor).defaultType
|
|
||||||
|
|
||||||
var superClassDescriptor = DescriptorUtils.getSuperClassDescriptor(this)
|
|
||||||
|
|
||||||
while (superClassDescriptor != null) {
|
|
||||||
if (superClassDescriptor !is JavaClassDescriptor) {
|
|
||||||
// Kotlin class
|
|
||||||
|
|
||||||
val doesOverrideBuiltinDeclaration =
|
|
||||||
TypeCheckingProcedure.findCorrespondingSupertype(superClassDescriptor.defaultType, builtinContainerDefaultType) != null
|
|
||||||
|
|
||||||
if (doesOverrideBuiltinDeclaration) {
|
|
||||||
val containingPackageFragment = DescriptorUtils.getParentOfType(superClassDescriptor, PackageFragmentDescriptor::class.java)
|
|
||||||
if (containingPackageFragment === superClassDescriptor.builtIns.builtInsPackageFragment) return false
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
superClassDescriptor = DescriptorUtils.getSuperClassDescriptor(superClassDescriptor)
|
|
||||||
}
|
|
||||||
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
public fun isValueArgumentForCallToMethodWithTypeCheckBarrier(
|
public fun isValueArgumentForCallToMethodWithTypeCheckBarrier(
|
||||||
element: KtElement,
|
element: KtElement,
|
||||||
bindingContext: BindingContext
|
bindingContext: BindingContext
|
||||||
|
|||||||
+28
@@ -33,6 +33,7 @@ import org.jetbrains.kotlin.load.java.BuiltinMethodsWithSpecialGenericSignature.
|
|||||||
import org.jetbrains.kotlin.load.java.BuiltinMethodsWithSpecialGenericSignature.getSpecialSignatureInfo
|
import org.jetbrains.kotlin.load.java.BuiltinMethodsWithSpecialGenericSignature.getSpecialSignatureInfo
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
|
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
|
||||||
|
import org.jetbrains.kotlin.types.checker.TypeCheckingProcedure
|
||||||
|
|
||||||
object BuiltinSpecialProperties {
|
object BuiltinSpecialProperties {
|
||||||
private val PROPERTY_FQ_NAME_TO_JVM_GETTER_NAME_MAP = mapOf(
|
private val PROPERTY_FQ_NAME_TO_JVM_GETTER_NAME_MAP = mapOf(
|
||||||
@@ -227,6 +228,33 @@ private fun getBuiltinOverriddenThatAffectsJvmName(
|
|||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public fun ClassDescriptor.hasRealKotlinSuperClassWithOverrideOf(
|
||||||
|
specialCallableDescriptor: CallableDescriptor
|
||||||
|
): Boolean {
|
||||||
|
val builtinContainerDefaultType = (specialCallableDescriptor.containingDeclaration as ClassDescriptor).defaultType
|
||||||
|
|
||||||
|
var superClassDescriptor = DescriptorUtils.getSuperClassDescriptor(this)
|
||||||
|
|
||||||
|
while (superClassDescriptor != null) {
|
||||||
|
if (superClassDescriptor !is JavaClassDescriptor) {
|
||||||
|
// Kotlin class
|
||||||
|
|
||||||
|
val doesOverrideBuiltinDeclaration =
|
||||||
|
TypeCheckingProcedure.findCorrespondingSupertype(superClassDescriptor.defaultType, builtinContainerDefaultType) != null
|
||||||
|
|
||||||
|
if (doesOverrideBuiltinDeclaration) {
|
||||||
|
val containingPackageFragment = DescriptorUtils.getParentOfType(superClassDescriptor, PackageFragmentDescriptor::class.java)
|
||||||
|
if (containingPackageFragment === superClassDescriptor.builtIns.builtInsPackageFragment) return false
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
superClassDescriptor = DescriptorUtils.getSuperClassDescriptor(superClassDescriptor)
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
// Util methods
|
// Util methods
|
||||||
private val CallableMemberDescriptor.isFromJava: Boolean
|
private val CallableMemberDescriptor.isFromJava: Boolean
|
||||||
get() = propertyIfAccessor is JavaCallableMemberDescriptor && propertyIfAccessor.containingDeclaration is JavaClassDescriptor
|
get() = propertyIfAccessor is JavaCallableMemberDescriptor && propertyIfAccessor.containingDeclaration is JavaClassDescriptor
|
||||||
|
|||||||
Reference in New Issue
Block a user