diff --git a/plugins/kotlin/project-wizard/core/generated/DependencyDefaultData.kt b/plugins/kotlin/project-wizard/core/generated/DependencyDefaultData.kt index ff5198af8131..15ef75d2cb84 100644 --- a/plugins/kotlin/project-wizard/core/generated/DependencyDefaultData.kt +++ b/plugins/kotlin/project-wizard/core/generated/DependencyDefaultData.kt @@ -1,4 +1,4 @@ -// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.kotlin.tools.projectWizard.compatibility; @@ -31,6 +31,6 @@ internal val DEFAULT_DEPENDENCY_DATA = DependencyVersionState( "org.jetbrains.kotlin-wrappers:kotlin-redux" to "4.1.2", "org.jetbrains.kotlinx:kotlinx-html-jvm" to "0.7.2", "org.jetbrains.kotlinx:kotlinx-nodejs" to "0.0.7", - "org.junit.jupiter:junit-jupiter-engine" to "5.10.0" + "org.junit.jupiter:junit-jupiter-engine" to "5.10.0", ) ) \ No newline at end of file diff --git a/plugins/kotlin/project-wizard/core/generated/KotlinGradleCompatibilityDefaultData.kt b/plugins/kotlin/project-wizard/core/generated/KotlinGradleCompatibilityDefaultData.kt index 360d230351e8..076c42648201 100644 --- a/plugins/kotlin/project-wizard/core/generated/KotlinGradleCompatibilityDefaultData.kt +++ b/plugins/kotlin/project-wizard/core/generated/KotlinGradleCompatibilityDefaultData.kt @@ -1,4 +1,4 @@ -// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.kotlin.tools.projectWizard.compatibility; @@ -35,63 +35,63 @@ internal val DEFAULT_KOTLIN_GRADLE_COMPATIBILITY_DATA = KotlinGradleCompatibilit "1.5.21", "1.5.20", "1.5.10", - "1.5.0" + "1.5.0", ), compatibility = listOf( KotlinGradleVersionMapping( kotlin = "1.9.20-1.9.30", gradle = "6.8.3-8.7", - maxJvmTarget = 21 + maxJvmTarget = 21, ), KotlinGradleVersionMapping( kotlin = "1.9.0-1.9.20", gradle = "6.8.3-8.7", - maxJvmTarget = 20 + maxJvmTarget = 20, ), KotlinGradleVersionMapping( kotlin = "1.8.20-1.8.30", gradle = "6.8.3-8.6", - maxJvmTarget = 19 + maxJvmTarget = 19, ), KotlinGradleVersionMapping( kotlin = "1.8.0-1.8.20", gradle = "6.8.3-7.4.0", - maxJvmTarget = 19 + maxJvmTarget = 19, ), KotlinGradleVersionMapping( kotlin = "1.7.20-1.7.30", gradle = "6.7.1-7.2.0", - maxJvmTarget = 18 + maxJvmTarget = 18, ), KotlinGradleVersionMapping( kotlin = "1.7.0-1.7.20", gradle = "6.7.1-7.0.2", - maxJvmTarget = 18 + maxJvmTarget = 18, ), KotlinGradleVersionMapping( kotlin = "1.6.20-1.7.0", gradle = "6.1.1-7.0.2", - maxJvmTarget = 18 + maxJvmTarget = 18, ), KotlinGradleVersionMapping( kotlin = "1.6.0-1.6.20", gradle = "6.1.1-7.0", - maxJvmTarget = 17 + maxJvmTarget = 17, ), KotlinGradleVersionMapping( kotlin = "1.5.30-1.6.0", gradle = "6.1.1-7.0", - maxJvmTarget = 16 + maxJvmTarget = 16, ), KotlinGradleVersionMapping( kotlin = "1.5.20-1.5.30", gradle = "6.1.1-7.0", - maxJvmTarget = 16 + maxJvmTarget = 16, ), KotlinGradleVersionMapping( kotlin = "1.5.0-1.5.20", gradle = "6.1-7.0", - maxJvmTarget = 16 - ) + maxJvmTarget = 16, + ), ) ) \ No newline at end of file diff --git a/plugins/kotlin/project-wizard/core/generated/KotlinWizardVersionDefaultData.kt b/plugins/kotlin/project-wizard/core/generated/KotlinWizardVersionDefaultData.kt index 6abac7d07a74..2c0b2cf525bb 100644 --- a/plugins/kotlin/project-wizard/core/generated/KotlinWizardVersionDefaultData.kt +++ b/plugins/kotlin/project-wizard/core/generated/KotlinWizardVersionDefaultData.kt @@ -1,4 +1,4 @@ -// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.kotlin.tools.projectWizard.compatibility; diff --git a/plugins/kotlin/project-wizard/core/generated/libraries/CoroutinesLibraryCompatibilityDefaultData.kt b/plugins/kotlin/project-wizard/core/generated/libraries/CoroutinesLibraryCompatibilityDefaultData.kt index 6de1b816f8c4..38fb51dbc02b 100644 --- a/plugins/kotlin/project-wizard/core/generated/libraries/CoroutinesLibraryCompatibilityDefaultData.kt +++ b/plugins/kotlin/project-wizard/core/generated/libraries/CoroutinesLibraryCompatibilityDefaultData.kt @@ -12,9 +12,9 @@ internal val COROUTINES_LIBRARY_COMPATIBILITY_DEFAULT_DATA = KotlinLibraryCompat groupId = "org.jetbrains.kotlinx", artifactId = "kotlinx-coroutines-core", versions = mapOf( - "1.5" to "1.5.2", - "1.6" to "1.6.4", + "1.9" to "1.8.0", "1.8" to "1.7.3", - "1.9" to "1.8.0" + "1.6" to "1.6.4", + "1.5" to "1.5.2", ) ) \ No newline at end of file diff --git a/plugins/kotlin/project-wizard/core/resources/compatibility/templates/KotlinDependencyDefaultData.kt.vm b/plugins/kotlin/project-wizard/core/resources/compatibility/templates/KotlinDependencyDefaultData.kt.vm new file mode 100644 index 000000000000..469f2bafdbb8 --- /dev/null +++ b/plugins/kotlin/project-wizard/core/resources/compatibility/templates/KotlinDependencyDefaultData.kt.vm @@ -0,0 +1,17 @@ +// Copyright 2000-${YEAR} JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. + +package org.jetbrains.kotlin.tools.projectWizard.compatibility; + +import org.jetbrains.kotlin.tools.projectWizard.compatibility.DependencyVersionState + +/** + * NOTE THIS FILE IS AUTO-GENERATED + * DO NOT EDIT IT BY HAND, run "Generate Kotlin Wizard Default Data" configuration instead + */ +internal val DEFAULT_DEPENDENCY_DATA = DependencyVersionState( + versions = mapOf( +#foreach ($dependency in $DEPENDENCIES) + "${dependency.first}" to "${dependency.second}", +#end + ) +) \ No newline at end of file diff --git a/plugins/kotlin/project-wizard/core/resources/compatibility/templates/KotlinGradleCompatibilityDefaultData.kt.vm b/plugins/kotlin/project-wizard/core/resources/compatibility/templates/KotlinGradleCompatibilityDefaultData.kt.vm new file mode 100644 index 000000000000..d8cfb4f898cb --- /dev/null +++ b/plugins/kotlin/project-wizard/core/resources/compatibility/templates/KotlinGradleCompatibilityDefaultData.kt.vm @@ -0,0 +1,29 @@ +// Copyright 2000-${YEAR} JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. + +package org.jetbrains.kotlin.tools.projectWizard.compatibility; + +import org.jetbrains.kotlin.tools.projectWizard.compatibility.KotlinGradleCompatibilityState + +/** + * NOTE THIS FILE IS AUTO-GENERATED + * DO NOT EDIT IT BY HAND, run "Generate Kotlin Wizard Default Data" configuration instead + */ +internal val DEFAULT_KOTLIN_GRADLE_COMPATIBILITY_DATA = KotlinGradleCompatibilityState( + kotlinVersions = listOf( +#foreach ($version in $KOTLIN_VERSIONS) + "$version", +#end + ), + compatibility = listOf( +#foreach ($entry in $COMPATIBILITY_ENTRIES) + KotlinGradleVersionMapping( + kotlin = "${entry.kotlin}", + gradle = "${entry.gradle}", + maxJvmTarget = ${entry.maxJvmTarget}, +#if ($entry.comment) + comment = "${entry.comment}" +#end + ), +#end + ) +) \ No newline at end of file diff --git a/plugins/kotlin/project-wizard/core/resources/compatibility/templates/KotlinLibraryDefaultData.kt.vm b/plugins/kotlin/project-wizard/core/resources/compatibility/templates/KotlinLibraryDefaultData.kt.vm new file mode 100644 index 000000000000..0c7fa5160155 --- /dev/null +++ b/plugins/kotlin/project-wizard/core/resources/compatibility/templates/KotlinLibraryDefaultData.kt.vm @@ -0,0 +1,19 @@ +// Copyright 2000-${YEAR} JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. + +package org.jetbrains.kotlin.tools.projectWizard.compatibility.libraries; + +import org.jetbrains.kotlin.tools.projectWizard.compatibility.libraries.KotlinLibraryCompatibilityState + +/** + * NOTE THIS FILE IS AUTO-GENERATED + * DO NOT EDIT IT BY HAND, run "Generate Kotlin Wizard Default Data" configuration instead + */ +internal val ${DEFAULT_DATA_NAME} = KotlinLibraryCompatibilityState( + groupId = "$GROUP_ID", + artifactId = "$ARTIFACT_ID", + versions = mapOf( +#foreach($version in $VERSIONS) + "${version.first}" to "${version.second}", +#end + ) +) \ No newline at end of file diff --git a/plugins/kotlin/project-wizard/core/resources/compatibility/templates/KotlinWizardVersionDefaultData.kt.vm b/plugins/kotlin/project-wizard/core/resources/compatibility/templates/KotlinWizardVersionDefaultData.kt.vm new file mode 100644 index 000000000000..a0c46340b073 --- /dev/null +++ b/plugins/kotlin/project-wizard/core/resources/compatibility/templates/KotlinWizardVersionDefaultData.kt.vm @@ -0,0 +1,22 @@ +// Copyright 2000-${YEAR} JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. + +package org.jetbrains.kotlin.tools.projectWizard.compatibility; + +import org.jetbrains.kotlin.tools.projectWizard.compatibility.KotlinWizardVersionState + +/** + * NOTE THIS FILE IS AUTO-GENERATED + * DO NOT EDIT IT BY HAND, run "Generate Kotlin Wizard Default Data" configuration instead + */ +internal val DEFAULT_KOTLIN_WIZARD_VERSIONS = KotlinWizardVersionState( + kotlinPluginVersion = "$kotlinPluginVersion", + kotlinForComposeVersion = "$kotlinForComposeVersion", + composeCompilerExtension = "$composeCompilerExtension", + minGradleFoojayVersion = "$minGradleFoojayVersion", + minKotlinFoojayVersion = "$minKotlinFoojayVersion", + foojayVersion = "$foojayVersion", + failsafeVersion = "$failsafeVersion", + surefireVersion = "$surefireVersion", + gradleAndroidVersion = "$gradleAndroidVersion", + codehausMojoExecVersion = "$codehausMojoExecVersion" +) \ No newline at end of file diff --git a/plugins/kotlin/project-wizard/core/src/org/jetbrains/kotlin/tools/projectWizard/compatibility/DependencyVersionStore.kt b/plugins/kotlin/project-wizard/core/src/org/jetbrains/kotlin/tools/projectWizard/compatibility/DependencyVersionStore.kt index 1a3d21f88162..9036570e040a 100644 --- a/plugins/kotlin/project-wizard/core/src/org/jetbrains/kotlin/tools/projectWizard/compatibility/DependencyVersionStore.kt +++ b/plugins/kotlin/project-wizard/core/src/org/jetbrains/kotlin/tools/projectWizard/compatibility/DependencyVersionStore.kt @@ -5,6 +5,7 @@ import com.google.gson.JsonObject import com.intellij.openapi.components.State import com.intellij.openapi.components.Storage import com.intellij.openapi.components.service +import org.apache.velocity.VelocityContext import org.jetbrains.plugins.gradle.jvmcompat.* class DependencyVersionState() : IdeVersionedDataState() { @@ -54,25 +55,7 @@ class DependencyVersionStore : IdeVersionedDataStorage( } } -internal fun DependencyVersionState.generateDefaultData(): String { +internal fun DependencyVersionState.provideDefaultDataContext(context: VelocityContext) { val sortedDependencies = versions.toList().sortedBy { it.first } - return """ -// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. - -package org.jetbrains.kotlin.tools.projectWizard.compatibility; - -import org.jetbrains.kotlin.tools.projectWizard.compatibility.DependencyVersionState - -/** - * NOTE THIS FILE IS AUTO-GENERATED - * DO NOT EDIT IT BY HAND, run "Generate Kotlin Wizard Default Data" configuration instead - */ -internal val DEFAULT_DEPENDENCY_DATA = DependencyVersionState( - versions = mapOf( -${sortedDependencies.joinToString("," + System.lineSeparator()) { - " ".repeat(8) + "\"${it.first}\" to \"${it.second}\"" -}} - ) -) -""".trimIndent() + context.put("DEPENDENCIES", sortedDependencies) } \ No newline at end of file diff --git a/plugins/kotlin/project-wizard/core/src/org/jetbrains/kotlin/tools/projectWizard/compatibility/KotlinGradleCompatibilityStore.kt b/plugins/kotlin/project-wizard/core/src/org/jetbrains/kotlin/tools/projectWizard/compatibility/KotlinGradleCompatibilityStore.kt index 93bcd8fdfbff..4a51f4c50688 100644 --- a/plugins/kotlin/project-wizard/core/src/org/jetbrains/kotlin/tools/projectWizard/compatibility/KotlinGradleCompatibilityStore.kt +++ b/plugins/kotlin/project-wizard/core/src/org/jetbrains/kotlin/tools/projectWizard/compatibility/KotlinGradleCompatibilityStore.kt @@ -6,6 +6,7 @@ import com.intellij.openapi.components.BaseState import com.intellij.openapi.components.State import com.intellij.openapi.components.Storage import com.intellij.openapi.components.service +import org.apache.velocity.VelocityContext import org.gradle.util.GradleVersion import org.jetbrains.kotlin.idea.compiler.configuration.IdeKotlinVersion import org.jetbrains.plugins.gradle.jvmcompat.* @@ -146,25 +147,7 @@ private fun KotlinGradleVersionMapping.toDefaultDataString(): String { }.toString() } -internal fun KotlinGradleCompatibilityState.generateDefaultData(): String { - return """ -// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. - -package org.jetbrains.kotlin.tools.projectWizard.compatibility; - -import org.jetbrains.kotlin.tools.projectWizard.compatibility.KotlinGradleCompatibilityState - -/** - * NOTE THIS FILE IS AUTO-GENERATED - * DO NOT EDIT IT BY HAND, run "Generate Kotlin Wizard Default Data" configuration instead - */ -internal val DEFAULT_KOTLIN_GRADLE_COMPATIBILITY_DATA = KotlinGradleCompatibilityState( - kotlinVersions = listOf( -${kotlinVersions.joinToString("," + System.lineSeparator()) { " ".repeat(8) + "\"$it\"" }} - ), - compatibility = listOf( -${compatibility.toList().joinToString("," + System.lineSeparator()) { it.toDefaultDataString() }} - ) -) -""".trimIndent() +internal fun KotlinGradleCompatibilityState.provideDefaultDataContext(context: VelocityContext) { + context.put("KOTLIN_VERSIONS", kotlinVersions) + context.put("COMPATIBILITY_ENTRIES", compatibility) } \ No newline at end of file diff --git a/plugins/kotlin/project-wizard/core/src/org/jetbrains/kotlin/tools/projectWizard/compatibility/KotlinWizardDefaultDataGenerator.kt b/plugins/kotlin/project-wizard/core/src/org/jetbrains/kotlin/tools/projectWizard/compatibility/KotlinWizardDefaultDataGenerator.kt index 853f9afc1d4d..b18f0bdffe0a 100644 --- a/plugins/kotlin/project-wizard/core/src/org/jetbrains/kotlin/tools/projectWizard/compatibility/KotlinWizardDefaultDataGenerator.kt +++ b/plugins/kotlin/project-wizard/core/src/org/jetbrains/kotlin/tools/projectWizard/compatibility/KotlinWizardDefaultDataGenerator.kt @@ -1,19 +1,27 @@ // Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.kotlin.tools.projectWizard.compatibility +import org.apache.velocity.VelocityContext +import org.apache.velocity.app.VelocityEngine +import org.apache.velocity.runtime.RuntimeConstants +import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader import org.jetbrains.kotlin.tools.projectWizard.compatibility.libraries.KotlinLibraryCompatibilityParser -import org.jetbrains.kotlin.tools.projectWizard.compatibility.libraries.generateDefaultData +import org.jetbrains.kotlin.tools.projectWizard.compatibility.libraries.provideDefaultDataContext import org.jetbrains.plugins.gradle.jvmcompat.IdeVersionedDataParser import org.jetbrains.plugins.gradle.jvmcompat.IdeVersionedDataState import org.jetbrains.plugins.gradle.jvmcompat.readAppVersion +import java.io.StringWriter import java.nio.charset.Charset import java.nio.file.Paths +import java.time.LocalDate + class WizardDefaultDataGeneratorSettings( val jsonPath: String, val ktFileName: String, val parser: IdeVersionedDataParser, - val generator: (T).() -> String + val templatePath: String, + val contextProvider: (T).(context: VelocityContext) -> Unit ) { companion object { fun getGenerators() = listOf( @@ -21,25 +29,29 @@ class WizardDefaultDataGeneratorSettings( jsonPath = "/compatibility/dependencies.json", ktFileName = "DependencyDefaultData.kt", parser = DependencyVersionParser, - generator = DependencyVersionState::generateDefaultData + templatePath = "compatibility/templates/KotlinDependencyDefaultData.kt.vm", + contextProvider = DependencyVersionState::provideDefaultDataContext ), WizardDefaultDataGeneratorSettings( jsonPath = "/compatibility/kotlin_gradle_compatibility.json", ktFileName = "KotlinGradleCompatibilityDefaultData.kt", parser = KotlinGradleCompatibilityParser, - generator = KotlinGradleCompatibilityState::generateDefaultData + templatePath = "compatibility/templates/KotlinGradleCompatibilityDefaultData.kt.vm", + contextProvider = KotlinGradleCompatibilityState::provideDefaultDataContext ), WizardDefaultDataGeneratorSettings( jsonPath = "/compatibility/wizard_versions.json", ktFileName = "KotlinWizardVersionDefaultData.kt", parser = KotlinWizardVersionParser, - generator = KotlinWizardVersionState::generateDefaultData + templatePath = "compatibility/templates/KotlinWizardVersionDefaultData.kt.vm", + contextProvider = KotlinWizardVersionState::provideDefaultDataContext ), WizardDefaultDataGeneratorSettings( jsonPath = "/compatibility/libraries/coroutines.json", ktFileName = "libraries/CoroutinesLibraryCompatibilityDefaultData.kt", parser = KotlinLibraryCompatibilityParser, - generator = { generateDefaultData("COROUTINES_LIBRARY_COMPATIBILITY_DEFAULT_DATA") } + templatePath = "compatibility/templates/KotlinLibraryDefaultData.kt.vm", + contextProvider = { provideDefaultDataContext("COROUTINES_LIBRARY_COMPATIBILITY_DEFAULT_DATA", it) } ) ) } @@ -50,7 +62,20 @@ class WizardDefaultDataGeneratorSettings( .toString(Charset.forName("utf8")) val parsedData = parser.parseVersionedJson(jsonData, applicationVersion)!! - return generator(parsedData) + val velocityEngine = VelocityEngine() + velocityEngine.setProperty(RuntimeConstants.RESOURCE_LOADERS, "classpath"); + velocityEngine.setProperty("resource.loader.classpath.class", ClasspathResourceLoader::class.java.name) + velocityEngine.init() + + val template = velocityEngine.getTemplate(templatePath) + val context = VelocityContext() + + context.put("YEAR", LocalDate.now().year) + contextProvider(parsedData, context) + val writer = StringWriter() + template.merge(context, writer) + + return writer.toString() } } diff --git a/plugins/kotlin/project-wizard/core/src/org/jetbrains/kotlin/tools/projectWizard/compatibility/KotlinWizardVersionStore.kt b/plugins/kotlin/project-wizard/core/src/org/jetbrains/kotlin/tools/projectWizard/compatibility/KotlinWizardVersionStore.kt index 0354fccd72b7..2dd3c7eabdd2 100644 --- a/plugins/kotlin/project-wizard/core/src/org/jetbrains/kotlin/tools/projectWizard/compatibility/KotlinWizardVersionStore.kt +++ b/plugins/kotlin/project-wizard/core/src/org/jetbrains/kotlin/tools/projectWizard/compatibility/KotlinWizardVersionStore.kt @@ -5,7 +5,9 @@ import com.google.gson.JsonObject import com.intellij.openapi.components.State import com.intellij.openapi.components.Storage import com.intellij.openapi.components.service +import org.apache.velocity.VelocityContext import org.jetbrains.plugins.gradle.jvmcompat.* +import kotlin.reflect.typeOf internal object KotlinWizardVersionParser : IdeVersionedDataParser() { override fun parseJson(data: JsonObject): KotlinWizardVersionState? { @@ -82,29 +84,8 @@ class KotlinWizardVersionStore : IdeVersionedDataStorage() }.forEach { field -> + context.put(field.name, field.call(this)) + } } \ No newline at end of file diff --git a/plugins/kotlin/project-wizard/core/src/org/jetbrains/kotlin/tools/projectWizard/compatibility/libraries/KotlinLibraryCompatibilityStore.kt b/plugins/kotlin/project-wizard/core/src/org/jetbrains/kotlin/tools/projectWizard/compatibility/libraries/KotlinLibraryCompatibilityStore.kt index 5259428df618..5ac36cf129c0 100644 --- a/plugins/kotlin/project-wizard/core/src/org/jetbrains/kotlin/tools/projectWizard/compatibility/libraries/KotlinLibraryCompatibilityStore.kt +++ b/plugins/kotlin/project-wizard/core/src/org/jetbrains/kotlin/tools/projectWizard/compatibility/libraries/KotlinLibraryCompatibilityStore.kt @@ -2,6 +2,7 @@ package org.jetbrains.kotlin.tools.projectWizard.compatibility.libraries import com.google.gson.JsonObject +import org.apache.velocity.VelocityContext import org.jetbrains.plugins.gradle.jvmcompat.IdeVersionedDataParser import org.jetbrains.plugins.gradle.jvmcompat.IdeVersionedDataState import org.jetbrains.plugins.gradle.jvmcompat.asSafeJsonObject @@ -36,27 +37,9 @@ internal object KotlinLibraryCompatibilityParser : IdeVersionedDataParser