Implement property references in JVM_IR

This commit is contained in:
pyos
2019-03-08 14:59:54 +01:00
committed by max-kammerer
parent 43be01bbc8
commit 330c4648cb
11 changed files with 406 additions and 48 deletions
@@ -30,6 +30,7 @@ import org.jetbrains.kotlin.descriptors.impl.LocalVariableAccessorDescriptor
import org.jetbrains.kotlin.descriptors.impl.LocalVariableDescriptor
import org.jetbrains.kotlin.descriptors.impl.TypeAliasConstructorDescriptor
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil
import org.jetbrains.kotlin.ir.descriptors.IrPropertyDelegateDescriptor
import org.jetbrains.kotlin.load.java.BuiltinMethodsWithSpecialGenericSignature
import org.jetbrains.kotlin.load.java.JvmAbi
import org.jetbrains.kotlin.load.java.descriptors.JavaCallableMemberDescriptor
@@ -137,7 +138,8 @@ class KotlinTypeMapper @JvmOverloads constructor(
val container = descriptor.containingDeclaration
return when (container) {
is PackageFragmentDescriptor -> {
val packageMemberOwner = internalNameForPackageMemberOwner(descriptor as CallableMemberDescriptor, publicFacade)
val packageMemberOwner =
internalNameForPackageMemberOwner(descriptor as CallableMemberDescriptor, publicFacade, isIrBackend)
Type.getObjectType(packageMemberOwner)
}
is ClassDescriptor -> mapClass((container as ClassDescriptor?)!!)
@@ -1251,7 +1253,11 @@ class KotlinTypeMapper @JvmOverloads constructor(
*/
val LANGUAGE_VERSION_SETTINGS_DEFAULT: LanguageVersionSettings = LanguageVersionSettingsImpl.DEFAULT
private fun internalNameForPackageMemberOwner(callableDescriptor: CallableMemberDescriptor, publicFacade: Boolean): String {
private fun internalNameForPackageMemberOwner(
callableDescriptor: CallableMemberDescriptor,
publicFacade: Boolean,
isIrBackend: Boolean
): String {
val isAccessor: Boolean
val descriptor = if (callableDescriptor is AccessorForCallableDescriptor<*>) {
isAccessor = true
@@ -1281,6 +1287,10 @@ class KotlinTypeMapper @JvmOverloads constructor(
if (facadeFqName != null) return facadeFqName
}
if (isIrBackend && directMember is IrPropertyDelegateDescriptor) {
return internalNameForPackageMemberOwner(directMember.correspondingProperty, publicFacade, isIrBackend)
}
// TODO: drop this usage and move IrBuiltinsPackageFragmentDescriptor to IR modules; it shouldn't be used here
if (descriptor.containingDeclaration is IrBuiltinsPackageFragmentDescriptor) {
return descriptor.containingDeclaration.name.asString()