Wizard: fix not created by default xcode framework in shared module
the runForXcode task is not generating xcode framework if there is no source files in shared module
This commit is contained in:
+2
@@ -0,0 +1,2 @@
|
|||||||
|
// This file is needed because the packForXcode task requires the source code to be present to generate the XCode framework.
|
||||||
|
// Feel free to remove this file as soon as you have created some code in this source set.
|
||||||
+5
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module
|
|||||||
|
|
||||||
interface NativeTargetConfigurator : TargetConfigurator {
|
interface NativeTargetConfigurator : TargetConfigurator {
|
||||||
val isDesktopTarget: Boolean
|
val isDesktopTarget: Boolean
|
||||||
|
val isIosTarget: Boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
class RealNativeTargetConfigurator private constructor(
|
class RealNativeTargetConfigurator private constructor(
|
||||||
@@ -25,6 +26,9 @@ class RealNativeTargetConfigurator private constructor(
|
|||||||
override val isDesktopTarget: Boolean
|
override val isDesktopTarget: Boolean
|
||||||
get() = moduleSubType.isNativeDesktop
|
get() = moduleSubType.isNativeDesktop
|
||||||
|
|
||||||
|
override val isIosTarget: Boolean
|
||||||
|
get() = moduleSubType.isIOS
|
||||||
|
|
||||||
override fun createInnerTargetIrs(reader: Reader, module: Module): List<BuildSystemIR> = if (moduleSubType.isIOS) irsList {
|
override fun createInnerTargetIrs(reader: Reader, module: Module): List<BuildSystemIR> = if (moduleSubType.isIOS) irsList {
|
||||||
"binaries" {
|
"binaries" {
|
||||||
"framework" {
|
"framework" {
|
||||||
@@ -45,6 +49,7 @@ class RealNativeTargetConfigurator private constructor(
|
|||||||
object NativeForCurrentSystemTarget : NativeTargetConfigurator, SingleCoexistenceTargetConfigurator {
|
object NativeForCurrentSystemTarget : NativeTargetConfigurator, SingleCoexistenceTargetConfigurator {
|
||||||
override val moduleType = ModuleType.native
|
override val moduleType = ModuleType.native
|
||||||
override val isDesktopTarget: Boolean = true
|
override val isDesktopTarget: Boolean = true
|
||||||
|
override val isIosTarget: Boolean = false
|
||||||
|
|
||||||
@NonNls
|
@NonNls
|
||||||
override val id = "nativeForCurrentSystem"
|
override val id = "nativeForCurrentSystem"
|
||||||
|
|||||||
+8
-1
@@ -124,7 +124,14 @@ class ModulesToIRsConverter(
|
|||||||
|
|
||||||
with(dependencyType) {
|
with(dependencyType) {
|
||||||
@Suppress("DEPRECATION")
|
@Suppress("DEPRECATION")
|
||||||
with(unsafeSettingWriter) { runArbitraryTask(module, to, data).ensure() }
|
with(unsafeSettingWriter) {
|
||||||
|
runArbitraryTask(
|
||||||
|
module,
|
||||||
|
to,
|
||||||
|
to.path.considerSingleRootModuleMode(data.isSingleRootModuleMode).asPath(),
|
||||||
|
data
|
||||||
|
).ensure()
|
||||||
|
}
|
||||||
irsToAddToModules.getOrPut(to) { mutableListOf() } += createToIRs(module, to, data).get()
|
irsToAddToModules.getOrPut(to) { mutableListOf() } += createToIRs(module, to, data).get()
|
||||||
createDependencyIrs(module, to, data)
|
createDependencyIrs(module, to, data)
|
||||||
}
|
}
|
||||||
|
|||||||
+33
-7
@@ -17,7 +17,11 @@ import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.isGradle
|
|||||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModulesToIrConversionData
|
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModulesToIrConversionData
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.isIOS
|
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.isIOS
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.GradlePrinter
|
import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.GradlePrinter
|
||||||
import kotlin.collections.buildList
|
import org.jetbrains.kotlin.tools.projectWizard.plugins.projectPath
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.plugins.templates.TemplatesPlugin
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.templates.FileTemplate
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.templates.FileTemplateDescriptor
|
||||||
|
import java.nio.file.Path
|
||||||
import kotlin.reflect.KClass
|
import kotlin.reflect.KClass
|
||||||
|
|
||||||
sealed class ModuleDependencyType(
|
sealed class ModuleDependencyType(
|
||||||
@@ -25,7 +29,11 @@ sealed class ModuleDependencyType(
|
|||||||
val to: KClass<out ModuleConfigurator>
|
val to: KClass<out ModuleConfigurator>
|
||||||
) {
|
) {
|
||||||
fun accepts(from: Module, to: Module) =
|
fun accepts(from: Module, to: Module) =
|
||||||
this.from.isInstance(from.configurator) && this.to.isInstance(to.configurator)
|
this.from.isInstance(from.configurator)
|
||||||
|
&& this.to.isInstance(to.configurator)
|
||||||
|
&& additionalAcceptanceChecker(from, to)
|
||||||
|
|
||||||
|
open fun additionalAcceptanceChecker(from: Module, to: Module) = true
|
||||||
|
|
||||||
open fun createDependencyIrs(from: Module, to: Module, data: ModulesToIrConversionData): List<BuildSystemIR> {
|
open fun createDependencyIrs(from: Module, to: Module, data: ModulesToIrConversionData): List<BuildSystemIR> {
|
||||||
val path = to.path
|
val path = to.path
|
||||||
@@ -42,7 +50,12 @@ sealed class ModuleDependencyType(
|
|||||||
}.asSingletonList()
|
}.asSingletonList()
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun SettingsWriter.runArbitraryTask(from: Module, to: Module, data: ModulesToIrConversionData): TaskResult<Unit> =
|
open fun SettingsWriter.runArbitraryTask(
|
||||||
|
from: Module,
|
||||||
|
to: Module,
|
||||||
|
toModulePath: Path,
|
||||||
|
data: ModulesToIrConversionData
|
||||||
|
): TaskResult<Unit> =
|
||||||
UNIT_SUCCESS
|
UNIT_SUCCESS
|
||||||
|
|
||||||
open fun Reader.createToIRs(from: Module, to: Module, data: ModulesToIrConversionData): TaskResult<List<BuildSystemIR>> =
|
open fun Reader.createToIRs(from: Module, to: Module, data: ModulesToIrConversionData): TaskResult<List<BuildSystemIR>> =
|
||||||
@@ -68,18 +81,31 @@ sealed class ModuleDependencyType(
|
|||||||
override fun SettingsWriter.runArbitraryTask(
|
override fun SettingsWriter.runArbitraryTask(
|
||||||
from: Module,
|
from: Module,
|
||||||
to: Module,
|
to: Module,
|
||||||
|
toModulePath: Path,
|
||||||
data: ModulesToIrConversionData
|
data: ModulesToIrConversionData
|
||||||
): TaskResult<Unit> = withSettingsOf(from) {
|
): TaskResult<Unit> = withSettingsOf(from) {
|
||||||
IOSSinglePlatformModuleConfigurator.dependentModule.reference
|
IOSSinglePlatformModuleConfigurator.dependentModule.reference
|
||||||
.setValue(IOSSinglePlatformModuleConfigurator.DependentModuleReference(to))
|
.setValue(IOSSinglePlatformModuleConfigurator.DependentModuleReference(to))
|
||||||
UNIT_SUCCESS
|
val dummyFilePath = Defaults.SRC_DIR / "${to.iosTargetSafe()!!.name}Main" / to.configurator.kotlinDirectoryName / "dummyFile.kt"
|
||||||
|
TemplatesPlugin::addFileTemplate.execute(
|
||||||
|
FileTemplate(
|
||||||
|
FileTemplateDescriptor("ios/dummyFile.kt", dummyFilePath),
|
||||||
|
projectPath / toModulePath
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun additionalAcceptanceChecker(from: Module, to: Module): Boolean =
|
||||||
|
to.iosTargetSafe() != null
|
||||||
|
|
||||||
|
private fun Module.iosTargetSafe(): Module? = subModules.firstOrNull { module ->
|
||||||
|
module.configurator.safeAs<NativeTargetConfigurator>()?.isIosTarget == true
|
||||||
}
|
}
|
||||||
|
|
||||||
@OptIn(ExperimentalStdlibApi::class)
|
@OptIn(ExperimentalStdlibApi::class)
|
||||||
override fun Reader.createToIRs(from: Module, to: Module, data: ModulesToIrConversionData): TaskResult<List<BuildSystemIR>> {
|
override fun Reader.createToIRs(from: Module, to: Module, data: ModulesToIrConversionData): TaskResult<List<BuildSystemIR>> {
|
||||||
val iosTargetName = to.subModules.firstOrNull { module ->
|
val iosTargetName = to.iosTargetSafe()?.name
|
||||||
module.configurator.safeAs<SimpleTargetConfigurator>()?.moduleSubType?.isIOS == true
|
?: return Failure(InvalidModuleDependencyError(from, to, "Module ${to.name} should contain at least one iOS target"))
|
||||||
}?.name ?: return Failure(InvalidModuleDependencyError(from, to, "Module ${to.name} should contain at least one iOS target"))
|
|
||||||
|
|
||||||
|
|
||||||
return irsList {
|
return irsList {
|
||||||
|
|||||||
+3
@@ -9,11 +9,14 @@ import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildFileIR
|
|||||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.ModuleIR
|
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.ModuleIR
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemPlugin
|
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemPlugin
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem
|
import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem
|
||||||
|
import java.nio.file.Paths
|
||||||
|
|
||||||
inline class ModulePath(val parts: List<String>) {
|
inline class ModulePath(val parts: List<String>) {
|
||||||
constructor(path: String) : this(path.trim().split('.'))
|
constructor(path: String) : this(path.trim().split('.'))
|
||||||
|
|
||||||
fun asString(separator: String = ".") = parts.joinToString(separator)
|
fun asString(separator: String = ".") = parts.joinToString(separator)
|
||||||
|
fun asPath() = Paths.get(parts.first(), *parts.subList(1, parts.size).toTypedArray())
|
||||||
|
|
||||||
override fun toString(): String = asString()
|
override fun toString(): String = asString()
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|||||||
Reference in New Issue
Block a user