Preliminary implementation of parts & facade in FIR-based compiler
This commit is contained in:
@@ -39,7 +39,7 @@ import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodParameterKind
|
||||
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature
|
||||
import org.jetbrains.kotlin.resolve.scopes.MemberScope
|
||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedCallableMemberDescriptor
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DescriptorWithContainerSource
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
import org.jetbrains.kotlin.types.expressions.ExpressionTypingUtils.isFunctionLiteral
|
||||
import org.jetbrains.kotlin.types.expressions.LabelResolver
|
||||
@@ -554,7 +554,7 @@ abstract class InlineCodegen<out T : BaseExpressionCodegen>(
|
||||
val owner = state.typeMapper.mapImplementationOwner(functionDescriptor)
|
||||
val methodId = MethodId(owner.internalName, asmMethod)
|
||||
val directMember = getDirectMemberAndCallableFromObject(functionDescriptor)
|
||||
if (!isBuiltInArrayIntrinsic(functionDescriptor) && directMember !is DeserializedCallableMemberDescriptor) {
|
||||
if (!isBuiltInArrayIntrinsic(functionDescriptor) && directMember !is DescriptorWithContainerSource) {
|
||||
return sourceCompilerForInline.doCreateMethodNodeFromSource(functionDescriptor, jvmSignature, callDefault, asmMethod)
|
||||
}
|
||||
|
||||
@@ -608,16 +608,16 @@ abstract class InlineCodegen<out T : BaseExpressionCodegen>(
|
||||
return SMAPAndMethodNode(body, SMAP(listOf(FileMapping.SKIP)))
|
||||
}
|
||||
|
||||
assert(callableDescriptor is DeserializedCallableMemberDescriptor) { "Not a deserialized function or proper: " + callableDescriptor }
|
||||
assert(callableDescriptor is DescriptorWithContainerSource) { "Not a deserialized function or proper: $callableDescriptor" }
|
||||
|
||||
val containingClasses =
|
||||
KotlinTypeMapper.getContainingClassesForDeserializedCallable(callableDescriptor as DeserializedCallableMemberDescriptor)
|
||||
KotlinTypeMapper.getContainingClassesForDeserializedCallable(callableDescriptor as DescriptorWithContainerSource)
|
||||
|
||||
val containerId = containingClasses.implClassId
|
||||
|
||||
val bytes = state.inlineCache.classBytes.getOrPut(containerId) {
|
||||
findVirtualFile(state, containerId)?.contentsToByteArray()
|
||||
?: throw IllegalStateException("Couldn't find declaration file for " + containerId)
|
||||
?: throw IllegalStateException("Couldn't find declaration file for $containerId")
|
||||
}
|
||||
|
||||
val methodNode =
|
||||
|
||||
@@ -66,6 +66,7 @@ import org.jetbrains.kotlin.resolve.jvm.annotations.hasJvmDefaultAnnotation
|
||||
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodGenericSignature
|
||||
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodParameterKind
|
||||
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DescriptorWithContainerSource
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedCallableMemberDescriptor
|
||||
import org.jetbrains.kotlin.types.*
|
||||
import org.jetbrains.kotlin.types.expressions.ExpressionTypingUtils.*
|
||||
@@ -1291,7 +1292,7 @@ class KotlinTypeMapper @JvmOverloads constructor(
|
||||
|
||||
val directMember = DescriptorUtils.getDirectMember(descriptor)
|
||||
|
||||
if (directMember is DeserializedCallableMemberDescriptor) {
|
||||
if (directMember is DescriptorWithContainerSource) {
|
||||
val facadeFqName = getPackageMemberOwnerInternalName(directMember, publicFacade)
|
||||
if (facadeFqName != null) return facadeFqName
|
||||
}
|
||||
@@ -1319,7 +1320,7 @@ class KotlinTypeMapper @JvmOverloads constructor(
|
||||
descriptor is PropertyDescriptor && !descriptor.isConst
|
||||
|
||||
fun getContainingClassesForDeserializedCallable(
|
||||
deserializedDescriptor: DeserializedCallableMemberDescriptor
|
||||
deserializedDescriptor: DescriptorWithContainerSource
|
||||
): ContainingClassesInfo {
|
||||
val parentDeclaration = deserializedDescriptor.containingDeclaration
|
||||
|
||||
@@ -1351,7 +1352,7 @@ class KotlinTypeMapper @JvmOverloads constructor(
|
||||
return classId
|
||||
}
|
||||
|
||||
private fun getPackageMemberOwnerInternalName(descriptor: DeserializedCallableMemberDescriptor, publicFacade: Boolean): String? {
|
||||
private fun getPackageMemberOwnerInternalName(descriptor: DescriptorWithContainerSource, publicFacade: Boolean): String? {
|
||||
val containingDeclaration = descriptor.containingDeclaration
|
||||
assert(containingDeclaration is PackageFragmentDescriptor) { "Not a top-level member: $descriptor" }
|
||||
|
||||
@@ -1366,7 +1367,7 @@ class KotlinTypeMapper @JvmOverloads constructor(
|
||||
|
||||
private val FAKE_CLASS_ID_FOR_BUILTINS = ClassId.topLevel(FqName("kotlin.KotlinPackage"))
|
||||
|
||||
private fun getPackageMemberContainingClassesInfo(descriptor: DeserializedCallableMemberDescriptor): ContainingClassesInfo? {
|
||||
private fun getPackageMemberContainingClassesInfo(descriptor: DescriptorWithContainerSource): ContainingClassesInfo? {
|
||||
val containingDeclaration = descriptor.containingDeclaration
|
||||
if (containingDeclaration is BuiltInsPackageFragment) {
|
||||
return ContainingClassesInfo(FAKE_CLASS_ID_FOR_BUILTINS, FAKE_CLASS_ID_FOR_BUILTINS)
|
||||
@@ -1377,6 +1378,8 @@ class KotlinTypeMapper @JvmOverloads constructor(
|
||||
val facadeName = when (containingDeclaration) {
|
||||
is LazyJavaPackageFragment -> containingDeclaration.getFacadeNameForPartName(implClassName) ?: return null
|
||||
is IncrementalMultifileClassPackageFragment -> containingDeclaration.facadeName
|
||||
// TODO: for multi-file class part, they can be different
|
||||
is PackageFragmentDescriptor -> implClassName
|
||||
else -> throw AssertionError(
|
||||
"Unexpected package fragment for $descriptor: $containingDeclaration (${containingDeclaration.javaClass.simpleName})"
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user