JVM_IR KT-47120 treat outer name as case-insensitive for local classes

This commit is contained in:
Dmitry Petrov
2021-06-29 12:58:50 +03:00
parent 1130344fb1
commit 37b05cd9c2
7 changed files with 90 additions and 2 deletions
@@ -5482,6 +5482,18 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT
runTest("compiler/testData/codegen/box/closures/kt4137.kt");
}
@Test
@TestMetadata("kt47120.kt")
public void testKt47120() throws Exception {
runTest("compiler/testData/codegen/box/closures/kt47120.kt");
}
@Test
@TestMetadata("kt47120a.kt")
public void testKt47120a() throws Exception {
runTest("compiler/testData/codegen/box/closures/kt47120a.kt");
}
@Test
@TestMetadata("kt5589.kt")
public void testKt5589() throws Exception {
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.ir.util.isAnonymousObject
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.name.NameUtils
import org.jetbrains.kotlin.util.capitalizeDecapitalize.toUpperCaseAsciiOnly
abstract class InventNamesForLocalClasses(private val allowTopLevelCallables: Boolean) : FileLoweringPass {
@@ -185,8 +186,8 @@ abstract class InventNamesForLocalClasses(private val allowTopLevelCallables: Bo
}
val simpleName = if (sourceName == null || sourceName.isSpecial) {
val count = (anonymousClassesCount[enclosingName] ?: 0) + 1
anonymousClassesCount[enclosingName] = count
val count = (anonymousClassesCount[enclosingName.toUpperCaseAsciiOnly()] ?: 0) + 1
anonymousClassesCount[enclosingName.toUpperCaseAsciiOnly()] = count
count.toString()
} else {
sourceName
+17
View File
@@ -0,0 +1,17 @@
// TARGET_BACKEND: JVM
// WITH_RUNTIME
// FULL_JDK
import java.util.*
fun box(): String {
fun f() = {}
fun F() = {}
val class1 = f().javaClass.name
val class2 = F().javaClass.name
if (class1.uppercase(Locale.ENGLISH) != class2.uppercase(Locale.ENGLISH))
return "OK"
else
return "$class1 $class2"
}
+24
View File
@@ -0,0 +1,24 @@
// TARGET_BACKEND: JVM
// WITH_RUNTIME
// FULL_JDK
import java.util.*
fun box(): String {
fun f(): Any {
fun g() = object {}
return g()
}
fun F(): Any {
fun g() = object {}
return g()
}
val class1 = f().javaClass.name
val class2 = F().javaClass.name
if (class1.uppercase(Locale.ENGLISH) != class2.uppercase(Locale.ENGLISH))
return "OK"
else
return "$class1 $class2"
}
@@ -5482,6 +5482,18 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
runTest("compiler/testData/codegen/box/closures/kt4137.kt");
}
@Test
@TestMetadata("kt47120.kt")
public void testKt47120() throws Exception {
runTest("compiler/testData/codegen/box/closures/kt47120.kt");
}
@Test
@TestMetadata("kt47120a.kt")
public void testKt47120a() throws Exception {
runTest("compiler/testData/codegen/box/closures/kt47120a.kt");
}
@Test
@TestMetadata("kt5589.kt")
public void testKt5589() throws Exception {
@@ -5482,6 +5482,18 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
runTest("compiler/testData/codegen/box/closures/kt4137.kt");
}
@Test
@TestMetadata("kt47120.kt")
public void testKt47120() throws Exception {
runTest("compiler/testData/codegen/box/closures/kt47120.kt");
}
@Test
@TestMetadata("kt47120a.kt")
public void testKt47120a() throws Exception {
runTest("compiler/testData/codegen/box/closures/kt47120a.kt");
}
@Test
@TestMetadata("kt5589.kt")
public void testKt5589() throws Exception {
@@ -4778,6 +4778,16 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
runTest("compiler/testData/codegen/box/closures/kt4137.kt");
}
@TestMetadata("kt47120.kt")
public void testKt47120() throws Exception {
runTest("compiler/testData/codegen/box/closures/kt47120.kt");
}
@TestMetadata("kt47120a.kt")
public void testKt47120a() throws Exception {
runTest("compiler/testData/codegen/box/closures/kt47120a.kt");
}
@TestMetadata("kt5589.kt")
public void testKt5589() throws Exception {
runTest("compiler/testData/codegen/box/closures/kt5589.kt");