All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cc.catalysts.gradle.plugins.antlr3.GenerateGrammarSourceTask.groovy Maven / Gradle / Ivy

The newest version!
package cc.catalysts.gradle.plugins.antlr3

import cc.catalysts.gradle.utils.TCLogger
import org.gradle.api.DefaultTask
import org.gradle.api.file.FileTree
import org.gradle.api.internal.file.FileResolver
import org.gradle.api.tasks.InputDirectory
import org.gradle.api.tasks.OutputDirectory
import org.gradle.api.tasks.TaskAction
import org.gradle.process.internal.DefaultJavaExecAction
import org.gradle.process.internal.JavaExecAction

/**
 * @author Catalysts GmbH, www.catalysts.cc
 */
class GenerateGrammarSourceTask extends DefaultTask {
    private TCLogger log = new TCLogger(project, logger)

    @InputDirectory
    def inputDir = new File(project.projectDir, project.antlr3.antlrSource as String)
    @OutputDirectory
    def outputDir = new File(project.projectDir, project.antlr3.destinationDir as String)

    @TaskAction
    def generateGrammarSource() {
        log.info("input dir: $inputDir")
        log.info("output dir: $outputDir")

        FileResolver fileResolver = getServices().get(FileResolver.class)

        Map grammarMap = new HashMap()
        log.lifecycle "Generating from " + project.antlr3.grammarList.size() + " files"
        for (String grammar in project.antlr3.grammarList) {
            def parts = grammar.split("->")
            if (parts.size() != 2) {
                log.failure "Could not run antlr for line '" + grammar + "'", true
            }
            String grammarFile = parts[0]
            String grammarPackage = parts[1]

            if (!grammarMap.containsKey(grammarPackage)) {
                grammarMap.put(grammarPackage, project.fileTree(dir: project.antlr3.antlrSource))
            }

            grammarMap.get(grammarPackage).include grammarFile
        }

        for (m in grammarMap) {
            String grammarPackage = m.getKey()
            FileTree tree = m.getValue()

            log.lifecycle "Generating from " + tree.files.size() + " grammar files  to '" + grammarPackage + "'"

            grammarPackage = grammarPackage.replace('.', File.separator)

            JavaExecAction javaExec = new DefaultJavaExecAction(fileResolver)
            javaExec.setMain("org.antlr.Tool")
            javaExec.classpath(project.configurations.antlr3)
            javaExec.args(["-o", "${project.antlr3.destinationDir}${File.separator}${grammarPackage}", tree.files].flatten())
            javaExec.execute();
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy