- /*
- * Minecraft Development for IntelliJ
- *
- * https://mcdev.io/
- *
- * Copyright (C) 2023 minecraft-dev
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation, version 3.0 only.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <https://www.gnu.org/licenses/>.
- */
-
- import java.io.ByteArrayOutputStream
- import org.cadixdev.gradle.licenser.LicenseExtension
- import org.gradle.api.JavaVersion
- import org.gradle.api.Project
- import org.gradle.api.tasks.JavaExec
- import org.gradle.api.tasks.TaskContainer
- import org.gradle.kotlin.dsl.RegisteringDomainObjectDelegateProviderWithTypeAndAction
- import org.gradle.kotlin.dsl.getValue
- import org.gradle.kotlin.dsl.provideDelegate
- import org.gradle.kotlin.dsl.registering
- import org.gradle.kotlin.dsl.configure
-
- typealias TaskDelegate<T> = RegisteringDomainObjectDelegateProviderWithTypeAndAction<out TaskContainer, T>
-
- fun Project.lexer(flex: String, pack: String): TaskDelegate<JavaExec> {
- configure<LicenseExtension> {
- exclude(pack.removeSuffix("/") + "/**")
- }
-
- return tasks.registering(JavaExec::class) {
- val src = layout.projectDirectory.file("src/main/grammars/$flex.flex")
- val dst = layout.buildDirectory.dir("gen/$pack")
- val output = layout.buildDirectory.file("gen/$pack/$flex.java")
- val logOutout = layout.buildDirectory.file("logs/generate$flex.log")
-
- val jflex by project.configurations
- val jflexSkeleton by project.configurations
-
- classpath = jflex
- mainClass.set("jflex.Main")
-
- val taskOutput = ByteArrayOutputStream()
- standardOutput = taskOutput
- errorOutput = taskOutput
-
- doFirst {
- args(
- "--skel", jflexSkeleton.singleFile.absolutePath,
- "-d", dst.get().asFile.absolutePath,
- src.asFile.absolutePath
- )
-
- // Delete current lexer
- project.delete(output)
- logOutout.get().asFile.parentFile.mkdirs()
- }
-
- doLast {
- logOutout.get().asFile.writeBytes(taskOutput.toByteArray())
- }
-
- inputs.files(src, jflexSkeleton)
- outputs.file(output)
- }
- }
-
- fun Project.parser(bnf: String, pack: String): TaskDelegate<JavaExec> {
- configure<LicenseExtension> {
- exclude(pack.removeSuffix("/") + "/**")
- }
-
- return tasks.registering(JavaExec::class) {
- val src = project.layout.projectDirectory.file("src/main/grammars/$bnf.bnf")
- val dstRoot = project.layout.buildDirectory.dir("gen")
- val dst = dstRoot.map { it.dir(pack) }
- val psiDir = dst.map { it.dir("psi") }
- val parserDir = dst.map { it.dir("parser") }
- val logOutout = layout.buildDirectory.file("logs/generate$bnf.log")
-
- val grammarKit by project.configurations
-
- val taskOutput = ByteArrayOutputStream()
- standardOutput = taskOutput
- errorOutput = taskOutput
-
- classpath = grammarKit
- mainClass.set("org.intellij.grammar.Main")
-
- if (JavaVersion.current().isJava9Compatible) {
- jvmArgs(
- "--add-opens", "java.base/java.lang=ALL-UNNAMED",
- "--add-opens", "java.base/java.lang.reflect=ALL-UNNAMED",
- "--add-opens", "java.base/java.util=ALL-UNNAMED"
- )
- }
-
- doFirst {
- project.delete(psiDir, parserDir)
- args(dstRoot.get().asFile, src.asFile)
- logOutout.get().asFile.parentFile.mkdirs()
- }
- doLast {
- logOutout.get().asFile.writeBytes(taskOutput.toByteArray())
- }
-
- inputs.file(src)
- outputs.dirs(
- mapOf(
- "psi" to psiDir,
- "parser" to parserDir
- )
- )
- }
- }
-
- data class DepList(val intellijVersion: String, val intellijVersionName: String, val deps: List<Dep>)
- data class Dep(val groupId: String, val artifactId: String, val version: String)
- /*
- * Minecraft Development for IntelliJ
- *
- * https://mcdev.io/
- *
- * Copyright (C) 2024 minecraft-dev
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation, version 3.0 only.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <https://www.gnu.org/licenses/>.
- */
-
- import java.io.ByteArrayOutputStream
- import org.cadixdev.gradle.licenser.LicenseExtension
- import org.gradle.api.JavaVersion
- import org.gradle.api.Project
- import org.gradle.api.tasks.JavaExec
- import org.gradle.api.tasks.TaskContainer
- import org.gradle.kotlin.dsl.RegisteringDomainObjectDelegateProviderWithTypeAndAction
- import org.gradle.kotlin.dsl.getValue
- import org.gradle.kotlin.dsl.provideDelegate
- import org.gradle.kotlin.dsl.registering
- import org.gradle.kotlin.dsl.configure
-
- typealias TaskDelegate<T> = RegisteringDomainObjectDelegateProviderWithTypeAndAction<out TaskContainer, T>
-
- fun Project.lexer(flex: String, pack: String): TaskDelegate<JavaExec> {
- configure<LicenseExtension> {
- exclude(pack.removeSuffix("/") + "/**")
- }
-
- return tasks.registering(JavaExec::class) {
- val src = layout.projectDirectory.file("src/main/grammars/$flex.flex")
- val dst = layout.buildDirectory.dir("gen/$pack")
- val output = layout.buildDirectory.file("gen/$pack/$flex.java")
- val logOutout = layout.buildDirectory.file("logs/generate$flex.log")
-
- val jflex by project.configurations
- val jflexSkeleton by project.configurations
-
- classpath = jflex
- mainClass.set("jflex.Main")
-
- val taskOutput = ByteArrayOutputStream()
- standardOutput = taskOutput
- errorOutput = taskOutput
-
- doFirst {
- args(
- "--skel", jflexSkeleton.singleFile.absolutePath,
- "-d", dst.get().asFile.absolutePath,
- src.asFile.absolutePath
- )
-
- // Delete current lexer
- project.delete(output)
- logOutout.get().asFile.parentFile.mkdirs()
- }
-
- doLast {
- logOutout.get().asFile.writeBytes(taskOutput.toByteArray())
- }
-
- inputs.files(src, jflexSkeleton)
- outputs.file(output)
- }
- }
-
- fun Project.parser(bnf: String, pack: String): TaskDelegate<JavaExec> {
- configure<LicenseExtension> {
- exclude(pack.removeSuffix("/") + "/**")
- }
-
- return tasks.registering(JavaExec::class) {
- val src = project.layout.projectDirectory.file("src/main/grammars/$bnf.bnf")
- val dstRoot = project.layout.buildDirectory.dir("gen")
- val dst = dstRoot.map { it.dir(pack) }
- val psiDir = dst.map { it.dir("psi") }
- val parserDir = dst.map { it.dir("parser") }
- val logOutout = layout.buildDirectory.file("logs/generate$bnf.log")
-
- val grammarKit by project.configurations
-
- val taskOutput = ByteArrayOutputStream()
- standardOutput = taskOutput
- errorOutput = taskOutput
-
- classpath = grammarKit
- mainClass.set("org.intellij.grammar.Main")
-
- if (JavaVersion.current().isJava9Compatible) {
- jvmArgs(
- "--add-opens", "java.base/java.lang=ALL-UNNAMED",
- "--add-opens", "java.base/java.lang.reflect=ALL-UNNAMED",
- "--add-opens", "java.base/java.util=ALL-UNNAMED"
- )
- }
-
- doFirst {
- project.delete(psiDir, parserDir)
- args(dstRoot.get().asFile, src.asFile)
- logOutout.get().asFile.parentFile.mkdirs()
- }
- doLast {
- logOutout.get().asFile.writeBytes(taskOutput.toByteArray())
- }
-
- inputs.file(src)
- outputs.dirs(
- mapOf(
- "psi" to psiDir,
- "parser" to parserDir
- )
- )
- }
- }
-
- data class DepList(val intellijVersion: String, val intellijVersionName: String, val deps: List<Dep>)
- data class Dep(val groupId: String, val artifactId: String, val version: String)