KTIJ-21577 [project-wizard] remove Compose Multiplatform Old from Kotlin wizard

Merge-request: IJ-MR-97564
Merged-by: Dima Avdeev

GitOrigin-RevId: 9a1cc0b1fcc5d731a7992959ccd6090aa3be715a
This commit is contained in:
dima.avdeev
2022-11-02 12:39:18 +00:00
committed by intellij-monorepo-bot
parent a5489afc93
commit 772791c821
51 changed files with 20 additions and 1368 deletions
@@ -48,17 +48,12 @@ class WizardStatsService : CounterUsagesCollector() {
"fullStackWebApplication",
"nodejsApplication",
"reactApplication",
"composeDesktopApplication",
"composeMultiplatformApplication",
"none",
// AppCode KMM
"multiplatformMobileApplicationUsingAppleGradlePlugin",
"multiplatformMobileApplicationUsingHybridProject",
)
private val allowedModuleTemplates = listOf(
"composeAndroid",
"composeDesktopTemplate",
"composeMppModule",
"consoleJvmApp",
"ktorServer",
"mobileMppModule",
@@ -39,8 +39,6 @@ project.kind.android=Android
project.kind.kotlin.js=Kotlin/JS
project.kind.multiplatform=Multiplatform
project.kind.singleplatform=JVM
project.kind.compose= Compose Multiplatform (Old version)
project.kind.compose.short.name=Compose Multiplatform (Old version)
project=Project
@@ -77,7 +75,6 @@ module.type.native=Kotlin/Native
module.name=Module name
module.configurator.simple.js.browser=JS for Browser
module.configurator.simple.js.compose.browser=Compose JS for Browser
module.configurator.simple.js.node=JS for Node.JS
module.configurator.android=Android
@@ -149,31 +146,12 @@ project.template.nodejs.description=Application for the Node.js runtime with Kot
project.template.mpp.mobile.title=Mobile Application
project.template.mpp.mobile.description=Mobile applications for iOS and Android with common code shared between platforms
project.template.compose.desktop.title=Compose Desktop Application
project.template.compose.desktop.description=A Compose application targeting the desktop JVM platform (Windows, Linux, macOS)
project.template.compose.multiplatform.title=Compose Multiplatform Application
project.template.compose.multiplatform.description=Multiplatform (JVM/Windows, JVM/Linux, JVM/MacOS, Android) Compose project with shared code in common modules
project.template.compose.web.title=Compose Web Application
project.template.compose.web.description=Web (JS) Compose project
module.template.console.jvm.title=Console Application
module.template.console.jvm.description=Simple "Hello World!" Kotlin/JVM application that works in the console
module.template.mpp.mobile.title=Mobile Application
module.template.mpp.mobile.description=Mobile applications for iOS and Android with Kotlin Multiplatform Mobile, which supports sharing common code between platforms.
module.template.compose.desktop.title=Compose Desktop Module
module.template.compose.desktop.description=A Compose application targeting the desktop JVM platform
module.template.compose.web.title=Compose Web Module
module.template.compose.web.description=A Compose Web application targeting browser (JS)
module.template.compose.mpp.title=Compose MPP Module
module.template.compose.mpp.description=Compose MPP Module
module.template.ktor.server.title=Web server
module.template.ktor.server.description=Backend web server
@@ -1,14 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="${package}">
<application
android:allowBackup="false"
android:supportsRtl="true"
android:theme="@style/Theme.AppCompat.Light.NoActionBar">
<activity android:name=".MainActivity" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
@@ -1,23 +0,0 @@
#if ($package)
package ${package}
#end
#if ($sharedPackage)
import ${sharedPackage}.App
#end
import android.os.Bundle
import androidx.activity.compose.setContent
import androidx.appcompat.app.AppCompatActivity
import androidx.compose.material.MaterialTheme
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
#if ($sharedPackage)
setContent {
MaterialTheme {
App()
}
}
#end
}
}
@@ -1,31 +0,0 @@
import androidx.compose.desktop.ui.tooling.preview.Preview
import androidx.compose.material.Button
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.window.Window
import androidx.compose.ui.window.application
@Composable
@Preview
fun App() {
var text by remember { mutableStateOf("Hello, World!") }
MaterialTheme {
Button(onClick = {
text = "Hello, Desktop!"
}) {
Text(text)
}
}
}
fun main() = application {
Window(onCloseRequest = ::exitApplication) {
App()
}
}
@@ -1,23 +0,0 @@
#if ($package)
package ${package}
#end
#set( $dollar = "${" )
import androidx.compose.material.Text
import androidx.compose.material.Button
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
@Composable
fun App() {
var text by remember { mutableStateOf("Hello, World!") }
Button(onClick = {
text = "Hello, ${dollar}getPlatformName()}"
}) {
Text(text)
}
}
@@ -1,13 +0,0 @@
#if ($package)
package ${package}
#end
#set( $dollar = "${" )
import androidx.compose.desktop.ui.tooling.preview.Preview
import androidx.compose.runtime.Composable
@Preview
@Composable
fun AppPreview() {
App()
}
@@ -1,14 +0,0 @@
#if ($sharedPackage)
import ${sharedPackage}.App
#end
import androidx.compose.material.MaterialTheme
import androidx.compose.ui.window.Window
import androidx.compose.ui.window.application
fun main() = application {
Window(onCloseRequest = ::exitApplication) {
MaterialTheme {
App()
}
}
}
@@ -1,11 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Sample</title>
</head>
<body>
<div id="root"></div>
<script src="${projectName}.js"></script>
</body>
</html>
@@ -1,31 +0,0 @@
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.getValue
import androidx.compose.runtime.setValue
import org.jetbrains.compose.web.css.*
import org.jetbrains.compose.web.dom.*
import org.jetbrains.compose.web.renderComposable
fun main() {
var count: Int by mutableStateOf(0)
renderComposable(rootElementId = "root") {
Div({ style { padding(25.px) } }) {
Button(attrs = {
onClick { count -= 1 }
}) {
Text("-")
}
Span({ style { padding(15.px) } }) {
Text("$count")
}
Button(attrs = {
onClick { count += 1 }
}) {
Text("+")
}
}
}
}
@@ -1,18 +0,0 @@
#set( $dollar = "${" )
import androidx.compose.material.Text
import androidx.compose.material.Button
import androidx.compose.material.MaterialTheme
import androidx.compose.runtime.*
@Composable
fun App() {
var text by remember { mutableStateOf("Hello, World!") }
MaterialTheme {
Button(onClick = {
text = "Hello, ${dollar}getPlatformName()}"
}) {
Text(text)
}
}
}
@@ -14,20 +14,11 @@ object Versions {
val KTOR = version("2.0.2")
val JUNIT = version("4.13.2")
val JUNIT5 = version("5.8.2")
val JETBRAINS_COMPOSE = version("1.1.1")
val KOTLIN_VERSION_FOR_COMPOSE = version("1.6.10")
val GRADLE_VERSION_FOR_COMPOSE = version("7.4.2")
object COMPOSE {
val ANDROID_ACTIVITY_COMPOSE = version("1.4.0")
}
object ANDROID {
val ANDROID_MATERIAL = version("1.5.0")
val ANDROIDX_APPCOMPAT = version("1.4.1")
val ANDROIDX_CONSTRAINTLAYOUT = version("2.1.3")
val ANDROIDX_KTX = version("1.7.0")
}
object KOTLINX {
@@ -13,7 +13,6 @@ class CoreJvmTargetVersionsProviderService : JvmTargetVersionsProviderService(),
private val kotlinToJvmTargetVersions: Map<Version, Set<TargetJvmVersion>> = mapOf(
Versions.KOTLIN to KOTLIN_14_JVM_TARGETS,
Versions.KOTLIN_VERSION_FOR_COMPOSE to KOTLIN_14_JVM_TARGETS
)
private fun listSupportedJvmTargetVersions(kotlinVersion: Version) =
@@ -21,7 +20,6 @@ class CoreJvmTargetVersionsProviderService : JvmTargetVersionsProviderService(),
}
override fun listSupportedJvmTargetVersions(projectKind: ProjectKind): Set<TargetJvmVersion> {
val version = CoreKotlinVersionProviderService.getKotlinVersion(projectKind)
return listSupportedJvmTargetVersions(version)
return listSupportedJvmTargetVersions(Versions.KOTLIN)
}
}
@@ -3,18 +3,9 @@ package org.jetbrains.kotlin.tools.projectWizard.core.service
import org.jetbrains.kotlin.tools.projectWizard.Versions
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ProjectKind
import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version
class CoreKotlinVersionProviderService : KotlinVersionProviderService(), IdeaIndependentWizardService {
companion object {
internal fun getKotlinVersion(projectKind: ProjectKind): Version = when (projectKind) {
ProjectKind.COMPOSE -> Versions.KOTLIN_VERSION_FOR_COMPOSE
else -> Versions.KOTLIN
}
}
override fun getKotlinVersion(projectKind: ProjectKind): WizardKotlinVersion {
val version = CoreKotlinVersionProviderService.getKotlinVersion(projectKind)
return kotlinVersionWithDefaultValues(version)
return kotlinVersionWithDefaultValues(Versions.KOTLIN)
}
}
@@ -3,21 +3,17 @@
package org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators
import kotlinx.collections.immutable.toPersistentList
import org.jetbrains.annotations.NonNls
import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle
import org.jetbrains.kotlin.tools.projectWizard.core.Reader
import org.jetbrains.kotlin.tools.projectWizard.core.TaskResult
import org.jetbrains.kotlin.tools.projectWizard.core.Writer
import org.jetbrains.kotlin.tools.projectWizard.core.compute
import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.ModuleConfiguratorSetting
import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.ModuleConfiguratorSettingReference
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.KotlinBuildSystemPluginIR
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.GradleIRListBuilder
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.GradlePropertyAccessIR
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.irsList
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.multiplatform.DefaultTargetConfigurationIR
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.BrowserJsSinglePlatformModuleConfigurator.settingsValue
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.JSConfigurator.Companion.isApplication
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.JsBrowserBasedConfigurator.Companion.browserSubTarget
@@ -26,7 +22,6 @@ import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.JvmModuleCon
import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.gradle.GradlePlugin
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.KotlinPlugin
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleSubType
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModulesToIrConversionData
import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.GradlePrinter
@@ -231,54 +226,3 @@ fun GradleIRListBuilder.commonCssSupport(reader: Reader) {
}
}
}
object JsComposeMppConfigurator : JsBrowserBasedConfigurator, SimpleTargetConfigurator {
@NonNls
override val id = "jsBrowserComposeMpp"
@NonNls
override val suggestedModuleName = "js"
override val moduleKind = ModuleKind.target
override val text = KotlinNewProjectWizardBundle.message("module.configurator.simple.js.compose.browser")
override val moduleSubType = ModuleSubType.js
override fun createInnerTargetIrs(
reader: Reader,
module: Module
): List<BuildSystemIR> = irsList {
+super<SimpleTargetConfigurator>.createInnerTargetIrs(reader, module)
"browser" {
"testTask" {
+"testLogging.showStandardStreams = true"
"useKarma" {
+"useChromeHeadless()"
+"useFirefox()"
}
}
}
applicationSupport()
}
override fun Reader.createTargetIrs(
module: Module
): List<BuildSystemIR> = org.jetbrains.kotlin.tools.projectWizard.core.buildList {
+DefaultTargetConfigurationIR(
module.createTargetAccessIr(moduleSubType),
createInnerTargetIrs(this@createTargetIrs, module).toPersistentList(),
listOf(GradlePropertyAccessIR("IR"))
)
}
override fun Writer.runArbitraryTask(
configurationData: ModulesToIrConversionData,
module: Module,
modulePath: Path,
): TaskResult<Unit> = compute {
GradlePlugin.gradleProperties.addValues("kotlin.js.webpack.major.version" to 4) //workaround for KT-48273 TODO:remove once the issue is fixed
}
}
@@ -1,7 +1,6 @@
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package org.jetbrains.kotlin.tools.projectWizard.plugins
import kotlinx.collections.immutable.persistentListOf
import org.jetbrains.kotlin.tools.projectWizard.core.Context
import org.jetbrains.kotlin.tools.projectWizard.core.Plugin
import org.jetbrains.kotlin.tools.projectWizard.core.buildPersistenceList
@@ -48,7 +47,6 @@ object Plugins {
+ReactJsTemplatesPlugin(context)
+SimpleNodeJsTemplatesPlugin(context)
+NativeConsoleApplicationTemplatePlugin(context)
+ComposeTemplatesPlugin(context)
+MobileMppTemplatePlugin(context)
}
}
@@ -133,7 +133,7 @@ class KotlinPlugin(context: Context) : Plugin(context) {
withAction {
val version = version.propertyValue
if (version.kind.isStable) return@withAction UNIT_SUCCESS
val pluginRepository = version.buildSystemPluginRepository(buildSystemType) ?: return@withAction UNIT_SUCCESS
val pluginRepository = version.buildSystemPluginRepository(buildSystemType)
BuildSystemPlugin.pluginRepositoreis.addValues(pluginRepository) andThen
updateBuildFiles { buildFile ->
buildFile.withIrs(
@@ -218,12 +218,6 @@ enum class ProjectKind(
Multiplatform(KotlinNewProjectWizardBundle.message("project.kind.multiplatform"), supportedBuildSystems = BuildSystemType.ALL_GRADLE),
Android(KotlinNewProjectWizardBundle.message("project.kind.android"), supportedBuildSystems = BuildSystemType.ALL_GRADLE),
Js(KotlinNewProjectWizardBundle.message("project.kind.kotlin.js"), supportedBuildSystems = BuildSystemType.ALL_GRADLE),
COMPOSE(
KotlinNewProjectWizardBundle.message("project.kind.compose"),
supportedBuildSystems = setOf(BuildSystemType.GradleKotlinDsl),
shortName = KotlinNewProjectWizardBundle.message("project.kind.compose.short.name"),
message = "uses Kotlin ${Versions.KOTLIN_VERSION_FOR_COMPOSE}"
)
}
fun List<Module>.withAllSubModules(includeSourcesets: Boolean = false): List<Module> = buildList {
@@ -1,33 +0,0 @@
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package org.jetbrains.kotlin.tools.projectWizard.plugins.templates
import org.jetbrains.kotlin.tools.projectWizard.core.Context
import org.jetbrains.kotlin.tools.projectWizard.core.PluginSettingsOwner
import org.jetbrains.kotlin.tools.projectWizard.core.andThen
import org.jetbrains.kotlin.tools.projectWizard.core.entity.PipelineTask
import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase
import org.jetbrains.kotlin.tools.projectWizard.templates.compose.ComposeJvmDesktopTemplate
import org.jetbrains.kotlin.tools.projectWizard.templates.compose.ComposeMppModuleTemplate
import org.jetbrains.kotlin.tools.projectWizard.templates.compose.ComposeWebModuleTemplate
class ComposeTemplatesPlugin(context: Context) : TemplatePlugin(context) {
override val path = pluginPath
override val pipelineTasks: List<PipelineTask> = super.pipelineTasks +
listOf(
addTemplate,
)
companion object : PluginSettingsOwner() {
override val pluginPath = "template.compose"
val addTemplate by pipelineTask(GenerationPhase.PREPARE) {
withAction {
TemplatesPlugin.addTemplate.execute(ComposeJvmDesktopTemplate()) andThen
TemplatesPlugin.addTemplate.execute(ComposeJvmDesktopTemplate()) andThen
TemplatesPlugin.addTemplate.execute(ComposeMppModuleTemplate()) andThen
TemplatesPlugin.addTemplate.execute(ComposeWebModuleTemplate)
}
}
}
}
@@ -4,12 +4,9 @@ package org.jetbrains.kotlin.tools.projectWizard.projectTemplates
import org.jetbrains.annotations.NonNls
import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle
import org.jetbrains.kotlin.tools.projectWizard.Versions
import org.jetbrains.kotlin.tools.projectWizard.core.buildList
import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.*
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.*
import org.jetbrains.kotlin.tools.projectWizard.plugins.StructurePlugin
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.gradle.GradlePlugin
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.KotlinPlugin
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleSubType
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType
@@ -17,7 +14,6 @@ import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ProjectKind
import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.*
import org.jetbrains.kotlin.tools.projectWizard.templates.*
import org.jetbrains.kotlin.tools.projectWizard.templates.compose.*
import org.jetbrains.kotlin.tools.projectWizard.templates.mpp.MobileMppTemplate
abstract class ProjectTemplate : DisplayableSettingItem {
@@ -75,9 +71,6 @@ abstract class ProjectTemplate : DisplayableSettingItem {
FrontendApplicationProjectTemplate,
ReactApplicationProjectTemplate,
NodeJsApplicationProjectTemplate,
ComposeDesktopApplicationProjectTemplate,
ComposeMultiplatformApplicationProjectTemplate,
ComposeWebApplicationProjectTemplate,
ConsoleApplicationProjectTemplateWithSample
)
@@ -90,6 +83,7 @@ abstract class ProjectTemplate : DisplayableSettingItem {
private infix fun <V : Any, T : SettingType<V>> PluginSettingReference<V, T>.withValue(value: V): SettingWithValue<V, T> =
SettingWithValue(this, value)
@Suppress("unused")
private inline infix fun <V : Any, reified T : SettingType<V>> PluginSetting<V, T>.withValue(value: V): SettingWithValue<V, T> =
SettingWithValue(reference, value)
@@ -341,150 +335,3 @@ object NodeJsApplicationProjectTemplate : ProjectTemplate() {
)
)
}
object ComposeDesktopApplicationProjectTemplate : ProjectTemplate() {
override val title = KotlinNewProjectWizardBundle.message("project.template.compose.desktop.title")
override val description = KotlinNewProjectWizardBundle.message("project.template.compose.desktop.description")
override val id = "composeDesktopApplication"
@NonNls
override val suggestedProjectName = "myComposeDesktopApplication"
override val projectKind = ProjectKind.COMPOSE
override val setsPluginSettings: List<SettingWithValue<*, *>>
get() = listOf(
GradlePlugin.gradleVersion withValue Versions.GRADLE_VERSION_FOR_COMPOSE,
StructurePlugin.version withValue "1.0",
)
override val setsModules: List<Module>
get() = listOf(
Module(
"compose",
JvmSinglePlatformModuleConfigurator,
template = ComposeJvmDesktopTemplate(),
sourceSets = SourcesetType.ALL.map { type ->
Sourceset(type, dependencies = emptyList())
},
subModules = emptyList()
).withConfiguratorSettings<JvmSinglePlatformModuleConfigurator> {
JvmModuleConfigurator.testFramework withValue KotlinTestFramework.NONE
JvmModuleConfigurator.targetJvmVersion withValue TargetJvmVersion.JVM_11
}
)
}
object ComposeMultiplatformApplicationProjectTemplate : ProjectTemplate() {
override val title = KotlinNewProjectWizardBundle.message("project.template.compose.multiplatform.title")
override val description = KotlinNewProjectWizardBundle.message("project.template.compose.multiplatform.description")
override val id = "composeMultiplatformApplication"
@NonNls
override val suggestedProjectName = "myComposeMultiplatformApplication"
override val projectKind = ProjectKind.COMPOSE
override val setsPluginSettings: List<SettingWithValue<*, *>>
get() = listOf(
GradlePlugin.gradleVersion withValue Versions.GRADLE_VERSION_FOR_COMPOSE,
StructurePlugin.version withValue "1.0",
)
override val setsModules: List<Module>
get() = buildList {
val common = MultiplatformModule(
"common",
template = ComposeMppModuleTemplate(),
listOf(
ModuleType.common.createDefaultTarget().withConfiguratorSettings<CommonTargetConfigurator> {
JvmModuleConfigurator.testFramework withValue KotlinTestFramework.NONE
},
Module(
"android",
AndroidTargetConfigurator,
template = ComposeCommonAndroidTemplate(),
sourceSets = createDefaultSourceSets(),
subModules = emptyList()
).withConfiguratorSettings<AndroidTargetConfigurator> {
configurator.androidPlugin withValue AndroidGradlePlugin.LIBRARY
JvmModuleConfigurator.testFramework withValue KotlinTestFramework.NONE
},
Module(
"desktop",
JvmTargetConfigurator,
template = ComposeCommonDesktopTemplate(),
sourceSets = createDefaultSourceSets(),
subModules = emptyList()
).withConfiguratorSettings<JvmTargetConfigurator> {
JvmModuleConfigurator.testFramework withValue KotlinTestFramework.NONE
JvmModuleConfigurator.targetJvmVersion withValue TargetJvmVersion.JVM_11
}
)
)
+Module(
"android",
AndroidSinglePlatformModuleConfigurator,
template = ComposeAndroidTemplate(),
sourceSets = createDefaultSourceSets(),
subModules = emptyList(),
dependencies = mutableListOf(ModuleReference.ByModule(common))
).withConfiguratorSettings<AndroidSinglePlatformModuleConfigurator> {
JvmModuleConfigurator.testFramework withValue KotlinTestFramework.NONE
}
+Module(
"desktop",
MppModuleConfigurator,
template = ComposeCommonDesktopTemplate(),
sourceSets = createDefaultSourceSets(),
subModules = listOf(
Module(
"jvm",
JvmTargetConfigurator,
template = ComposeJvmDesktopTemplate(),
sourceSets = createDefaultSourceSets(),
subModules = emptyList(),
dependencies = mutableListOf(ModuleReference.ByModule(common))
).withConfiguratorSettings<JvmTargetConfigurator> {
JvmModuleConfigurator.testFramework withValue KotlinTestFramework.NONE
JvmModuleConfigurator.targetJvmVersion withValue TargetJvmVersion.JVM_11
}
),
)
+common
}
}
object ComposeWebApplicationProjectTemplate : ProjectTemplate() {
override val title = KotlinNewProjectWizardBundle.message("project.template.compose.web.title")
override val description = KotlinNewProjectWizardBundle.message("project.template.compose.web.description")
override val id = "composeWebApplication"
@NonNls
override val suggestedProjectName = "myComposeWebApplication"
override val projectKind = ProjectKind.COMPOSE
override val setsPluginSettings: List<SettingWithValue<*, *>>
get() = listOf(
GradlePlugin.gradleVersion withValue Versions.GRADLE_VERSION_FOR_COMPOSE,
StructurePlugin.version withValue "1.0",
)
override val setsModules: List<Module>
get() = listOf(
Module(
"web",
MppModuleConfigurator,
template = null,
sourceSets = createDefaultSourceSets(),
subModules = listOf(
Module(
"js",
JsComposeMppConfigurator,
template = ComposeWebModuleTemplate,
permittedTemplateIds = setOf(ComposeWebModuleTemplate.id),
sourceSets = createDefaultSourceSets(),
subModules = emptyList()
)
)
)
)
}
@@ -33,6 +33,7 @@ data class DefaultRepository(val type: Type) : Repository {
interface CustomMavenRepository : Repository
@Suppress("unused")
data class CustomMavenRepositoryImpl(val repository: String, val base: String) : CustomMavenRepository {
override val url: String = "$base/$repository"
@@ -61,7 +62,6 @@ object Repositories {
val KOTLINX_HTML = JetBrainsSpace("public/p/kotlinx-html/maven")
val KOTLIN_JS_WRAPPERS = DefaultRepository.MAVEN_CENTRAL
val KOTLIN_EAP_MAVEN_CENTRAL = DefaultRepository.MAVEN_CENTRAL
val JETBRAINS_COMPOSE_DEV = JetBrainsSpace("public/p/compose/dev")
val JETBRAINS_KOTLIN_DEV = JetBrainsSpace("kotlin/p/kotlin/dev")
val JETBRAINS_KOTLIN_BOOTSTRAP = CacheRedirector(
"maven.pkg.jetbrains.space",
@@ -1,140 +0,0 @@
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package org.jetbrains.kotlin.tools.projectWizard.templates.compose
import kotlinx.collections.immutable.toPersistentList
import org.jetbrains.annotations.NonNls
import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle
import org.jetbrains.kotlin.tools.projectWizard.Versions
import org.jetbrains.kotlin.tools.projectWizard.core.*
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.*
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.AndroidConfigIR
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.irsList
import org.jetbrains.kotlin.tools.projectWizard.library.MavenArtifact
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.AndroidModuleConfigurator
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.AndroidSinglePlatformModuleConfigurator
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.moduleType
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemPlugin
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ProjectKind
import org.jetbrains.kotlin.tools.projectWizard.plugins.pomIR
import org.jetbrains.kotlin.tools.projectWizard.plugins.templates.TemplatesPlugin
import org.jetbrains.kotlin.tools.projectWizard.settings.JavaPackage
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.DefaultRepository
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.ModuleKind
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Repositories
import org.jetbrains.kotlin.tools.projectWizard.settings.javaPackage
import org.jetbrains.kotlin.tools.projectWizard.templates.FileTemplateDescriptor
import org.jetbrains.kotlin.tools.projectWizard.templates.Template
class ComposeAndroidTemplate : Template() {
@NonNls
override val id: String = "composeAndroid"
override val title: String = KotlinNewProjectWizardBundle.message("module.template.compose.desktop.title")
override val description: String = KotlinNewProjectWizardBundle.message("module.template.compose.desktop.description")
override fun isApplicableTo(module: Module, projectKind: ProjectKind, reader: Reader): Boolean =
module.configurator.moduleType == ModuleType.android
&& projectKind == ProjectKind.COMPOSE
&& module.kind == ModuleKind.singlePlatformAndroid
override fun Writer.getIrsToAddToBuildFile(
module: ModuleIR
) = irsList {
+GradleOnlyPluginByNameIR("org.jetbrains.compose", version = Versions.JETBRAINS_COMPOSE)
+RepositoryIR(Repositories.JETBRAINS_COMPOSE_DEV)
+RepositoryIR(DefaultRepository.GOOGLE)
+Dependencies.ACTIVITY_COMPOSE
}
override fun Reader.updateBuildFileIRs(irs: List<BuildSystemIR>): List<BuildSystemIR> {
val androidIR = irs.firstNotNullOfOrNull { ir-> ir.takeIf { ir is AndroidConfigIR } }
if (androidIR != null && androidIR is AndroidConfigIR) {
androidIR.androidSdkVersion = "31"
}
return irs
}
override fun Writer.getRequiredLibraries(module: ModuleIR): List<DependencyIR> = buildList {
+Dependencies.ACTIVITY_COMPOSE
}
override fun Reader.updateModuleIR(module: ModuleIR): ModuleIR {
val irs = module.irs.filterNot { ir ->
ir == AndroidSinglePlatformModuleConfigurator.DEPENDENCIES.APP_COMPAT
|| ir == AndroidSinglePlatformModuleConfigurator.DEPENDENCIES.CONSTRAINT_LAYOUT
|| ir == AndroidModuleConfigurator.DEPENDENCIES.MATERIAL
}
return module.withReplacedIrs(irs.toPersistentList())
}
override fun Writer.runArbitratyTask(module: ModuleIR): TaskResult<Unit> = compute {
BuildSystemPlugin.pluginRepositoreis.addValues(Repositories.JETBRAINS_COMPOSE_DEV, DefaultRepository.GOOGLE).ensure()
//TODO hacky!
TemplatesPlugin.fileTemplatesToRender.update { templates ->
templates.mapNotNull { template ->
val descriptor = template.descriptor as? FileTemplateDescriptor
when {
descriptor == AndroidModuleConfigurator.FileTemplateDescriptors.activityMainXml
|| descriptor == AndroidModuleConfigurator.FileTemplateDescriptors.colorsXml
|| descriptor == AndroidModuleConfigurator.FileTemplateDescriptors.stylesXml -> null
descriptor?.templateId == "android/MainActivity.kt.vm" -> {
template.copy(descriptor = mainActivityKt(module.originalModule.javaPackage(pomIR())))
}
descriptor?.templateId == "android/AndroidManifest.xml.vm" -> {
template.copy(descriptor = Descriptors.manifestXml)
}
else -> template
}
}.asSuccess()
}
}
private fun mainActivityKt(javaPackage: JavaPackage) = FileTemplateDescriptor(
"composeAndroid/MainActivity.kt.vm",
"src" / "main" / "java" / javaPackage.asPath() / "MainActivity.kt"
)
object Descriptors {
val manifestXml = FileTemplateDescriptor(
templateId = "composeAndroid/AndroidManifest.xml.vm",
relativePath = "src" / "main" / "AndroidManifest.xml",
)
}
object Dependencies {
val ACTIVITY_COMPOSE = ArtifactBasedLibraryDependencyIR(
MavenArtifact(Repositories.JETBRAINS_COMPOSE_DEV, "androidx.activity", "activity-compose"),
version = Versions.COMPOSE.ANDROID_ACTIVITY_COMPOSE,
dependencyType = DependencyType.MAIN,
)
}
}
class ComposeCommonAndroidTemplate : Template() {
@NonNls
override val id: String = "composeCommonAndroid"
override val title: String = KotlinNewProjectWizardBundle.message("module.template.compose.desktop.title")
override val description: String = KotlinNewProjectWizardBundle.message("module.template.compose.desktop.description")
override fun isApplicableTo(module: Module, projectKind: ProjectKind, reader: Reader): Boolean =
module.configurator.moduleType == ModuleType.common
&& projectKind == ProjectKind.COMPOSE
&& module.kind == ModuleKind.singlePlatformAndroid
override fun Reader.updateBuildFileIRs(irs: List<BuildSystemIR>): List<BuildSystemIR> {
val androidIR = irs.firstNotNullOfOrNull { it as? AndroidConfigIR }
if (androidIR != null) {
androidIR.androidSdkVersion = "31"
}
return irs
}
}
@@ -1,87 +0,0 @@
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package org.jetbrains.kotlin.tools.projectWizard.templates.compose
import org.jetbrains.annotations.NonNls
import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle
import org.jetbrains.kotlin.tools.projectWizard.Versions
import org.jetbrains.kotlin.tools.projectWizard.core.*
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.*
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.GradleImportIR
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.irsList
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.moduleType
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemPlugin
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ProjectKind
import org.jetbrains.kotlin.tools.projectWizard.plugins.pomIR
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.*
import org.jetbrains.kotlin.tools.projectWizard.settings.javaPackage
import org.jetbrains.kotlin.tools.projectWizard.templates.*
class ComposeJvmDesktopTemplate : Template() {
@NonNls
override val id: String = "composeDesktopTemplate"
override val title: String = KotlinNewProjectWizardBundle.message("module.template.compose.desktop.title")
override val description: String = KotlinNewProjectWizardBundle.message("module.template.compose.desktop.description")
override fun isApplicableTo(module: Module, projectKind: ProjectKind, reader: Reader): Boolean =
module.configurator.moduleType == ModuleType.jvm && projectKind == ProjectKind.COMPOSE
&& (module.kind == ModuleKind.singlePlatformJvm || module.kind == ModuleKind.target)
override fun Writer.getIrsToAddToBuildFile(
module: ModuleIR
) = irsList {
+RepositoryIR(Repositories.JETBRAINS_COMPOSE_DEV)
+RepositoryIR(DefaultRepository.GOOGLE)
+GradleOnlyPluginByNameIR("org.jetbrains.compose", version = Versions.JETBRAINS_COMPOSE)
+GradleImportIR("org.jetbrains.compose.desktop.application.dsl.TargetFormat")
"compose.desktop" {
"application" {
"mainClass" assign const("MainKt")
"nativeDistributions" {
"targetFormats"(raw("TargetFormat.Dmg"), raw("TargetFormat.Msi"), raw("TargetFormat.Deb"))
"packageName" assign const(module.name)
"packageVersion" assign const("1.0.0")
}
}
}
+GradleImportIR("org.jetbrains.compose.compose")
}
override fun Writer.getRequiredLibraries(module: ModuleIR): List<DependencyIR> = listOf(
CustomGradleDependencyDependencyIR("compose.desktop.currentOs", dependencyType = DependencyType.MAIN, DependencyKind.implementation)
)
override fun Writer.runArbitratyTask(module: ModuleIR): TaskResult<Unit> =
BuildSystemPlugin.pluginRepositoreis.addValues(Repositories.JETBRAINS_COMPOSE_DEV, DefaultRepository.GOOGLE)
override fun Reader.getFileTemplates(module: ModuleIR) = buildList<FileTemplateDescriptorWithPath> {
val dependsOnMppModule: Module? =
module.originalModule.dependencies.map { moduleByReference(it) }.firstOrNull { it.template is ComposeMppModuleTemplate }
if (dependsOnMppModule == null) {
+(FileTemplateDescriptor("$id/main.kt", "Main.kt".asPath()) asSrcOf SourcesetType.main)
} else {
val javaPackage = dependsOnMppModule.javaPackage(pomIR()).asCodePackage()
+(FileTemplateDescriptor("composeMpp/main.kt.vm", "Main.kt".asPath())
asSrcOf SourcesetType.main
withSettings ("sharedPackage" to javaPackage)
)
}
}
}
class ComposeCommonDesktopTemplate : Template() {
@NonNls
override val id: String = "composeCommonDesktopTemplate"
override val title: String = KotlinNewProjectWizardBundle.message("module.template.compose.desktop.title")
override val description: String = KotlinNewProjectWizardBundle.message("module.template.compose.desktop.description")
override fun isApplicableTo(module: Module, projectKind: ProjectKind, reader: Reader): Boolean =
module.configurator.moduleType == ModuleType.jvm && projectKind == ProjectKind.COMPOSE
}
@@ -1,93 +0,0 @@
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package org.jetbrains.kotlin.tools.projectWizard.templates.compose
import org.jetbrains.annotations.NonNls
import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle
import org.jetbrains.kotlin.tools.projectWizard.Versions
import org.jetbrains.kotlin.tools.projectWizard.core.*
import org.jetbrains.kotlin.tools.projectWizard.core.safeAs
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.*
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.GradleImportIR
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.irsList
import org.jetbrains.kotlin.tools.projectWizard.library.MavenArtifact
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.*
import org.jetbrains.kotlin.tools.projectWizard.mpp.applyMppStructure
import org.jetbrains.kotlin.tools.projectWizard.mpp.mppSources
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleSubType
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ProjectKind
import org.jetbrains.kotlin.tools.projectWizard.plugins.pomIR
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.DefaultRepository
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Repositories
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.SourcesetType
import org.jetbrains.kotlin.tools.projectWizard.settings.javaPackage
import org.jetbrains.kotlin.tools.projectWizard.templates.FileTemplateDescriptor
import org.jetbrains.kotlin.tools.projectWizard.templates.Template
class ComposeMppModuleTemplate : Template() {
@NonNls
override val id: String = "composeMppModule"
override val title: String = KotlinNewProjectWizardBundle.message("module.template.compose.mpp.title")
override val description: String = KotlinNewProjectWizardBundle.message("module.template.compose.mpp.description")
override fun isApplicableTo(module: Module, projectKind: ProjectKind, reader: Reader): Boolean =
module.configurator == MppModuleConfigurator && projectKind == ProjectKind.COMPOSE
override fun Writer.getIrsToAddToBuildFile(module: ModuleIR): List<BuildSystemIR> = irsList {
+GradleImportIR("org.jetbrains.compose.compose")
+GradleOnlyPluginByNameIR("org.jetbrains.compose", version = Versions.JETBRAINS_COMPOSE)
+RepositoryIR(Repositories.JETBRAINS_COMPOSE_DEV)
+RepositoryIR(DefaultRepository.GOOGLE)
}
override fun Reader.updateModuleIR(module: ModuleIR): ModuleIR = when (module.originalModule.configurator) {
CommonTargetConfigurator -> module.withIrs(
CustomGradleDependencyDependencyIR("compose.runtime", DependencyType.MAIN, DependencyKind.api),
CustomGradleDependencyDependencyIR("compose.foundation", DependencyType.MAIN, DependencyKind.api),
CustomGradleDependencyDependencyIR("compose.material", DependencyType.MAIN, DependencyKind.api),
)
AndroidTargetConfigurator -> module.withIrs(
AndroidSinglePlatformModuleConfigurator.DEPENDENCIES.APP_COMPAT.withDependencyKind(DependencyKind.api),
DEPENDENCIES.ANDROID_KTX.withDependencyKind(DependencyKind.api)
).withoutIrs { it == AndroidModuleConfigurator.DEPENDENCIES.MATERIAL }
JvmTargetConfigurator -> module.withIrs(
CustomGradleDependencyDependencyIR("compose.preview", DependencyType.MAIN, DependencyKind.api),
)
else -> module
}
override fun Writer.runArbitratyTask(module: ModuleIR): TaskResult<Unit> {
val webSubmodule = module.originalModule.subModules.filter({ it.template is ComposeWebModuleTemplate }).firstOrNull()
if (webSubmodule != null) return UNIT_SUCCESS //disabling platform.kt creation for web module
return inContextOfModuleConfigurator(module.originalModule) {
val javaPackage = module.originalModule.javaPackage(pomIR())
val mpp = mppSources(javaPackage) {
mppFile("platform.kt") {
function("getPlatformName(): String") {
actualFor(ModuleSubType.jvm, actualBody = """return "Desktop" """)
actualFor(ModuleSubType.android, actualBody = """return "Android" """)
default("""return "Platform" """)
}
}
filesFor(ModuleSubType.common) {
file(FileTemplateDescriptor("composeMpp/App.kt.vm", relativePath = null), "App.kt", SourcesetType.main)
}
filesFor(ModuleSubType.jvm) {
file(FileTemplateDescriptor("composeMpp/DesktopApp.kt.vm", relativePath = null), "DesktopApp.kt", SourcesetType.main)
}
}
applyMppStructure(mpp, module.originalModule, module.path)
}
}
object DEPENDENCIES {
val ANDROID_KTX = ArtifactBasedLibraryDependencyIR(
MavenArtifact(DefaultRepository.GOOGLE, "androidx.core", "core-ktx"),
version = Versions.ANDROID.ANDROIDX_KTX,
dependencyType = DependencyType.MAIN
)
}
}
@@ -1,56 +0,0 @@
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package org.jetbrains.kotlin.tools.projectWizard.templates.compose
import org.jetbrains.annotations.NonNls
import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle
import org.jetbrains.kotlin.tools.projectWizard.Versions
import org.jetbrains.kotlin.tools.projectWizard.core.*
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.*
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.GradleImportIR
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.irsList
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.*
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemPlugin
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ProjectKind
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.*
import org.jetbrains.kotlin.tools.projectWizard.templates.*
object ComposeWebModuleTemplate : Template() {
@NonNls
override val id: String = "composeWebTemplate"
override val title: String = KotlinNewProjectWizardBundle.message("module.template.compose.web.title")
override val description: String = KotlinNewProjectWizardBundle.message("module.template.compose.web.description")
override fun isApplicableTo(module: Module, projectKind: ProjectKind, reader: Reader): Boolean =
module.configurator.moduleType == ModuleType.js
&& projectKind == ProjectKind.COMPOSE
&& when (module.configurator) {
JsComposeMppConfigurator -> true
else -> false
}
override fun Writer.getIrsToAddToBuildFile(
module: ModuleIR
) = irsList {
+RepositoryIR(Repositories.JETBRAINS_COMPOSE_DEV)
+RepositoryIR(DefaultRepository.GOOGLE)
//+GradleOnlyPluginByNameIR("org.jetbrains.compose", version = Versions.JETBRAINS_COMPOSE) //this module is intended to be used inside Compose MPP module!
+GradleImportIR("org.jetbrains.compose.compose")
}
override fun Writer.getRequiredLibraries(module: ModuleIR): List<DependencyIR> = listOf(
CustomGradleDependencyDependencyIR("compose.web.core", dependencyType = DependencyType.MAIN, DependencyKind.implementation),
CustomGradleDependencyDependencyIR("compose.runtime", dependencyType = DependencyType.MAIN, DependencyKind.implementation),
CustomGradleDependencyDependencyIR("kotlin(\"test-js\")", dependencyType = DependencyType.TEST, DependencyKind.implementation)
)
override fun Writer.runArbitratyTask(module: ModuleIR): TaskResult<Unit> =
BuildSystemPlugin.pluginRepositoreis.addValues(Repositories.JETBRAINS_COMPOSE_DEV)
override fun Reader.getFileTemplates(module: ModuleIR) = buildList<FileTemplateDescriptorWithPath> {
+(FileTemplateDescriptor("$id/main.kt", "Main.kt".asPath()) asSrcOf SourcesetType.main)
+(FileTemplateDescriptor("$id/index.html.vm") asResourceOf SourcesetType.main)
}
}
@@ -23,10 +23,6 @@ private const val SNAPSHOT_TAG = "snapshot"
class IdeaKotlinVersionProviderService : KotlinVersionProviderService(), IdeaWizardService {
override fun getKotlinVersion(projectKind: ProjectKind): WizardKotlinVersion {
if (projectKind == ProjectKind.COMPOSE) {
val version = Versions.KOTLIN_VERSION_FOR_COMPOSE
return kotlinVersionWithDefaultValues(version)
}
val version = getPatchedKotlinVersion()
?: getKotlinVersionFromCompiler()
?: VersionsDownloader.downloadLatestEapOrStableKotlinVersion()
@@ -106,9 +106,6 @@ private val ProjectTemplate.icon: Icon?
FrontendApplicationProjectTemplate -> KotlinIcons.Wizard.JS
ReactApplicationProjectTemplate -> KotlinIcons.Wizard.REACT_JS
NodeJsApplicationProjectTemplate -> KotlinIcons.Wizard.NODE_JS
ComposeDesktopApplicationProjectTemplate -> KotlinIcons.Wizard.COMPOSE
ComposeMultiplatformApplicationProjectTemplate -> KotlinIcons.Wizard.COMPOSE
ComposeWebApplicationProjectTemplate -> KotlinIcons.Wizard.COMPOSE
else -> null
}
@@ -77,7 +77,6 @@ abstract class AbstractBuildFileGenerationTest : UsefulTestCase() {
KOTLIN_REPO_BOOTSTRAP_PLACEHOLDER
)
.replace("gradle-${Versions.GRADLE.text}-bin.zip", "gradle-GRADLE_VERSION-bin.zip")
.replace("gradle-${Versions.GRADLE_VERSION_FOR_COMPOSE.text}-bin.zip", "gradle-GRADLE_VERSION_FOR_COMPOSE-bin.zip")
}
additionalChecks(expectedDirectory, tempDirectory)
}
@@ -3,8 +3,6 @@
package org.jetbrains.kotlin.tools.projectWizard.cli
import org.jetbrains.kotlin.idea.codeInsight.gradle.KotlinGradlePluginVersions
import org.jetbrains.kotlin.tools.projectWizard.Versions
import org.jetbrains.kotlin.tools.projectWizard.core.service.EapVersionDownloader
import org.jetbrains.kotlin.tools.projectWizard.core.service.WizardKotlinVersion
import org.jetbrains.kotlin.tools.projectWizard.core.service.KotlinVersionProviderService
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ProjectKind
@@ -12,25 +10,22 @@ import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.*
import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version
class KotlinVersionProviderTestWizardService : KotlinVersionProviderService(), TestWizardService {
override fun getKotlinVersion(projectKind: ProjectKind): WizardKotlinVersion =
if (projectKind == ProjectKind.COMPOSE) {
kotlinVersionWithDefaultValues(Versions.KOTLIN_VERSION_FOR_COMPOSE)
} else {
val repositories = listOf(
Repositories.JETBRAINS_KOTLIN_BOOTSTRAP,
getKotlinVersionRepository(TEST_KOTLIN_VERSION),
DefaultRepository.MAVEN_LOCAL
)
WizardKotlinVersion(
TEST_KOTLIN_VERSION,
override fun getKotlinVersion(projectKind: ProjectKind): WizardKotlinVersion {
val repositories = listOf(
Repositories.JETBRAINS_KOTLIN_BOOTSTRAP,
getKotlinVersionRepository(TEST_KOTLIN_VERSION),
DefaultRepository.MAVEN_LOCAL
)
return WizardKotlinVersion(
TEST_KOTLIN_VERSION,
getKotlinVersionKind(TEST_KOTLIN_VERSION),
repositories,
getBuildSystemPluginRepository(
getKotlinVersionKind(TEST_KOTLIN_VERSION),
repositories,
getBuildSystemPluginRepository(
getKotlinVersionKind(TEST_KOTLIN_VERSION),
repositories
),
)
}
repositories
),
)
}
companion object {
val TEST_KOTLIN_VERSION by lazy {
@@ -23,16 +23,6 @@ public class ProjectTemplateBuildFileGenerationTestGenerated extends AbstractPro
KotlinTestUtils.runTest(this::doTest, this, testDataFilePath);
}
@TestMetadata("composeDesktopApplication")
public void testComposeDesktopApplication() throws Exception {
runTest("testData/projectTemplatesBuildFileGeneration/composeDesktopApplication/");
}
@TestMetadata("composeMultiplatformApplication")
public void testComposeMultiplatformApplication() throws Exception {
runTest("testData/projectTemplatesBuildFileGeneration/composeMultiplatformApplication/");
}
@TestMetadata("consoleApplication")
public void testConsoleApplication() throws Exception {
runTest("testData/projectTemplatesBuildFileGeneration/consoleApplication/");
@@ -25,16 +25,6 @@ public abstract class ProjectTemplateNewWizardProjectImportTestGenerated extends
KotlinTestUtils.runTest(this::doTestGradleKts, this, testDataFilePath);
}
@TestMetadata("composeDesktopApplication")
public void testComposeDesktopApplication() throws Exception {
runTest("testData/projectTemplatesBuildFileGeneration/composeDesktopApplication/");
}
@TestMetadata("composeMultiplatformApplication")
public void testComposeMultiplatformApplication() throws Exception {
runTest("testData/projectTemplatesBuildFileGeneration/composeMultiplatformApplication/");
}
@TestMetadata("consoleApplication")
public void testConsoleApplication() throws Exception {
runTest("testData/projectTemplatesBuildFileGeneration/consoleApplication/");
@@ -68,16 +58,6 @@ public abstract class ProjectTemplateNewWizardProjectImportTestGenerated extends
KotlinTestUtils.runTest(this::doTestGradleGroovy, this, testDataFilePath);
}
@TestMetadata("composeDesktopApplication")
public void testComposeDesktopApplication() throws Exception {
runTest("testData/projectTemplatesBuildFileGeneration/composeDesktopApplication/");
}
@TestMetadata("composeMultiplatformApplication")
public void testComposeMultiplatformApplication() throws Exception {
runTest("testData/projectTemplatesBuildFileGeneration/composeMultiplatformApplication/");
}
@TestMetadata("consoleApplication")
public void testConsoleApplication() throws Exception {
runTest("testData/projectTemplatesBuildFileGeneration/consoleApplication/");
@@ -111,16 +91,6 @@ public abstract class ProjectTemplateNewWizardProjectImportTestGenerated extends
KotlinTestUtils.runTest(this::doTestMaven, this, testDataFilePath);
}
@TestMetadata("composeDesktopApplication")
public void testComposeDesktopApplication() throws Exception {
runTest("testData/projectTemplatesBuildFileGeneration/composeDesktopApplication/");
}
@TestMetadata("composeMultiplatformApplication")
public void testComposeMultiplatformApplication() throws Exception {
runTest("testData/projectTemplatesBuildFileGeneration/composeMultiplatformApplication/");
}
@TestMetadata("consoleApplication")
public void testConsoleApplication() throws Exception {
runTest("testData/projectTemplatesBuildFileGeneration/consoleApplication/");
@@ -1,32 +0,0 @@
import org.jetbrains.compose.compose
plugins {
id 'org.jetbrains.kotlin.jvm' version '1.4.0'
id 'org.jetbrains.compose' version '0.1.0-build63'
id 'application'
}
group = 'me.user'
version = '1.0-SNAPSHOT'
repositories {
jcenter()
mavenCentral()
maven { url 'https://maven.pkg.jetbrains.space/public/p/compose/dev' }
}
dependencies {
implementation compose.desktop.all
}
compileKotlin {
kotlinOptions.jvmTarget = '1.8'
}
compileTestKotlin {
kotlinOptions.jvmTarget = '1.8'
}
application {
mainClassName = 'MainKt'
}
@@ -1,36 +0,0 @@
import org.jetbrains.compose.compose
import org.jetbrains.compose.desktop.application.dsl.TargetFormat
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
kotlin("jvm") version "1.6.10"
id("org.jetbrains.compose") version "1.1.1"
}
group = "me.user"
version = "1.0"
repositories {
google()
mavenCentral()
maven("https://maven.pkg.jetbrains.space/public/p/compose/dev")
}
dependencies {
implementation(compose.desktop.currentOs)
}
tasks.withType<KotlinCompile> {
kotlinOptions.jvmTarget = "11"
}
compose.desktop {
application {
mainClass = "MainKt"
nativeDistributions {
targetFormats(TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.Deb)
packageName = "composeDesktopApplication"
packageVersion = "1.0.0"
}
}
}
@@ -1,5 +0,0 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-GRADLE_VERSION-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
@@ -1,2 +0,0 @@
// runForGradleGroovy false
// keepKotlinVersion true
@@ -1,9 +0,0 @@
pluginManagement {
repositories {
gradlePluginPortal()
mavenCentral()
maven { url 'https://maven.pkg.jetbrains.space/public/p/compose/dev' }
}
}
rootProject.name = 'composeDesktopApplication'
@@ -1,9 +0,0 @@
pluginManagement {
repositories {
google()
gradlePluginPortal()
maven("https://maven.pkg.jetbrains.space/public/p/compose/dev")
}
}
rootProject.name = "composeDesktopApplication"
@@ -1,32 +0,0 @@
plugins {
id 'org.jetbrains.compose' version '0.1.0-build63'
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
}
group = 'me.user'
version = '1.0-SNAPSHOT'
repositories {
google()
}
dependencies {
implementation project(':common')
}
android {
compileSdkVersion 30
defaultConfig {
applicationId 'me.user.android'
minSdkVersion 24
targetSdkVersion 30
versionCode 1
versionName '1.0'
}
buildTypes {
'release' {
minifyEnabled false
}
}
}
@@ -1,37 +0,0 @@
plugins {
id("org.jetbrains.compose") version "1.1.1"
id("com.android.application")
kotlin("android")
}
group = "me.user"
version = "1.0"
repositories {
jcenter()
}
dependencies {
implementation(project(":common"))
implementation("androidx.activity:activity-compose:1.4.0")
}
android {
compileSdkVersion(31)
defaultConfig {
applicationId = "me.user.android"
minSdkVersion(24)
targetSdkVersion(31)
versionCode = 1
versionName = "1.0"
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
buildTypes {
getByName("release") {
isMinifyEnabled = false
}
}
}
@@ -1,23 +0,0 @@
buildscript {
repositories {
gradlePluginPortal()
jcenter()
google()
mavenCentral()
}
dependencies {
classpath('org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.0')
classpath('com.android.tools.build:gradle:4.0.1')
}
}
group = 'me.user'
version = '1.0-SNAPSHOT'
allprojects {
repositories {
jcenter()
mavenCentral()
maven { url 'https://maven.pkg.jetbrains.space/public/p/compose/dev' }
}
}
@@ -1,23 +0,0 @@
buildscript {
repositories {
gradlePluginPortal()
jcenter()
google()
mavenCentral()
}
dependencies {
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.10")
classpath("com.android.tools.build:gradle:7.0.4")
}
}
group = "me.user"
version = "1.0"
allprojects {
repositories {
google()
mavenCentral()
maven("https://maven.pkg.jetbrains.space/public/p/compose/dev")
}
}
@@ -1,61 +0,0 @@
import org.jetbrains.compose.compose
plugins {
id 'org.jetbrains.kotlin.multiplatform'
id 'org.jetbrains.compose' version '0.1.0-build63'
id 'com.android.library'
}
group = 'me.user'
version = '1.0-SNAPSHOT'
repositories {
google()
}
kotlin {
android()
jvm('desktop') {
compilations.all {
kotlinOptions.jvmTarget = '1.8'
}
}
sourceSets {
commonMain {
dependencies {
api compose.runtime
api compose.foundation
api compose.material
}
}
commonTest {
}
androidMain {
dependencies {
api 'androidx.appcompat:appcompat:1.2.0'
api 'androidx.core:core-ktx:1.3.1'
}
}
androidTest {
dependencies {
implementation 'junit:junit:4.13'
}
}
desktopMain {
}
desktopTest {
}
}
}
android {
compileSdkVersion 30
sourceSets.main.manifest.srcFile('src/androidMain/AndroidManifest.xml')
defaultConfig {
minSdkVersion 24
targetSdkVersion 30
}
}
@@ -1,63 +0,0 @@
import org.jetbrains.compose.compose
plugins {
kotlin("multiplatform")
id("org.jetbrains.compose") version "1.1.1"
id("com.android.library")
}
group = "me.user"
version = "1.0"
kotlin {
android()
jvm("desktop") {
compilations.all {
kotlinOptions.jvmTarget = "11"
}
}
sourceSets {
val commonMain by getting {
dependencies {
api(compose.runtime)
api(compose.foundation)
api(compose.material)
}
}
val commonTest by getting {
dependencies {
implementation(kotlin("test"))
}
}
val androidMain by getting {
dependencies {
api("androidx.appcompat:appcompat:1.4.1")
api("androidx.core:core-ktx:1.7.0")
}
}
val androidTest by getting {
dependencies {
implementation("junit:junit:4.13.2")
}
}
val desktopMain by getting {
dependencies {
api(compose.preview)
}
}
val desktopTest by getting
}
}
android {
compileSdkVersion(31)
sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml")
defaultConfig {
minSdkVersion(24)
targetSdkVersion(31)
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
}
@@ -1,27 +0,0 @@
import org.jetbrains.compose.compose
plugins {
id 'org.jetbrains.kotlin.jvm'
id 'org.jetbrains.compose' version '0.1.0-build63'
id 'application'
}
group = 'me.user'
version = '1.0-SNAPSHOT'
dependencies {
implementation project(':common')
implementation compose.desktop.all
}
compileKotlin {
kotlinOptions.jvmTarget = '1.8'
}
compileTestKotlin {
kotlinOptions.jvmTarget = '1.8'
}
application {
mainClassName = 'MainKt'
}
@@ -1,39 +0,0 @@
import org.jetbrains.compose.compose
import org.jetbrains.compose.desktop.application.dsl.TargetFormat
plugins {
kotlin("multiplatform")
id("org.jetbrains.compose") version "1.1.1"
}
group = "me.user"
version = "1.0"
kotlin {
jvm {
compilations.all {
kotlinOptions.jvmTarget = "11"
}
withJava()
}
sourceSets {
val jvmMain by getting {
dependencies {
implementation(project(":common"))
implementation(compose.desktop.currentOs)
}
}
val jvmTest by getting
}
}
compose.desktop {
application {
mainClass = "MainKt"
nativeDistributions {
targetFormats(TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.Deb)
packageName = "jvm"
packageVersion = "1.0.0"
}
}
}
@@ -1,4 +0,0 @@
kotlin.code.style=official
android.useAndroidX=true
kotlin.mpp.enableGranularSourceSetsMetadata=true
kotlin.native.enableDependencyPropagation=false
@@ -1,5 +0,0 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-GRADLE_VERSION-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
@@ -1,16 +0,0 @@
pluginManagement {
repositories {
google()
jcenter()
gradlePluginPortal()
mavenCentral()
maven { url 'https://maven.pkg.jetbrains.space/public/p/compose/dev' }
}
}
rootProject.name = 'composeMultiplatformApplication'
include(':android')
include(':desktop')
include(':common')
@@ -1,16 +0,0 @@
pluginManagement {
repositories {
google()
jcenter()
gradlePluginPortal()
mavenCentral()
maven("https://maven.pkg.jetbrains.space/public/p/compose/dev")
}
}
rootProject.name = "composeMultiplatformApplication"
include(":android")
include(":desktop")
include(":common")
@@ -1,2 +0,0 @@
// runForGradleGroovy false
// keepKotlinVersion true