JVM IR: minor, use more specific types in MethodSignatureMapper

This commit is contained in:
Alexander Udalov
2020-09-11 13:40:34 +02:00
parent 2a0f64ebcb
commit 93f38e1c61
@@ -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) {