diff --git a/build.xml b/build.xml
index 0a8c4c4b5f7..e3a043da7ea 100644
--- a/build.xml
+++ b/build.xml
@@ -423,6 +423,14 @@
+
+
+
+
+
+
+
+
diff --git a/compiler/builtins-serializer/src/org/jetbrains/kotlin/serialization/builtins/BuiltInsSerializer.kt b/compiler/builtins-serializer/src/org/jetbrains/kotlin/serialization/builtins/BuiltInsSerializer.kt
index 5e28b5c9973..2154266688c 100644
--- a/compiler/builtins-serializer/src/org/jetbrains/kotlin/serialization/builtins/BuiltInsSerializer.kt
+++ b/compiler/builtins-serializer/src/org/jetbrains/kotlin/serialization/builtins/BuiltInsSerializer.kt
@@ -128,20 +128,25 @@ public class BuiltInsSerializer(private val dependOnOldBuiltIns: Boolean) {
val fragments = module.getPackageFragmentProvider().getPackageFragments(fqName)
val packageProto = serializer.packageProto(fragments).build() ?: error("Package fragments not serialized: $fragments")
packageProto.writeTo(packageStream)
- write(destDir, BuiltInsSerializationUtil.getPackageFilePath(fqName), packageStream)
+ write(destDir, BuiltInsSerializationUtil.getPackageFilePath(fqName), packageStream,
+ BuiltInsSerializationUtil.FallbackPaths.getPackageFilePath(fqName))
val nameStream = ByteArrayOutputStream()
val strings = serializer.getStringTable()
SerializationUtil.serializeStringTable(nameStream, strings.serializeSimpleNames(), strings.serializeQualifiedNames())
- write(destDir, BuiltInsSerializationUtil.getStringTableFilePath(fqName), nameStream)
+ write(destDir, BuiltInsSerializationUtil.getStringTableFilePath(fqName), nameStream,
+ BuiltInsSerializationUtil.FallbackPaths.getStringTableFilePath(fqName))
}
- private fun write(destDir: File, fileName: String, stream: ByteArrayOutputStream) {
+ internal /* KT-5786 */ fun write(destDir: File, fileName: String, stream: ByteArrayOutputStream, legacyFileName: String? = null) {
totalSize += stream.size()
totalFiles++
- val file = File(destDir, fileName)
- file.getParentFile()?.mkdirs()
- file.writeBytes(stream.toByteArray())
+ File(destDir, fileName).getParentFile().mkdirs()
+ File(destDir, fileName).writeBytes(stream.toByteArray())
+
+ legacyFileName?.let { fileName ->
+ File(destDir, fileName).writeBytes(stream.toByteArray())
+ }
}
private fun serializeClass(
diff --git a/compiler/builtins-serializer/src/org/jetbrains/kotlin/serialization/builtins/run.kt b/compiler/builtins-serializer/src/org/jetbrains/kotlin/serialization/builtins/run.kt
index f5804bebc2c..30ef62bad92 100644
--- a/compiler/builtins-serializer/src/org/jetbrains/kotlin/serialization/builtins/run.kt
+++ b/compiler/builtins-serializer/src/org/jetbrains/kotlin/serialization/builtins/run.kt
@@ -29,7 +29,7 @@ Usage: ... ()+
Analyzes Kotlin sources found in the given source directories and serializes
found top-level declarations to (files such as
-.kotlin_string_table, .kotlin_package, *.kotlin_class)"""
+*.kotlin_string_table, *.kotlin_package, *.kotlin_class)"""
)
return
}
diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/BuiltInsSerializationUtil.kt b/core/descriptors/src/org/jetbrains/kotlin/builtins/BuiltInsSerializationUtil.kt
index a3480c4e747..a709eb7d4c0 100644
--- a/core/descriptors/src/org/jetbrains/kotlin/builtins/BuiltInsSerializationUtil.kt
+++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/BuiltInsSerializationUtil.kt
@@ -20,7 +20,6 @@ import com.google.protobuf.ExtensionRegistryLite
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.serialization.builtins.BuiltInsProtoBuf
-import kotlin.platform.platformStatic
public object BuiltInsSerializationUtil {
public val EXTENSION_REGISTRY: ExtensionRegistryLite
@@ -31,20 +30,33 @@ public object BuiltInsSerializationUtil {
}
private val CLASS_METADATA_FILE_EXTENSION = "kotlin_class"
- private val PACKAGE_FILE_NAME = ".kotlin_package"
- private val STRING_TABLE_FILE_NAME = ".kotlin_string_table"
+ private val PACKAGE_FILE_EXTENSION = "kotlin_package"
+ private val STRING_TABLE_FILE_EXTENSION = "kotlin_string_table"
- platformStatic public fun getClassMetadataPath(classId: ClassId): String {
+ // TODO: remove this after M12
+ public object FallbackPaths {
+ public fun getPackageFilePath(fqName: FqName): String =
+ packageFqNameToPath(fqName) + "/.kotlin_package"
+
+ public fun getStringTableFilePath(fqName: FqName): String =
+ packageFqNameToPath(fqName) + "/.kotlin_string_table"
+ }
+
+ public fun getClassMetadataPath(classId: ClassId): String {
return packageFqNameToPath(classId.getPackageFqName()) + "/" + classId.getRelativeClassName().asString() +
"." + CLASS_METADATA_FILE_EXTENSION
}
- platformStatic public fun getPackageFilePath(fqName: FqName): String =
- packageFqNameToPath(fqName) + "/" + PACKAGE_FILE_NAME
+ public fun getPackageFilePath(fqName: FqName): String =
+ packageFqNameToPath(fqName) + "/" + shortName(fqName) + "." + PACKAGE_FILE_EXTENSION
+
+ public fun getStringTableFilePath(fqName: FqName): String =
+ packageFqNameToPath(fqName) + "/" + shortName(fqName) + "." + STRING_TABLE_FILE_EXTENSION
- platformStatic public fun getStringTableFilePath(fqName: FqName): String =
- packageFqNameToPath(fqName) + "/" + STRING_TABLE_FILE_NAME
private fun packageFqNameToPath(fqName: FqName): String =
fqName.asString().replace('.', '/')
+
+ private fun shortName(fqName: FqName): String =
+ if (fqName.isRoot()) "default-package" else fqName.shortName().asString()
}
diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/BuiltinsPackageFragment.kt b/core/descriptors/src/org/jetbrains/kotlin/builtins/BuiltinsPackageFragment.kt
index 0eb6093b304..2f679142c34 100644
--- a/core/descriptors/src/org/jetbrains/kotlin/builtins/BuiltinsPackageFragment.kt
+++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/BuiltinsPackageFragment.kt
@@ -36,7 +36,10 @@ public class BuiltinsPackageFragment(
private val loadResource: (path: String) -> InputStream?
) : PackageFragmentDescriptorImpl(module, fqName) {
- val nameResolver = NameResolver.read(loadResourceSure(BuiltInsSerializationUtil.getStringTableFilePath(fqName)))
+ val nameResolver = NameResolver.read(
+ loadResource(BuiltInsSerializationUtil.getStringTableFilePath(fqName))
+ ?: loadResourceSure(BuiltInsSerializationUtil.FallbackPaths.getStringTableFilePath(fqName))
+ )
private var components: DeserializationComponents by Delegates.notNull()
@@ -46,7 +49,8 @@ public class BuiltinsPackageFragment(
}
private val memberScope = storageManager.createLazyValue {
- val stream = loadResourceSure(BuiltInsSerializationUtil.getPackageFilePath(fqName))
+ val stream = loadResource(BuiltInsSerializationUtil.getPackageFilePath(fqName))
+ ?: loadResourceSure(BuiltInsSerializationUtil.FallbackPaths.getPackageFilePath(fqName))
val proto = ProtoBuf.Package.parseFrom(stream, BuiltInsSerializationUtil.EXTENSION_REGISTRY)
DeserializedPackageMemberScope(this, proto, nameResolver, components, classNames = {
proto.getExtension(BuiltInsProtoBuf.className)?.map { id -> nameResolver.getName(id) } ?: listOf()
diff --git a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializationUtil.kt b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializationUtil.kt
index d29de8f57f1..d57452142f2 100644
--- a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializationUtil.kt
+++ b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializationUtil.kt
@@ -117,12 +117,13 @@ public object KotlinJavascriptSerializationUtil {
val fragments = module.getPackageFragmentProvider().getPackageFragments(fqName)
val packageProto = serializer.packageProto(fragments, skip).build() ?: error("Package fragments not serialized: $fragments")
packageProto.writeTo(packageStream)
- writeFun(BuiltInsSerializationUtil.getPackageFilePath(fqName), packageStream)
+ // TODO: don't use fallback paths here
+ writeFun(BuiltInsSerializationUtil.FallbackPaths.getPackageFilePath(fqName), packageStream)
val nameStream = ByteArrayOutputStream()
val strings = serializer.getStringTable()
SerializationUtil.serializeStringTable(nameStream, strings.serializeSimpleNames(), strings.serializeQualifiedNames())
- writeFun(BuiltInsSerializationUtil.getStringTableFilePath(fqName), nameStream)
+ writeFun(BuiltInsSerializationUtil.FallbackPaths.getStringTableFilePath(fqName), nameStream)
}
fun getFileName(classDescriptor: ClassDescriptor): String {