Wizard: move core module UI texts to bundles
This commit is contained in:
-5
@@ -1,5 +0,0 @@
|
||||
module.kind.android.module=Android Module
|
||||
module.kind.js.module=JS Module
|
||||
module.kind.module=Module
|
||||
module.kind.mpp.module=MPP Module
|
||||
module.kind.target=Target
|
||||
+2
-1
@@ -11,6 +11,7 @@ module.dependencies.module.dependencies=Module dependencies
|
||||
module.dependencies.add.module.dependency=Add module dependency
|
||||
module.dependencies.remove.module.dependency=Remove module dependency
|
||||
|
||||
editor.modules.add=Add {0}
|
||||
editor.modules.remove.selected.module=Do you want to remove selected {0}
|
||||
editor.modules.remove.selected.submodules=This will also remove all submodules.
|
||||
editor.modules.remove.selected.no.undone=This action cannot be undone.
|
||||
@@ -21,7 +22,7 @@ editor.modules.remove.tooltip=Remove {0}
|
||||
|
||||
editor.modules.project=Project
|
||||
editor.modules.add.module=Add a module to the project
|
||||
editor.modules.no.modules=No modules created
|
||||
editor.modules.no.modules=No modules created
|
||||
|
||||
module.settings.name=Name
|
||||
module.settings.name.same.as.project=[The same as the project name]
|
||||
|
||||
+1
-2
@@ -5,13 +5,12 @@ import com.intellij.openapi.ui.popup.ListPopup
|
||||
import com.intellij.openapi.ui.popup.PopupStep
|
||||
import com.intellij.openapi.ui.popup.util.BaseListPopupStep
|
||||
import com.intellij.ui.popup.PopupFactoryImpl
|
||||
import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.buildList
|
||||
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.*
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.ModuleKind
|
||||
import org.jetbrains.kotlin.tools.projectWizard.wizard.KotlinNewProjectWizardBundle
|
||||
import org.jetbrains.kotlin.tools.projectWizard.wizard.KotlinNewProjectWizardUIBundle
|
||||
import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.fullTextHtml
|
||||
import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.icon
|
||||
import javax.swing.Icon
|
||||
|
||||
+5
-2
@@ -4,6 +4,7 @@ import com.intellij.icons.AllIcons
|
||||
import com.intellij.openapi.actionSystem.ActionToolbarPosition
|
||||
import com.intellij.openapi.ui.Messages
|
||||
import com.intellij.ui.ToolbarDecorator
|
||||
import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle
|
||||
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.AndroidSinglePlatformModuleConfigurator
|
||||
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.IOSSinglePlatformModuleConfigurator
|
||||
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.JsSingleplatformModuleConfigurator
|
||||
@@ -12,7 +13,6 @@ import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.withAllSubModules
|
||||
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.Sourceset
|
||||
import org.jetbrains.kotlin.tools.projectWizard.wizard.KotlinNewProjectWizardBundle
|
||||
import org.jetbrains.kotlin.tools.projectWizard.wizard.KotlinNewProjectWizardUIBundle
|
||||
import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.createPanelWithPopupHandler
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
||||
@@ -58,7 +58,7 @@ class ModulesEditorToolbarDecorator(
|
||||
null -> true
|
||||
else -> false
|
||||
}
|
||||
text = "Add" + " " + when (tree.selectedSettingItem?.safeAs<Module>()?.kind) {
|
||||
val moduleKindTextToAdd = when (tree.selectedSettingItem?.safeAs<Module>()?.kind) {
|
||||
ModuleKind.multiplatform -> KotlinNewProjectWizardBundle.message("module.kind.target")
|
||||
ModuleKind.singleplatformJvm -> KotlinNewProjectWizardBundle.message("module.kind.module")
|
||||
ModuleKind.singleplatformJs -> KotlinNewProjectWizardBundle.message("module.kind.js.module")
|
||||
@@ -66,9 +66,12 @@ class ModulesEditorToolbarDecorator(
|
||||
ModuleKind.target -> ""
|
||||
null -> ""
|
||||
}
|
||||
|
||||
text = KotlinNewProjectWizardUIBundle.message("editor.modules.add", moduleKindTextToAdd)
|
||||
}
|
||||
event.presentation.isEnabled
|
||||
}
|
||||
|
||||
setRemoveAction {
|
||||
val moduleKindText = selectedModuleKindText ?: KotlinNewProjectWizardBundle.message("module.kind.module")
|
||||
if (Messages.showOkCancelDialog(
|
||||
|
||||
@@ -8,7 +8,7 @@ dependencies {
|
||||
compileOnly(project(":kotlin-reflect-api"))
|
||||
|
||||
//needed only for message bundles
|
||||
implementation(intellijCoreDep())
|
||||
implementation(intellijDep()) { includeJars("util") }
|
||||
|
||||
testImplementation(project(":kotlin-test:kotlin-test-junit"))
|
||||
testImplementation(commonDep("junit:junit"))
|
||||
|
||||
+148
@@ -0,0 +1,148 @@
|
||||
buildsystem.type.gradle.groovy=Gradle Groovy
|
||||
buildsystem.type.gradle.kotlin=Gradle Kotlin
|
||||
buildsystem.type.intellij=IntelliJ
|
||||
buildsystem.type.maven=Maven
|
||||
|
||||
error.template.not.found=Template with an id {0} is not found
|
||||
error.required.settings.are.not.present=The following required settings is not present
|
||||
error.configurator.not.found=Module type {0} was not found
|
||||
error.invalid.module.dependency=Invalid module dependency from module {0} to {1}
|
||||
|
||||
module.configuration.group.android.native=Android Native
|
||||
module.configuration.group.ios=iOS
|
||||
module.configuration.group.linux=Linux
|
||||
module.configuration.group.macos=macOS
|
||||
module.configuration.group.windows.mingw=Windows (MinGW)
|
||||
|
||||
module.kind.android.module=Android Module
|
||||
module.kind.ios.module=iOS Module
|
||||
module.kind.js.module=JS Module
|
||||
module.kind.module=Module
|
||||
module.kind.mpp.module=MPP Module
|
||||
module.kind.target=Target
|
||||
|
||||
plugin.buildsystem.setting.type=Build System
|
||||
plugin.buildsystem.setting.type.error.wrong.project.kind={0} cannot be generated using {1}
|
||||
|
||||
plugin.kotlin.downloading.kotlin.versions=Downloading list of Kotlin versions
|
||||
plugin.kotlin.setting.modules=Modules
|
||||
plugin.kotlin.setting.modules.error.duplicated.modules=There are {0} modules with name {1}
|
||||
plugin.kotlin.setting.modules.error.duplicated.targets=There are {0} targets with name {1}
|
||||
|
||||
plugin.kotlin.setting.project.kind=Project Kind
|
||||
|
||||
project.kind.android=Android project
|
||||
project.kind.kotlin.js=Kotlin/JS project
|
||||
project.kind.multiplatform=Multiplatform project
|
||||
project.kind.singleplatform=Singleplatform project
|
||||
|
||||
project=Project
|
||||
|
||||
plugin.structure.setting.location=Location
|
||||
plugin.structure.setting.name=Name
|
||||
plugin.structure.setting.group.id=Group ID
|
||||
plugin.structure.setting.artifact.id=Artifact ID
|
||||
plugin.structure.setting.version=Version
|
||||
|
||||
plugin.android.setting.sdk=Android SDK
|
||||
|
||||
|
||||
validation.should.not.be.blank={0} should not be blank
|
||||
validation.identifier={0} should consist only of letters, digits{1}
|
||||
validation.identifier.additional.symbols=", and symbols: {0}
|
||||
validation.file.should.exists=File for {0} should exists
|
||||
|
||||
version.error.bad.format=Bad version format for setting {0}
|
||||
parse.error.no.value.for.key=No value was found for a key {0}
|
||||
|
||||
module.type.jvm=Kotlin/JVM
|
||||
module.type.js=Kotlin/JS
|
||||
module.type.common=Common
|
||||
module.type.android=Android
|
||||
module.type.native=Kotlin/Native
|
||||
|
||||
module.type.ios=iOS
|
||||
|
||||
module.name=Module name
|
||||
module.name.with.name=Module name {0}
|
||||
|
||||
module.configurator.js=JS for Browser
|
||||
|
||||
module.configurator.android=Android
|
||||
module.configurator.android.setting.android.plugin=Android Plugin
|
||||
module.configurator.android.setting.android.plugin.application=Android Application
|
||||
module.configurator.android.setting.android.plugin.library=Android
|
||||
|
||||
module.configurator.common=Common
|
||||
|
||||
module.configurator.jvm=JVM
|
||||
module.configurator.jvm.setting.target.jvm.version=Target JVM Version
|
||||
module.configurator.jvm.setting.java.support=Java language support
|
||||
|
||||
module.configurator.mpp=Multiplatform
|
||||
module.configurator.ios=IOS
|
||||
module.configurator.ios.requires.xcode=Requires Xcode
|
||||
|
||||
module.configurator.js.browser=Browser
|
||||
module.configurator.js.node=Node.js
|
||||
|
||||
module.configurator.tests.setting.framework=Test Framework
|
||||
module.configurator.tests.setting.framework.junit4=JUnit 4
|
||||
module.configurator.tests.setting.framework.junit5=JUnit 5
|
||||
module.configurator.tests.setting.framework.test.ng=Test NG
|
||||
module.configurator.tests.setting.framework.js=JavaScript
|
||||
module.configurator.tests.setting.framework.common=common
|
||||
module.configurator.native.for.current.system=Your system
|
||||
|
||||
project.template.empty.singleplatform.title=Backend Application
|
||||
project.template.empty.singleplatform.description=Create a backend application with Kotlin/JVM.
|
||||
|
||||
project.template.empty.mpp.title=Multiplatform Application
|
||||
project.template.empty.mpp.description=Create applications for different platforms that support sharing common code.
|
||||
|
||||
project.template.empty.jvm.console.title=Console Application
|
||||
project.template.empty.jvm.console.description=Create a console application with Kotlin/JVM. Use it for prototyping or testing purposes.
|
||||
|
||||
project.template.mpp.lib.title=Multiplatform Library
|
||||
project.template.mpp.lib.description=Create a library for sharing common code among different platforms.
|
||||
|
||||
project.template.full.stack.title=Full-Stack Web Application
|
||||
project.template.full.stack.description=Create a fully-functional web application using Kotlin/JS for the frontend and Kotlin/JVM for the backend.
|
||||
|
||||
project.template.native.console.title=Native Application
|
||||
project.template.native.console.description=Create an application with Kotlin/Native that works as a standalone application under a specific platform.
|
||||
|
||||
project.template.frontend.title=Frontend Application
|
||||
project.template.frontend.description=Create a frontend application with Kotlin/JS if you already have a backend.
|
||||
|
||||
project.template.mpp.mobile.title=Multiplatform Mobile Application
|
||||
project.template.mpp.mobile.description=Create mobile applications for iOS and Android with Kotlin Multiplatform Mobile, which supports sharing common code between platforms.
|
||||
|
||||
project.template.mpp.mobile.lib.title=Multiplatform Mobile Library
|
||||
project.template.mpp.mobile.lib.description=Create a library that supports sharing code between iOS and Android.
|
||||
|
||||
|
||||
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.ktor.server.title=Ktor Server
|
||||
module.template.ktor.server.description=Configurable Ktor web server for building web applications
|
||||
module.template.ktor.server.setting.engine=Ktor Server Engine
|
||||
module.template.ktor.server.setting.engine.netty=Netty
|
||||
module.template.ktor.server.setting.engine.tomcat=Tomcat
|
||||
module.template.ktor.server.setting.engine.jetty=Jetty
|
||||
|
||||
module.template.native.console.title=Native Application
|
||||
module.template.native.console.description=Simple Kotlin/Native application for your operating system
|
||||
|
||||
module.template.js.simple.title=Frontend Application
|
||||
module.template.js.simple.description=Configurable Kotlin/JS frontend application
|
||||
module.template.js.simple.run.configuration.dev=BrowserDevelopmentRun in continuous mode
|
||||
module.template.js.simple.run.configuration.prod=BrowserProductionRun in continuous mode
|
||||
module.template.js.simple.setting.rendering.engine=Rendering engine
|
||||
module.template.js.simple.setting.rendering.kotlinx.html=Use statically typed Kotlinx.html DSL
|
||||
module.template.js.simple.setting.rendering.react=Use Kotlin-wrapped React library
|
||||
module.template.js.simple.setting.rendering.react.styled=Use Kotlin-wrapped React framework together with Styled Components
|
||||
|
||||
|
||||
|
||||
+6
-2
@@ -5,12 +5,16 @@
|
||||
|
||||
package org.jetbrains.kotlin.tools.projectWizard
|
||||
|
||||
import org.jetbrains.annotations.Nls
|
||||
import org.jetbrains.annotations.NonNls
|
||||
|
||||
interface WizardRunConfiguration {
|
||||
@get:Nls
|
||||
val configurationName: String
|
||||
}
|
||||
|
||||
data class WizardGradleRunConfiguration(
|
||||
override val configurationName: String,
|
||||
val taskName: String,
|
||||
@Nls override val configurationName: String,
|
||||
@NonNls val taskName: String,
|
||||
val parameters: List<String>
|
||||
) : WizardRunConfiguration
|
||||
+3
-3
@@ -3,16 +3,16 @@
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.tools.projectWizard.wizard
|
||||
package org.jetbrains.kotlin.tools.projectWizard
|
||||
|
||||
import org.jetbrains.annotations.NonNls
|
||||
import org.jetbrains.annotations.PropertyKey
|
||||
import org.jetbrains.kotlin.util.AbstractKotlinBundle
|
||||
import com.intellij.AbstractBundle
|
||||
|
||||
@NonNls
|
||||
private const val BUNDLE = "messages.KotlinNewProjectWizardBundle"
|
||||
|
||||
object KotlinNewProjectWizardBundle : AbstractKotlinBundle(BUNDLE) {
|
||||
object KotlinNewProjectWizardBundle : AbstractBundle(BUNDLE) {
|
||||
@JvmStatic
|
||||
fun message(@NonNls @PropertyKey(resourceBundle = BUNDLE) key: String, vararg params: Any): String = getMessage(key, *params)
|
||||
}
|
||||
+3
@@ -1,6 +1,9 @@
|
||||
package org.jetbrains.kotlin.tools.projectWizard.core
|
||||
|
||||
import org.jetbrains.annotations.NonNls
|
||||
|
||||
interface EntitiesOwnerDescriptor {
|
||||
@get:NonNls
|
||||
val id: String
|
||||
}
|
||||
|
||||
|
||||
+15
-14
@@ -1,5 +1,6 @@
|
||||
package org.jetbrains.kotlin.tools.projectWizard.core
|
||||
|
||||
import org.jetbrains.annotations.NonNls
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.SettingReference
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem
|
||||
import org.jetbrains.kotlin.tools.projectWizard.templates.Template
|
||||
@@ -22,7 +23,7 @@ fun ParsingState.withSettings(newSettings: List<Pair<SettingReference<*, *>, Any
|
||||
typealias ParsingContext = ComputeContext<ParsingState>
|
||||
|
||||
abstract class Parser<out T : Any> {
|
||||
abstract fun ParsingContext.parse(value: Any?, path: String): TaskResult<T>
|
||||
abstract fun ParsingContext.parse(value: Any?, @NonNls path: String): TaskResult<T>
|
||||
}
|
||||
|
||||
fun <T : Any> alwaysFailingParser(errorMessage: String) = object : Parser<T>() {
|
||||
@@ -33,7 +34,7 @@ fun <T : Any> alwaysFailingParser(errorMessage: String) = object : Parser<T>() {
|
||||
}
|
||||
|
||||
|
||||
fun <T : Any> Parser<T>.parse(context: ParsingContext, value: Any?, path: String) =
|
||||
fun <T : Any> Parser<T>.parse(context: ParsingContext, value: Any?, @NonNls path: String) =
|
||||
with(context) { parse(value, path) }
|
||||
|
||||
inline fun <reified E> enumParser(): Parser<E> where E : Enum<E>, E : DisplayableSettingItem = object : Parser<E>() {
|
||||
@@ -90,31 +91,31 @@ inline fun <reified T : Any> valueParser() = valueParser { value, path ->
|
||||
value.parseAs(path, T::class).get()
|
||||
}
|
||||
|
||||
fun Any?.classMismatchError(path: String, expected: KClass<*>): ParseError {
|
||||
fun Any?.classMismatchError(@NonNls path: String, expected: KClass<*>): ParseError {
|
||||
val classpath = this?.let { it::class.simpleName } ?: "null"
|
||||
return ParseError("Expected ${expected.simpleName!!} for `$path` but $classpath was found")
|
||||
}
|
||||
|
||||
inline fun <reified V : Any> Any?.parseAs(path: String) =
|
||||
inline fun <reified V : Any> Any?.parseAs(@NonNls path: String) =
|
||||
safeAs<V>().toResult { classMismatchError(path, V::class) }
|
||||
|
||||
|
||||
inline fun <reified T : Any> Any?.parseAs(path: String, klass: KClass<T>): TaskResult<T> =
|
||||
inline fun <reified T : Any> Any?.parseAs(@NonNls path: String, klass: KClass<T>): TaskResult<T> =
|
||||
this?.takeIf { it::class.isSubclassOf(klass) }?.safeAs<T>()
|
||||
.toResult { classMismatchError(path, klass) }
|
||||
|
||||
|
||||
inline fun <reified V : Any> Map<*, *>.parseValue(path: String, name: String) =
|
||||
inline fun <reified V : Any> Map<*, *>.parseValue(@NonNls path: String, @NonNls name: String) =
|
||||
get(name).parseAs<V>("$path.$name")
|
||||
|
||||
inline fun <reified V : Any> Map<*, *>.parseValue(path: String, name: String, defaultValue: (() -> V)) =
|
||||
inline fun <reified V : Any> Map<*, *>.parseValue(@NonNls path: String, @NonNls name: String, defaultValue: (() -> V)) =
|
||||
get(name)?.parseAs<V>("$path.$name") ?: defaultValue().asSuccess()
|
||||
|
||||
|
||||
inline fun <reified V : Any, R : Any> Map<*, *>.parseValue(
|
||||
context: ParsingContext,
|
||||
path: String,
|
||||
name: String,
|
||||
@NonNls path: String,
|
||||
@NonNls name: String,
|
||||
crossinline parser: suspend ParsingContext.(V) -> TaskResult<R>
|
||||
) = with(context) {
|
||||
computeM {
|
||||
@@ -124,16 +125,16 @@ inline fun <reified V : Any, R : Any> Map<*, *>.parseValue(
|
||||
}
|
||||
|
||||
inline fun <reified T : Any> Map<*, *>.parseValue(
|
||||
path: String,
|
||||
name: String,
|
||||
@NonNls path: String,
|
||||
@NonNls name: String,
|
||||
klass: KClass<T>
|
||||
) = get(path).parseAs("$path.$name", klass)
|
||||
|
||||
|
||||
fun <R : Any> Map<*, *>.parseValue(
|
||||
context: ParsingContext,
|
||||
path: String,
|
||||
name: String,
|
||||
@NonNls path: String,
|
||||
@NonNls name: String,
|
||||
parser: Parser<R>,
|
||||
defaultValue: (() -> R)? = null
|
||||
) = with(context) {
|
||||
@@ -147,7 +148,7 @@ fun <R : Any> Map<*, *>.parseValue(
|
||||
|
||||
inline fun <reified V : Any, R : Any> Any?.parseAs(
|
||||
context: ParsingContext,
|
||||
path: String,
|
||||
@NonNls path: String,
|
||||
crossinline parser: suspend ParsingContext.(V) -> TaskResult<R>
|
||||
) = with(context) {
|
||||
computeM {
|
||||
|
||||
+9
-5
@@ -1,5 +1,7 @@
|
||||
package org.jetbrains.kotlin.tools.projectWizard.core.entity
|
||||
|
||||
import org.jetbrains.annotations.Nls
|
||||
import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.Failure
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.Reader
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.UNIT_SUCCESS
|
||||
@@ -25,7 +27,9 @@ fun <V> inValidatorContext(validator: Reader.(V) -> SettingValidator<V>) =
|
||||
|
||||
object StringValidators {
|
||||
fun shouldNotBeBlank(name: String) = settingValidator { value: String ->
|
||||
if (value.isBlank()) ValidationResult.ValidationError("${name.capitalize()} should not be blank ")
|
||||
if (value.isBlank()) ValidationResult.ValidationError(
|
||||
KotlinNewProjectWizardBundle.message("validation.should.not.be.blank", name.capitalize())
|
||||
)
|
||||
else ValidationResult.OK
|
||||
}
|
||||
|
||||
@@ -34,10 +38,10 @@ object StringValidators {
|
||||
val allowedExtraSymbolsStringified = allowedExtraSymbols
|
||||
.takeIf { it.isNotEmpty() }
|
||||
?.joinToString(separator = ", ") { char -> "'$char'" }
|
||||
?.let { chars -> ", and symbols: $chars" }
|
||||
?.let { chars -> KotlinNewProjectWizardBundle.message("validation.identifier.additional.symbols", chars) }
|
||||
.orEmpty()
|
||||
ValidationResult.ValidationError(
|
||||
"${name.capitalize()} should consist only of letters, digits$allowedExtraSymbolsStringified"
|
||||
KotlinNewProjectWizardBundle.message("validation.identifier", name.capitalize(), allowedExtraSymbolsStringified)
|
||||
)
|
||||
} else ValidationResult.OK
|
||||
}
|
||||
@@ -54,7 +58,7 @@ sealed class ValidationResult {
|
||||
}
|
||||
|
||||
data class ValidationError(val messages: List<String>, val target: Any? = null) : ValidationResult() {
|
||||
constructor(message: String, target: Any? = null) : this(listOf(message), target)
|
||||
constructor(@Nls message: String, target: Any? = null) : this(listOf(message), target)
|
||||
|
||||
override val isOk = false
|
||||
}
|
||||
@@ -66,7 +70,7 @@ sealed class ValidationResult {
|
||||
}
|
||||
|
||||
companion object {
|
||||
fun create(condition: Boolean, message: String) =
|
||||
fun create(condition: Boolean, @Nls message: String) =
|
||||
if (condition) OK else ValidationError(message)
|
||||
|
||||
inline fun create(condition: Boolean, message: () -> String) =
|
||||
|
||||
+2
@@ -1,6 +1,7 @@
|
||||
package org.jetbrains.kotlin.tools.projectWizard.core.entity
|
||||
|
||||
|
||||
import org.jetbrains.annotations.Nls
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.*
|
||||
import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase
|
||||
import kotlin.reflect.KProperty1
|
||||
@@ -47,6 +48,7 @@ data class PipelineTask(
|
||||
|
||||
var isAvailable: Checker = ALWAYS_AVAILABLE_CHECKER
|
||||
|
||||
@Nls
|
||||
var title: String? = null
|
||||
|
||||
fun withAction(action: Writer.() -> TaskResult<Unit>) {
|
||||
|
||||
+2
@@ -5,6 +5,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.tools.projectWizard.core.entity.settings
|
||||
|
||||
import org.jetbrains.annotations.NonNls
|
||||
import org.jetbrains.kotlin.tools.projectWizard.Identificator
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.Plugin
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.Reader
|
||||
@@ -18,6 +19,7 @@ import kotlin.reflect.KProperty1
|
||||
|
||||
|
||||
sealed class SettingReference<out V : Any, out T : SettingType<V>> {
|
||||
@get:NonNls
|
||||
abstract val path: String
|
||||
abstract val type: KClass<out T>
|
||||
|
||||
|
||||
+10
-2
@@ -5,6 +5,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.tools.projectWizard.core.entity.settings
|
||||
|
||||
import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.*
|
||||
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.entity.*
|
||||
@@ -198,7 +199,12 @@ object PathSettingType : SettingType<Path>() {
|
||||
init {
|
||||
validate { pathValue ->
|
||||
if (pathValue.toString().isBlank())
|
||||
ValidationResult.ValidationError("${title.capitalize()} should not be blank")
|
||||
ValidationResult.ValidationError(
|
||||
KotlinNewProjectWizardBundle.message(
|
||||
"validation.should.not.be.blank",
|
||||
title.capitalize()
|
||||
)
|
||||
)
|
||||
else ValidationResult.OK
|
||||
}
|
||||
}
|
||||
@@ -206,7 +212,9 @@ object PathSettingType : SettingType<Path>() {
|
||||
fun shouldExists() = validate { pathValue ->
|
||||
if (isUnitTestMode) return@validate ValidationResult.OK
|
||||
if (!Files.exists(pathValue))
|
||||
ValidationResult.ValidationError("File for ${title.capitalize()} should exists")
|
||||
ValidationResult.ValidationError(
|
||||
KotlinNewProjectWizardBundle.message("validation.file.should.exists", title.capitalize())
|
||||
)
|
||||
else ValidationResult.OK
|
||||
}
|
||||
|
||||
|
||||
+2
-1
@@ -5,6 +5,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.tools.projectWizard.core.entity.settings
|
||||
|
||||
import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.*
|
||||
|
||||
fun ParsingContext.parseSettingsMap(
|
||||
@@ -18,7 +19,7 @@ fun ParsingContext.parseSettingsMap(
|
||||
setting.type.parse(this, settingValue, setting.path).map { listOf(settingReference to it) }
|
||||
}
|
||||
setting.isRequired -> {
|
||||
fail(ParseError("No value was found for a key `$path.${setting.path}`"))
|
||||
fail(ParseError(KotlinNewProjectWizardBundle.message("parse.error.no.value.for.key", "$path.${setting.path}")))
|
||||
}
|
||||
else -> success(emptyList())
|
||||
}
|
||||
|
||||
+14
-9
@@ -1,9 +1,13 @@
|
||||
package org.jetbrains.kotlin.tools.projectWizard.core
|
||||
|
||||
import org.jetbrains.annotations.Nls
|
||||
import org.jetbrains.annotations.NonNls
|
||||
import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle
|
||||
import java.io.IOException
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module
|
||||
|
||||
abstract class Error {
|
||||
@get:Nls
|
||||
abstract val message: String
|
||||
}
|
||||
|
||||
@@ -24,31 +28,32 @@ data class IOError(override val exception: IOException) : ExceptionError()
|
||||
|
||||
data class ExceptionErrorImpl(override val exception: Exception) : ExceptionError()
|
||||
|
||||
data class ParseError(override val message: String) : Error()
|
||||
data class ParseError(@Nls override val message: String) : Error()
|
||||
|
||||
data class TemplateNotFoundError(val id: String) : Error() {
|
||||
override val message: String
|
||||
get() = "Template with an id `$id` is not found"
|
||||
get() = KotlinNewProjectWizardBundle.message("error.template.not.found", id)
|
||||
}
|
||||
|
||||
data class RequiredSettingsIsNotPresentError(val settingNames: List<String>) : Error() {
|
||||
override val message: String
|
||||
get() = buildString {
|
||||
append("The following required settings is not present: \n")
|
||||
append(KotlinNewProjectWizardBundle.message("error.required.settings.are.not.present") + '\n')
|
||||
settingNames.joinTo(this, "\n") { " $it" }
|
||||
}
|
||||
}
|
||||
|
||||
data class CircularTaskDependencyError(val taskName: String) : Error() {
|
||||
data class CircularTaskDependencyError(@NonNls val taskName: String) : Error() {
|
||||
@get:NonNls
|
||||
override val message: String
|
||||
get() = "$taskName task has circular dependencies"
|
||||
}
|
||||
|
||||
data class BadSettingValueError(override val message: String) : Error()
|
||||
data class BadSettingValueError(@Nls override val message: String) : Error()
|
||||
|
||||
data class ConfiguratorNotFoundError(val id: String) : Error() {
|
||||
override val message: String
|
||||
get() = "Module type `$id` was not found"
|
||||
get() = KotlinNewProjectWizardBundle.message("error.configurator.not.found", id)
|
||||
}
|
||||
|
||||
data class ValidationError(val validationMessage: String) : Error() {
|
||||
@@ -56,9 +61,9 @@ data class ValidationError(val validationMessage: String) : Error() {
|
||||
get() = validationMessage.capitalize()
|
||||
}
|
||||
|
||||
data class ProjectImportingError(override val message: String) : Error()
|
||||
data class ProjectImportingError(@Nls override val message: String) : Error()
|
||||
|
||||
data class InvalidModuleDependencyError(val from: Module, val to: Module, val reason: String? = null) : Error() {
|
||||
data class InvalidModuleDependencyError(val from: Module, val to: Module, @Nls val reason: String? = null) : Error() {
|
||||
override val message: String
|
||||
get() = "Invalid module dependency from module ${from.name} to ${to.name}" + reason?.let { ": $it" }
|
||||
get() = KotlinNewProjectWizardBundle.message("error.invalid.module.dependency", from.name, to.name) + reason?.let { ": $it" }
|
||||
}
|
||||
+5
-4
@@ -1,6 +1,7 @@
|
||||
package org.jetbrains.kotlin.tools.projectWizard.core
|
||||
|
||||
import kotlinx.collections.immutable.toPersistentList
|
||||
import org.jetbrains.annotations.NonNls
|
||||
import java.io.IOException
|
||||
import java.nio.file.Path
|
||||
import java.nio.file.Paths
|
||||
@@ -26,19 +27,19 @@ inline infix fun <A : Any> ((A) -> A?).andThenNullable(crossinline then: (A) ->
|
||||
@Suppress("NOTHING_TO_INLINE")
|
||||
inline fun <T> idFunction(): (T) -> T = { it }
|
||||
|
||||
operator fun Path.div(other: String): Path =
|
||||
operator fun Path.div(@NonNls other: String): Path =
|
||||
resolve(other)
|
||||
|
||||
operator fun Path.div(other: Path): Path =
|
||||
resolve(other.toString())
|
||||
|
||||
operator fun String.div(other: Path): Path =
|
||||
operator fun @receiver:NonNls String.div(other: Path): Path =
|
||||
Paths.get(this).resolve(other)
|
||||
|
||||
operator fun String.div(other: String): Path =
|
||||
operator fun @receiver:NonNls String.div(@NonNls other: String): Path =
|
||||
Paths.get(this).resolve(other)
|
||||
|
||||
fun String.asPath(): Path = Paths.get(this)
|
||||
fun @receiver:NonNls String.asPath(): Path = Paths.get(this)
|
||||
|
||||
fun <T : Any> safe(operation: () -> T): TaskResult<T> =
|
||||
try {
|
||||
|
||||
+2
-1
@@ -1,5 +1,6 @@
|
||||
package org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem
|
||||
|
||||
import org.jetbrains.annotations.NonNls
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.ignore
|
||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.GradleIR
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.BuildFilePrinter
|
||||
@@ -30,7 +31,7 @@ data class ApplicationPluginIR(val mainClass: String) : DefaultBuildSystemPlugin
|
||||
}
|
||||
}
|
||||
|
||||
data class GradleOnlyPluginByNameIR(val pluginId: String) : BuildSystemPluginIR, GradleIR {
|
||||
data class GradleOnlyPluginByNameIR(@NonNls val pluginId: String) : BuildSystemPluginIR, GradleIR {
|
||||
override fun GradlePrinter.renderGradle() {
|
||||
call("id") { +pluginId.quotified }
|
||||
}
|
||||
|
||||
+12
-11
@@ -1,5 +1,6 @@
|
||||
package org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle
|
||||
|
||||
import org.jetbrains.annotations.NonNls
|
||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR
|
||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.FreeIR
|
||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.RepositoryIR
|
||||
@@ -22,7 +23,7 @@ data class RawGradleIR(
|
||||
override fun GradlePrinter.renderGradle() = renderer()
|
||||
}
|
||||
|
||||
fun rawIR(ir: String) = RawGradleIR { +ir }
|
||||
fun rawIR(@NonNls ir: String) = RawGradleIR { +ir }
|
||||
fun rawIR(ir: GradlePrinter.() -> String) = RawGradleIR { +ir() }
|
||||
|
||||
fun MutableList<BuildSystemIR>.addRawIR(ir: GradlePrinter.() -> String) {
|
||||
@@ -30,7 +31,7 @@ fun MutableList<BuildSystemIR>.addRawIR(ir: GradlePrinter.() -> String) {
|
||||
}
|
||||
|
||||
|
||||
class CreateGradleValueIR(val name: String, val body: GradleIR) : GradleIR {
|
||||
class CreateGradleValueIR(@NonNls val name: String, val body: GradleIR) : GradleIR {
|
||||
override fun GradlePrinter.renderGradle() {
|
||||
when (dsl) {
|
||||
GradlePrinter.GradleDsl.KOTLIN -> {
|
||||
@@ -51,7 +52,7 @@ class CreateGradleValueIR(val name: String, val body: GradleIR) : GradleIR {
|
||||
}
|
||||
|
||||
data class GradleCallIr(
|
||||
val name: String,
|
||||
@NonNls val name: String,
|
||||
val parameters: List<BuildSystemIR> = emptyList(),
|
||||
val isConstructorCall: Boolean = false,
|
||||
) : GradleIR {
|
||||
@@ -70,7 +71,7 @@ data class GradleCallIr(
|
||||
}
|
||||
|
||||
data class GradleNewInstanceCall(
|
||||
val name: String,
|
||||
@NonNls val name: String,
|
||||
val parameters: List<BuildSystemIR> = emptyList()
|
||||
) : GradleIR {
|
||||
override fun GradlePrinter.renderGradle() {
|
||||
@@ -85,7 +86,7 @@ data class GradleNewInstanceCall(
|
||||
|
||||
|
||||
data class GradleSectionIR(
|
||||
val name: String,
|
||||
@NonNls val name: String,
|
||||
val body: BodyIR
|
||||
) : GradleIR, FreeIR {
|
||||
constructor(name: String, bodyBuilder: MutableList<BuildSystemIR>.() -> Unit) : this(
|
||||
@@ -101,7 +102,7 @@ data class GradleSectionIR(
|
||||
}
|
||||
|
||||
data class GradleAssignmentIR(
|
||||
val target: String,
|
||||
@NonNls val target: String,
|
||||
val assignee: BuildSystemIR
|
||||
) : GradleIR, FreeIR {
|
||||
override fun GradlePrinter.renderGradle() {
|
||||
@@ -111,7 +112,7 @@ data class GradleAssignmentIR(
|
||||
}
|
||||
|
||||
data class GradleStringConstIR(
|
||||
val text: String
|
||||
@NonNls val text: String
|
||||
) : GradleIR {
|
||||
override fun GradlePrinter.renderGradle() {
|
||||
+text.quotified
|
||||
@@ -119,9 +120,9 @@ data class GradleStringConstIR(
|
||||
}
|
||||
|
||||
data class CompilationAccessIr(
|
||||
val targetName: String,
|
||||
val compilationName: String,
|
||||
val property: String?
|
||||
@NonNls val targetName: String,
|
||||
@NonNls val compilationName: String,
|
||||
@NonNls val property: String?
|
||||
) : GradleIR {
|
||||
override fun GradlePrinter.renderGradle() {
|
||||
when (dsl) {
|
||||
@@ -132,7 +133,7 @@ data class CompilationAccessIr(
|
||||
}
|
||||
}
|
||||
|
||||
data class GradleDynamicPropertyAccessIR(val qualifier: BuildSystemIR, val propertyName: String) : GradleIR {
|
||||
data class GradleDynamicPropertyAccessIR(val qualifier: BuildSystemIR, @NonNls val propertyName: String) : GradleIR {
|
||||
override fun GradlePrinter.renderGradle() {
|
||||
qualifier.render(this)
|
||||
when (dsl) {
|
||||
|
||||
+2
-1
@@ -1,5 +1,6 @@
|
||||
package org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle
|
||||
|
||||
import org.jetbrains.annotations.NonNls
|
||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR
|
||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.FreeIR
|
||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.render
|
||||
@@ -26,7 +27,7 @@ data class GradleByNameTaskAccessIR(
|
||||
}
|
||||
|
||||
data class GradleByClassTasksAccessIR(
|
||||
val taskClass: String
|
||||
@NonNls val taskClass: String
|
||||
) : GradleTaskAccessIR {
|
||||
override fun GradlePrinter.renderGradle() {
|
||||
when (dsl) {
|
||||
|
||||
+2
-1
@@ -6,11 +6,12 @@
|
||||
package org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle
|
||||
|
||||
import kotlinx.collections.immutable.PersistentList
|
||||
import org.jetbrains.annotations.NonNls
|
||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.*
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.GradlePrinter
|
||||
|
||||
data class SettingsGradleFileIR(
|
||||
val projectName: String,
|
||||
@NonNls val projectName: String,
|
||||
val subProjects: List<String>,
|
||||
override val irs: PersistentList<BuildSystemIR>
|
||||
) : FileIR, GradleIR {
|
||||
|
||||
+3
-2
@@ -5,6 +5,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.maven
|
||||
|
||||
import org.jetbrains.annotations.NonNls
|
||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR
|
||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.RepositoryWrapper
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.BuildFilePrinter
|
||||
@@ -31,8 +32,8 @@ data class PluginRepositoryMavenIR(
|
||||
}
|
||||
|
||||
data class MavenPropertyIR(
|
||||
val name: String,
|
||||
val value: String
|
||||
@NonNls val name: String,
|
||||
@NonNls val value: String
|
||||
) : MavenIR {
|
||||
override fun MavenPrinter.renderMaven() {
|
||||
singleLineNode(name) { +value }
|
||||
|
||||
+2
-1
@@ -5,10 +5,11 @@
|
||||
|
||||
package org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem
|
||||
|
||||
import org.jetbrains.annotations.NonNls
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.buildList
|
||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.*
|
||||
|
||||
fun runTaskIrs(mainClass: String, classPath: BuildSystemIR? = null) = buildList<BuildSystemIR> {
|
||||
fun runTaskIrs(@NonNls mainClass: String, classPath: BuildSystemIR? = null) = buildList<BuildSystemIR> {
|
||||
+ApplicationPluginIR(mainClass)
|
||||
|
||||
+GradleSectionIR("application", buildBody {
|
||||
|
||||
+4
-3
@@ -1,5 +1,6 @@
|
||||
package org.jetbrains.kotlin.tools.projectWizard.library
|
||||
|
||||
import org.jetbrains.annotations.NonNls
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Repository
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version
|
||||
|
||||
@@ -7,12 +8,12 @@ sealed class LibraryArtifact
|
||||
|
||||
data class MavenArtifact(
|
||||
val repository: Repository,
|
||||
val groupId: String,
|
||||
val artifactId: String
|
||||
@NonNls val groupId: String,
|
||||
@NonNls val artifactId: String
|
||||
) : LibraryArtifact()
|
||||
|
||||
data class NpmArtifact(
|
||||
val name: String
|
||||
@NonNls val name: String
|
||||
) : LibraryArtifact()
|
||||
|
||||
|
||||
|
||||
+17
-6
@@ -6,6 +6,8 @@
|
||||
package org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators
|
||||
|
||||
|
||||
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.entity.settings.ModuleConfiguratorSetting
|
||||
@@ -41,8 +43,6 @@ interface AndroidModuleConfigurator : ModuleConfigurator,
|
||||
|
||||
override val moduleType: ModuleType
|
||||
get() = ModuleType.android
|
||||
override val greyText: String
|
||||
get() = "Requires Android SDK"
|
||||
|
||||
override fun getPluginSettings(): List<PluginSettingReference<Any, SettingType<Any>>> =
|
||||
listOf(AndroidPlugin::androidSdkPath.reference)
|
||||
@@ -128,6 +128,8 @@ object AndroidTargetConfigurator : TargetConfigurator,
|
||||
override val moduleSubType = ModuleSubType.android
|
||||
override val moduleType = ModuleType.android
|
||||
|
||||
override val text = KotlinNewProjectWizardBundle.message("module.configurator.android")
|
||||
|
||||
override fun Reader.createAndroidPlugin(module: Module): AndroidGradlePlugin =
|
||||
withSettingsOf(module) { androidPlugin.reference.settingValue }
|
||||
|
||||
@@ -150,10 +152,19 @@ object AndroidTargetConfigurator : TargetConfigurator,
|
||||
)
|
||||
}
|
||||
|
||||
val androidPlugin by enumSetting<AndroidGradlePlugin>("Android Library", neededAtPhase = GenerationPhase.PROJECT_GENERATION)
|
||||
val androidPlugin by enumSetting<AndroidGradlePlugin>(
|
||||
KotlinNewProjectWizardBundle.message("module.configurator.android.setting.android.plugin"),
|
||||
neededAtPhase = GenerationPhase.PROJECT_GENERATION
|
||||
)
|
||||
}
|
||||
|
||||
enum class AndroidGradlePlugin(override val text: String, val pluginName: String) : DisplayableSettingItem {
|
||||
APPLICATION("Android Application", "com.android.application"),
|
||||
LIBRARY("Android Library", "com.android.library")
|
||||
enum class AndroidGradlePlugin(override val text: String, @NonNls val pluginName: String) : DisplayableSettingItem {
|
||||
APPLICATION(
|
||||
KotlinNewProjectWizardBundle.message("module.configurator.android.setting.android.plugin.application"),
|
||||
"com.android.application"
|
||||
),
|
||||
LIBRARY(
|
||||
KotlinNewProjectWizardBundle.message("module.configurator.android.setting.android.plugin.library"),
|
||||
"com.android.library"
|
||||
)
|
||||
}
|
||||
+5
-2
@@ -1,7 +1,8 @@
|
||||
package org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators
|
||||
|
||||
|
||||
|
||||
import org.jetbrains.annotations.NonNls
|
||||
import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.*
|
||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.*
|
||||
import org.jetbrains.kotlin.tools.projectWizard.library.MavenArtifact
|
||||
@@ -19,9 +20,11 @@ object AndroidSinglePlatformModuleConfigurator :
|
||||
SinglePlatformModuleConfigurator,
|
||||
AndroidModuleConfigurator {
|
||||
override val moduleKind: ModuleKind get() = ModuleKind.singleplatformAndroid
|
||||
@NonNls
|
||||
override val id = "android"
|
||||
@NonNls
|
||||
override val suggestedModuleName = "android"
|
||||
override val text = "Android"
|
||||
override val text = KotlinNewProjectWizardBundle.message("module.configurator.android")
|
||||
|
||||
override val requiresRootBuildFile: Boolean = true
|
||||
|
||||
|
||||
+10
-1
@@ -5,6 +5,8 @@
|
||||
|
||||
package org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators
|
||||
|
||||
import org.jetbrains.annotations.NonNls
|
||||
import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.*
|
||||
import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModulesToIrConversionData
|
||||
@@ -14,10 +16,16 @@ import org.jetbrains.kotlin.tools.projectWizard.templates.FileTemplateDescriptor
|
||||
import java.nio.file.Path
|
||||
|
||||
object IOSSinglePlatformModuleConfigurator : SinglePlatformModuleConfigurator, ModuleConfiguratorSettings() {
|
||||
@NonNls
|
||||
override val id = "IOS Module"
|
||||
|
||||
@NonNls
|
||||
override val suggestedModuleName = "ios"
|
||||
|
||||
override val moduleKind: ModuleKind = ModuleKind.singleplatformJvm
|
||||
override val greyText = "Requires Apple Xcode"
|
||||
override val greyText = KotlinNewProjectWizardBundle.message("module.configurator.ios.requires.xcode")
|
||||
override val text = KotlinNewProjectWizardBundle.message("module.configurator.ios")
|
||||
|
||||
|
||||
override val needCreateBuildFile: Boolean = false
|
||||
override val requiresRootBuildFile: Boolean = true
|
||||
@@ -74,6 +82,7 @@ object IOSSinglePlatformModuleConfigurator : SinglePlatformModuleConfigurator, M
|
||||
.asPath()
|
||||
)
|
||||
|
||||
@NonNls
|
||||
private const val DEFAULT_APP_NAME = "appName"
|
||||
|
||||
val dependentModule by valueSetting<DependentModuleReference>(
|
||||
|
||||
+7
-1
@@ -6,6 +6,8 @@
|
||||
package org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators
|
||||
|
||||
|
||||
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.buildList
|
||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR
|
||||
@@ -22,9 +24,13 @@ interface JSConfigurator : ModuleConfiguratorWithModuleType {
|
||||
|
||||
object JsSingleplatformModuleConfigurator : JSConfigurator, ModuleConfiguratorWithTests, SinglePlatformModuleConfigurator {
|
||||
override val moduleKind = ModuleKind.singleplatformJs
|
||||
|
||||
@NonNls
|
||||
override val suggestedModuleName = "js"
|
||||
|
||||
@NonNls
|
||||
override val id = "jsSinglepaltform"
|
||||
override val text = "JS for Browser"
|
||||
override val text = KotlinNewProjectWizardBundle.message("module.configurator.js")
|
||||
|
||||
override fun defaultTestFramework(): KotlinTestFramework = KotlinTestFramework.JS
|
||||
|
||||
|
||||
-2
@@ -199,8 +199,6 @@ fun Module.getConfiguratorSettings() = buildList<SettingReference<*, *>> {
|
||||
|
||||
interface ModuleConfigurator : DisplayableSettingItem, EntitiesOwnerDescriptor {
|
||||
val moduleKind: ModuleKind
|
||||
override val text: String
|
||||
get() = id
|
||||
|
||||
val suggestedModuleName: String? get() = null
|
||||
val canContainSubModules: Boolean get() = false
|
||||
|
||||
+28
-6
@@ -6,6 +6,8 @@
|
||||
package org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators
|
||||
|
||||
|
||||
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.entity.settings.ModuleConfiguratorSetting
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.ModuleConfiguratorSettingReference
|
||||
@@ -24,7 +26,7 @@ import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.ModuleKind
|
||||
interface ModuleConfiguratorWithTests : ModuleConfiguratorWithSettings {
|
||||
companion object : ModuleConfiguratorSettings() {
|
||||
val testFramework by enumSetting<KotlinTestFramework>(
|
||||
"Test Framework",
|
||||
KotlinNewProjectWizardBundle.message("module.configurator.tests.setting.framework"),
|
||||
neededAtPhase = GenerationPhase.PROJECT_GENERATION
|
||||
) {
|
||||
filter = filter@{ reference, kotlinTestFramework ->
|
||||
@@ -67,9 +69,29 @@ enum class KotlinTestFramework(
|
||||
val moduleType: ModuleType,
|
||||
val dependencyNames: List<String>
|
||||
) : DisplayableSettingItem {
|
||||
JUNIT4("JUnit 4 Test Framework", ModuleType.jvm, listOf("test-junit")),
|
||||
JUNIT5("JUnit 5 Test Framework", ModuleType.jvm, listOf("test-junit5")),
|
||||
TEST_NG("Test NG Test Framework", ModuleType.jvm, listOf("test-testng")),
|
||||
JS("JavaScript Test Framework", ModuleType.js, listOf("test-js")),
|
||||
COMMON("Common Test Framework", ModuleType.common, listOf("test-common", "test-annotations-common")),
|
||||
JUNIT4(
|
||||
KotlinNewProjectWizardBundle.message("module.configurator.tests.setting.framework.junit4"),
|
||||
ModuleType.jvm,
|
||||
listOf("test-junit")
|
||||
),
|
||||
JUNIT5(
|
||||
KotlinNewProjectWizardBundle.message("module.configurator.tests.setting.framework.junit5"),
|
||||
ModuleType.jvm,
|
||||
listOf("test-junit5")
|
||||
),
|
||||
TEST_NG(
|
||||
KotlinNewProjectWizardBundle.message("module.configurator.tests.setting.framework.test.ng"),
|
||||
ModuleType.jvm,
|
||||
listOf("test-testng")
|
||||
),
|
||||
JS(
|
||||
KotlinNewProjectWizardBundle.message("module.configurator.tests.setting.framework.js"),
|
||||
ModuleType.js,
|
||||
listOf("test-js")
|
||||
),
|
||||
COMMON(
|
||||
KotlinNewProjectWizardBundle.message("module.configurator.tests.setting.framework.common"),
|
||||
ModuleType.common,
|
||||
listOf("test-common", "test-annotations-common")
|
||||
)
|
||||
}
|
||||
+8
-1
@@ -1,6 +1,8 @@
|
||||
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.buildList
|
||||
@@ -20,6 +22,8 @@ interface NativeTargetConfigurator : TargetConfigurator
|
||||
class RealNativeTargetConfigurator private constructor(
|
||||
override val moduleSubType: ModuleSubType
|
||||
) : NativeTargetConfigurator, SimpleTargetConfigurator {
|
||||
override val text: String = moduleSubType.name.capitalize()
|
||||
|
||||
override fun createInnerTargetIrs(reader: Reader, module: Module): List<BuildSystemIR> = if (moduleSubType.isIOS) {
|
||||
listOf(
|
||||
GradleSectionIR("binaries") {
|
||||
@@ -43,8 +47,11 @@ class RealNativeTargetConfigurator private constructor(
|
||||
|
||||
object NativeForCurrentSystemTarget : NativeTargetConfigurator, SingleCoexistenceTargetConfigurator {
|
||||
override val moduleType = ModuleType.native
|
||||
|
||||
@NonNls
|
||||
override val id = "nativeForCurrentSystem"
|
||||
override val text = "Your system"
|
||||
|
||||
override val text = KotlinNewProjectWizardBundle.message("module.configurator.native.for.current.system")
|
||||
|
||||
|
||||
override fun Reader.createTargetIrs(
|
||||
|
||||
+6
-5
@@ -1,5 +1,6 @@
|
||||
package org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators
|
||||
|
||||
import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleSubType
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType
|
||||
|
||||
@@ -15,7 +16,7 @@ object TargetConfigurationGroups {
|
||||
|
||||
object NATIVE {
|
||||
val LINUX = FinalTargetConfiguratorGroup(
|
||||
"Linux",
|
||||
KotlinNewProjectWizardBundle.message("module.configuration.group.linux"),
|
||||
ModuleType.native,
|
||||
listOf(
|
||||
RealNativeTargetConfigurator.configuratorsByModuleType.getValue(ModuleSubType.linuxX64),
|
||||
@@ -26,7 +27,7 @@ object TargetConfigurationGroups {
|
||||
)
|
||||
|
||||
val WINDOWS = FinalTargetConfiguratorGroup(
|
||||
"Windows (MinGW)",
|
||||
KotlinNewProjectWizardBundle.message("module.configuration.group.windows.mingw"),
|
||||
ModuleType.native,
|
||||
listOf(
|
||||
RealNativeTargetConfigurator.configuratorsByModuleType.getValue(ModuleSubType.mingwX64),
|
||||
@@ -35,7 +36,7 @@ object TargetConfigurationGroups {
|
||||
)
|
||||
|
||||
val MAC = FinalTargetConfiguratorGroup(
|
||||
"macOS",
|
||||
KotlinNewProjectWizardBundle.message("module.configuration.group.macos"),
|
||||
ModuleType.native,
|
||||
listOf(
|
||||
RealNativeTargetConfigurator.configuratorsByModuleType.getValue(ModuleSubType.macosX64)
|
||||
@@ -43,7 +44,7 @@ object TargetConfigurationGroups {
|
||||
)
|
||||
|
||||
val IOS = FinalTargetConfiguratorGroup(
|
||||
"iOS",
|
||||
KotlinNewProjectWizardBundle.message("module.configuration.group.ios"),
|
||||
ModuleType.native,
|
||||
listOf(
|
||||
RealNativeTargetConfigurator.configuratorsByModuleType.getValue(ModuleSubType.iosArm32),
|
||||
@@ -53,7 +54,7 @@ object TargetConfigurationGroups {
|
||||
)
|
||||
|
||||
val ANDROID_NATIVE = FinalTargetConfiguratorGroup(
|
||||
"Android Native",
|
||||
KotlinNewProjectWizardBundle.message("module.configuration.group.android.native"),
|
||||
ModuleType.native,
|
||||
listOf(
|
||||
RealNativeTargetConfigurator.configuratorsByModuleType.getValue(ModuleSubType.androidNativeArm64),
|
||||
|
||||
+19
-6
@@ -1,6 +1,8 @@
|
||||
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.buildList
|
||||
@@ -41,7 +43,6 @@ interface SimpleTargetConfigurator : TargetConfigurator {
|
||||
val moduleSubType: ModuleSubType
|
||||
override val moduleType get() = moduleSubType.moduleType
|
||||
override val id get() = "${moduleSubType.name}Target"
|
||||
override val text get() = moduleSubType.name.capitalize()
|
||||
|
||||
override val suggestedModuleName: String? get() = moduleSubType.name
|
||||
|
||||
@@ -66,10 +67,15 @@ private fun Module.createTargetAccessIr(moduleSubType: ModuleSubType) =
|
||||
interface JsTargetConfigurator : JSConfigurator, TargetConfigurator, SingleCoexistenceTargetConfigurator
|
||||
|
||||
object JsBrowserTargetConfigurator : JsTargetConfigurator, ModuleConfiguratorWithTests {
|
||||
@NonNls
|
||||
override val id = "jsBrowser"
|
||||
override val text = "Browser"
|
||||
|
||||
@NonNls
|
||||
override val suggestedModuleName = "browser"
|
||||
|
||||
override val text = KotlinNewProjectWizardBundle.message("module.configurator.js.browser")
|
||||
|
||||
|
||||
override fun defaultTestFramework(): KotlinTestFramework = KotlinTestFramework.JS
|
||||
|
||||
override fun Reader.createTargetIrs(
|
||||
@@ -87,10 +93,14 @@ object JsBrowserTargetConfigurator : JsTargetConfigurator, ModuleConfiguratorWit
|
||||
}
|
||||
|
||||
object JsNodeTargetConfigurator : JsTargetConfigurator {
|
||||
@NonNls
|
||||
override val id = "jsNode"
|
||||
override val text = "Node.js"
|
||||
|
||||
@NonNls
|
||||
override val suggestedModuleName = "nodeJs"
|
||||
|
||||
override val text = KotlinNewProjectWizardBundle.message("module.configurator.js.node")
|
||||
|
||||
|
||||
override fun Reader.createTargetIrs(
|
||||
module: Module
|
||||
@@ -108,6 +118,7 @@ object JsNodeTargetConfigurator : JsTargetConfigurator {
|
||||
|
||||
object CommonTargetConfigurator : TargetConfiguratorWithTests(), SimpleTargetConfigurator, SingleCoexistenceTargetConfigurator {
|
||||
override val moduleSubType = ModuleSubType.common
|
||||
override val text: String = KotlinNewProjectWizardBundle.message("module.configurator.common")
|
||||
|
||||
override fun defaultTestFramework(): KotlinTestFramework = KotlinTestFramework.COMMON
|
||||
}
|
||||
@@ -117,8 +128,7 @@ object JvmTargetConfigurator : JvmModuleConfigurator,
|
||||
SimpleTargetConfigurator {
|
||||
override val moduleSubType = ModuleSubType.jvm
|
||||
|
||||
override val text: String
|
||||
get() = "JVM"
|
||||
override val text: String = KotlinNewProjectWizardBundle.message("module.configurator.jvm")
|
||||
|
||||
override fun defaultTestFramework(): KotlinTestFramework = KotlinTestFramework.JUNIT4
|
||||
|
||||
@@ -149,7 +159,10 @@ object JvmTargetConfigurator : JvmModuleConfigurator,
|
||||
Settings.javaSupport
|
||||
|
||||
object Settings : ModuleConfiguratorSettings() {
|
||||
val javaSupport by booleanSetting("Java language support", GenerationPhase.PROJECT_GENERATION) {
|
||||
val javaSupport by booleanSetting(
|
||||
KotlinNewProjectWizardBundle.message("module.configurator.jvm.setting.java.support"),
|
||||
GenerationPhase.PROJECT_GENERATION
|
||||
) {
|
||||
defaultValue = value(false)
|
||||
}
|
||||
}
|
||||
|
||||
+7
-6
@@ -1,5 +1,6 @@
|
||||
package org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators
|
||||
|
||||
import org.jetbrains.annotations.Nls
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem
|
||||
|
||||
@@ -9,22 +10,22 @@ interface DisplayableTargetConfiguratorGroup : TargetConfiguratorGroup, Displaya
|
||||
val moduleType: ModuleType
|
||||
}
|
||||
|
||||
interface TargetConfiguratorGroupWithSubItems: TargetConfiguratorGroup {
|
||||
interface TargetConfiguratorGroupWithSubItems : TargetConfiguratorGroup {
|
||||
val subItems: List<DisplayableSettingItem>
|
||||
}
|
||||
|
||||
data class StepTargetConfiguratorGroup(
|
||||
override val text: String,
|
||||
@Nls override val text: String,
|
||||
override val moduleType: ModuleType,
|
||||
override val subItems: List<DisplayableSettingItem>
|
||||
): DisplayableTargetConfiguratorGroup, TargetConfiguratorGroupWithSubItems
|
||||
) : DisplayableTargetConfiguratorGroup, TargetConfiguratorGroupWithSubItems
|
||||
|
||||
data class FinalTargetConfiguratorGroup(
|
||||
override val text: String,
|
||||
@Nls override val text: String,
|
||||
override val moduleType: ModuleType,
|
||||
override val subItems: List<DisplayableSettingItem>
|
||||
): DisplayableTargetConfiguratorGroup, TargetConfiguratorGroupWithSubItems
|
||||
) : DisplayableTargetConfiguratorGroup, TargetConfiguratorGroupWithSubItems
|
||||
|
||||
data class FirstStepTargetConfiguratorGroup(
|
||||
override val subItems: List<DisplayableSettingItem>
|
||||
): TargetConfiguratorGroup, TargetConfiguratorGroupWithSubItems
|
||||
) : TargetConfiguratorGroup, TargetConfiguratorGroupWithSubItems
|
||||
+16
-8
@@ -1,6 +1,8 @@
|
||||
package org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators
|
||||
|
||||
|
||||
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.buildList
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.ModuleConfiguratorSetting
|
||||
@@ -20,7 +22,10 @@ import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.ModuleKind
|
||||
|
||||
interface JvmModuleConfigurator : ModuleConfiguratorWithTests {
|
||||
companion object : ModuleConfiguratorSettings() {
|
||||
val targetJvmVersion by enumSetting<TargetJvmVersion>("Target JVM Version", GenerationPhase.PROJECT_GENERATION) {
|
||||
val targetJvmVersion by enumSetting<TargetJvmVersion>(
|
||||
KotlinNewProjectWizardBundle.message("module.configurator.jvm.setting.target.jvm.version"),
|
||||
GenerationPhase.PROJECT_GENERATION
|
||||
) {
|
||||
defaultValue = value(TargetJvmVersion.JVM_1_8)
|
||||
}
|
||||
}
|
||||
@@ -31,7 +36,7 @@ interface JvmModuleConfigurator : ModuleConfiguratorWithTests {
|
||||
}
|
||||
}
|
||||
|
||||
enum class TargetJvmVersion(val value: String) : DisplayableSettingItem {
|
||||
enum class TargetJvmVersion(@NonNls val value: String) : DisplayableSettingItem {
|
||||
JVM_1_6("1.6"),
|
||||
JVM_1_8("1.8"),
|
||||
JVM_9("9"),
|
||||
@@ -54,9 +59,13 @@ val ModuleConfigurator.moduleType: ModuleType?
|
||||
|
||||
object MppModuleConfigurator : ModuleConfigurator {
|
||||
override val moduleKind = ModuleKind.multiplatform
|
||||
|
||||
@NonNls
|
||||
override val suggestedModuleName = "shared"
|
||||
|
||||
@NonNls
|
||||
override val id = "multiplatform"
|
||||
override val text = "Multiplatform"
|
||||
override val text = KotlinNewProjectWizardBundle.message("module.configurator.mpp")
|
||||
override val canContainSubModules = true
|
||||
|
||||
override fun createKotlinPluginIR(configurationData: ModulesToIrConversionData, module: Module): KotlinBuildSystemPluginIR? =
|
||||
@@ -76,8 +85,10 @@ object JvmSinglePlatformModuleConfigurator : JvmModuleConfigurator,
|
||||
ModuleConfiguratorWithModuleType {
|
||||
override val moduleType get() = ModuleType.jvm
|
||||
override val moduleKind: ModuleKind get() = ModuleKind.singleplatformJvm
|
||||
override val suggestedModuleName = "jvm"
|
||||
override val id = "JVM Module"
|
||||
@NonNls override val suggestedModuleName = "jvm"
|
||||
@NonNls override val id = "JVM Module"
|
||||
override val text = KotlinNewProjectWizardBundle.message("module.configurator.jvm")
|
||||
|
||||
|
||||
override fun defaultTestFramework(): KotlinTestFramework = KotlinTestFramework.JUNIT4
|
||||
|
||||
@@ -120,9 +131,6 @@ object JvmSinglePlatformModuleConfigurator : JvmModuleConfigurator,
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
val ModuleType.defaultTarget
|
||||
get() = when (this) {
|
||||
ModuleType.jvm -> JvmTargetConfigurator
|
||||
|
||||
+2
-1
@@ -5,6 +5,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.tools.projectWizard.plugins
|
||||
|
||||
import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.Context
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.Plugin
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.UNIT_SUCCESS
|
||||
@@ -18,7 +19,7 @@ import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.withAllSubModules
|
||||
|
||||
class AndroidPlugin(context: Context) : Plugin(context) {
|
||||
val androidSdkPath by pathSetting(
|
||||
"Android SDK Path",
|
||||
KotlinNewProjectWizardBundle.message("plugin.android.setting.sdk"),
|
||||
neededAtPhase = GenerationPhase.PROJECT_GENERATION
|
||||
) {
|
||||
isSavable = true
|
||||
|
||||
+25
-10
@@ -1,7 +1,7 @@
|
||||
package org.jetbrains.kotlin.tools.projectWizard.plugins
|
||||
|
||||
|
||||
|
||||
import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.*
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.entity.StringValidators
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.reference
|
||||
@@ -13,26 +13,41 @@ import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version
|
||||
import java.nio.file.Paths
|
||||
|
||||
class StructurePlugin(context: Context) : Plugin(context) {
|
||||
val projectPath by pathSetting("Location", GenerationPhase.FIRST_STEP) {
|
||||
val projectPath by pathSetting(
|
||||
KotlinNewProjectWizardBundle.message("plugin.structure.setting.location"),
|
||||
GenerationPhase.FIRST_STEP
|
||||
) {
|
||||
defaultValue = value(Paths.get("."))
|
||||
}
|
||||
val name by stringSetting("Name", GenerationPhase.FIRST_STEP) {
|
||||
val name by stringSetting(
|
||||
KotlinNewProjectWizardBundle.message("plugin.structure.setting.name"),
|
||||
GenerationPhase.FIRST_STEP
|
||||
) {
|
||||
shouldNotBeBlank()
|
||||
validate(StringValidators.shouldBeValidIdentifier("Name", Module.ALLOWED_SPECIAL_CHARS_IN_MODULE_NAMES))
|
||||
validate(StringValidators.shouldBeValidIdentifier(title, Module.ALLOWED_SPECIAL_CHARS_IN_MODULE_NAMES))
|
||||
}
|
||||
|
||||
val groupId by stringSetting("Group ID", GenerationPhase.FIRST_STEP) {
|
||||
val groupId by stringSetting(
|
||||
KotlinNewProjectWizardBundle.message("plugin.structure.setting.group.id"),
|
||||
GenerationPhase.FIRST_STEP
|
||||
) {
|
||||
isSavable = true
|
||||
shouldNotBeBlank()
|
||||
validate(StringValidators.shouldBeValidIdentifier("Group ID", setOf('.', '_')))
|
||||
validate(StringValidators.shouldBeValidIdentifier(title, setOf('.', '_')))
|
||||
}
|
||||
val artifactId by stringSetting("Artifact ID", GenerationPhase.FIRST_STEP) {
|
||||
val artifactId by stringSetting(
|
||||
KotlinNewProjectWizardBundle.message("plugin.structure.setting.artifact.id"),
|
||||
GenerationPhase.FIRST_STEP
|
||||
) {
|
||||
shouldNotBeBlank()
|
||||
validate(StringValidators.shouldBeValidIdentifier("Artifact ID", setOf('_')))
|
||||
validate(StringValidators.shouldBeValidIdentifier(title, setOf('_')))
|
||||
}
|
||||
val version by stringSetting("Version", GenerationPhase.FIRST_STEP) {
|
||||
val version by stringSetting(
|
||||
KotlinNewProjectWizardBundle.message("plugin.structure.setting.version"),
|
||||
GenerationPhase.FIRST_STEP
|
||||
) {
|
||||
shouldNotBeBlank()
|
||||
validate(StringValidators.shouldBeValidIdentifier("Version", setOf('_', '-', '.')))
|
||||
validate(StringValidators.shouldBeValidIdentifier(title, setOf('_', '-', '.')))
|
||||
defaultValue = value("1.0-SNAPSHOT")
|
||||
}
|
||||
|
||||
|
||||
+22
-9
@@ -1,6 +1,9 @@
|
||||
package org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem
|
||||
|
||||
|
||||
import org.jetbrains.annotations.Nls
|
||||
import org.jetbrains.annotations.NonNls
|
||||
import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.*
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.entity.ValidationResult
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.reference
|
||||
@@ -22,7 +25,10 @@ import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Repository
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.updateBuildFiles
|
||||
|
||||
abstract class BuildSystemPlugin(context: Context) : Plugin(context) {
|
||||
val type by enumSetting<BuildSystemType>("Build System", GenerationPhase.FIRST_STEP) {
|
||||
val type by enumSetting<BuildSystemType>(
|
||||
KotlinNewProjectWizardBundle.message("plugin.buildsystem.setting.type"),
|
||||
GenerationPhase.FIRST_STEP
|
||||
) {
|
||||
isSavable = true
|
||||
filter = { _, type ->
|
||||
val service = service<BuildSystemAvailabilityWizardService>()
|
||||
@@ -33,8 +39,15 @@ abstract class BuildSystemPlugin(context: Context) : Plugin(context) {
|
||||
if (!buildSystemType.isGradle
|
||||
&& KotlinPlugin::projectKind.reference.notRequiredSettingValue != ProjectKind.Singleplatform
|
||||
) {
|
||||
val projectKind = KotlinPlugin::projectKind.reference.notRequiredSettingValue?.text?.capitalize() ?: "Project"
|
||||
ValidationResult.ValidationError("$projectKind cannot be generated using ${buildSystemType.text}")
|
||||
val projectKind = KotlinPlugin::projectKind.reference.notRequiredSettingValue?.text?.capitalize()
|
||||
?: KotlinNewProjectWizardBundle.message("project")
|
||||
ValidationResult.ValidationError(
|
||||
KotlinNewProjectWizardBundle.message(
|
||||
"plugin.buildsystem.setting.type.error.wrong.project.kind",
|
||||
projectKind,
|
||||
buildSystemType.text
|
||||
)
|
||||
)
|
||||
} else ValidationResult.OK
|
||||
}
|
||||
}
|
||||
@@ -106,14 +119,14 @@ data class BuildSystemData(
|
||||
|
||||
data class BuildFileData(
|
||||
val createPrinter: () -> BuildFilePrinter,
|
||||
val buildFileName: String
|
||||
@NonNls val buildFileName: String
|
||||
)
|
||||
|
||||
enum class BuildSystemType(override val text: String) : DisplayableSettingItem {
|
||||
GradleKotlinDsl("Gradle Kotlin"),
|
||||
GradleGroovyDsl("Gradle Groovy"),
|
||||
Jps("IntelliJ"),
|
||||
Maven("Maven")
|
||||
enum class BuildSystemType(@Nls override val text: String) : DisplayableSettingItem {
|
||||
GradleKotlinDsl(KotlinNewProjectWizardBundle.message("buildsystem.type.gradle.kotlin")),
|
||||
GradleGroovyDsl(KotlinNewProjectWizardBundle.message("buildsystem.type.gradle.groovy")),
|
||||
Jps(KotlinNewProjectWizardBundle.message("buildsystem.type.intellij")),
|
||||
Maven(KotlinNewProjectWizardBundle.message("buildsystem.type.maven"))
|
||||
|
||||
;
|
||||
|
||||
|
||||
-2
@@ -3,8 +3,6 @@ package org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.Context
|
||||
|
||||
class JpsPlugin(context: Context) : BuildSystemPlugin(context) {
|
||||
override val title: String = "IDEA"
|
||||
|
||||
val addBuildSystemData by addBuildSystemData(
|
||||
BuildSystemData(
|
||||
type = BuildSystemType.Jps,
|
||||
|
||||
-2
@@ -13,8 +13,6 @@ import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.MavenPrinter
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.updateBuildFiles
|
||||
|
||||
class MavenPlugin(context: Context) : BuildSystemPlugin(context) {
|
||||
override val title: String = "Maven"
|
||||
|
||||
private val isMaven = checker {
|
||||
BuildSystemPlugin::type.settingValue == BuildSystemType.Maven
|
||||
}
|
||||
|
||||
-2
@@ -7,8 +7,6 @@ import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemT
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.GradlePrinter
|
||||
|
||||
class GroovyDslPlugin(context: Context) : GradlePlugin(context) {
|
||||
override val title: String = "Gradle (Groovy DSL)"
|
||||
|
||||
val addBuildSystemData by addBuildSystemData(
|
||||
BuildSystemData(
|
||||
type = BuildSystemType.GradleGroovyDsl,
|
||||
|
||||
-2
@@ -7,8 +7,6 @@ import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemT
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.GradlePrinter
|
||||
|
||||
class KotlinDslPlugin(context: Context) : GradlePlugin(context) {
|
||||
override val title: String = "Gradle (Kotlin DSL)"
|
||||
|
||||
val addBuildSystemData by addBuildSystemData(
|
||||
BuildSystemData(
|
||||
type = BuildSystemType.GradleKotlinDsl,
|
||||
|
||||
+32
-13
@@ -1,5 +1,6 @@
|
||||
package org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin
|
||||
|
||||
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.entity.ValidationResult
|
||||
@@ -26,7 +27,7 @@ class KotlinPlugin(context: Context) : Plugin(context) {
|
||||
val version by property(Versions.KOTLIN)
|
||||
|
||||
val initKotlinVersions by pipelineTask(GenerationPhase.PREPARE_GENERATION) {
|
||||
title = "Downloading list of Kotlin versions"
|
||||
title = KotlinNewProjectWizardBundle.message("plugin.kotlin.downloading.kotlin.versions")
|
||||
|
||||
withAction {
|
||||
val version = service<KotlinVersionProviderService>().getKotlinVersion()
|
||||
@@ -34,18 +35,29 @@ class KotlinPlugin(context: Context) : Plugin(context) {
|
||||
}
|
||||
}
|
||||
|
||||
val projectKind by enumSetting<ProjectKind>("Project Kind", GenerationPhase.FIRST_STEP)
|
||||
val projectKind by enumSetting<ProjectKind>(
|
||||
KotlinNewProjectWizardBundle.message("plugin.kotlin.setting.project.kind"),
|
||||
GenerationPhase.FIRST_STEP
|
||||
)
|
||||
|
||||
private fun List<Module>.findDuplicatesByName() =
|
||||
groupingBy { it.name }.eachCount().filter { it.value > 1 }
|
||||
|
||||
val modules by listSetting("Modules", GenerationPhase.SECOND_STEP, Module.parser) {
|
||||
val modules by listSetting(
|
||||
KotlinNewProjectWizardBundle.message("plugin.kotlin.setting.modules"),
|
||||
GenerationPhase.SECOND_STEP,
|
||||
Module.parser
|
||||
) {
|
||||
validate { value ->
|
||||
val allModules = value.withAllSubModules()
|
||||
val duplicatedModules = allModules.findDuplicatesByName()
|
||||
if (duplicatedModules.isEmpty()) ValidationResult.OK
|
||||
else ValidationResult.ValidationError(
|
||||
"There are ${duplicatedModules.values.first()} modules with name `${duplicatedModules.keys.first()}`"
|
||||
KotlinNewProjectWizardBundle.message(
|
||||
"plugin.kotlin.setting.modules.error.duplicated.modules",
|
||||
duplicatedModules.values.first(),
|
||||
duplicatedModules.keys.first()
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -54,7 +66,11 @@ class KotlinPlugin(context: Context) : Plugin(context) {
|
||||
val duplicatedModules = module.subModules.findDuplicatesByName()
|
||||
if (duplicatedModules.isEmpty()) ValidationResult.OK
|
||||
else ValidationResult.ValidationError(
|
||||
"There are ${duplicatedModules.values.first()} targets for module `${module.name}` with name `${duplicatedModules.keys.first()}`"
|
||||
KotlinNewProjectWizardBundle.message(
|
||||
"plugin.kotlin.setting.modules.error.duplicated.targets",
|
||||
duplicatedModules.values.first(),
|
||||
duplicatedModules.keys.first()
|
||||
)
|
||||
)
|
||||
}.fold()
|
||||
}
|
||||
@@ -119,9 +135,6 @@ class KotlinPlugin(context: Context) : Plugin(context) {
|
||||
|
||||
|
||||
companion object {
|
||||
// TODO update default versions
|
||||
private val DEFAULT_VERSION = Version.fromString("1.3.61")
|
||||
|
||||
private val moduleDependenciesValidator = settingValidator<List<Module>> { modules ->
|
||||
val allModules = modules.withAllSubModules(includeSourcesets = true).toSet()
|
||||
val allModulePaths = allModules.map(Module::path).toSet()
|
||||
@@ -131,7 +144,13 @@ class KotlinPlugin(context: Context) : Plugin(context) {
|
||||
is ModuleReference.ByPath -> dependency.path in allModulePaths
|
||||
is ModuleReference.ByModule -> dependency.module in allModules
|
||||
}
|
||||
ValidationResult.create(isValidModule) { "Invalid module dependency $dependency of module ${module.path}" }
|
||||
ValidationResult.create(isValidModule) {
|
||||
KotlinNewProjectWizardBundle.message(
|
||||
"plugin.kotlin.setting.modules.error.duplicated.modules",
|
||||
dependency,
|
||||
module.path
|
||||
)
|
||||
}
|
||||
}
|
||||
}.fold()
|
||||
}
|
||||
@@ -139,10 +158,10 @@ class KotlinPlugin(context: Context) : Plugin(context) {
|
||||
}
|
||||
|
||||
enum class ProjectKind(override val text: String) : DisplayableSettingItem {
|
||||
Singleplatform("Singleplatform project"),
|
||||
Multiplatform("Multiplatform project"),
|
||||
Android("Android project"),
|
||||
Js("Kotlin/JS project")
|
||||
Singleplatform(KotlinNewProjectWizardBundle.message("project.kind.singleplatform")),
|
||||
Multiplatform(KotlinNewProjectWizardBundle.message("project.kind.multiplatform")),
|
||||
Android(KotlinNewProjectWizardBundle.message("project.kind.android")),
|
||||
Js(KotlinNewProjectWizardBundle.message("project.kind.kotlin.js"))
|
||||
}
|
||||
|
||||
fun List<Module>.withAllSubModules(includeSourcesets: Boolean = false): List<Module> = buildList {
|
||||
|
||||
+7
-6
@@ -1,17 +1,18 @@
|
||||
package org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin
|
||||
|
||||
import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle
|
||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.StdlibType
|
||||
import java.util.*
|
||||
|
||||
//TODO maybe split into interfaces like it made with module configurators
|
||||
@Suppress("EnumEntryName")
|
||||
enum class ModuleType(val projectTypeName: String) {
|
||||
jvm("Kotlin/JVM"),
|
||||
js("Kotlin/JS"),
|
||||
native("Kotlin/Native"),
|
||||
common("Common"),
|
||||
android("Android"),
|
||||
// ios("iOS")
|
||||
jvm(KotlinNewProjectWizardBundle.message("module.type.jvm")),
|
||||
js(KotlinNewProjectWizardBundle.message("module.type.js")),
|
||||
native(KotlinNewProjectWizardBundle.message("module.type.native")),
|
||||
common(KotlinNewProjectWizardBundle.message("module.type.common")),
|
||||
android(KotlinNewProjectWizardBundle.message("module.type.android")),
|
||||
// ios(KotlinNewProjectWizardBundle.message("module.type.ios"))
|
||||
|
||||
;
|
||||
|
||||
|
||||
+2
-1
@@ -1,5 +1,6 @@
|
||||
package org.jetbrains.kotlin.tools.projectWizard.plugins.printer
|
||||
|
||||
import org.jetbrains.annotations.NonNls
|
||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR
|
||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.render
|
||||
|
||||
@@ -25,7 +26,7 @@ abstract class BuildFilePrinter {
|
||||
builder.append(this)
|
||||
}
|
||||
|
||||
operator fun String.unaryPlus() {
|
||||
operator fun @receiver:NonNls String.unaryPlus() {
|
||||
builder.append(this)
|
||||
}
|
||||
|
||||
|
||||
+7
-6
@@ -1,5 +1,6 @@
|
||||
package org.jetbrains.kotlin.tools.projectWizard.plugins.printer
|
||||
|
||||
import org.jetbrains.annotations.NonNls
|
||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR
|
||||
|
||||
class GradlePrinter(val dsl: GradleDsl, override val indent: Int = 4) : BuildFilePrinter() {
|
||||
@@ -26,7 +27,7 @@ class GradlePrinter(val dsl: GradleDsl, override val indent: Int = 4) : BuildFil
|
||||
GradleDsl.GROOVY -> "'$this'"
|
||||
}
|
||||
|
||||
fun call(name: String, forceBrackets: Boolean = false, body: () -> Unit) {
|
||||
fun call(@NonNls name: String, forceBrackets: Boolean = false, body: () -> Unit) {
|
||||
+name
|
||||
when {
|
||||
dsl == GradleDsl.KOTLIN || forceBrackets -> {
|
||||
@@ -39,7 +40,7 @@ class GradlePrinter(val dsl: GradleDsl, override val indent: Int = 4) : BuildFil
|
||||
}
|
||||
}
|
||||
|
||||
fun sectionCall(name: String, needIndent: Boolean = false, body: () -> Unit) {
|
||||
fun sectionCall(@NonNls name: String, needIndent: Boolean = false, body: () -> Unit) {
|
||||
+name
|
||||
+" "
|
||||
inBrackets {
|
||||
@@ -49,7 +50,7 @@ class GradlePrinter(val dsl: GradleDsl, override val indent: Int = 4) : BuildFil
|
||||
}
|
||||
|
||||
fun <I : BuildSystemIR> sectionCall(
|
||||
name: String,
|
||||
@NonNls name: String,
|
||||
irs: List<I>,
|
||||
renderEmpty: Boolean = false
|
||||
) {
|
||||
@@ -61,7 +62,7 @@ class GradlePrinter(val dsl: GradleDsl, override val indent: Int = 4) : BuildFil
|
||||
}
|
||||
}
|
||||
|
||||
fun assignmentOrCall(target: String, assignee: () -> Unit) = when (dsl) {
|
||||
fun assignmentOrCall(@NonNls target: String, assignee: () -> Unit) = when (dsl) {
|
||||
GradleDsl.KOTLIN -> {
|
||||
+"$target = "
|
||||
assignee()
|
||||
@@ -69,13 +70,13 @@ class GradlePrinter(val dsl: GradleDsl, override val indent: Int = 4) : BuildFil
|
||||
GradleDsl.GROOVY -> call(target, forceBrackets = false, body = assignee)
|
||||
}
|
||||
|
||||
fun assignment(target: String, assignee: () -> Unit) {
|
||||
fun assignment(@NonNls target: String, assignee: () -> Unit) {
|
||||
+"$target = "
|
||||
assignee()
|
||||
}
|
||||
|
||||
|
||||
inline fun getting(name: String, prefix: String?, body: () -> Unit = {}) {
|
||||
inline fun getting(@NonNls name: String, @NonNls prefix: String?, body: () -> Unit = {}) {
|
||||
when (dsl) {
|
||||
GradleDsl.GROOVY -> {
|
||||
prefix?.let { +it; +"." }
|
||||
|
||||
+3
-2
@@ -1,12 +1,13 @@
|
||||
package org.jetbrains.kotlin.tools.projectWizard.plugins.printer
|
||||
|
||||
import org.jetbrains.annotations.NonNls
|
||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR
|
||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.render
|
||||
|
||||
class
|
||||
MavenPrinter(override val indent: Int = 4) : BuildFilePrinter() {
|
||||
fun node(
|
||||
name: String,
|
||||
@NonNls name: String,
|
||||
attributes: List<Pair<String, String>> = emptyList(),
|
||||
singleLine: Boolean = false,
|
||||
body: () -> Unit
|
||||
@@ -44,7 +45,7 @@ MavenPrinter(override val indent: Int = 4) : BuildFilePrinter() {
|
||||
get() = "\"$this\""
|
||||
|
||||
fun singleLineNode(
|
||||
name: String,
|
||||
@NonNls name: String,
|
||||
attributes: List<Pair<String, String>> = emptyList(),
|
||||
body: () -> Unit
|
||||
) = node(name, attributes, singleLine = true, body = body)
|
||||
|
||||
+37
-21
@@ -1,5 +1,7 @@
|
||||
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.core.buildList
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.*
|
||||
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.*
|
||||
@@ -133,8 +135,10 @@ private fun ModuleType.createDefaultTarget(
|
||||
) = MultiplatformTargetModule(name, defaultTarget, createDefaultSourcesets())
|
||||
|
||||
object EmptySingleplatformProjectTemplate : ProjectTemplate() {
|
||||
override val title = "Backend Application"
|
||||
override val description = "Create a backend application with Kotlin/JVM."
|
||||
override val title = KotlinNewProjectWizardBundle.message("project.template.empty.singleplatform.title")
|
||||
override val description = KotlinNewProjectWizardBundle.message("project.template.empty.singleplatform.description")
|
||||
|
||||
@NonNls
|
||||
override val suggestedProjectName = "myKotlinJvmProject"
|
||||
override val projectKind = ProjectKind.Singleplatform
|
||||
|
||||
@@ -147,8 +151,10 @@ object EmptySingleplatformProjectTemplate : ProjectTemplate() {
|
||||
}
|
||||
|
||||
object EmptyMultiplatformProjectTemplate : ProjectTemplate() {
|
||||
override val title = "Multiplatform Application"
|
||||
override val description = "Create applications for different platforms that support sharing common code."
|
||||
override val title = KotlinNewProjectWizardBundle.message("project.template.empty.mpp.title")
|
||||
override val description = KotlinNewProjectWizardBundle.message("project.template.empty.mpp.description")
|
||||
|
||||
@NonNls
|
||||
override val suggestedProjectName = "myKotlinMultiplatformProject"
|
||||
override val projectKind = ProjectKind.Multiplatform
|
||||
|
||||
@@ -161,8 +167,10 @@ object EmptyMultiplatformProjectTemplate : ProjectTemplate() {
|
||||
}
|
||||
|
||||
object JvmConsoleApplication : ProjectTemplate() {
|
||||
override val title = "Console Application"
|
||||
override val description = "Create a console application with Kotlin/JVM. Use it for prototyping or testing purposes."
|
||||
override val title = KotlinNewProjectWizardBundle.message("project.template.empty.jvm.console.title")
|
||||
override val description = KotlinNewProjectWizardBundle.message("project.template.empty.jvm.console.description")
|
||||
|
||||
@NonNls
|
||||
override val suggestedProjectName = "myConsoleApplication"
|
||||
override val projectKind = ProjectKind.Singleplatform
|
||||
|
||||
@@ -180,8 +188,10 @@ object JvmConsoleApplication : ProjectTemplate() {
|
||||
}
|
||||
|
||||
object MultiplatformLibrary : ProjectTemplate() {
|
||||
override val title = "Multiplatform Library"
|
||||
override val description = "Create a library for sharing common code among different platforms."
|
||||
override val title = KotlinNewProjectWizardBundle.message("project.template.mpp.lib.title")
|
||||
override val description = KotlinNewProjectWizardBundle.message("project.template.mpp.lib.description")
|
||||
|
||||
@NonNls
|
||||
override val suggestedProjectName = "myMultiplatformLibrary"
|
||||
override val projectKind = ProjectKind.Multiplatform
|
||||
|
||||
@@ -202,9 +212,10 @@ object MultiplatformLibrary : ProjectTemplate() {
|
||||
}
|
||||
|
||||
object JvmServerJsClient : ProjectTemplate() {
|
||||
override val title: String = "Full-Stack Web Application"
|
||||
override val description: String = "" +
|
||||
"Create a fully-functional web application using Kotlin/JS for the frontend and Kotlin/JVM for the backend."
|
||||
override val title: String = KotlinNewProjectWizardBundle.message("project.template.full.stack.title")
|
||||
override val description: String = KotlinNewProjectWizardBundle.message("project.template.full.stack.description")
|
||||
|
||||
@NonNls
|
||||
override val suggestedProjectName: String = "myFullStackApplication"
|
||||
override val projectKind: ProjectKind = ProjectKind.Multiplatform
|
||||
override val setsPluginSettings: List<SettingWithValue<*, *>> = listOf(
|
||||
@@ -227,9 +238,10 @@ object JvmServerJsClient : ProjectTemplate() {
|
||||
}
|
||||
|
||||
object NativeConsoleApplication : ProjectTemplate() {
|
||||
override val title = "Native Application"
|
||||
override val description =
|
||||
"Create an application with Kotlin/Native that works as a standalone application under a specific platform."
|
||||
override val title = KotlinNewProjectWizardBundle.message("project.template.native.console.title")
|
||||
override val description = KotlinNewProjectWizardBundle.message("project.template.native.console.description")
|
||||
|
||||
@NonNls
|
||||
override val suggestedProjectName = "myNativeConsoleApp"
|
||||
override val projectKind = ProjectKind.Multiplatform
|
||||
|
||||
@@ -252,8 +264,10 @@ object NativeConsoleApplication : ProjectTemplate() {
|
||||
}
|
||||
|
||||
object JsBrowserApplication : ProjectTemplate() {
|
||||
override val title = "Frontend Application"
|
||||
override val description = "Create a frontend application with Kotlin/JS if you already have a backend."
|
||||
override val title = KotlinNewProjectWizardBundle.message("project.template.frontend.title")
|
||||
override val description = KotlinNewProjectWizardBundle.message("project.template.frontend.description")
|
||||
|
||||
@NonNls
|
||||
override val suggestedProjectName = "myKotlinJsApplication"
|
||||
override val projectKind = ProjectKind.Js
|
||||
|
||||
@@ -274,10 +288,10 @@ object JsBrowserApplication : ProjectTemplate() {
|
||||
}
|
||||
|
||||
object MPPMobileApplication : ProjectTemplate() {
|
||||
override val title = "Multiplatform Mobile Application"
|
||||
override val title = KotlinNewProjectWizardBundle.message("project.template.mpp.mobile.title")
|
||||
override val description = KotlinNewProjectWizardBundle.message("project.template.mpp.mobile.description")
|
||||
|
||||
override val description =
|
||||
"Create mobile applications for iOS and Android with Kotlin Multiplatform Mobile, which supports sharing common code between platforms."
|
||||
@NonNls
|
||||
override val suggestedProjectName = "myIOSApplication"
|
||||
override val projectKind = ProjectKind.Multiplatform
|
||||
|
||||
@@ -325,8 +339,10 @@ object MPPMobileApplication : ProjectTemplate() {
|
||||
}
|
||||
|
||||
object MultiplatformMobileLibrary : ProjectTemplate() {
|
||||
override val title = "Multiplatform Mobile Library"
|
||||
override val description = "Create a library that supports sharing code between iOS and Android."
|
||||
override val title = KotlinNewProjectWizardBundle.message("project.template.mpp.mobile.lib.title")
|
||||
override val description = KotlinNewProjectWizardBundle.message("project.template.mpp.mobile.lib.description")
|
||||
|
||||
@NonNls
|
||||
override val suggestedProjectName = "myMppMobileLibrary"
|
||||
override val projectKind = ProjectKind.Multiplatform
|
||||
|
||||
|
||||
+5
@@ -1,7 +1,12 @@
|
||||
package org.jetbrains.kotlin.tools.projectWizard.settings
|
||||
|
||||
import org.jetbrains.annotations.Nls
|
||||
|
||||
interface DisplayableSettingItem {
|
||||
@get:Nls
|
||||
val text: String
|
||||
|
||||
@get:Nls
|
||||
val greyText: String?
|
||||
get() = null
|
||||
}
|
||||
|
||||
+29
-15
@@ -1,9 +1,11 @@
|
||||
package org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem
|
||||
|
||||
import kotlinx.collections.immutable.PersistentList
|
||||
import org.jetbrains.annotations.NonNls
|
||||
import org.jetbrains.kotlin.tools.projectWizard.GeneratedIdentificator
|
||||
import org.jetbrains.kotlin.tools.projectWizard.Identificator
|
||||
import org.jetbrains.kotlin.tools.projectWizard.IdentificatorOwner
|
||||
import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.*
|
||||
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.entity.*
|
||||
@@ -29,7 +31,7 @@ enum class ModuleKind : DisplayableSettingItem {
|
||||
|
||||
// TODO separate to classes
|
||||
class Module(
|
||||
var name: String,
|
||||
@NonNls var name: String,
|
||||
val configurator: ModuleConfigurator,
|
||||
var template: Template?,
|
||||
val sourcesets: List<Sourceset>,
|
||||
@@ -62,12 +64,12 @@ class Module(
|
||||
override val text: String get() = name
|
||||
override val greyText: String?
|
||||
get() = when {
|
||||
kind == ModuleKind.target -> "${configurator.text} Target"
|
||||
configurator == MppModuleConfigurator -> "MPP Module"
|
||||
configurator == AndroidSinglePlatformModuleConfigurator -> "Android Module"
|
||||
configurator == IOSSinglePlatformModuleConfigurator -> "IOS Module"
|
||||
configurator == JsSingleplatformModuleConfigurator -> "JS Module"
|
||||
else -> "Module"
|
||||
kind == ModuleKind.target -> configurator.text + KotlinNewProjectWizardBundle.message("module.kind.target")
|
||||
configurator == MppModuleConfigurator -> KotlinNewProjectWizardBundle.message("module.kind.mpp.module")
|
||||
configurator == AndroidSinglePlatformModuleConfigurator -> KotlinNewProjectWizardBundle.message("module.kind.android.module")
|
||||
configurator == IOSSinglePlatformModuleConfigurator -> KotlinNewProjectWizardBundle.message("module.kind.ios.module")
|
||||
configurator == JsSingleplatformModuleConfigurator -> KotlinNewProjectWizardBundle.message("module.kind.js.module")
|
||||
else -> KotlinNewProjectWizardBundle.message("module.kind.module")
|
||||
}
|
||||
|
||||
fun SettingsWriter.initDefaultValuesForSettings() {
|
||||
@@ -101,10 +103,12 @@ class Module(
|
||||
}
|
||||
|
||||
private val moduleNameValidator = settingValidator<Module> { module ->
|
||||
StringValidators.shouldNotBeBlank("Module name").validate(this, module.name)
|
||||
StringValidators.shouldNotBeBlank(KotlinNewProjectWizardBundle.message("module.name")).validate(this, module.name)
|
||||
} and settingValidator { module ->
|
||||
StringValidators.shouldBeValidIdentifier("Module name `${module.name}`", ALLOWED_SPECIAL_CHARS_IN_MODULE_NAMES)
|
||||
.validate(this, module.name)
|
||||
StringValidators.shouldBeValidIdentifier(
|
||||
KotlinNewProjectWizardBundle.message("module.name", module.name),
|
||||
ALLOWED_SPECIAL_CHARS_IN_MODULE_NAMES
|
||||
).validate(this, module.name)
|
||||
}
|
||||
|
||||
val moduleConfiguratorValidator = settingValidator<Module> { module ->
|
||||
@@ -117,7 +121,12 @@ class Module(
|
||||
}
|
||||
val value = reference?.notRequiredSettingValue
|
||||
?: reference?.savedOrDefaultValue
|
||||
?: return@map ValidationResult.ValidationError("${setting.title.capitalize()} should not be blank")
|
||||
?: return@map ValidationResult.ValidationError(
|
||||
KotlinNewProjectWizardBundle.message(
|
||||
"validation.should.not.be.blank",
|
||||
setting.title.capitalize()
|
||||
)
|
||||
)
|
||||
(setting.validator as SettingValidator<Any>).validate(this@settingValidator, value)
|
||||
}.fold()
|
||||
}
|
||||
@@ -129,7 +138,12 @@ class Module(
|
||||
template.settings.map { setting ->
|
||||
val value = setting.reference.notRequiredSettingValue
|
||||
?: setting.reference.savedOrDefaultValue
|
||||
?: return@map ValidationResult.ValidationError("${setting.title.capitalize()} should not be blank")
|
||||
?: return@map ValidationResult.ValidationError(
|
||||
KotlinNewProjectWizardBundle.message(
|
||||
"validation.should.not.be.blank",
|
||||
setting.title.capitalize()
|
||||
)
|
||||
)
|
||||
(setting.validator as SettingValidator<Any>).validate(this@settingValidator, value)
|
||||
}.fold()
|
||||
}
|
||||
@@ -157,7 +171,7 @@ val Module.isRootModule
|
||||
get() = parent == null
|
||||
|
||||
@Suppress("FunctionName")
|
||||
fun MultiplatformTargetModule(name: String, configurator: ModuleConfigurator, sourcesets: List<Sourceset>) =
|
||||
fun MultiplatformTargetModule(@NonNls name: String, configurator: ModuleConfigurator, sourcesets: List<Sourceset>) =
|
||||
Module(
|
||||
name,
|
||||
configurator,
|
||||
@@ -167,7 +181,7 @@ fun MultiplatformTargetModule(name: String, configurator: ModuleConfigurator, so
|
||||
)
|
||||
|
||||
@Suppress("FunctionName")
|
||||
fun MultiplatformModule(name: String, targets: List<Module> = emptyList()) =
|
||||
fun MultiplatformModule(@NonNls name: String, targets: List<Module> = emptyList()) =
|
||||
Module(
|
||||
name,
|
||||
MppModuleConfigurator,
|
||||
@@ -177,7 +191,7 @@ fun MultiplatformModule(name: String, targets: List<Module> = emptyList()) =
|
||||
)
|
||||
|
||||
@Suppress("FunctionName")
|
||||
fun SingleplatformModule(name: String, sourcesets: List<Sourceset>) =
|
||||
fun SingleplatformModule(@NonNls name: String, sourcesets: List<Sourceset>) =
|
||||
Module(
|
||||
name,
|
||||
JvmSinglePlatformModuleConfigurator,
|
||||
|
||||
+5
-3
@@ -1,18 +1,20 @@
|
||||
package org.jetbrains.kotlin.tools.projectWizard.settings.version
|
||||
|
||||
import org.jetbrains.annotations.NonNls
|
||||
import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.*
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem
|
||||
|
||||
data class Version(override val text: String) : DisplayableSettingItem {
|
||||
data class Version(@NonNls override val text: String) : DisplayableSettingItem {
|
||||
override fun toString(): String = text
|
||||
|
||||
companion object {
|
||||
fun fromString(string: String) = Version(string)
|
||||
fun fromString(@NonNls string: String) = Version(string)
|
||||
|
||||
val parser: Parser<Version> = valueParser { value, path ->
|
||||
val (stringVersion) = value.parseAs<String>(path)
|
||||
safe { fromString(stringVersion) }.mapFailure {
|
||||
ParseError("Bad version format for setting `$path`")
|
||||
ParseError(KotlinNewProjectWizardBundle.message("version.error.bad.format", path))
|
||||
}.get()
|
||||
}
|
||||
}
|
||||
|
||||
+7
-2
@@ -1,5 +1,6 @@
|
||||
package org.jetbrains.kotlin.tools.projectWizard.templates
|
||||
|
||||
import org.jetbrains.annotations.NonNls
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.Writer
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.asPath
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.buildList
|
||||
@@ -10,11 +11,15 @@ import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.multiplatf
|
||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.runTaskIrs
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.SourcesetType
|
||||
import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle
|
||||
|
||||
class ConsoleJvmApplicationTemplate : Template() {
|
||||
@NonNls
|
||||
override val id: String = "consoleJvmApp"
|
||||
override val title: String = "Console Application"
|
||||
override val description: String = """Simple “Hello World!” Kotlin/JVM application that works in the console"""
|
||||
|
||||
override val title: String = KotlinNewProjectWizardBundle.message("module.template.console.jvm.title")
|
||||
override val description: String = KotlinNewProjectWizardBundle.message("module.template.console.jvm.description")
|
||||
|
||||
override val moduleTypes: Set<ModuleType> = setOf(ModuleType.jvm)
|
||||
|
||||
override fun Writer.getIrsToAddToBuildFile(
|
||||
|
||||
+2
-1
@@ -1,5 +1,6 @@
|
||||
package org.jetbrains.kotlin.tools.projectWizard.templates
|
||||
|
||||
import org.jetbrains.annotations.NonNls
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.asPath
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.SourcesetType
|
||||
import java.nio.file.Path
|
||||
@@ -8,7 +9,7 @@ import java.nio.file.Paths
|
||||
|
||||
// Should be used to create any kind of files in the generated project
|
||||
// Except build files as they will be generated using IR
|
||||
data class FileTemplateDescriptor(val templateId: String, val relativePath: Path) {
|
||||
data class FileTemplateDescriptor(@NonNls val templateId: String, val relativePath: Path) {
|
||||
constructor(templateId: String) : this(
|
||||
templateId,
|
||||
Paths.get(templateId).fileName.toString().removeSuffix(".vm").asPath()
|
||||
|
||||
+23
-7
@@ -6,6 +6,7 @@
|
||||
package org.jetbrains.kotlin.tools.projectWizard.templates
|
||||
|
||||
|
||||
import org.jetbrains.annotations.NonNls
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.Writer
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.asPath
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.buildList
|
||||
@@ -22,11 +23,14 @@ import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Repositorie
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.SourcesetType
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version
|
||||
import org.jetbrains.kotlin.tools.projectWizard.transformers.interceptors.InterceptionPoint
|
||||
import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle
|
||||
|
||||
class KtorServerTemplate : Template() {
|
||||
override val title: String = "Ktor Server"
|
||||
override val description: String = "Configurable Ktor web server for building web applications"
|
||||
override val title: String = KotlinNewProjectWizardBundle.message("module.template.ktor.server.title")
|
||||
override val description: String = KotlinNewProjectWizardBundle.message("module.template.ktor.server.description")
|
||||
override val moduleTypes: Set<ModuleType> = setOf(ModuleType.jvm)
|
||||
|
||||
@NonNls
|
||||
override val id: String = "ktorServer"
|
||||
|
||||
override fun Writer.getRequiredLibraries(module: ModuleIR): List<DependencyIR> =
|
||||
@@ -55,7 +59,10 @@ class KtorServerTemplate : Template() {
|
||||
FileTemplateDescriptor("$id/server.kt.vm", "server.kt".asPath()) asSrcOf SourcesetType.main
|
||||
)
|
||||
|
||||
val serverEngine by enumSetting<KtorServerEngine>("Ktor Server Engine", GenerationPhase.PROJECT_GENERATION)
|
||||
val serverEngine by enumSetting<KtorServerEngine>(
|
||||
KotlinNewProjectWizardBundle.message("module.template.ktor.server.setting.engine"),
|
||||
GenerationPhase.PROJECT_GENERATION
|
||||
)
|
||||
|
||||
val imports = InterceptionPoint("imports", emptyList<String>())
|
||||
val routes = InterceptionPoint("routes", emptyList<String>())
|
||||
@@ -65,7 +72,7 @@ class KtorServerTemplate : Template() {
|
||||
override val settings: List<TemplateSetting<*, *>> = listOf(serverEngine)
|
||||
}
|
||||
|
||||
private fun ktorArtifactDependency(name: String) = ArtifactBasedLibraryDependencyIR(
|
||||
private fun ktorArtifactDependency(@NonNls name: String) = ArtifactBasedLibraryDependencyIR(
|
||||
MavenArtifact(Repositories.KTOR_BINTRAY, "io.ktor", name),
|
||||
Version.fromString("1.2.6"),
|
||||
DependencyType.MAIN
|
||||
@@ -74,9 +81,18 @@ private fun ktorArtifactDependency(name: String) = ArtifactBasedLibraryDependenc
|
||||
|
||||
@Suppress("MemberVisibilityCanBePrivate")
|
||||
enum class KtorServerEngine(val engineName: String, val dependencyName: String) : DisplayableSettingItem {
|
||||
Netty("Netty", dependencyName = "ktor-server-netty"),
|
||||
Tomcat("Tomcat", dependencyName = "ktor-server-tomcat"),
|
||||
Jetty("Jetty", dependencyName = "ktor-server-jetty");
|
||||
Netty(
|
||||
KotlinNewProjectWizardBundle.message("module.template.ktor.server.setting.engine.netty"),
|
||||
dependencyName = "ktor-server-netty"
|
||||
),
|
||||
Tomcat(
|
||||
KotlinNewProjectWizardBundle.message("module.template.ktor.server.setting.engine.tomcat"),
|
||||
dependencyName = "ktor-server-tomcat"
|
||||
),
|
||||
Jetty(
|
||||
KotlinNewProjectWizardBundle.message("module.template.ktor.server.setting.engine.jetty"),
|
||||
dependencyName = "ktor-server-jetty"
|
||||
);
|
||||
|
||||
override val text: String
|
||||
get() = engineName.capitalize()
|
||||
|
||||
+4
-2
@@ -15,10 +15,12 @@ import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.multiplatf
|
||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.withIrs
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.SourcesetType
|
||||
import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle
|
||||
|
||||
class NativeConsoleApplicationTemplate : Template() {
|
||||
override val title: String = "Native Application"
|
||||
override val description: String = "Simple Kotlin/Native application for your operating system"
|
||||
override val title: String = KotlinNewProjectWizardBundle.message("module.template.native.console.title")
|
||||
override val description: String = KotlinNewProjectWizardBundle.message("module.template.native.console.description")
|
||||
|
||||
override val moduleTypes: Set<ModuleType> = setOf(ModuleType.native)
|
||||
override val id: String = "nativeConsoleApp"
|
||||
|
||||
|
||||
+23
-9
@@ -6,6 +6,8 @@
|
||||
package org.jetbrains.kotlin.tools.projectWizard.templates
|
||||
|
||||
|
||||
import org.jetbrains.annotations.Nls
|
||||
import org.jetbrains.annotations.NonNls
|
||||
import org.jetbrains.kotlin.tools.projectWizard.WizardGradleRunConfiguration
|
||||
import org.jetbrains.kotlin.tools.projectWizard.WizardRunConfiguration
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.*
|
||||
@@ -25,18 +27,25 @@ import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.*
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version
|
||||
import org.jetbrains.kotlin.tools.projectWizard.transformers.interceptors.TemplateInterceptor
|
||||
import org.jetbrains.kotlin.tools.projectWizard.transformers.interceptors.interceptTemplate
|
||||
import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle
|
||||
|
||||
class SimpleJsClientTemplate : Template() {
|
||||
override val title: String = "Frontend Application"
|
||||
override val description: String = "Configurable Kotlin/JS frontend application"
|
||||
override val title: String = KotlinNewProjectWizardBundle.message("module.template.js.simple.title")
|
||||
override val description: String = KotlinNewProjectWizardBundle.message("module.template.js.simple.description")
|
||||
|
||||
override val moduleTypes: Set<ModuleType> = setOf(ModuleType.js)
|
||||
|
||||
@NonNls
|
||||
override val id: String = "simpleJsClient"
|
||||
|
||||
override fun isApplicableTo(module: Module): Boolean =
|
||||
module.configurator == JsBrowserTargetConfigurator
|
||||
|| module.configurator == JsSingleplatformModuleConfigurator
|
||||
|
||||
val renderEngine by enumSetting<RenderEngine>("Rendering engine", GenerationPhase.PROJECT_GENERATION) {
|
||||
val renderEngine by enumSetting<RenderEngine>(
|
||||
KotlinNewProjectWizardBundle.message("module.template.js.simple.setting.rendering.engine"),
|
||||
GenerationPhase.PROJECT_GENERATION
|
||||
) {
|
||||
defaultValue = value(RenderEngine.REACT_WITH_STYLED)
|
||||
}
|
||||
|
||||
@@ -45,12 +54,12 @@ class SimpleJsClientTemplate : Template() {
|
||||
override fun Reader.createRunConfigurations(module: ModuleIR): List<WizardRunConfiguration> = buildList {
|
||||
if (module.originalModule.kind == ModuleKind.singleplatformJs) {
|
||||
+WizardGradleRunConfiguration(
|
||||
"BrowserDevelopmentRun in continuous mode",
|
||||
KotlinNewProjectWizardBundle.message("module.template.js.simple.run.configuration.dev"),
|
||||
"browserDevelopmentRun",
|
||||
listOf("--continuous")
|
||||
)
|
||||
+WizardGradleRunConfiguration(
|
||||
"BrowserProductionRun in continuous mode",
|
||||
KotlinNewProjectWizardBundle.message("module.template.js.simple.run.configuration.prod"),
|
||||
"browserProductionRun",
|
||||
listOf("--continuous")
|
||||
)
|
||||
@@ -221,8 +230,13 @@ class SimpleJsClientTemplate : Template() {
|
||||
}
|
||||
|
||||
companion object {
|
||||
@NonNls
|
||||
private const val JS_OUTPUT_FILE_NAME = "output.js"
|
||||
|
||||
@NonNls
|
||||
private const val WEBPACK_TASK_CLASS = "KotlinWebpack"
|
||||
|
||||
@NonNls
|
||||
private const val WEBPACK_TASK_SUFFIX = "BrowserProductionWebpack"
|
||||
}
|
||||
|
||||
@@ -270,9 +284,9 @@ class SimpleJsClientTemplate : Template() {
|
||||
)
|
||||
}
|
||||
|
||||
enum class RenderEngine(override val text: String) : DisplayableSettingItem {
|
||||
KOTLINX_HTML("Use statically typed Kotlinx.html DSL"),
|
||||
REACT("Use Kotlin-wrapped React library"),
|
||||
REACT_WITH_STYLED("Use Kotlin-wrapped React framework together with Styled Components"),
|
||||
enum class RenderEngine(@Nls override val text: String) : DisplayableSettingItem {
|
||||
KOTLINX_HTML(KotlinNewProjectWizardBundle.message("module.template.js.simple.setting.rendering.kotlinx.html")),
|
||||
REACT(KotlinNewProjectWizardBundle.message("module.template.js.simple.setting.rendering.react")),
|
||||
REACT_WITH_STYLED(KotlinNewProjectWizardBundle.message("module.template.js.simple.setting.rendering.react.styled"))
|
||||
}
|
||||
}
|
||||
|
||||
+3
-1
@@ -5,7 +5,9 @@
|
||||
|
||||
package org.jetbrains.kotlin.tools.projectWizard.transformers.interceptors
|
||||
|
||||
data class InterceptionPoint<out T: Any>(val name: String, val initialValue: T)
|
||||
import org.jetbrains.annotations.NonNls
|
||||
|
||||
data class InterceptionPoint<out T: Any>(@NonNls val name: String, val initialValue: T)
|
||||
|
||||
data class InterceptionPointModifier<out T : Any>(
|
||||
val point: InterceptionPoint<@UnsafeVariance T>,
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
/*
|
||||
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package tasks
|
||||
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.buildList
|
||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR
|
||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.ModuleIR
|
||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.runTaskIrs
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemType
|
||||
|
||||
interface Task {
|
||||
val name: String
|
||||
fun createTaskIRs(moduleIR: ModuleIR, buildSystemType: BuildSystemType): List<BuildSystemIR>
|
||||
}
|
||||
|
||||
class JvmRunTask(private val mainClass: String) : Task {
|
||||
override val name: String = "Run task"
|
||||
|
||||
override fun createTaskIRs(moduleIR: ModuleIR, buildSystemType: BuildSystemType): List<BuildSystemIR> = buildList {
|
||||
+runTaskIrs(mainClass)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user