[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:
+17
-2
@@ -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}" }
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+5
@@ -3434,6 +3434,11 @@ public class BoxJsTestGenerated extends AbstractBoxJsTest {
|
||||
public void testSimplePropertyWithGetter() throws Exception {
|
||||
runTest("js/js.translator/testData/box/extensionProperty/simplePropertyWithGetter.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("withSameNameAndDiffReceiverType.kt")
|
||||
public void testWithSameNameAndDiffReceiverType() throws Exception {
|
||||
runTest("js/js.translator/testData/box/extensionProperty/withSameNameAndDiffReceiverType.kt");
|
||||
}
|
||||
}
|
||||
|
||||
@TestMetadata("js/js.translator/testData/box/incremental")
|
||||
|
||||
+5
@@ -3434,6 +3434,11 @@ public class IrBoxJsTestGenerated extends AbstractIrBoxJsTest {
|
||||
public void testSimplePropertyWithGetter() throws Exception {
|
||||
runTest("js/js.translator/testData/box/extensionProperty/simplePropertyWithGetter.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("withSameNameAndDiffReceiverType.kt")
|
||||
public void testWithSameNameAndDiffReceiverType() throws Exception {
|
||||
runTest("js/js.translator/testData/box/extensionProperty/withSameNameAndDiffReceiverType.kt");
|
||||
}
|
||||
}
|
||||
|
||||
@TestMetadata("js/js.translator/testData/box/incremental")
|
||||
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
// EXPECTED_REACHABLE_NODES: 1196
|
||||
object Foo {
|
||||
val value = "O"
|
||||
}
|
||||
class Bar(val anotherValue: String)
|
||||
|
||||
val Foo.prop: String
|
||||
get() = value
|
||||
|
||||
val Bar.prop: String
|
||||
get() = anotherValue
|
||||
|
||||
fun box() = Foo.prop + Bar("K").prop
|
||||
Reference in New Issue
Block a user