rider/protocol/build.gradle.kts (174 lines of code) (raw):
import com.jetbrains.rd.generator.gradle.RdGenTask
plugins {
// Version is configured in gradle.properties
id("com.jetbrains.rdgen")
id("org.jetbrains.kotlin.jvm")
}
repositories {
maven("https://cache-redirector.jetbrains.com/intellij-dependencies")
maven("https://cache-redirector.jetbrains.com/maven-central")
val rd_version: String? by project
if (rd_version == "SNAPSHOT") {
mavenLocal()
}
}
val isMonorepo = rootProject.projectDir != projectDir.parentFile
val unityRepoRoot: File = projectDir.parentFile.parentFile
sourceSets {
main {
kotlin {
srcDir(unityRepoRoot.resolve("rider/protocol/src/main/kotlin"))
}
}
}
data class UnityGeneratorSettings(
val backendUnityCsOutDir: File,
val backendUnityEditorCsOutDir: File,
val debuggerWorkerCsOutDir: File,
val debuggerWorkerKtOutDir: File,
val frontendBackendCsOutDir: File,
val frontendBackendKtOutDir: File,
val modelLibCsOutDir: File,
val modelLibEditorCsOutDir: File,
val modelLibKtOutDir: File,
val suffix: String
)
val debuggerWorkerKtOutLayout = "src/main/rdgen/kotlin/com/jetbrains/rider/plugins/unity/model/debuggerWorker"
val frontendBackendKtOutLayout = "src/main/rdgen/kotlin/com/jetbrains/rider/plugins/unity/model/frontendBackend"
val modelLibKtOutLayout = "src/main/rdgen/kotlin/com/jetbrains/rider/plugins/unity/model/lib"
val unityGeneratorSettings = if (isMonorepo) {
val monorepoRoot = buildscript.sourceFile?.parentFile?.parentFile?.parentFile?.parentFile?.parentFile?.parentFile
?: error("Cannot find products home")
check(monorepoRoot.resolve(".ultimate.root.marker").isFile) {
error("Incorrect location in monorepo: monorepoRoot='$monorepoRoot'")
}
val monorepoPreGeneratedRootDir = monorepoRoot.resolve("dotnet/Plugins/_Unity.Pregenerated")
val monorepoPreGeneratedBackendDir = monorepoPreGeneratedRootDir.resolve("BackendModel")
val monorepoPreGeneratedUnityDir = monorepoPreGeneratedRootDir.resolve("UnityModel")
val monorepoPreGeneratedFrontendDir = monorepoPreGeneratedRootDir.resolve("Frontend")
UnityGeneratorSettings(
monorepoPreGeneratedBackendDir.resolve("resharper/BackendUnity"),
monorepoPreGeneratedUnityDir.resolve("unity/BackendUnity"),
monorepoPreGeneratedBackendDir.resolve("resharper/DebuggerWorker"),
monorepoPreGeneratedFrontendDir.resolve(debuggerWorkerKtOutLayout),
monorepoPreGeneratedBackendDir.resolve("resharper/FrontendBackend"),
monorepoPreGeneratedFrontendDir.resolve(frontendBackendKtOutLayout),
monorepoPreGeneratedBackendDir.resolve("resharper/ModelLib"),
monorepoPreGeneratedUnityDir.resolve("unity/ModelLib"),
monorepoPreGeneratedFrontendDir.resolve(modelLibKtOutLayout),
".Pregenerated"
)
} else {
UnityGeneratorSettings(
unityRepoRoot.resolve("resharper/build/generated/Model/BackendUnity"),
unityRepoRoot.resolve("unity/build/generated/Model/BackendUnity"),
unityRepoRoot.resolve("resharper/build/generated/Model/DebuggerWorker"),
unityRepoRoot.resolve("rider/$debuggerWorkerKtOutLayout"),
unityRepoRoot.resolve( "resharper/build/generated/Model/FrontendBackend"),
unityRepoRoot.resolve( "rider/$frontendBackendKtOutLayout"),
unityRepoRoot.resolve("resharper/build/generated/Model/Lib"),
unityRepoRoot.resolve("unity/build/generated/Model/Lib"),
unityRepoRoot.resolve("rider/$modelLibKtOutLayout"),
""
)
}
rdgen {
verbose = true
generator {
language = "csharp"
transform = "asis"
packages = "model.backendUnity,model.debuggerWorker,model.frontendBackend,model.lib"
root = "model.backendUnity.BackendUnityModel"
directory = unityGeneratorSettings.backendUnityCsOutDir.absolutePath
generatedFileSuffix = unityGeneratorSettings.suffix
}
generator {
language = "csharp"
transform = "reversed"
packages = "model.backendUnity,model.debuggerWorker,model.frontendBackend,model.lib"
root = "model.backendUnity.BackendUnityModel"
directory = unityGeneratorSettings.backendUnityEditorCsOutDir.absolutePath
generatedFileSuffix = unityGeneratorSettings.suffix
}
generator {
language = "csharp"
transform = "reversed"
packages = "model.backendUnity,model.debuggerWorker,model.frontendBackend,model.lib"
root = "com.jetbrains.rider.model.nova.debugger.main.DebuggerRoot"
directory = unityGeneratorSettings.debuggerWorkerCsOutDir.absolutePath
generatedFileSuffix = unityGeneratorSettings.suffix
}
generator {
language = "kotlin"
transform = "asis"
packages = "model.backendUnity,model.debuggerWorker,model.frontendBackend,model.lib"
root = "com.jetbrains.rider.model.nova.debugger.main.DebuggerRoot"
directory = unityGeneratorSettings.debuggerWorkerKtOutDir.absolutePath
generatedFileSuffix = unityGeneratorSettings.suffix
}
generator {
language = "csharp"
transform = "reversed"
packages = "model.backendUnity,model.debuggerWorker,model.frontendBackend,model.lib"
root = "com.jetbrains.rider.model.nova.ide.IdeRoot"
directory = unityGeneratorSettings.frontendBackendCsOutDir.absolutePath
generatedFileSuffix = unityGeneratorSettings.suffix
}
generator {
language = "kotlin"
transform = "asis"
packages = "model.backendUnity,model.debuggerWorker,model.frontendBackend,model.lib"
root = "com.jetbrains.rider.model.nova.ide.IdeRoot"
directory = unityGeneratorSettings.frontendBackendKtOutDir.absolutePath
generatedFileSuffix = unityGeneratorSettings.suffix
}
// Library is used as backend in backendUnityModel and backend in frontendBackendModel, so needs to be both
// asis and reversed.
// I.e., symmetric
generator {
language = "csharp"
transform = "symmetric"
packages = "model.backendUnity,model.debuggerWorker,model.frontendBackend,model.lib"
root = "model.lib.Library"
directory = unityGeneratorSettings.modelLibCsOutDir.absolutePath
generatedFileSuffix = unityGeneratorSettings.suffix
}
// The Library is used as unity in backendUnityModel, so has reversed perspective
generator {
language = "csharp"
transform = "reversed"
packages = "model.backendUnity,model.debuggerWorker,model.frontendBackend,model.lib"
root = "model.lib.Library"
directory = unityGeneratorSettings.modelLibEditorCsOutDir.absolutePath
generatedFileSuffix = unityGeneratorSettings.suffix
}
// Library is used as frontend in frontendBackendModel, so has the same perspective. Generate as-is
generator {
language = "kotlin"
transform = "asis"
packages = "model.backendUnity,model.debuggerWorker,model.frontendBackend,model.lib"
root = "model.lib.Library"
directory = unityGeneratorSettings.modelLibKtOutDir.absolutePath
generatedFileSuffix = unityGeneratorSettings.suffix
}
}
tasks.withType<RdGenTask> {
val classPath = sourceSets["main"].runtimeClasspath
dependsOn(classPath)
classpath(classPath)
// Ensure rdgen runs with JDK 21
javaLauncher.set(javaToolchains.launcherFor {
languageVersion.set(JavaLanguageVersion.of(21))
})
}
dependencies {
if (isMonorepo) {
implementation(project(":rider-model"))
} else {
val rdVersion: String by project
val rdKotlinVersion: String by project
implementation("com.jetbrains.rd:rd-gen:$rdVersion")
implementation("org.jetbrains.kotlin:kotlin-stdlib:$rdKotlinVersion")
implementation(
project(
mapOf(
"path" to ":",
"configuration" to "riderModel"
)
)
)
}
}