From 3a29b337a07629e4cb4a56f1adb4b730b729a7ff Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov Date: Fri, 30 Nov 2018 21:25:44 +0300 Subject: [PATCH] Exclude private typealiases from ABI classes --- .../codegen/serialization/JvmSerializerExtension.kt | 4 ++++ .../kotlin/serialization/DescriptorSerializer.kt | 8 +++++--- .../kotlin/serialization/SerializerExtension.kt | 1 + .../kotlin/jvm/abi/CompareJvmAbiTestGenerated.java | 5 +++++ .../compare/privateTypealias/base/typealiases.kt | 13 +++++++++++++ .../compare/privateTypealias/sameAbi/typealiases.kt | 12 ++++++++++++ 6 files changed, 40 insertions(+), 3 deletions(-) create mode 100644 plugins/jvm-abi-gen/testData/compare/privateTypealias/base/typealiases.kt create mode 100644 plugins/jvm-abi-gen/testData/compare/privateTypealias/sameAbi/typealiases.kt diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/serialization/JvmSerializerExtension.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/serialization/JvmSerializerExtension.kt index 163e0e8045b..80805a03c81 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/serialization/JvmSerializerExtension.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/serialization/JvmSerializerExtension.kt @@ -55,6 +55,10 @@ class JvmSerializerExtension(private val bindings: JvmSerializationBindings, sta return classBuilderMode != ClassBuilderMode.ABI || descriptor.visibility != Visibilities.PRIVATE } + override fun shouldSerializeTypeAlias(descriptor: TypeAliasDescriptor): Boolean { + return classBuilderMode != ClassBuilderMode.ABI || descriptor.visibility != Visibilities.PRIVATE + } + override fun serializeClass( descriptor: ClassDescriptor, proto: ProtoBuf.Class.Builder, diff --git a/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.kt b/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.kt index a86b9b8e550..874bbbd8591 100644 --- a/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.kt +++ b/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.kt @@ -116,7 +116,7 @@ class DescriptorSerializer private constructor( val nestedClassifiers = sort(DescriptorUtils.getAllDescriptors(classDescriptor.unsubstitutedInnerClassesScope)) for (descriptor in nestedClassifiers) { if (descriptor is TypeAliasDescriptor) { - builder.addTypeAlias(typeAliasProto(descriptor)) + typeAliasProto(descriptor)?.let { builder.addTypeAlias(it) } } else { val name = getSimpleNameIndex(descriptor.name) @@ -406,7 +406,9 @@ class DescriptorSerializer private constructor( ) } - private fun typeAliasProto(descriptor: TypeAliasDescriptor): ProtoBuf.TypeAlias.Builder { + private fun typeAliasProto(descriptor: TypeAliasDescriptor): ProtoBuf.TypeAlias.Builder? { + if (!extension.shouldSerializeTypeAlias(descriptor)) return null + val builder = ProtoBuf.TypeAlias.newBuilder() val local = createChildSerializer(descriptor) @@ -644,7 +646,7 @@ class DescriptorSerializer private constructor( when (declaration) { is PropertyDescriptor -> propertyProto(declaration)?.let { builder.addProperty(it) } is FunctionDescriptor -> functionProto(declaration)?.let { builder.addFunction(it) } - is TypeAliasDescriptor -> builder.addTypeAlias(typeAliasProto(declaration)) + is TypeAliasDescriptor -> typeAliasProto(declaration)?.let { builder.addTypeAlias(it) } } } diff --git a/compiler/serialization/src/org/jetbrains/kotlin/serialization/SerializerExtension.kt b/compiler/serialization/src/org/jetbrains/kotlin/serialization/SerializerExtension.kt index 0dbe37bd3b7..35b7dc99111 100644 --- a/compiler/serialization/src/org/jetbrains/kotlin/serialization/SerializerExtension.kt +++ b/compiler/serialization/src/org/jetbrains/kotlin/serialization/SerializerExtension.kt @@ -24,6 +24,7 @@ abstract class SerializerExtension { open fun shouldUseNormalizedVisibility(): Boolean = false open fun shouldSerializeFunction(descriptor: FunctionDescriptor): Boolean = true open fun shouldSerializeProperty(descriptor: PropertyDescriptor): Boolean = true + open fun shouldSerializeTypeAlias(descriptor: TypeAliasDescriptor): Boolean = true interface ClassMembersProducer { fun getCallableMembers(classDescriptor: ClassDescriptor): Collection diff --git a/plugins/jvm-abi-gen/test/org/jetbrains/kotlin/jvm/abi/CompareJvmAbiTestGenerated.java b/plugins/jvm-abi-gen/test/org/jetbrains/kotlin/jvm/abi/CompareJvmAbiTestGenerated.java index 9c29e97e678..a1bd7e05286 100644 --- a/plugins/jvm-abi-gen/test/org/jetbrains/kotlin/jvm/abi/CompareJvmAbiTestGenerated.java +++ b/plugins/jvm-abi-gen/test/org/jetbrains/kotlin/jvm/abi/CompareJvmAbiTestGenerated.java @@ -54,6 +54,11 @@ public class CompareJvmAbiTestGenerated extends AbstractCompareJvmAbiTest { runTest("plugins/jvm-abi-gen/testData/compare/privateClass/"); } + @TestMetadata("privateTypealias") + public void testPrivateTypealias() throws Exception { + runTest("plugins/jvm-abi-gen/testData/compare/privateTypealias/"); + } + @TestMetadata("topLevelPrivateMembers") public void testTopLevelPrivateMembers() throws Exception { runTest("plugins/jvm-abi-gen/testData/compare/topLevelPrivateMembers/"); diff --git a/plugins/jvm-abi-gen/testData/compare/privateTypealias/base/typealiases.kt b/plugins/jvm-abi-gen/testData/compare/privateTypealias/base/typealiases.kt new file mode 100644 index 00000000000..56475c42f2f --- /dev/null +++ b/plugins/jvm-abi-gen/testData/compare/privateTypealias/base/typealiases.kt @@ -0,0 +1,13 @@ +package test + +class PublicClass1 +class PublicClass2 + +typealias PublicTypeAlias1 = PublicClass1 +typealias PublicTypeAlias2 = PublicClass1 + +internal typealias InternalTypeAlias1 = PublicClass1 +internal typealias InternalTypeAlias2 = PublicClass1 + +private typealias PrivateTypeAlias1 = PublicClass1 +private typealias PrivateTypeAlias2 = PublicClass1 \ No newline at end of file diff --git a/plugins/jvm-abi-gen/testData/compare/privateTypealias/sameAbi/typealiases.kt b/plugins/jvm-abi-gen/testData/compare/privateTypealias/sameAbi/typealiases.kt new file mode 100644 index 00000000000..b9cf0d124e2 --- /dev/null +++ b/plugins/jvm-abi-gen/testData/compare/privateTypealias/sameAbi/typealiases.kt @@ -0,0 +1,12 @@ +package test + +class PublicClass1 +class PublicClass2 + +typealias PublicTypeAlias1 = PublicClass1 +typealias PublicTypeAlias2 = PublicClass1 + +internal typealias InternalTypeAlias1 = PublicClass1 +internal typealias InternalTypeAlias2 = PublicClass1 + +private typealias PrivateTypeAlias1 = PublicClass2