Source libraries: Export source libs and support tests for them
This commit is contained in:
committed by
Ilya Matveev
parent
6f4bcfee02
commit
00d780b650
+6
-11
@@ -19,22 +19,17 @@ import org.jetbrains.kotlin.konan.library.isInterop
|
||||
import org.jetbrains.kotlin.konan.library.resolver.KonanLibraryResolveResult
|
||||
import org.jetbrains.kotlin.library.toUnresolvedLibraries
|
||||
|
||||
internal fun Context.getExportedDependencies(): List<ModuleDescriptor> {
|
||||
val exportedLibraries = this.config.exportedLibraries.toSet()
|
||||
internal fun Context.getExportedDependencies(): List<ModuleDescriptor> = getDescriptorsFromFeaturedLibraries((config.exportedLibraries + config.sourceLibraries).toSet())
|
||||
internal fun Context.getSourceLibraryDescriptors(): List<ModuleDescriptor> = getDescriptorsFromFeaturedLibraries(config.sourceLibraries.toSet())
|
||||
|
||||
val result = this.moduleDescriptor.allDependencyModules.filter {
|
||||
val origin = it.konanModuleOrigin
|
||||
when (origin) {
|
||||
private fun Context.getDescriptorsFromFeaturedLibraries(featuredLibraries: Set<KonanLibrary>) =
|
||||
moduleDescriptor.allDependencyModules.filter {
|
||||
when (val origin = it.konanModuleOrigin) {
|
||||
CurrentKonanModuleOrigin, SyntheticModulesOrigin -> false
|
||||
is DeserializedKonanModuleOrigin -> {
|
||||
origin.library in exportedLibraries
|
||||
}
|
||||
is DeserializedKonanModuleOrigin -> origin.library in featuredLibraries
|
||||
}
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
internal fun getExportedLibraries(
|
||||
configuration: CompilerConfiguration,
|
||||
resolvedLibraries: KonanLibraryResolveResult,
|
||||
|
||||
+13
-1
@@ -17,10 +17,15 @@ import org.jetbrains.kotlin.backend.common.reportWarning
|
||||
import org.jetbrains.kotlin.backend.konan.Context
|
||||
import org.jetbrains.kotlin.backend.konan.descriptors.isAbstract
|
||||
import org.jetbrains.kotlin.backend.konan.descriptors.synthesizedName
|
||||
import org.jetbrains.kotlin.backend.konan.getSourceLibraryDescriptors
|
||||
import org.jetbrains.kotlin.backend.konan.ir.typeWithStarProjections
|
||||
import org.jetbrains.kotlin.backend.konan.ir.typeWithoutArguments
|
||||
import org.jetbrains.kotlin.backend.konan.reportCompilationError
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.descriptors.konan.CurrentKonanModuleOrigin
|
||||
import org.jetbrains.kotlin.descriptors.konan.DeserializedKonanModuleOrigin
|
||||
import org.jetbrains.kotlin.descriptors.konan.SyntheticModulesOrigin
|
||||
import org.jetbrains.kotlin.descriptors.konan.konanModuleOrigin
|
||||
import org.jetbrains.kotlin.ir.IrElement
|
||||
import org.jetbrains.kotlin.ir.builders.*
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
@@ -600,10 +605,17 @@ internal class TestProcessor (val context: Context) {
|
||||
}
|
||||
// endregion
|
||||
|
||||
private fun shouldProcessFile(irFile: IrFile): Boolean = irFile.packageFragmentDescriptor.module.let {
|
||||
// Process test annotations in source libraries too.
|
||||
it == context.moduleDescriptor || it in context.getSourceLibraryDescriptors()
|
||||
}
|
||||
|
||||
fun process(irFile: IrFile) {
|
||||
// TODO: uses descriptors.
|
||||
if (irFile.packageFragmentDescriptor.module != context.moduleDescriptor)
|
||||
if (!shouldProcessFile(irFile)) {
|
||||
return
|
||||
}
|
||||
|
||||
val annotationCollector = AnnotationCollector(irFile)
|
||||
irFile.acceptChildrenVoid(annotationCollector)
|
||||
createTestSuites(irFile, annotationCollector)
|
||||
|
||||
+9
-8
@@ -5,12 +5,11 @@
|
||||
|
||||
package org.jetbrains.kotlin.backend.konan.objcexport
|
||||
|
||||
import org.jetbrains.kotlin.backend.konan.*
|
||||
import org.jetbrains.kotlin.backend.konan.Context
|
||||
import org.jetbrains.kotlin.backend.konan.KonanConfigKeys
|
||||
import org.jetbrains.kotlin.backend.konan.descriptors.getPackageFragments
|
||||
import org.jetbrains.kotlin.backend.konan.descriptors.isInterface
|
||||
import org.jetbrains.kotlin.backend.konan.getExportedDependencies
|
||||
import org.jetbrains.kotlin.backend.konan.isNativeBinary
|
||||
import org.jetbrains.kotlin.backend.konan.llvm.CodeGenerator
|
||||
import org.jetbrains.kotlin.backend.konan.llvm.objcexport.ObjCExportCodeGenerator
|
||||
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
|
||||
@@ -146,7 +145,7 @@ internal class ObjCExport(val context: Context, symbolTable: SymbolTable) {
|
||||
}
|
||||
|
||||
val file = directory.child("Info.plist")
|
||||
val pkg = context.moduleDescriptor.guessMainPackage() // TODO: consider showing warning if it is root.
|
||||
val pkg = guessMainPackage() // TODO: consider showing warning if it is root.
|
||||
val bundleId = pkg.child(Name.identifier(name)).asString()
|
||||
|
||||
val platform = when (target) {
|
||||
@@ -274,17 +273,19 @@ internal class ObjCExport(val context: Context, symbolTable: SymbolTable) {
|
||||
// In this case resulting framework will likely be unusable due to compile errors when importing it.
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal fun ModuleDescriptor.guessMainPackage(): FqName {
|
||||
val allPackages = this.getPackageFragments() // Includes also all parent packages, e.g. the root one.
|
||||
private fun guessMainPackage(): FqName {
|
||||
val allPackages = (context.getSourceLibraryDescriptors() + context.moduleDescriptor).flatMap {
|
||||
it.getPackageFragments() // Includes also all parent packages, e.g. the root one.
|
||||
}
|
||||
|
||||
val nonEmptyPackages = allPackages
|
||||
val nonEmptyPackages = allPackages
|
||||
.filter { it.getMemberScope().getContributedDescriptors().isNotEmpty() }
|
||||
.map { it.fqName }.distinct()
|
||||
|
||||
return allPackages.map { it.fqName }.distinct()
|
||||
return allPackages.map { it.fqName }.distinct()
|
||||
.filter { candidate -> nonEmptyPackages.all { it.isSubpackageOf(candidate) } }
|
||||
// Now there are all common ancestors of non-empty packages. Longest of them is the least common accessor:
|
||||
.maxBy { it.asString().length }!!
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user