JVM_IR: implement getJvmModuleNameForDeserialized in MethodSignatureMapper

This commit is contained in:
Georgy Bronnikov
2020-05-29 20:40:47 +03:00
parent 80afe42d17
commit 77c20066a8
4 changed files with 39 additions and 6 deletions
@@ -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
}
}