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"
}