From 22329c7124c6b814e541e8050787e0b988af5d76 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Fri, 27 May 2022 23:19:15 +0200 Subject: [PATCH] Do not sort fake overrides in DescriptorSerializer Sorting invokes descriptor renderer, so the fewer descriptors we are sorting, the better. This helps to save a few percent of compilation time in a synthetic project from KT-52326. --- .../kotlin/incremental/JavaClassesSerializerExtension.kt | 6 ++++-- .../jetbrains/kotlin/serialization/DescriptorSerializer.kt | 3 +-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/build-common/src/org/jetbrains/kotlin/incremental/JavaClassesSerializerExtension.kt b/build-common/src/org/jetbrains/kotlin/incremental/JavaClassesSerializerExtension.kt index df47a0a0e52..4c380eb4752 100644 --- a/build-common/src/org/jetbrains/kotlin/incremental/JavaClassesSerializerExtension.kt +++ b/build-common/src/org/jetbrains/kotlin/incremental/JavaClassesSerializerExtension.kt @@ -99,6 +99,8 @@ class JavaClassesSerializerExtension : KotlinSerializerExtensionBase(BuiltInSeri } private fun MemberScope.getSortedCallableDescriptors(): Collection = - DescriptorUtils.getAllDescriptors(this).filterIsInstance() - .let { DescriptorSerializer.sort(it) } + DescriptorUtils.getAllDescriptors(this) + .filterIsInstance() + .filter { it.kind != CallableMemberDescriptor.Kind.FAKE_OVERRIDE } + .let { DescriptorSerializer.sort(it) } } diff --git a/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.kt b/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.kt index 8837c8915ff..ace996592a7 100644 --- a/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.kt +++ b/compiler/serialization/src/org/jetbrains/kotlin/serialization/DescriptorSerializer.kt @@ -135,11 +135,10 @@ class DescriptorSerializer private constructor( ?: sort( DescriptorUtils.getAllDescriptors(classDescriptor.defaultType.memberScope) .filterIsInstance() + .filter { it.kind != CallableMemberDescriptor.Kind.FAKE_OVERRIDE } ) for (descriptor in callableMembers) { - if (descriptor.kind == CallableMemberDescriptor.Kind.FAKE_OVERRIDE) continue - when (descriptor) { is PropertyDescriptor -> propertyProto(descriptor)?.let { builder.addProperty(it) } is FunctionDescriptor -> functionProto(descriptor)?.let { builder.addFunction(it) }