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.codegen.state.isMethodWithDeclarationSiteWildcardsFqName
|
||||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
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.declarations.lazy.IrLazyFunctionBase
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrCall
|
import org.jetbrains.kotlin.ir.expressions.IrCall
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrConst
|
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.ir.util.*
|
||||||
import org.jetbrains.kotlin.load.java.*
|
import org.jetbrains.kotlin.load.java.*
|
||||||
import org.jetbrains.kotlin.load.java.descriptors.JavaClassDescriptor
|
import org.jetbrains.kotlin.load.java.descriptors.JavaClassDescriptor
|
||||||
import org.jetbrains.kotlin.load.kotlin.TypeMappingMode
|
import org.jetbrains.kotlin.load.kotlin.*
|
||||||
import org.jetbrains.kotlin.load.kotlin.forceSingleValueParameterBoxing
|
import org.jetbrains.kotlin.metadata.deserialization.getExtensionOrNull
|
||||||
import org.jetbrains.kotlin.load.kotlin.getJvmModuleNameForDeserializedDescriptor
|
import org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf
|
||||||
import org.jetbrains.kotlin.load.kotlin.signatures
|
import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmProtoBufUtil
|
||||||
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodGenericSignature
|
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodGenericSignature
|
||||||
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodParameterKind
|
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodParameterKind
|
||||||
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature
|
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature
|
||||||
@@ -113,9 +114,8 @@ class MethodSignatureMapper(private val context: JvmBackendContext) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun getModuleName(function: IrFunction): String =
|
private fun getModuleName(function: IrFunction): String =
|
||||||
// TODO: get rid of descriptors here
|
|
||||||
(if (function is IrLazyFunctionBase)
|
(if (function is IrLazyFunctionBase)
|
||||||
getJvmModuleNameForDeserializedDescriptor(function.descriptor)
|
getJvmModuleNameForDeserialized(function)
|
||||||
else null) ?: context.state.moduleName
|
else null) ?: context.state.moduleName
|
||||||
|
|
||||||
private fun IrFunction.isPublishedApi(): Boolean =
|
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()
|
val signature = mapSignature(this@computeJvmSignature, skipGenericSignature = false, skipSpecial = true).toString()
|
||||||
return signature(classPart, signature)
|
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.symbols.IrPackageFragmentSymbol
|
||||||
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
|
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
|
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
interface IrPackageFragment : IrElement, IrDeclarationContainer, IrSymbolOwner {
|
interface IrPackageFragment : IrElement, IrDeclarationContainer, IrSymbolOwner {
|
||||||
@@ -36,6 +37,7 @@ interface IrPackageFragment : IrElement, IrDeclarationContainer, IrSymbolOwner {
|
|||||||
|
|
||||||
interface IrExternalPackageFragment : IrPackageFragment {
|
interface IrExternalPackageFragment : IrPackageFragment {
|
||||||
override val symbol: IrExternalPackageFragmentSymbol
|
override val symbol: IrExternalPackageFragmentSymbol
|
||||||
|
val containerSource: DeserializedContainerSource?
|
||||||
}
|
}
|
||||||
|
|
||||||
interface IrFile : IrPackageFragment, IrMutableAnnotationContainer, IrMetadataSourceOwner {
|
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.IrElementTransformer
|
||||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
|
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedMemberDescriptor
|
||||||
|
|
||||||
class IrExternalPackageFragmentImpl(
|
class IrExternalPackageFragmentImpl(
|
||||||
override val symbol: IrExternalPackageFragmentSymbol,
|
override val symbol: IrExternalPackageFragmentSymbol,
|
||||||
@@ -43,6 +44,8 @@ class IrExternalPackageFragmentImpl(
|
|||||||
|
|
||||||
override val declarations: MutableList<IrDeclaration> = ArrayList()
|
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 =
|
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
|
||||||
visitor.visitExternalPackageFragment(this, data)
|
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.util.mapOptimized
|
||||||
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
|
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
|
||||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
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.name.Name
|
||||||
|
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedClassDescriptor
|
||||||
|
|
||||||
class IrLazyClass(
|
class IrLazyClass(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
@@ -85,6 +88,9 @@ class IrLazyClass(
|
|||||||
|
|
||||||
override var attributeOwnerId: IrAttributeContainer = this
|
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 =
|
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
|
||||||
visitor.visitClass(this, data)
|
visitor.visitClass(this, data)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user