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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user