[K/N][C interop] Support Kotlin special names processing (KT-47209 fixed)

This commit is contained in:
Elena Lepilkina
2021-07-12 10:48:33 +03:00
committed by Space
parent 0326518fc9
commit c401cf961d
@@ -25,6 +25,7 @@ import org.jetbrains.kotlin.ir.util.referenceFunction
import org.jetbrains.kotlin.konan.target.* import org.jetbrains.kotlin.konan.target.*
import org.jetbrains.kotlin.name.isChildOf import org.jetbrains.kotlin.name.isChildOf
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.annotations.* import org.jetbrains.kotlin.resolve.annotations.*
import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.resolve.descriptorUtil.* import org.jetbrains.kotlin.resolve.descriptorUtil.*
@@ -535,7 +536,7 @@ internal class CAdapterGenerator(val context: Context) : DeclarationDescriptorVi
internal fun paramsToUniqueNames(params: List<ParameterDescriptor>): Map<ParameterDescriptor, String> { internal fun paramsToUniqueNames(params: List<ParameterDescriptor>): Map<ParameterDescriptor, String> {
paramNamesRecorded.clear() paramNamesRecorded.clear()
return params.associate { return params.associate {
val name = translateName(it.name.asString()) val name = translateName(it.name)
val count = paramNamesRecorded.getOrDefault(name, 0) val count = paramNamesRecorded.getOrDefault(name, 0)
paramNamesRecorded[name] = count + 1 paramNamesRecorded[name] = count + 1
if (count == 0) { if (count == 0) {
@@ -639,7 +640,7 @@ internal class CAdapterGenerator(val context: Context) : DeclarationDescriptorVi
override fun visitPackageFragmentDescriptor(descriptor: PackageFragmentDescriptor, ignored: Void?): Boolean { override fun visitPackageFragmentDescriptor(descriptor: PackageFragmentDescriptor, ignored: Void?): Boolean {
val fqName = descriptor.fqName val fqName = descriptor.fqName
val packageScope = packageScopes.getOrPut(fqName) { val packageScope = packageScopes.getOrPut(fqName) {
val name = if (fqName.isRoot) "root" else translateName(fqName.shortName().asString()) val name = if (fqName.isRoot) "root" else translateName(fqName.shortName())
val scope = ExportedElementScope(ScopeKind.PACKAGE, name) val scope = ExportedElementScope(ScopeKind.PACKAGE, name)
scopes.last().scopes += scope scopes.last().scopes += scope
scope scope
@@ -1073,11 +1074,13 @@ internal class CAdapterGenerator(val context: Context) : DeclarationDescriptorVi
return type.isUnit() || type.isNothing() return type.isUnit() || type.isNothing()
} }
fun translateName(name: String): String { fun translateName(name: Name): String {
val nameString = name.asString()
return when { return when {
simpleNameMapping.contains(name) -> simpleNameMapping[name]!! simpleNameMapping.contains(nameString) -> simpleNameMapping[nameString]!!
cKeywords.contains(name) -> "${name}_" cKeywords.contains(nameString) -> "${nameString}_"
else -> name name.isSpecial -> nameString.replace("[<> ]".toRegex(), "_")
else -> nameString
} }
} }