diff --git a/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.kt b/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.kt index 209056cc6c8..1cda3afe502 100644 --- a/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.kt +++ b/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.kt @@ -497,31 +497,13 @@ class DescriptorSerializer private constructor( @JvmOverloads fun packageProto( - fragments: Collection, skip: ((DeclarationDescriptor) -> Boolean)? = null + fragments: Collection, + skip: (DeclarationDescriptor) -> Boolean = { false } ): ProtoBuf.Package.Builder { - val builder = ProtoBuf.Package.newBuilder() - - val members = fragments.flatMap { fragment -> - DescriptorUtils.getAllDescriptors(fragment.getMemberScope()) - } - - for (declaration in sort(members)) { - if (skip?.invoke(declaration) == true) continue - - when (declaration) { - is PropertyDescriptor -> builder.addProperty(propertyProto(declaration)) - is FunctionDescriptor -> builder.addFunction(functionProto(declaration)) - } - } - - val typeTableProto = typeTable.serialize() - if (typeTableProto != null) { - builder.typeTable = typeTableProto - } - - extension.serializePackage(builder) - - return builder + val members = fragments + .flatMap { fragment -> DescriptorUtils.getAllDescriptors(fragment.getMemberScope()) } + .filter { !skip(it) } + return packagePartProto(members) } fun packagePartProto(members: Collection): ProtoBuf.Package.Builder { 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 c05394e609a..6c19e69149a 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 @@ -135,7 +135,7 @@ object KotlinJavascriptSerializationUtil { val packageStream = ByteArrayOutputStream() val fragments = packageView.fragments val packageProto = serializer.packageProto(fragments, skip).build() ?: error("Package fragments not serialized: $fragments") - if (packageProto.functionCount > 0 || packageProto.propertyCount > 0) { + if (packageProto.functionCount > 0 || packageProto.propertyCount > 0 || packageProto.typeAliasCount > 0) { packageProto.writeTo(packageStream) writeFun(KotlinJavascriptSerializedResourcePaths.getPackageFilePath(fqName), packageStream.toByteArray()) } diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/MultiModuleTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/MultiModuleTestGenerated.java index 11c5e17509d..6832b41ff33 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/MultiModuleTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/MultiModuleTestGenerated.java @@ -41,6 +41,12 @@ public class MultiModuleTestGenerated extends AbstractMultiModuleTest { doTest(fileName); } + @TestMetadata("typealiases") + public void testTypealiases() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/multiModule/cases/typealiases/"); + doTest(fileName); + } + @TestMetadata("useElementsFromDefaultPackageInAnotherModule") public void testUseElementsFromDefaultPackageInAnotherModule() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/multiModule/cases/useElementsFromDefaultPackageInAnotherModule/"); diff --git a/js/js.translator/testData/multiModule/cases/typealiases/dependencies.txt b/js/js.translator/testData/multiModule/cases/typealiases/dependencies.txt new file mode 100644 index 00000000000..e74a34660da --- /dev/null +++ b/js/js.translator/testData/multiModule/cases/typealiases/dependencies.txt @@ -0,0 +1,2 @@ +lib-> +main->lib \ No newline at end of file diff --git a/js/js.translator/testData/multiModule/cases/typealiases/lib/lib.kt b/js/js.translator/testData/multiModule/cases/typealiases/lib/lib.kt new file mode 100644 index 00000000000..4ef4f9263d5 --- /dev/null +++ b/js/js.translator/testData/multiModule/cases/typealiases/lib/lib.kt @@ -0,0 +1,13 @@ +package lib + +object O { + val x = "O" + + val y = "K" +} + +class C { + typealias B = O +} + +typealias A = O \ No newline at end of file diff --git a/js/js.translator/testData/multiModule/cases/typealiases/main/main.kt b/js/js.translator/testData/multiModule/cases/typealiases/main/main.kt new file mode 100644 index 00000000000..4f04800d1c5 --- /dev/null +++ b/js/js.translator/testData/multiModule/cases/typealiases/main/main.kt @@ -0,0 +1,5 @@ +package foo + +import lib.* + +fun box() = A.x + C.B.y \ No newline at end of file