Make :analysis:analysis-api-fir:generateCode cacheable * Output for task is added * Use relative paths * Dummy check that generation is done to the desired folder is added KTI-1529
diff --git a/analysis/analysis-api-fir/analysis-api-fir-generator/src/org/jetbrains/kotlin/analysis/api/fir/generator/DiagnosticClassGenerator.kt b/analysis/analysis-api-fir/analysis-api-fir-generator/src/org/jetbrains/kotlin/analysis/api/fir/generator/DiagnosticClassGenerator.kt index a6567fd..8f81116 100644 --- a/analysis/analysis-api-fir/analysis-api-fir-generator/src/org/jetbrains/kotlin/analysis/api/fir/generator/DiagnosticClassGenerator.kt +++ b/analysis/analysis-api-fir/analysis-api-fir-generator/src/org/jetbrains/kotlin/analysis/api/fir/generator/DiagnosticClassGenerator.kt
@@ -5,19 +5,22 @@ package org.jetbrains.kotlin.analysis.api.fir.generator -import org.jetbrains.kotlin.fir.checkers.generator.diagnostics.model.DiagnosticList -import org.jetbrains.kotlin.fir.checkers.generator.getGenerationPath import org.jetbrains.kotlin.analysis.api.fir.generator.rendererrs.FirDiagnosticToKtDiagnosticConverterRenderer import org.jetbrains.kotlin.analysis.api.fir.generator.rendererrs.KtDiagnosticClassImplementationRenderer import org.jetbrains.kotlin.analysis.api.fir.generator.rendererrs.KtDiagnosticClassRenderer -import java.nio.file.Path +import org.jetbrains.kotlin.fir.checkers.generator.diagnostics.model.DiagnosticList +import java.io.File object DiagnosticClassGenerator { - fun generate(rootPath: Path, diagnosticList: DiagnosticList, packageName: String) { - val path = getGenerationPath(rootPath.toFile(), packageName) + fun generate(path: File, diagnosticList: DiagnosticList, packageName: String) { KtDiagnosticClassRenderer.render(path.resolve("KtFirDiagnostics.kt"), diagnosticList, packageName, emptySet()) KtDiagnosticClassImplementationRenderer.render(path.resolve("KtFirDiagnosticsImpl.kt"), diagnosticList, packageName, emptySet()) - FirDiagnosticToKtDiagnosticConverterRenderer.render(path.resolve("KtFirDataClassConverters.kt"), diagnosticList, packageName, emptySet()) + FirDiagnosticToKtDiagnosticConverterRenderer.render( + path.resolve("KtFirDataClassConverters.kt"), + diagnosticList, + packageName, + emptySet() + ) ArgumentsConverterGenerator.render(path.resolve("KtFirArgumentsConverter.kt"), packageName) } }
diff --git a/analysis/analysis-api-fir/analysis-api-fir-generator/src/org/jetbrains/kotlin/analysis/api/fir/generator/Main.kt b/analysis/analysis-api-fir/analysis-api-fir-generator/src/org/jetbrains/kotlin/analysis/api/fir/generator/Main.kt index 96dff94..e469646 100644 --- a/analysis/analysis-api-fir/analysis-api-fir-generator/src/org/jetbrains/kotlin/analysis/api/fir/generator/Main.kt +++ b/analysis/analysis-api-fir/analysis-api-fir-generator/src/org/jetbrains/kotlin/analysis/api/fir/generator/Main.kt
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.fir.builder.SYNTAX_DIAGNOSTIC_LIST import org.jetbrains.kotlin.fir.checkers.generator.diagnostics.JS_DIAGNOSTICS_LIST import org.jetbrains.kotlin.fir.checkers.generator.diagnostics.WEB_COMMON_DIAGNOSTICS_LIST +import org.jetbrains.kotlin.fir.checkers.generator.getGenerationPath import org.jetbrains.kotlin.generators.util.GeneratorsFileUtil import org.jetbrains.kotlin.utils.SmartPrinter import java.io.File @@ -28,11 +29,17 @@ println() } - -fun main() { - val rootPath = Paths.get("analysis/analysis-api-fir/src").toAbsolutePath() +fun main(args: Array<String>) { + val rootPath = Paths.get("analysis/analysis-api-fir/src") val packageName = "org.jetbrains.kotlin.analysis.api.fir.diagnostics" + val path = getGenerationPath(rootPath.toFile(), packageName) + + val expectedOutputDir = args.getOrNull(0) ?: error("Generator execution should have expected output directory") + require(path.path.replace("\\", "/") == expectedOutputDir) { + "Generator is going to write to the directory '$path' while an output directory is declared to be '$expectedOutputDir'" + } + val diagnostics = DIAGNOSTICS_LIST + JVM_DIAGNOSTICS_LIST + JS_DIAGNOSTICS_LIST + SYNTAX_DIAGNOSTIC_LIST + WEB_COMMON_DIAGNOSTICS_LIST - generate(rootPath, diagnostics, packageName) + generate(path, diagnostics, packageName) }
diff --git a/analysis/analysis-api-fir/build.gradle.kts b/analysis/analysis-api-fir/build.gradle.kts index 3a73c4c..b00510e 100644 --- a/analysis/analysis-api-fir/build.gradle.kts +++ b/analysis/analysis-api-fir/build.gradle.kts
@@ -90,17 +90,22 @@ } val generateCode by tasks.registering(NoDebugJavaExec::class) { - val generatorRoot = "$projectDir/analysis/analysis-api-fir/analysis-api-fir-generator/src/" + val generatorRoot = + layout.projectDirectory.dir("analysis-api-fir-generator/src") + val outputDir = + layout.projectDirectory.dir("src/org/jetbrains/kotlin/analysis/api/fir/diagnostics") val generatorConfigurationFiles = fileTree(generatorRoot) { include("**/*.kt") } inputs.files(generatorConfigurationFiles) + outputs.dirs(outputDir) workingDir = rootDir classpath = generatorClasspath mainClass.set("org.jetbrains.kotlin.analysis.api.fir.generator.MainKt") + args = listOf(outputDir.asFile.relativeTo(rootDir).path) systemProperties["line.separator"] = "\n" }