[JS IR BE] take into account receiver's type when generate name for callables (including properties)

Also, add special markers for receiver type and generic types to avoid accidental clashes.
This commit is contained in:
Zalim Bashorov
2018-08-17 20:31:06 +03:00
parent b9d6580b44
commit 0f6a77e700
4 changed files with 40 additions and 2 deletions
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
import org.jetbrains.kotlin.resolve.descriptorUtil.isEffectivelyExternal
import org.jetbrains.kotlin.resolve.scopes.receivers.ExtensionReceiver
import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitClassReceiver
import org.jetbrains.kotlin.utils.addToStdlib.ifNotEmpty
class SimpleNameGenerator : NameGenerator {
@@ -71,7 +72,13 @@ class SimpleNameGenerator : NameGenerator {
is PropertyGetterDescriptor -> nameBuilder.append(Namer.GETTER_PREFIX)
is PropertySetterDescriptor -> nameBuilder.append(Namer.SETTER_PREFIX)
}
nameBuilder.append(descriptor.correspondingProperty.name.asString())
descriptor.extensionReceiverParameter?.let {
nameBuilder.append("_r$${it.type}")
}
if (descriptor.visibility == Visibilities.PRIVATE) {
nameBuilder.append('$')
nameBuilder.append(getNameForDescriptor(descriptor.containingDeclaration, context))
@@ -95,8 +102,16 @@ class SimpleNameGenerator : NameGenerator {
}
is CallableDescriptor -> {
nameBuilder.append(descriptor.name.asString())
descriptor.typeParameters.forEach { nameBuilder.append("_${it.name.asString()}") }
descriptor.valueParameters.forEach { nameBuilder.append("_${it.type}") }
descriptor.typeParameters.ifNotEmpty {
nameBuilder.append("_\$t")
joinTo(nameBuilder, "") { "_${it.name}" }
}
descriptor.extensionReceiverParameter?.let {
nameBuilder.append("_r$${it.type}")
}
descriptor.valueParameters.ifNotEmpty {
joinTo(nameBuilder, "") { "_${it.type}" }
}
}
}