@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor
1414import org.jetbrains.kotlin.descriptors.ModuleDescriptor
1515import org.jetbrains.kotlin.descriptors.SourceFile
1616import org.jetbrains.kotlin.resolve.scopes.MemberScope
17+ import kotlinx.coroutines.*
1718
1819abstract class ObjCExportHeaderGenerator @InternalKotlinNativeApi constructor(
1920 val moduleDescriptors : List <ModuleDescriptor >,
@@ -117,32 +118,42 @@ abstract class ObjCExportHeaderGenerator @InternalKotlinNativeApi constructor(
117118 .flatMap { it.getPackageFragments() }
118119 .makePackagesOrderStable()
119120
120- packageFragments.forEach { packageFragment ->
121- packageFragment.getMemberScope().getContributedDescriptors()
122- .asSequence()
123- .filterIsInstance<CallableMemberDescriptor >()
124- .filter { mapper.shouldBeExposed(it) }
125- .forEach {
126- val classDescriptor = getClassIfCategory(it)
127- if (classDescriptor == null ) {
128- topLevel.getOrPut(it.findSourceFile(), { mutableListOf () }) + = it
129- } else {
130- // If a class is hidden from Objective-C API then it is meaningless
131- // to export its extensions.
132- if (! classDescriptor.isHiddenFromObjC()) {
133- extensions.getOrPut(classDescriptor, { mutableListOf () }) + = it
121+ val classesToTranslate = mutableListOf<MutableList <ClassDescriptor >>()
122+
123+ runBlocking {
124+ packageFragments.forEach { packageFragment ->
125+ val memberScope = packageFragment.getMemberScope()
126+
127+ // Keep Order
128+ val inOrderCollector = mutableListOf<ClassDescriptor >()
129+ classesToTranslate.add(inOrderCollector)
130+
131+ launch(Dispatchers .Default ) {
132+ memberScope.getContributedDescriptors()
133+ .asSequence()
134+ .filterIsInstance<CallableMemberDescriptor >()
135+ .filter { mapper.shouldBeExposed(it) }
136+ .forEach {
137+ val classDescriptor = getClassIfCategory(it)
138+ if (classDescriptor == null ) {
139+ topLevel.getOrPut(it.findSourceFile(), { mutableListOf () }) + = it
140+ } else {
141+ // If a class is hidden from Objective-C API then it is meaningless
142+ // to export its extensions.
143+ if (! classDescriptor.isHiddenFromObjC()) {
144+ extensions.getOrPut(classDescriptor, { mutableListOf () }) + = it
145+ }
146+ }
134147 }
135- }
136148 }
137- }
138-
139- val classesToTranslate = mutableListOf<ClassDescriptor >()
140149
141- packageFragments.forEach { packageFragment ->
142- packageFragment.getMemberScope().collectClasses(classesToTranslate)
150+ launch(Dispatchers .Default ) {
151+ memberScope.collectClasses(inOrderCollector)
152+ }
153+ }
143154 }
144155
145- classesToTranslate.makeClassesOrderStable().forEach { translateClass(it) }
156+ classesToTranslate.flatten(). makeClassesOrderStable().forEach { translateClass(it) }
146157
147158 extensions.makeCategoriesOrderStable().forEach { (classDescriptor, declarations) ->
148159 generateExtensions(classDescriptor, declarations)
0 commit comments