Make stdlib work with -Xmultifile-package-facades.
Fixed wrong owner mapping in presence of -Xmultifile-package-facades. Fixed backing field mapping issue. Added more tests.
This commit is contained in:
@@ -17,6 +17,7 @@
|
||||
package org.jetbrains.kotlin.fileClasses
|
||||
|
||||
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
|
||||
import org.jetbrains.kotlin.load.kotlin.PackageClassUtils
|
||||
import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
@@ -63,6 +64,14 @@ public object JvmFileClassUtil {
|
||||
public @JvmStatic fun getHiddenPartFqName(file: JetFile, jvmFileClassAnnotations: ParsedJmvFileClassAnnotations): FqName =
|
||||
file.packageFqName.child(Name.identifier(manglePartName(jvmFileClassAnnotations.name, file.name)))
|
||||
|
||||
public @JvmStatic fun getMultifilePackageFacadePartInfo(file: JetFile): JvmFileClassInfo {
|
||||
val packageFqName = file.packageFqName
|
||||
val packageFacadeFqName = PackageClassUtils.getPackageClassFqName(packageFqName)
|
||||
val filePartName = manglePartName(packageFacadeFqName.shortName().asString(), file.name)
|
||||
val filePartFqName = packageFqName.child(Name.identifier(filePartName))
|
||||
return JvmMultifileClassPartInfo(filePartFqName, packageFacadeFqName)
|
||||
}
|
||||
|
||||
public @JvmStatic fun manglePartName(facadeName: String, fileName: String): String =
|
||||
"${facadeName}__${PackagePartClassUtils.getFilePartShortName(fileName)}"
|
||||
|
||||
|
||||
+20
-20
@@ -23,28 +23,28 @@ import org.jetbrains.org.objectweb.asm.Type
|
||||
|
||||
public interface JvmFileClassesProvider {
|
||||
public fun getFileClassInfo(file: JetFile): JvmFileClassInfo
|
||||
|
||||
public fun getFileClassFqName(file: JetFile): FqName =
|
||||
getFileClassInfo(file).fileClassFqName
|
||||
|
||||
public fun getFileClassInternalName(file: JetFile): String =
|
||||
getFileClassFqName(file).getInternalName()
|
||||
|
||||
public fun getFileClassType(file: JetFile): Type =
|
||||
getFileClassFqName(file).getClassType()
|
||||
|
||||
public fun getFacadeClassFqName(file: JetFile): FqName =
|
||||
getFileClassInfo(file).facadeClassFqName
|
||||
|
||||
public fun getFacadeClassInternalName(file: JetFile): String =
|
||||
getFacadeClassFqName(file).getInternalName()
|
||||
|
||||
public fun getFacadeClassType(file: JetFile): Type =
|
||||
getFacadeClassFqName(file).getClassType()
|
||||
}
|
||||
|
||||
private fun FqName.getInternalName(): String =
|
||||
public fun FqName.getInternalName(): String =
|
||||
JvmClassName.byFqNameWithoutInnerClasses(this).internalName
|
||||
|
||||
private fun FqName.getClassType(): Type =
|
||||
public fun FqName.getClassType(): Type =
|
||||
Type.getObjectType(getInternalName())
|
||||
|
||||
public fun JvmFileClassesProvider.getFileClassFqName(file: JetFile): FqName =
|
||||
getFileClassInfo(file).fileClassFqName
|
||||
|
||||
public fun JvmFileClassesProvider.getFileClassInternalName(file: JetFile): String =
|
||||
getFileClassFqName(file).getInternalName()
|
||||
|
||||
public fun JvmFileClassesProvider.getFileClassType(file: JetFile): Type =
|
||||
getFileClassFqName(file).getClassType()
|
||||
|
||||
public fun JvmFileClassesProvider.getFacadeClassFqName(file: JetFile): FqName =
|
||||
getFileClassInfo(file).facadeClassFqName
|
||||
|
||||
public fun JvmFileClassesProvider.getFacadeClassInternalName(file: JetFile): String =
|
||||
getFacadeClassFqName(file).getInternalName()
|
||||
|
||||
public fun JvmFileClassesProvider.getFacadeClassType(file: JetFile): Type =
|
||||
getFacadeClassFqName(file).getClassType()
|
||||
@@ -82,9 +82,6 @@ public object PackagePartClassUtils {
|
||||
public @JvmStatic fun fileHasTopLevelCallables(file: JetFile): Boolean =
|
||||
file.declarations.any { it is JetProperty || it is JetNamedFunction }
|
||||
|
||||
public @JvmStatic fun getFilesForPart(partFqName: FqName, files: Collection<JetFile>): List<JetFile> =
|
||||
getFilesWithCallables(files).filter { getPackagePartFqName(it) == partFqName }
|
||||
|
||||
public @JvmStatic fun getFilePartShortName(fileName: String): String =
|
||||
getPartClassName(FileUtil.getNameWithoutExtension(fileName))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user