| import java.nio.file.Files |
| |
| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| configure(project(":lucene:expressions")) { |
| configurations { |
| antlr |
| } |
| |
| dependencies { |
| antlr "org.antlr:antlr4" |
| } |
| |
| task generateAntlrInternal() { |
| description "Regenerate Javascript.g4" |
| group "generation" |
| |
| dependsOn configurations.antlr |
| |
| def generatedPatterns = [ |
| "**/JavascriptBaseVisitor.java", |
| "**/JavascriptLexer.java", |
| "**/JavascriptParser.java", |
| "**/JavascriptVisitor.java", |
| ] |
| |
| def sourceDir = "src/java/org/apache/lucene/expressions/js" |
| def inputFiles = file("$sourceDir/Javascript.g4") |
| def tempOutput = file("$buildDir/antlr") |
| def outputFiles = fileTree(dir: sourceDir, includes: generatedPatterns) |
| |
| inputs.files inputFiles |
| outputs.files outputFiles |
| |
| doFirst { |
| project.delete tempOutput |
| |
| project.javaexec { |
| main = "org.antlr.v4.Tool" |
| classpath = configurations.antlr |
| |
| ignoreExitValue false |
| args = [ |
| "-no-listener", |
| "-visitor", |
| "-package", "org.apache.lucene.expressions.js", |
| "-o", tempOutput, |
| inputFiles |
| ] |
| } |
| |
| def generatedFiles = fileTree(dir: tempOutput, includes: generatedPatterns) |
| generatedFiles.each { file -> |
| modifyFile(file, { text -> |
| text = text.replaceAll("public ((interface|class) Javascript\\w+)", "\$1") |
| text = text.replaceAll("// Generated from .*", "// ANTLR GENERATED CODE: DO NOT EDIT") |
| return text |
| }) |
| } |
| |
| project.copy { |
| from tempOutput |
| into sourceDir |
| include generatedPatterns |
| } |
| } |
| } |
| |
| def generateAntlr = wrapWithPersistentChecksums( |
| generateAntlrInternal, [ andThenTasks: ["spotlessJava", "spotlessJavaApply"] ]) |
| |
| regenerate.dependsOn generateAntlr |
| } |