diff --git a/generators/build.gradle.kts b/generators/build.gradle.kts index 8cacd10a27b..f5aeddfc408 100644 --- a/generators/build.gradle.kts +++ b/generators/build.gradle.kts @@ -77,6 +77,7 @@ dependencies { testImplementation(projectTests(":compiler:test-infrastructure")) testImplementation(projectTests(":compiler:tests-common-new")) testImplementation(projectTests(":js:js.tests")) + testImplementation(project(":kotlin-gradle-compiler-types")) testApiJUnit5() if (Ide.IJ()) { @@ -97,7 +98,11 @@ val generateTests by generator("org.jetbrains.kotlin.generators.tests.GenerateTe val generateProtoBuf by generator("org.jetbrains.kotlin.generators.protobuf.GenerateProtoBufKt", protobufSourceSet) val generateProtoBufCompare by generator("org.jetbrains.kotlin.generators.protobuf.GenerateProtoBufCompare", protobufCompareSourceSet) +val generateGradleCompilerTypes by generator("org.jetbrains.kotlin.generators.arguments.GenerateGradleCompilerTypesKt") { + description = "Generate Kotlin compiler arguments types Gradle representation" +} val generateGradleOptions by generator("org.jetbrains.kotlin.generators.arguments.GenerateGradleOptionsKt") { + dependsOn(generateGradleCompilerTypes) description = "Generate Gradle plugin compiler options" } val generateKeywordStrings by generator("org.jetbrains.kotlin.generators.frontend.GenerateKeywordStrings") diff --git a/generators/tests/org/jetbrains/kotlin/generators/arguments/GenerateGradleCompilerTypes.kt b/generators/tests/org/jetbrains/kotlin/generators/arguments/GenerateGradleCompilerTypes.kt new file mode 100644 index 00000000000..0468800966e --- /dev/null +++ b/generators/tests/org/jetbrains/kotlin/generators/arguments/GenerateGradleCompilerTypes.kt @@ -0,0 +1,41 @@ +/* + * Copyright 2010-2022 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 org.jetbrains.kotlin.generators.arguments + +import org.jetbrains.kotlin.utils.Printer +import java.io.File +import java.io.PrintStream + +fun generateGradleCompilerTypes(withPrinterToFile: (targetFile: File, Printer.() -> Unit) -> Unit) { + val destDir = File("libraries/tools/kotlin-gradle-compiler-types/src/generated/kotlin") + + // Common + generateKotlinVersion(destDir, withPrinterToFile) + + // Jvm + generateJvmTarget(destDir, withPrinterToFile) + + // Js + generateJsMainFunctionExecutionMode(destDir, withPrinterToFile) + generateJsModuleKind(destDir, withPrinterToFile) + generateJsSourceMapEmbedMode(destDir, withPrinterToFile) + generateJsDiagnosticMode(destDir, withPrinterToFile) +} + +fun main() { + fun getPrinter(file: File, fn: Printer.() -> Unit) { + if (!file.exists()) { + file.parentFile.mkdirs() + file.createNewFile() + } + PrintStream(file.outputStream().buffered()).use { + val printer = Printer(it) + printer.fn() + } + } + + generateGradleCompilerTypes(::getPrinter) +} diff --git a/generators/tests/org/jetbrains/kotlin/generators/arguments/GenerateGradleOptions.kt b/generators/tests/org/jetbrains/kotlin/generators/arguments/GenerateGradleOptions.kt index 6ba03b5ea7b..2e0e43753bb 100644 --- a/generators/tests/org/jetbrains/kotlin/generators/arguments/GenerateGradleOptions.kt +++ b/generators/tests/org/jetbrains/kotlin/generators/arguments/GenerateGradleOptions.kt @@ -32,14 +32,6 @@ fun generateKotlinGradleOptions(withPrinterToFile: (targetFile: File, Printer.() val apiSrcDir = File("libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin") val srcDir = File("libraries/tools/kotlin-gradle-plugin/src/common/kotlin") - // specific Gradle types from internal compiler types - generateKotlinVersion(apiSrcDir, withPrinterToFile) - generateJvmTarget(apiSrcDir, withPrinterToFile) - generateJsMainFunctionExecutionMode(apiSrcDir, withPrinterToFile) - generateJsModuleKind(apiSrcDir, withPrinterToFile) - generateJsSourceMapEmbedMode(apiSrcDir, withPrinterToFile) - generateJsDiagnosticMode(apiSrcDir, withPrinterToFile) - // common interface val commonInterfaceFqName = FqName("org.jetbrains.kotlin.gradle.dsl.KotlinCommonToolOptions") val commonOptions = gradleOptions() diff --git a/generators/tests/org/jetbrains/kotlin/generators/arguments/GenerateKotlinGradleOptionsTest.kt b/generators/tests/org/jetbrains/kotlin/generators/arguments/GenerateKotlinGradleOptionsTest.kt index 8445a9a2699..22c632117ee 100644 --- a/generators/tests/org/jetbrains/kotlin/generators/arguments/GenerateKotlinGradleOptionsTest.kt +++ b/generators/tests/org/jetbrains/kotlin/generators/arguments/GenerateKotlinGradleOptionsTest.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.generators.arguments.test import junit.framework.TestCase +import org.jetbrains.kotlin.generators.arguments.generateGradleCompilerTypes import org.jetbrains.kotlin.generators.arguments.generateKotlinGradleOptions import org.jetbrains.kotlin.test.testFramework.KtUsefulTestCase import org.jetbrains.kotlin.utils.Printer @@ -30,4 +31,20 @@ class GenerateKotlinGradleOptionsTest : TestCase() { generateKotlinGradleOptions(::getPrinter) } + + fun testKotlinGradleTypesAreUpToDate() { + fun getPrinter(file: File, fn: Printer.() -> Unit) { + val bytesOut = ByteArrayOutputStream() + + PrintStream(bytesOut).use { + val printer = Printer(it) + printer.fn() + } + + val upToDateContent = bytesOut.toString() + KtUsefulTestCase.assertSameLinesWithFile(file.absolutePath, upToDateContent) + } + + generateGradleCompilerTypes(::getPrinter) + } } diff --git a/libraries/tools/kotlin-gradle-compiler-types/build.gradle.kts b/libraries/tools/kotlin-gradle-compiler-types/build.gradle.kts new file mode 100644 index 00000000000..6b563cfdc08 --- /dev/null +++ b/libraries/tools/kotlin-gradle-compiler-types/build.gradle.kts @@ -0,0 +1,16 @@ +plugins { + id("org.jetbrains.kotlin.jvm") + id("jps-compatible") +} + +configureKotlinCompileTasksGradleCompatibility() + +sourceSets { + "main" { + kotlin.srcDir("src/generated/kotlin") + } +} + +dependencies { + compileOnly(kotlinStdlib()) +} diff --git a/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/JsDiagnosticMode.kt b/libraries/tools/kotlin-gradle-compiler-types/src/generated/kotlin/org/jetbrains/kotlin/gradle/dsl/JsDiagnosticMode.kt similarity index 100% rename from libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/JsDiagnosticMode.kt rename to libraries/tools/kotlin-gradle-compiler-types/src/generated/kotlin/org/jetbrains/kotlin/gradle/dsl/JsDiagnosticMode.kt diff --git a/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/JsMainFunctionExecutionMode.kt b/libraries/tools/kotlin-gradle-compiler-types/src/generated/kotlin/org/jetbrains/kotlin/gradle/dsl/JsMainFunctionExecutionMode.kt similarity index 100% rename from libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/JsMainFunctionExecutionMode.kt rename to libraries/tools/kotlin-gradle-compiler-types/src/generated/kotlin/org/jetbrains/kotlin/gradle/dsl/JsMainFunctionExecutionMode.kt diff --git a/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/JsModuleKind.kt b/libraries/tools/kotlin-gradle-compiler-types/src/generated/kotlin/org/jetbrains/kotlin/gradle/dsl/JsModuleKind.kt similarity index 100% rename from libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/JsModuleKind.kt rename to libraries/tools/kotlin-gradle-compiler-types/src/generated/kotlin/org/jetbrains/kotlin/gradle/dsl/JsModuleKind.kt diff --git a/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/JsSourceMapEmbedMode.kt b/libraries/tools/kotlin-gradle-compiler-types/src/generated/kotlin/org/jetbrains/kotlin/gradle/dsl/JsSourceMapEmbedMode.kt similarity index 100% rename from libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/JsSourceMapEmbedMode.kt rename to libraries/tools/kotlin-gradle-compiler-types/src/generated/kotlin/org/jetbrains/kotlin/gradle/dsl/JsSourceMapEmbedMode.kt diff --git a/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/JvmTarget.kt b/libraries/tools/kotlin-gradle-compiler-types/src/generated/kotlin/org/jetbrains/kotlin/gradle/dsl/JvmTarget.kt similarity index 100% rename from libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/JvmTarget.kt rename to libraries/tools/kotlin-gradle-compiler-types/src/generated/kotlin/org/jetbrains/kotlin/gradle/dsl/JvmTarget.kt diff --git a/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinVersion.kt b/libraries/tools/kotlin-gradle-compiler-types/src/generated/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinVersion.kt similarity index 100% rename from libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinVersion.kt rename to libraries/tools/kotlin-gradle-compiler-types/src/generated/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinVersion.kt diff --git a/libraries/tools/kotlin-gradle-plugin-api/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-api/build.gradle.kts index 14070477c2d..17ee5d9c588 100644 --- a/libraries/tools/kotlin-gradle-plugin-api/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin-api/build.gradle.kts @@ -8,6 +8,7 @@ dependencies { commonApi(project(":kotlin-project-model")) commonImplementation(project(":kotlin-tooling-core")) + commonCompileOnly(project(":kotlin-gradle-compiler-types")) commonCompileOnly("com.android.tools.build:gradle:3.6.4") { // Without it - Gradle dependency resolution fails with unexpected error // Caused by: java.lang.IllegalStateException: Unexpected parent dependency id 131. Seen ids: [129, 2, 130, 9, 10, 138, 11, 139, 140, 14, 153, 154, 155, 156, 157, 158, 161, 164, 177, 178, 51, 179, 52, 180, 53, 54, 55, 183, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 195, 68, 200, 201, 202, 203, 206, 211, 212, 215, 222, 223, 224, 231, 232, 105, 233, 106, 107, 108, 109, 110, 111, 112, 113, 114, 242, 115, 243, 116, 244, 117, 118, 119, 120, 121, 122] @@ -16,4 +17,6 @@ dependencies { // Could be reproduced by running `:kotlin-gradle-plugin-api:gPFFPMP` task isTransitive = false } + + embedded(project(":kotlin-gradle-compiler-types")) } diff --git a/settings.gradle b/settings.gradle index b4ae76e2387..d0cfbf04acb 100644 --- a/settings.gradle +++ b/settings.gradle @@ -249,6 +249,7 @@ include ":kotlin-imports-dumper-compiler-plugin", ":tools:kotlinp", ":kotlin-project-model", ":kotlin-project-model-tests-generator", + ":kotlin-gradle-compiler-types", ":kotlin-gradle-plugin-api", ":kotlin-gradle-plugin-idea", ":kotlin-gradle-plugin-idea-proto", @@ -753,6 +754,7 @@ project(':kotlin-assignment-compiler-plugin.cli').projectDir = "$rootDir/plugins project(':tools:kotlinp').projectDir = "$rootDir/libraries/tools/kotlinp" as File project(':kotlin-project-model').projectDir = "$rootDir/libraries/tools/kotlin-project-model" as File project(':kotlin-project-model-tests-generator').projectDir = "$rootDir/libraries/tools/kotlin-project-model-tests-generator" as File +project(':kotlin-gradle-compiler-types').projectDir = "$rootDir/libraries/tools/kotlin-gradle-compiler-types" as File project(':kotlin-gradle-plugin-api').projectDir = "$rootDir/libraries/tools/kotlin-gradle-plugin-api" as File project(':kotlin-gradle-plugin-idea').projectDir = "$rootDir/libraries/tools/kotlin-gradle-plugin-idea" as File project(':kotlin-gradle-plugin-idea-proto').projectDir = "$rootDir/libraries/tools/kotlin-gradle-plugin-idea-proto" as File