JVM IR: minor, use more specific types in MethodSignatureMapper
This commit is contained in:
+13
-13
@@ -29,6 +29,7 @@ import org.jetbrains.kotlin.codegen.state.isMethodWithDeclarationSiteWildcardsFq
|
|||||||
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
|
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
|
||||||
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.IrLazyClass
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.lazy.IrLazyFunction
|
||||||
import org.jetbrains.kotlin.ir.declarations.lazy.IrLazyFunctionBase
|
import org.jetbrains.kotlin.ir.declarations.lazy.IrLazyFunctionBase
|
||||||
import org.jetbrains.kotlin.ir.descriptors.IrBasedSimpleFunctionDescriptor
|
import org.jetbrains.kotlin.ir.descriptors.IrBasedSimpleFunctionDescriptor
|
||||||
import org.jetbrains.kotlin.ir.descriptors.toIrBasedDescriptor
|
import org.jetbrains.kotlin.ir.descriptors.toIrBasedDescriptor
|
||||||
@@ -70,6 +71,8 @@ class MethodSignatureMapper(private val context: JvmBackendContext) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun mapFunctionName(function: IrFunction, skipSpecial: Boolean = false): String {
|
fun mapFunctionName(function: IrFunction, skipSpecial: Boolean = false): String {
|
||||||
|
if (function !is IrSimpleFunction) return function.name.asString()
|
||||||
|
|
||||||
if (!skipSpecial) {
|
if (!skipSpecial) {
|
||||||
if (function.origin != IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB) {
|
if (function.origin != IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB) {
|
||||||
val platformName = function.getJvmNameFromAnnotation()
|
val platformName = function.getJvmNameFromAnnotation()
|
||||||
@@ -80,7 +83,7 @@ class MethodSignatureMapper(private val context: JvmBackendContext) {
|
|||||||
if (nameForSpecialFunction != null) return nameForSpecialFunction
|
if (nameForSpecialFunction != null) return nameForSpecialFunction
|
||||||
}
|
}
|
||||||
|
|
||||||
val property = (function as? IrSimpleFunction)?.correspondingPropertySymbol?.owner
|
val property = function.correspondingPropertySymbol?.owner
|
||||||
if (property != null) {
|
if (property != null) {
|
||||||
val propertyName = property.name.asString()
|
val propertyName = property.name.asString()
|
||||||
val propertyParent = property.parentAsClass
|
val propertyParent = property.parentAsClass
|
||||||
@@ -102,7 +105,7 @@ class MethodSignatureMapper(private val context: JvmBackendContext) {
|
|||||||
return mangleMemberNameIfRequired(function.name.asString(), function)
|
return mangleMemberNameIfRequired(function.name.asString(), function)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun mangleMemberNameIfRequired(name: String, function: IrFunction): String {
|
private fun mangleMemberNameIfRequired(name: String, function: IrSimpleFunction): String {
|
||||||
val newName = JvmCodegenUtil.sanitizeNameIfNeeded(name, context.state.languageVersionSettings)
|
val newName = JvmCodegenUtil.sanitizeNameIfNeeded(name, context.state.languageVersionSettings)
|
||||||
|
|
||||||
if (function.isTopLevel) {
|
if (function.isTopLevel) {
|
||||||
@@ -120,18 +123,17 @@ class MethodSignatureMapper(private val context: JvmBackendContext) {
|
|||||||
newName
|
newName
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun IrFunction.shouldMangleAsInternal() =
|
private fun IrSimpleFunction.shouldMangleAsInternal(): Boolean =
|
||||||
this !is IrConstructor &&
|
origin != JvmLoweredDeclarationOrigin.STATIC_INLINE_CLASS_CONSTRUCTOR &&
|
||||||
origin != JvmLoweredDeclarationOrigin.STATIC_INLINE_CLASS_CONSTRUCTOR &&
|
|
||||||
visibility == DescriptorVisibilities.INTERNAL &&
|
visibility == DescriptorVisibilities.INTERNAL &&
|
||||||
!isPublishedApi()
|
!isPublishedApi()
|
||||||
|
|
||||||
private fun getModuleName(function: IrFunction): String =
|
private fun getModuleName(function: IrSimpleFunction): String =
|
||||||
(if (function is IrLazyFunctionBase)
|
(if (function is IrLazyFunction)
|
||||||
getJvmModuleNameForDeserialized(function)
|
getJvmModuleNameForDeserialized(function)
|
||||||
else null) ?: context.state.moduleName
|
else null) ?: context.state.moduleName
|
||||||
|
|
||||||
private fun IrFunction.isPublishedApi(): Boolean =
|
private fun IrSimpleFunction.isPublishedApi(): Boolean =
|
||||||
propertyIfAccessor.annotations.hasAnnotation(StandardNames.FqNames.publishedApi)
|
propertyIfAccessor.annotations.hasAnnotation(StandardNames.FqNames.publishedApi)
|
||||||
|
|
||||||
fun mapReturnType(declaration: IrDeclaration, sw: JvmSignatureWriter? = null): Type {
|
fun mapReturnType(declaration: IrDeclaration, sw: JvmSignatureWriter? = null): Type {
|
||||||
@@ -365,10 +367,8 @@ class MethodSignatureMapper(private val context: JvmBackendContext) {
|
|||||||
return current
|
return current
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getJvmMethodNameIfSpecial(irFunction: IrFunction): String? =
|
private fun getJvmMethodNameIfSpecial(irFunction: IrSimpleFunction): String? =
|
||||||
(irFunction as? IrSimpleFunction)?.run {
|
irFunction.getBuiltinSpecialPropertyGetterName() ?: irFunction.getDifferentNameForJvmBuiltinFunction()
|
||||||
getBuiltinSpecialPropertyGetterName() ?: getDifferentNameForJvmBuiltinFunction()
|
|
||||||
}
|
|
||||||
|
|
||||||
private val IrSimpleFunction.isBuiltIn: Boolean
|
private val IrSimpleFunction.isBuiltIn: Boolean
|
||||||
get() = getPackageFragment()?.fqName == StandardNames.BUILT_INS_PACKAGE_FQ_NAME ||
|
get() = getPackageFragment()?.fqName == StandardNames.BUILT_INS_PACKAGE_FQ_NAME ||
|
||||||
@@ -406,7 +406,7 @@ class MethodSignatureMapper(private val context: JvmBackendContext) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// From org.jetbrains.kotlin.load.kotlin.getJvmModuleNameForDeserializedDescriptor
|
// From org.jetbrains.kotlin.load.kotlin.getJvmModuleNameForDeserializedDescriptor
|
||||||
private fun getJvmModuleNameForDeserialized(function: IrLazyFunctionBase): String? {
|
private fun getJvmModuleNameForDeserialized(function: IrLazyFunction): String? {
|
||||||
var current: IrDeclarationParent? = function.parent
|
var current: IrDeclarationParent? = function.parent
|
||||||
while (current != null) {
|
while (current != null) {
|
||||||
when (current) {
|
when (current) {
|
||||||
|
|||||||
Reference in New Issue
Block a user