fun GenerateSourcePluginTasks()

in buildSrc/src/main/kotlin/org/fbme/gradle/GenerateSourcePluginTasks.kt [8:68]


fun GenerateSourcePluginTasks(
    project: Project,
    mpsExtension: MpsExtension,
    pluginId: String?
) {
    with(project) {
        val moduleName = mpsExtension.moduleName

        val tasksEnabled = pluginId != null

        val generatePluginModuleSourceFile by tasks.registering(GeneratePluginModuleFile::class) {
            enabled = tasksEnabled

            synchronize(mpsExtension, pluginId ?: "", ModuleDescriptorKind.SOURCE)
        }

        val generatePluginModuleDeploymentFile by tasks.registering(GeneratePluginModuleFile::class) {
            enabled = tasksEnabled

            synchronize(mpsExtension, pluginId ?: "", ModuleDescriptorKind.DEPLOYMENT)
        }

        val copyLibs by tasks.registering(Copy::class) {
            enabled = tasksEnabled
            dependsOn(tasks.named("jar"))

            val runtimeFiles = configurations["runtimeClasspath"].files
            from(runtimeFiles)

            from(layout.buildDirectory.file("libs/${project.name}.jar"))

            into(rootProject.layout.buildDirectory.dir("src-plugins/$pluginId/lib"))
        }

        val jarPluginModule by tasks.registering(Jar::class) {
            enabled = tasksEnabled
            dependsOn(generatePluginModuleSourceFile, generatePluginModuleDeploymentFile)

            from(layout.buildDirectory.dir(moduleName.map { "tmp/src-plugins/$pluginId/languages/$it/" }))

            destinationDirectory.set(rootProject.layout.buildDirectory.dir("src-plugins/$pluginId/languages"))
            archiveBaseName.set(moduleName)
        }

        val copyResources by tasks.registering(Copy::class) {
            enabled = tasksEnabled

            from(layout.projectDirectory.dir("src/main/resources"))
            into(rootProject.layout.buildDirectory.dir("src-plugins/$pluginId"))
        }

        val buildSrcPlugin by tasks.registering {
            enabled = tasksEnabled
            dependsOn(copyResources, jarPluginModule, copyLibs)
        }

        val build by tasks.getting {
            dependsOn(buildSrcPlugin)
        }
    }
}