JVM_IR: implement getJvmModuleNameForDeserialized in MethodSignatureMapper
This commit is contained in:
+28
-6
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.codegen.state.extractTypeMappingModeFromAnnotation
|
||||
import org.jetbrains.kotlin.codegen.state.isMethodWithDeclarationSiteWildcardsFqName
|
||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.declarations.lazy.IrLazyClass
|
||||
import org.jetbrains.kotlin.ir.declarations.lazy.IrLazyFunctionBase
|
||||
import org.jetbrains.kotlin.ir.expressions.IrCall
|
||||
import org.jetbrains.kotlin.ir.expressions.IrConst
|
||||
@@ -35,10 +36,10 @@ import org.jetbrains.kotlin.ir.types.*
|
||||
import org.jetbrains.kotlin.ir.util.*
|
||||
import org.jetbrains.kotlin.load.java.*
|
||||
import org.jetbrains.kotlin.load.java.descriptors.JavaClassDescriptor
|
||||
import org.jetbrains.kotlin.load.kotlin.TypeMappingMode
|
||||
import org.jetbrains.kotlin.load.kotlin.forceSingleValueParameterBoxing
|
||||
import org.jetbrains.kotlin.load.kotlin.getJvmModuleNameForDeserializedDescriptor
|
||||
import org.jetbrains.kotlin.load.kotlin.signatures
|
||||
import org.jetbrains.kotlin.load.kotlin.*
|
||||
import org.jetbrains.kotlin.metadata.deserialization.getExtensionOrNull
|
||||
import org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf
|
||||
import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmProtoBufUtil
|
||||
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodGenericSignature
|
||||
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodParameterKind
|
||||
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature
|
||||
@@ -113,9 +114,8 @@ class MethodSignatureMapper(private val context: JvmBackendContext) {
|
||||
}
|
||||
|
||||
private fun getModuleName(function: IrFunction): String =
|
||||
// TODO: get rid of descriptors here
|
||||
(if (function is IrLazyFunctionBase)
|
||||
getJvmModuleNameForDeserializedDescriptor(function.descriptor)
|
||||
getJvmModuleNameForDeserialized(function)
|
||||
else null) ?: context.state.moduleName
|
||||
|
||||
private fun IrFunction.isPublishedApi(): Boolean =
|
||||
@@ -387,4 +387,26 @@ class MethodSignatureMapper(private val context: JvmBackendContext) {
|
||||
val signature = mapSignature(this@computeJvmSignature, skipGenericSignature = false, skipSpecial = true).toString()
|
||||
return signature(classPart, signature)
|
||||
}
|
||||
|
||||
// From org.jetbrains.kotlin.load.kotlin.getJvmModuleNameForDeserializedDescriptor
|
||||
private fun getJvmModuleNameForDeserialized(function: IrLazyFunctionBase): String? {
|
||||
var current: IrDeclarationParent? = function.parent
|
||||
while (current != null) {
|
||||
when (current) {
|
||||
is IrLazyClass -> {
|
||||
val classProto = current.classProto ?: return null
|
||||
val nameResolver = current.nameResolver ?: return null
|
||||
return classProto.getExtensionOrNull(JvmProtoBuf.classModuleName)
|
||||
?.let(nameResolver::getString)
|
||||
?: JvmProtoBufUtil.DEFAULT_MODULE_NAME
|
||||
}
|
||||
is IrExternalPackageFragment -> {
|
||||
val source = current.containerSource ?: return null
|
||||
return (source as? JvmPackagePartSource)?.moduleName
|
||||
}
|
||||
else -> current = (current as? IrDeclaration)?.parent ?: return null
|
||||
}
|
||||
}
|
||||
return null
|
||||
}
|
||||
}
|
||||
@@ -25,6 +25,7 @@ import org.jetbrains.kotlin.ir.symbols.IrFileSymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.IrPackageFragmentSymbol
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
|
||||
import java.io.File
|
||||
|
||||
interface IrPackageFragment : IrElement, IrDeclarationContainer, IrSymbolOwner {
|
||||
@@ -36,6 +37,7 @@ interface IrPackageFragment : IrElement, IrDeclarationContainer, IrSymbolOwner {
|
||||
|
||||
interface IrExternalPackageFragment : IrPackageFragment {
|
||||
override val symbol: IrExternalPackageFragmentSymbol
|
||||
val containerSource: DeserializedContainerSource?
|
||||
}
|
||||
|
||||
interface IrFile : IrPackageFragment, IrMutableAnnotationContainer, IrMetadataSourceOwner {
|
||||
|
||||
+3
@@ -28,6 +28,7 @@ import org.jetbrains.kotlin.ir.symbols.impl.IrExternalPackageFragmentSymbolImpl
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedMemberDescriptor
|
||||
|
||||
class IrExternalPackageFragmentImpl(
|
||||
override val symbol: IrExternalPackageFragmentSymbol,
|
||||
@@ -43,6 +44,8 @@ class IrExternalPackageFragmentImpl(
|
||||
|
||||
override val declarations: MutableList<IrDeclaration> = ArrayList()
|
||||
|
||||
override val containerSource get() = (symbol.descriptor as? DeserializedMemberDescriptor)?.containerSource
|
||||
|
||||
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
|
||||
visitor.visitExternalPackageFragment(this, data)
|
||||
|
||||
|
||||
@@ -18,7 +18,10 @@ import org.jetbrains.kotlin.ir.util.transform
|
||||
import org.jetbrains.kotlin.ir.util.mapOptimized
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||
import org.jetbrains.kotlin.metadata.ProtoBuf
|
||||
import org.jetbrains.kotlin.metadata.deserialization.NameResolver
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedClassDescriptor
|
||||
|
||||
class IrLazyClass(
|
||||
startOffset: Int,
|
||||
@@ -85,6 +88,9 @@ class IrLazyClass(
|
||||
|
||||
override var attributeOwnerId: IrAttributeContainer = this
|
||||
|
||||
val classProto: ProtoBuf.Class? get() = (descriptor as? DeserializedClassDescriptor)?.classProto
|
||||
val nameResolver: NameResolver? get() = (descriptor as? DeserializedClassDescriptor)?.c?.nameResolver
|
||||
|
||||
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
|
||||
visitor.visitClass(this, data)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user