[Gradle][Native] Setup refinesPaths as expectedBy module dependencies

Previously, dependsOn dependencies were just passed as friend modules
to shared native compilations.

^KT-55071 Verification Pending
This commit is contained in:
Sebastian Sellmair
2022-11-23 10:16:17 +01:00
committed by Space Team
parent 0be789e9e3
commit 752ff04245
14 changed files with 99 additions and 78 deletions
@@ -1,12 +1,11 @@
package org.jetbrains.kotlin.serialization.konan
import org.jetbrains.kotlin.library.resolver.KotlinLibraryResolveResult
import org.jetbrains.kotlin.backend.common.serialization.metadata.KlibMetadataModuleDescriptorFactory
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
import org.jetbrains.kotlin.konan.file.File
import org.jetbrains.kotlin.library.KotlinLibrary
import org.jetbrains.kotlin.library.resolver.KotlinLibraryResolveResult
import org.jetbrains.kotlin.storage.StorageManager
interface KlibResolvedModuleDescriptorsFactory {
@@ -31,6 +30,7 @@ interface KlibResolvedModuleDescriptorsFactory {
builtIns: KotlinBuiltIns?,
languageVersionSettings: LanguageVersionSettings,
friendModuleFiles: Set<File>,
refinesModuleFiles: Set<File>,
includedLibraryFiles: Set<File>,
additionalDependencyModules: Iterable<ModuleDescriptorImpl>,
isForMetadataCompilation: Boolean,
@@ -51,5 +51,6 @@ class KotlinResolvedModuleDescriptors(
*/
val forwardDeclarationsModule: ModuleDescriptorImpl,
val friendModules: Set<ModuleDescriptorImpl>
val friendModules: Set<ModuleDescriptorImpl>,
val refinesModules: Set<ModuleDescriptorImpl>
)
@@ -1,6 +1,5 @@
package org.jetbrains.kotlin.serialization.konan.impl
import org.jetbrains.kotlin.library.resolver.KotlinLibraryResolveResult
import org.jetbrains.kotlin.backend.common.serialization.metadata.KlibMetadataModuleDescriptorFactory
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.config.LanguageVersionSettings
@@ -13,9 +12,9 @@ import org.jetbrains.kotlin.descriptors.konan.SyntheticModulesOrigin
import org.jetbrains.kotlin.incremental.components.LookupLocation
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
import org.jetbrains.kotlin.konan.file.File
import org.jetbrains.kotlin.util.profile
import org.jetbrains.kotlin.library.KotlinLibrary
import org.jetbrains.kotlin.library.metadata.PackageAccessHandler
import org.jetbrains.kotlin.library.resolver.KotlinLibraryResolveResult
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns
@@ -26,12 +25,13 @@ import org.jetbrains.kotlin.serialization.konan.KotlinResolvedModuleDescriptors
import org.jetbrains.kotlin.storage.LockBasedStorageManager
import org.jetbrains.kotlin.storage.StorageManager
import org.jetbrains.kotlin.storage.getValue
import org.jetbrains.kotlin.util.profile
import org.jetbrains.kotlin.utils.Printer
// TODO: eliminate Native specifics.
class KlibResolvedModuleDescriptorsFactoryImpl(
override val moduleDescriptorFactory: KlibMetadataModuleDescriptorFactory
): KlibResolvedModuleDescriptorsFactory {
) : KlibResolvedModuleDescriptorsFactory {
override fun createResolved(
resolvedLibraries: KotlinLibraryResolveResult,
@@ -39,6 +39,7 @@ class KlibResolvedModuleDescriptorsFactoryImpl(
builtIns: KotlinBuiltIns?,
languageVersionSettings: LanguageVersionSettings,
friendModuleFiles: Set<File>,
refinesModuleFiles: Set<File>,
includedLibraryFiles: Set<File>,
additionalDependencyModules: Iterable<ModuleDescriptorImpl>,
isForMetadataCompilation: Boolean,
@@ -50,6 +51,7 @@ class KlibResolvedModuleDescriptorsFactoryImpl(
var builtIns = builtIns
val friendModuleDescriptors = mutableSetOf<ModuleDescriptorImpl>()
val refinesModuleDescriptors = mutableSetOf<ModuleDescriptorImpl>()
val includedLibraryDescriptors = mutableSetOf<ModuleDescriptorImpl>()
// Build module descriptors.
@@ -63,6 +65,8 @@ class KlibResolvedModuleDescriptorsFactoryImpl(
builtIns = moduleDescriptor.builtIns
moduleDescriptors.add(moduleDescriptor)
if (refinesModuleFiles.contains(library.libraryFile))
refinesModuleDescriptors.add(moduleDescriptor)
if (friendModuleFiles.contains(library.libraryFile))
friendModuleDescriptors.add(moduleDescriptor)
if (includedLibraryFiles.contains(library.libraryFile))
@@ -88,8 +92,11 @@ class KlibResolvedModuleDescriptorsFactoryImpl(
// Set inter-dependencies between module descriptors, add forwarding declarations module.
for (module in moduleDescriptors) {
val friends = additionalDependencyModules.toMutableSet()
if (module in includedLibraryDescriptors)
if (module in includedLibraryDescriptors) {
friends.addAll(friendModuleDescriptors)
friends.addAll(refinesModuleDescriptors)
}
module.setDependencies(
// Yes, just to all of them.
moduleDescriptors + additionalDependencyModules + forwardDeclarationsModule,
@@ -97,7 +104,12 @@ class KlibResolvedModuleDescriptorsFactoryImpl(
)
}
return KotlinResolvedModuleDescriptors(moduleDescriptors, forwardDeclarationsModule, friendModuleDescriptors)
return KotlinResolvedModuleDescriptors(
resolvedDescriptors = moduleDescriptors,
forwardDeclarationsModule = forwardDeclarationsModule,
friendModules = friendModuleDescriptors,
refinesModules = refinesModuleDescriptors
)
}
fun createForwardDeclarationsModule(
@@ -133,21 +145,21 @@ class KlibResolvedModuleDescriptorsFactoryImpl(
}
private fun createDescriptorOptionalBuiltsIns(
name: Name,
storageManager: StorageManager,
builtIns: KotlinBuiltIns?,
moduleOrigin: KlibModuleOrigin
name: Name,
storageManager: StorageManager,
builtIns: KotlinBuiltIns?,
moduleOrigin: KlibModuleOrigin
) = if (builtIns != null)
moduleDescriptorFactory.descriptorFactory.createDescriptor(name, storageManager, builtIns, moduleOrigin)
else
moduleDescriptorFactory.descriptorFactory.createDescriptorAndNewBuiltIns(name, storageManager, moduleOrigin)
private fun createDescriptorOptionalBuiltsIns(
library: KotlinLibrary,
languageVersionSettings: LanguageVersionSettings,
storageManager: StorageManager,
builtIns: KotlinBuiltIns?,
packageAccessHandler: PackageAccessHandler?
library: KotlinLibrary,
languageVersionSettings: LanguageVersionSettings,
storageManager: StorageManager,
builtIns: KotlinBuiltIns?,
packageAccessHandler: PackageAccessHandler?
) = if (builtIns != null)
moduleDescriptorFactory.createDescriptor(library, languageVersionSettings, storageManager, builtIns, packageAccessHandler)
else