AA: use simple name of local type as JVM internal name

Otherwise, e.g., if a local type is within an anonymous object, full
class id will include that anonymous object too, resulting in invalid
type signature for PsiType.

^KT-59533 Fixed
diff --git a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/psiTypeProvider/Fe10IdeNormalAnalysisSourceModuleAnalysisApiPsiTypeProviderTestGenerated.java b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/psiTypeProvider/Fe10IdeNormalAnalysisSourceModuleAnalysisApiPsiTypeProviderTestGenerated.java
index 8ab66d5..a64a659 100644
--- a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/psiTypeProvider/Fe10IdeNormalAnalysisSourceModuleAnalysisApiPsiTypeProviderTestGenerated.java
+++ b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/psiTypeProvider/Fe10IdeNormalAnalysisSourceModuleAnalysisApiPsiTypeProviderTestGenerated.java
@@ -77,6 +77,12 @@
     }
 
     @Test
+    @TestMetadata("localClass_exposedAsMemberInAnonymousObject.kt")
+    public void testLocalClass_exposedAsMemberInAnonymousObject() throws Exception {
+        runTest("analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/localClass_exposedAsMemberInAnonymousObject.kt");
+    }
+
+    @Test
     @TestMetadata("localClass_exposedAsReturnValue.kt")
     public void testLocalClass_exposedAsReturnValue() throws Exception {
         runTest("analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/localClass_exposedAsReturnValue.kt");
diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/psiTypeProvider/FirIdeDependentAnalysisSourceModuleAnalysisApiPsiTypeProviderTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/psiTypeProvider/FirIdeDependentAnalysisSourceModuleAnalysisApiPsiTypeProviderTestGenerated.java
index 36900be..eefed97 100644
--- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/psiTypeProvider/FirIdeDependentAnalysisSourceModuleAnalysisApiPsiTypeProviderTestGenerated.java
+++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/psiTypeProvider/FirIdeDependentAnalysisSourceModuleAnalysisApiPsiTypeProviderTestGenerated.java
@@ -77,6 +77,12 @@
     }
 
     @Test
+    @TestMetadata("localClass_exposedAsMemberInAnonymousObject.kt")
+    public void testLocalClass_exposedAsMemberInAnonymousObject() throws Exception {
+        runTest("analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/localClass_exposedAsMemberInAnonymousObject.kt");
+    }
+
+    @Test
     @TestMetadata("localClass_exposedAsReturnValue.kt")
     public void testLocalClass_exposedAsReturnValue() throws Exception {
         runTest("analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/localClass_exposedAsReturnValue.kt");
diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/psiTypeProvider/FirIdeNormalAnalysisSourceModuleAnalysisApiPsiTypeProviderTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/psiTypeProvider/FirIdeNormalAnalysisSourceModuleAnalysisApiPsiTypeProviderTestGenerated.java
index 4e27c4f..ff4a35e 100644
--- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/psiTypeProvider/FirIdeNormalAnalysisSourceModuleAnalysisApiPsiTypeProviderTestGenerated.java
+++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/psiTypeProvider/FirIdeNormalAnalysisSourceModuleAnalysisApiPsiTypeProviderTestGenerated.java
@@ -77,6 +77,12 @@
     }
 
     @Test
+    @TestMetadata("localClass_exposedAsMemberInAnonymousObject.kt")
+    public void testLocalClass_exposedAsMemberInAnonymousObject() throws Exception {
+        runTest("analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/localClass_exposedAsMemberInAnonymousObject.kt");
+    }
+
+    @Test
     @TestMetadata("localClass_exposedAsReturnValue.kt")
     public void testLocalClass_exposedAsReturnValue() throws Exception {
         runTest("analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/localClass_exposedAsReturnValue.kt");
diff --git a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/psiTypeProvider/FirStandaloneNormalAnalysisSourceModuleAnalysisApiPsiTypeProviderTestGenerated.java b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/psiTypeProvider/FirStandaloneNormalAnalysisSourceModuleAnalysisApiPsiTypeProviderTestGenerated.java
index 7ffbbb8..b9128ff 100644
--- a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/psiTypeProvider/FirStandaloneNormalAnalysisSourceModuleAnalysisApiPsiTypeProviderTestGenerated.java
+++ b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/psiTypeProvider/FirStandaloneNormalAnalysisSourceModuleAnalysisApiPsiTypeProviderTestGenerated.java
@@ -77,6 +77,12 @@
     }
 
     @Test
+    @TestMetadata("localClass_exposedAsMemberInAnonymousObject.kt")
+    public void testLocalClass_exposedAsMemberInAnonymousObject() throws Exception {
+        runTest("analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/localClass_exposedAsMemberInAnonymousObject.kt");
+    }
+
+    @Test
     @TestMetadata("localClass_exposedAsReturnValue.kt")
     public void testLocalClass_exposedAsReturnValue() throws Exception {
         runTest("analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/localClass_exposedAsReturnValue.kt");
diff --git a/analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/localClass_exposedAsMemberInAnonymousObject.kt b/analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/localClass_exposedAsMemberInAnonymousObject.kt
new file mode 100644
index 0000000..85254c7
--- /dev/null
+++ b/analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/localClass_exposedAsMemberInAnonymousObject.kt
@@ -0,0 +1,25 @@
+// WITH_STDLIB
+
+interface Indexer {
+    fun indexing()
+}
+
+interface MyBuilder
+
+fun build(builder: MyBuilder) {
+}
+
+fun test(): Indexer {
+    return object : Indexer {
+        override fun indexing() {
+            class TagData(val name: String) {
+            }
+
+            fun foo() {
+                build(object : MyBuilder {
+                    val tags<caret> = mutableListOf<TagData>()
+                })
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/localClass_exposedAsMemberInAnonymousObject.txt b/analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/localClass_exposedAsMemberInAnonymousObject.txt
new file mode 100644
index 0000000..5acefee
--- /dev/null
+++ b/analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/localClass_exposedAsMemberInAnonymousObject.txt
@@ -0,0 +1,2 @@
+KtType: kotlin.collections.MutableList<TagData>
+PsiType: PsiType:List<TagData>
diff --git a/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmTypeMapper.kt b/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmTypeMapper.kt
index f7d0cea..fe58c42 100644
--- a/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmTypeMapper.kt
+++ b/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmTypeMapper.kt
@@ -82,7 +82,9 @@
 
         override fun getClassInternalName(typeConstructor: TypeConstructorMarker): String {
             require(typeConstructor is ConeClassLikeLookupTag)
-            return typeConstructor.classId.asString().replace(".", "$").replace("/", ".")
+            val classId = typeConstructor.classId
+            val name = if (classId.isLocal) safeShortClassName(classId) else classId.asString()
+            return name.replace(".", "$").replace("/", ".")
         }
 
         override fun getScriptInternalName(typeConstructor: TypeConstructorMarker): String =
@@ -230,7 +232,11 @@
         val result = runUnless(classId.isLocal) {
             classId.asSingleFqName().toUnsafe().let { JavaToKotlinClassMap.mapKotlinToJava(it)?.shortClassName?.asString() }
         }
-        return result ?: SpecialNames.safeIdentifier(classId.shortClassName).identifier
+        return result ?: safeShortClassName(classId)
+    }
+
+    private fun safeShortClassName(classId: ClassId): String {
+        return SpecialNames.safeIdentifier(classId.shortClassName).identifier
     }
 }
 
diff --git a/compiler/testData/asJava/lightClasses/lightClassByPsi/localClassDerived.fir.java b/compiler/testData/asJava/lightClasses/lightClassByPsi/localClassDerived.fir.java
deleted file mode 100644
index 476fc77..0000000
--- a/compiler/testData/asJava/lightClasses/lightClassByPsi/localClassDerived.fir.java
+++ /dev/null
@@ -1,13 +0,0 @@
-public final class Boo /* Boo*/ {
-  public  Boo();//  .ctor()
-
-  public final void fooBar();//  fooBar()
-}
-
-public static final class LocalClassBase /* null*/ {
-  public  LocalClassBase();//  .ctor()
-}
-
-public static final class LocalClassDerived /* null*/ extends Boo.LocalClassBase {
-  public  LocalClassDerived();//  .ctor()
-}