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
This commit is contained in:
committed by
Ilya Kirillov
parent
2d178e5273
commit
a93bc60655
+6
@@ -76,6 +76,12 @@ public class Fe10IdeNormalAnalysisSourceModuleAnalysisApiPsiTypeProviderTestGene
|
|||||||
runTest("analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/errorTypeInNestedTypeArgument.kt");
|
runTest("analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/errorTypeInNestedTypeArgument.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("localClass_exposedAsMemberInAnonymousObject.kt")
|
||||||
|
public void testLocalClass_exposedAsMemberInAnonymousObject() throws Exception {
|
||||||
|
runTest("analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/localClass_exposedAsMemberInAnonymousObject.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("localClass_exposedAsReturnValue.kt")
|
@TestMetadata("localClass_exposedAsReturnValue.kt")
|
||||||
public void testLocalClass_exposedAsReturnValue() throws Exception {
|
public void testLocalClass_exposedAsReturnValue() throws Exception {
|
||||||
|
|||||||
+6
@@ -76,6 +76,12 @@ public class FirIdeDependentAnalysisSourceModuleAnalysisApiPsiTypeProviderTestGe
|
|||||||
runTest("analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/errorTypeInNestedTypeArgument.kt");
|
runTest("analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/errorTypeInNestedTypeArgument.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("localClass_exposedAsMemberInAnonymousObject.kt")
|
||||||
|
public void testLocalClass_exposedAsMemberInAnonymousObject() throws Exception {
|
||||||
|
runTest("analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/localClass_exposedAsMemberInAnonymousObject.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("localClass_exposedAsReturnValue.kt")
|
@TestMetadata("localClass_exposedAsReturnValue.kt")
|
||||||
public void testLocalClass_exposedAsReturnValue() throws Exception {
|
public void testLocalClass_exposedAsReturnValue() throws Exception {
|
||||||
|
|||||||
+6
@@ -76,6 +76,12 @@ public class FirIdeNormalAnalysisSourceModuleAnalysisApiPsiTypeProviderTestGener
|
|||||||
runTest("analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/errorTypeInNestedTypeArgument.kt");
|
runTest("analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/errorTypeInNestedTypeArgument.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("localClass_exposedAsMemberInAnonymousObject.kt")
|
||||||
|
public void testLocalClass_exposedAsMemberInAnonymousObject() throws Exception {
|
||||||
|
runTest("analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/localClass_exposedAsMemberInAnonymousObject.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("localClass_exposedAsReturnValue.kt")
|
@TestMetadata("localClass_exposedAsReturnValue.kt")
|
||||||
public void testLocalClass_exposedAsReturnValue() throws Exception {
|
public void testLocalClass_exposedAsReturnValue() throws Exception {
|
||||||
|
|||||||
+6
@@ -76,6 +76,12 @@ public class FirStandaloneNormalAnalysisSourceModuleAnalysisApiPsiTypeProviderTe
|
|||||||
runTest("analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/errorTypeInNestedTypeArgument.kt");
|
runTest("analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/errorTypeInNestedTypeArgument.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("localClass_exposedAsMemberInAnonymousObject.kt")
|
||||||
|
public void testLocalClass_exposedAsMemberInAnonymousObject() throws Exception {
|
||||||
|
runTest("analysis/analysis-api/testData/components/psiTypeProvider/psiType/forDeclaration/localClass_exposedAsMemberInAnonymousObject.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("localClass_exposedAsReturnValue.kt")
|
@TestMetadata("localClass_exposedAsReturnValue.kt")
|
||||||
public void testLocalClass_exposedAsReturnValue() throws Exception {
|
public void testLocalClass_exposedAsReturnValue() throws Exception {
|
||||||
|
|||||||
+25
@@ -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>()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+2
@@ -0,0 +1,2 @@
|
|||||||
|
KtType: kotlin.collections.MutableList<TagData>
|
||||||
|
PsiType: PsiType:List<TagData>
|
||||||
+8
-2
@@ -82,7 +82,9 @@ class FirJvmTypeMapper(val session: FirSession) : FirSessionComponent {
|
|||||||
|
|
||||||
override fun getClassInternalName(typeConstructor: TypeConstructorMarker): String {
|
override fun getClassInternalName(typeConstructor: TypeConstructorMarker): String {
|
||||||
require(typeConstructor is ConeClassLikeLookupTag)
|
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 =
|
override fun getScriptInternalName(typeConstructor: TypeConstructorMarker): String =
|
||||||
@@ -230,7 +232,11 @@ class FirJvmTypeMapper(val session: FirSession) : FirSessionComponent {
|
|||||||
val result = runUnless(classId.isLocal) {
|
val result = runUnless(classId.isLocal) {
|
||||||
classId.asSingleFqName().toUnsafe().let { JavaToKotlinClassMap.mapKotlinToJava(it)?.shortClassName?.asString() }
|
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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
-13
@@ -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()
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user