[FE] Fix 'getFileClassInfoNoResolve()' for decompiled files
diff --git a/compiler/frontend.common.jvm/src/org/jetbrains/kotlin/fileClasses/JvmFileClassUtil.kt b/compiler/frontend.common.jvm/src/org/jetbrains/kotlin/fileClasses/JvmFileClassUtil.kt index 48ca3be..3e5dcdc 100644 --- a/compiler/frontend.common.jvm/src/org/jetbrains/kotlin/fileClasses/JvmFileClassUtil.kt +++ b/compiler/frontend.common.jvm/src/org/jetbrains/kotlin/fileClasses/JvmFileClassUtil.kt
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.resolve.jvm.JvmClassName +import org.jetbrains.kotlin.serialization.deserialization.builtins.BuiltInSerializerProtocol import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedMemberDescriptor object JvmFileClassUtil { @@ -35,20 +36,29 @@ fun getFacadeClassInternalName(file: KtFile): String = getFileClassInfoNoResolve(file).facadeClassFqName.internalNameWithoutInnerClasses - private fun manglePartName(facadeName: String, fileName: String): String = - "$facadeName$MULTIFILE_PART_NAME_DELIMITER${PackagePartClassUtils.getFilePartShortName(fileName)}" + private fun manglePartName(facadeName: String, packagePartName: String): String = + "$facadeName$MULTIFILE_PART_NAME_DELIMITER$packagePartName" @JvmStatic fun getFileClassInfoNoResolve(file: KtFile): JvmFileClassInfo { val parsedAnnotations = parseJvmNameOnFileNoResolve(file) val packageFqName = parsedAnnotations?.jvmPackageName ?: file.packageFqName + + val virtualFile = file.virtualFile + + val packagePartName = when { + virtualFile?.extension == BuiltInSerializerProtocol.BUILTINS_FILE_EXTENSION -> BuiltInSerializerProtocol.BUILTINS_FILE_EXTENSION + file.isCompiled -> virtualFile?.nameWithoutExtension ?: file.name.substringBeforeLast('.') + else -> PackagePartClassUtils.getFilePartShortName(file.name) + } + return when { parsedAnnotations != null -> { - val simpleName = parsedAnnotations.jvmName ?: PackagePartClassUtils.getFilePartShortName(file.name) + val simpleName = parsedAnnotations.jvmName ?: packagePartName val facadeClassFqName = packageFqName.child(Name.identifier(simpleName)) when { parsedAnnotations.isMultifileClass -> JvmMultifileClassPartInfo( - fileClassFqName = packageFqName.child(Name.identifier(manglePartName(simpleName, file.name))), + fileClassFqName = packageFqName.child(Name.identifier(manglePartName(simpleName, packagePartName))), facadeClassFqName = facadeClassFqName ) @@ -56,7 +66,10 @@ } } - else -> JvmSimpleFileClassInfo(PackagePartClassUtils.getPackagePartFqName(packageFqName, file.name), false) + else -> { + val packagePartFqName = packageFqName.child(Name.identifier(packagePartName)) + JvmSimpleFileClassInfo(packagePartFqName, false) + } } }