You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ma...@apache.org on 2019/06/12 23:53:43 UTC

[lucene-solr] branch jira/SOLR-13452_gradle_3 updated: SOLR-13452: Fix Solr JavaCC task to work with JavaCC 5 and add lucene queryparser javacc tasks, also hook them and solr javacc qp task to regenerate so they are tested by buildTest.

This is an automated email from the ASF dual-hosted git repository.

markrmiller pushed a commit to branch jira/SOLR-13452_gradle_3
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git


The following commit(s) were added to refs/heads/jira/SOLR-13452_gradle_3 by this push:
     new 42b1c27  SOLR-13452:  Fix Solr JavaCC task to work with JavaCC 5 and add lucene queryparser javacc tasks, also hook them and solr javacc qp task to regenerate so they are tested by buildTest.
42b1c27 is described below

commit 42b1c27dad84e0dd4ccc014f5cfc965ca87fc114
Author: markrmiller <ma...@apache.org>
AuthorDate: Wed Jun 12 18:53:34 2019 -0500

    SOLR-13452:  Fix Solr JavaCC task to work with JavaCC 5 and add lucene queryparser javacc tasks, also hook them and solr javacc qp task to regenerate so they are tested by buildTest.
---
 .../gradle/{SolrQPJavaCC.groovy => JavaCC.groovy}  | 56 +++++-------
 buildSrc/test-build-wdocker/test-build.sh          |  8 --
 lucene/analysis/common/build.gradle                |  2 +-
 lucene/core/build.gradle                           |  4 +-
 lucene/queryparser/build.gradle                    | 99 +++++++++++++++++++++-
 solr/core/build.gradle                             | 32 ++++++-
 .../org/apache/solr/parser/FastCharStream.java     | 10 +++
 .../src/java/org/apache/solr/parser/QueryParser.jj |  4 +-
 8 files changed, 164 insertions(+), 51 deletions(-)

diff --git a/buildSrc/src/main/groovy/org/apache/lucene/gradle/SolrQPJavaCC.groovy b/buildSrc/src/main/groovy/org/apache/lucene/gradle/JavaCC.groovy
similarity index 57%
rename from buildSrc/src/main/groovy/org/apache/lucene/gradle/SolrQPJavaCC.groovy
rename to buildSrc/src/main/groovy/org/apache/lucene/gradle/JavaCC.groovy
index bcc2549..f32100e 100644
--- a/buildSrc/src/main/groovy/org/apache/lucene/gradle/SolrQPJavaCC.groovy
+++ b/buildSrc/src/main/groovy/org/apache/lucene/gradle/JavaCC.groovy
@@ -23,7 +23,7 @@ import org.gradle.api.tasks.InputFile
 import org.gradle.api.tasks.OutputDirectory
 import org.gradle.api.tasks.TaskAction
 
-class SolrQPJavaCC extends DefaultTask {
+class JavaCC extends DefaultTask {
   
   @InputFile
   File inputFile
@@ -36,21 +36,23 @@ class SolrQPJavaCC extends DefaultTask {
     
     String javaCCHome
     String javaCCJarName
+    String javaCCJarHome
+    
+    javaCCHome = project.mfile(project.buildDir, 'javacc')
+    project.mkdir(javaCCHome)
     
     project.project(':buildSrc').configurations.javacc.files.each {
       if (it.getName().startsWith('javacc') && it.getName().endsWith('.jar')) {
-        javaCCHome = it.getParentFile().getAbsolutePath()
+        javaCCJarHome = it.getParentFile().getAbsolutePath()
         javaCCJarName = it.getName()
       }
     }
-    
-    if (!project.file(javaCCHome + '/javacc.jar').exists()) {
-      project.copy {
-        from (javaCCHome + '/' + javaCCJarName)
-        into (javaCCHome)
-        rename { String fileName ->
-          fileName = 'javacc.jar'
-        }
+
+    project.copy {
+      from (javaCCJarHome + '/' + javaCCJarName)
+      into (javaCCHome)
+      rename { String fileName ->
+        fileName = 'javacc.jar'
       }
     }
     
@@ -58,7 +60,7 @@ class SolrQPJavaCC extends DefaultTask {
     name: 'javacc',
     classpath: project.project(':buildSrc').configurations.javacc.asPath)
 
-    project.mkdir('src/java/org/apache/solr/parser')
+    project.mkdir(target)
     
     ant.delete() {
       ant.fileset(dir: target.getAbsolutePath(), includes: '*.java') {
@@ -68,31 +70,19 @@ class SolrQPJavaCC extends DefaultTask {
     
     ant.javacc(target: inputFile.getAbsolutePath(), outputDirectory: target.getAbsolutePath(), javacchome: javaCCHome)
     
-    
-    // Change the incorrect public ctors for QueryParser to be protected instead
-    ant.replaceregexp(file: project.filePath('src/java/org/apache/solr/parser/QueryParser.java'),
-    byline:  'true',
-    match:   'public QueryParser\\(CharStream ',
-    replace: 'protected QueryParser(CharStream ')
-    
-    ant.replaceregexp(file: project.filePath('src/java/org/apache/solr/parser/QueryParser.java'),
-    byline: 'true',
-    match:  'public QueryParser\\(QueryParserTokenManager ',
-    replace:'protected QueryParser(QueryParserTokenManager ')
-    
-    // change an exception used for signaling to be static
-    ant.replaceregexp(file: project.filePath("src/java/org/apache/solr/parser/QueryParser.java"),
-                   byline: "true",
-                   match: "final private LookaheadSuccess jj_ls =",
-                   replace: "static final private LookaheadSuccess jj_ls =")
+    // Remove debug stream (violates forbidden-apis)
+    ant.replaceregexp(match: "/\\*\\* Debug output.*?Set debug output.*?ds; }", replace: '', flags: 's', encoding: 'UTF-8') {
+      ant.fileset(dir: target.getAbsolutePath(), includes: "*TokenManager.java")
+    }
+    // Add warnings supression
+    ant.replaceregexp(match:"^\\Qpublic class\\E", replace: "@SuppressWarnings(\"cast\")${System.getProperty('line.separator')}\\0", flags:"m", encoding: "UTF-8") {
+      ant.fileset(dir: target.getAbsolutePath(), includes:"*TokenManager.java")
+    }
+    // StringBuffer -> StringBuilder 
     ant.replace(token: "StringBuffer", value: "StringBuilder", encoding: "UTF-8") {
-       ant.fileset(dir: project.filePath("src/java/org/apache/solr/parser"), includes: "ParseException.java TokenMgrError.java")
+       ant.fileset(dir: target.getAbsolutePath(), includes: "ParseException.java TokenMgrError.java")
     }
 
-    ant.replace(token: 'StringBuffer', value: 'StringBuilder', encoding: 'UTF-8') {
-      ant.fileset(dir: project.filePath('src/java/org/apache/solr/parser'), includes: 'ParseException.java TokenMgrError.java')
-    }
-    
     ant.fixcrlf(srcdir: target.getAbsolutePath(), includes: '*.java', encoding: 'UTF-8') {
       ant.containsregexp(expression: 'Generated.*By.*JavaCC')
     }
diff --git a/buildSrc/test-build-wdocker/test-build.sh b/buildSrc/test-build-wdocker/test-build.sh
index 7fff4e9..641660e 100644
--- a/buildSrc/test-build-wdocker/test-build.sh
+++ b/buildSrc/test-build-wdocker/test-build.sh
@@ -51,10 +51,6 @@ set -x
 cmd="cd /home/lucene/project;./gradlew build -x test"
 exec "${cmd}" "${exec_args}" || { exit 1; }
 
-# clean jflex for regenerate
-cmd="cd /home/lucene/project;./gradlew cleanjflex"
-exec "${cmd}" "${exec_args}" || { exit 1; }
-
 # test regenerate task
 cmd="cd /home/lucene/project;./gradlew regenerate"
 exec "${cmd}" "${exec_args}" || { exit 1; }
@@ -79,10 +75,6 @@ exec "${cmd}" "${exec_args}" || { exit 1; }
 cmd="cd /home/lucene/project;./gradlew solr:solr-core:missingDependencies"
 exec "${cmd}" "${exec_args}" || { exit 1; }
 
-# test solr qp javacc task
-# cmd="cd /home/lucene/project;./gradlew javacc"
-# exec "${cmd}" "${exec_args}" || { exit 1; }
-
 # we should still be able to build now
 cmd="cd /home/lucene/project;./gradlew build -x test"
 exec "${cmd}" "${exec_args}" || { exit 1; }
diff --git a/lucene/analysis/common/build.gradle b/lucene/analysis/common/build.gradle
index 74702d7..cbf4e55 100644
--- a/lucene/analysis/common/build.gradle
+++ b/lucene/analysis/common/build.gradle
@@ -155,7 +155,7 @@ task cleanJflexUAX29URLEmailTokenizer() {
 }
 
 task regenerate {
-  dependsOn runJflex, unicodeData
+  dependsOn cleanJflex, runJflex, unicodeData
 }
 
 task patchSnowball {
diff --git a/lucene/core/build.gradle b/lucene/core/build.gradle
index 62a385a..528382f 100644
--- a/lucene/core/build.gradle
+++ b/lucene/core/build.gradle
@@ -140,7 +140,7 @@ task cleanJflex() {
 
 task regenerate {
   group = 'Build Regenerate'
-  description = "Regenerates various generated src files, automoton, packedints, jflex, etc"
-  dependsOn runJflex, createLevAutomaton, createPackedIntSources
+  description = "Regenerates various generated src files, automoton, packedints, jflex, javacc, etc"
+  dependsOn cleanJflex, runJflex, createLevAutomaton, createPackedIntSources
 }
 
diff --git a/lucene/queryparser/build.gradle b/lucene/queryparser/build.gradle
index d08496b..359222b 100644
--- a/lucene/queryparser/build.gradle
+++ b/lucene/queryparser/build.gradle
@@ -20,16 +20,16 @@ apply plugin: 'maven-publish'
 apply plugin: org.apache.lucene.gradle.PartOfDist
 
 task jarTest (type: Jar) {
-    from sourceSets.test.output
-    classifier = 'test'
+  from sourceSets.test.output
+  classifier = 'test'
 }
 
 configurations {
-    testOutput
+  testOutput
 }
 
 artifacts {
-    testOutput jarTest
+  testOutput jarTest
 }
 
 dependencies {
@@ -40,5 +40,96 @@ dependencies {
   implementation project(':lucene:lucene-sandbox')
   
   testImplementation project(':lucene:lucene-test-framework')
+}
+
+String lineSeparator = System.lineSeparator()
+
+task runJavaccQueryParser(type: org.apache.lucene.gradle.JavaCC) {
+  inputFile file('src/java/org/apache/lucene/queryparser/classic/QueryParser.jj')
+  target file('src/java/org/apache/lucene/queryparser/classic')
+  doLast {
+    ant.replaceregexp(file: "src/java/org/apache/lucene/queryparser/classic/QueryParser.java",
+    byline: "true",
+    match: "public QueryParser\\(CharStream ",
+    replace: "protected QueryParser(CharStream ")
+    ant.replaceregexp(file: "src/java/org/apache/lucene/queryparser/classic/QueryParser.java",
+    byline: "true",
+    match: "public QueryParser\\(QueryParserTokenManager ",
+    replace: "protected QueryParser(QueryParserTokenManager ")
+  }
+}
+
+task runJavaccSurround(type: org.apache.lucene.gradle.JavaCC) {
+  inputFile file('src/java/org/apache/lucene/queryparser/surround/parser/QueryParser.jj')
+  target file('src/java/org/apache/lucene/queryparser/surround/parser')
+}
+
+task runJavaccFlexible(type: org.apache.lucene.gradle.JavaCC) {
+  inputFile file('src/java/org/apache/lucene/queryparser/flexible/standard/parser/StandardSyntaxParser.jj')
+  target file('src/java/org/apache/lucene/queryparser/flexible/standard/parser')
+  doLast {
+    ant.replaceregexp(file: "src/java/org/apache/lucene/queryparser/flexible/standard/parser/ParseException.java",
+    match:"public class ParseException extends Exception",
+    replace:"public class ParseException extends QueryNodeParseException",
+    flags:"g",
+    byline:"false")
+    ant.replaceregexp(file: "src/java/org/apache/lucene/queryparser/flexible/standard/parser/ParseException.java",
+    match: "package org.apache.lucene.queryparser.flexible.standard.parser;",
+    replace: "package org.apache.lucene.queryparser.flexible.standard.parser;${lineSeparator}${lineSeparator}" +
+    "import org.apache.lucene.queryparser.flexible.messages.Message;${lineSeparator}" +
+    "import org.apache.lucene.queryparser.flexible.messages.MessageImpl;${lineSeparator}" +
+    "import org.apache.lucene.queryparser.flexible.core.*;${lineSeparator}" +
+    "import org.apache.lucene.queryparser.flexible.core.messages.*;",
+    flags:"g",
+    byline: "false")
+    ant.replaceregexp(file: "src/java/org/apache/lucene/queryparser/flexible/standard/parser/ParseException.java",
+    match: "^  public ParseException\\(Token currentTokenVal.*\$(\\s\\s[^}].*\\n)*  \\}",
+    replace: "  public ParseException(Token currentTokenVal,${lineSeparator}" +
+    "int[][] expectedTokenSequencesVal, String[] tokenImageVal) {${lineSeparator}" +
+    "super(new MessageImpl(QueryParserMessages.INVALID_SYNTAX, initialise(${lineSeparator}" +
+    "currentTokenVal, expectedTokenSequencesVal, tokenImageVal)));${lineSeparator}" +
+    "this.currentToken = currentTokenVal;${lineSeparator}" +
+    "this.expectedTokenSequences = expectedTokenSequencesVal;${lineSeparator}" +
+    "this.tokenImage = tokenImageVal;${lineSeparator}" +
+    "}",
+    flags:"gm",
+    byline: "false")
+    ant.replaceregexp(file:"src/java/org/apache/lucene/queryparser/flexible/standard/parser/ParseException.java",
+    match: "^  public ParseException\\(String message.*\$(\\s\\s[^}].*\\n)*  \\}",
+    replace: "  public ParseException(Message message) {${lineSeparator}" +
+    "super(message);${lineSeparator}" +
+    "}",
+    flags: "gm",
+    byline: "false")
+    ant.replaceregexp(file:"src/java/org/apache/lucene/queryparser/flexible/standard/parser/ParseException.java",
+    match: "^  public ParseException\\(\\).*\$(\\s\\s[^}].*\\n)*  \\}",
+    replace: "  public ParseException() {${lineSeparator}" +
+    "super(new MessageImpl(QueryParserMessages.INVALID_SYNTAX, \"Error\"));${lineSeparator}" +
+    "}",
+    flags: "gm",
+    byline: "false")
+    ant.replaceregexp(file: "src/java/org/apache/lucene/queryparser/flexible/standard/parser/ParseException.java",
+    match: "^  public String getMessage\\(\\).*\$(\\s\\s\\s\\s[^}].*\n)*    \\}",
+    replace: "  private static String initialise(Token currentToken, int[][] expectedTokenSequences, String[] tokenImage) {${lineSeparator}" +
+    "String eol = System.getProperty(&quot;lineSeparator&quot;, &quot;\n&quot;);",
+    flags: "gm",
+    byline: "false")
+    ant.replaceregexp(file: "src/java/org/apache/lucene/queryparser/flexible/standard/parser/ParseException.java",
+    match: "\\s*protected String add_escapes.*",
+    replace: "  static private String add_escapes(String str) {",
+    flags: "g",
+    byline: "true")
+  }
+  
+  task runJavacc {
+    group = 'Build Regenerate'
+    description = "Regenerates javacc generated src files."
+    dependsOn runJavaccQueryParser, runJavaccSurround, runJavaccFlexible
+  }
   
+  task regenerate {
+    group = 'Build Regenerate'
+    description = "Regenerates various generated src files, automoton, packedints, jflex, javacc, etc"
+    dependsOn runJavacc
+  }
 }
diff --git a/solr/core/build.gradle b/solr/core/build.gradle
index 3e45e9b..af4a5ab 100644
--- a/solr/core/build.gradle
+++ b/solr/core/build.gradle
@@ -214,7 +214,37 @@ unusedDeps {
   jarExclude 'kerby-pkix-.*?\\.jar'
 }
 
-task javacc(type: org.apache.lucene.gradle.SolrQPJavaCC) {
+task javacc(type: org.apache.lucene.gradle.JavaCC) {
   inputFile file('src/java/org/apache/solr/parser/QueryParser.jj')
   target file('src/java/org/apache/solr/parser')
+  
+  doLast {
+    // Change the incorrect public ctors for QueryParser to be protected instead
+    ant.replaceregexp(file: project.filePath('src/java/org/apache/solr/parser/QueryParser.java'),
+    byline:  'true',
+    match:   'public QueryParser\\(CharStream ',
+    replace: 'protected QueryParser(CharStream ')
+    
+    ant.replaceregexp(file: project.filePath('src/java/org/apache/solr/parser/QueryParser.java'),
+    byline: 'true',
+    match:  'public QueryParser\\(QueryParserTokenManager ',
+    replace:'protected QueryParser(QueryParserTokenManager ')
+    
+    // change an exception used for signaling to be static
+    ant.replaceregexp(file: project.filePath("src/java/org/apache/solr/parser/QueryParser.java"),
+                   byline: "true",
+                   match: "final private LookaheadSuccess jj_ls =",
+                   replace: "static final private LookaheadSuccess jj_ls =")
+    ant.replace(token: "StringBuffer", value: "StringBuilder", encoding: "UTF-8") {
+       ant.fileset(dir: project.filePath("src/java/org/apache/solr/parser"), includes: "ParseException.java TokenMgrError.java")
+    }
+  }
+}
+
+task regenerate {
+  group = 'Build Regenerate'
+  description = "Regenerates various generated src files, automoton, packedints, jflex, javacc, etc"
+  dependsOn javacc
 }
+
+
diff --git a/solr/core/src/java/org/apache/solr/parser/FastCharStream.java b/solr/core/src/java/org/apache/solr/parser/FastCharStream.java
index b9cb27a..767ffff 100644
--- a/solr/core/src/java/org/apache/solr/parser/FastCharStream.java
+++ b/solr/core/src/java/org/apache/solr/parser/FastCharStream.java
@@ -126,4 +126,14 @@ public final class FastCharStream implements CharStream {
   public final int getBeginLine() {
     return 1;
   }
+
+  @Override
+  public int getColumn() {
+    return 1;
+  }
+
+  @Override
+  public int getLine() {
+    return 1;
+  }
 }
diff --git a/solr/core/src/java/org/apache/solr/parser/QueryParser.jj b/solr/core/src/java/org/apache/solr/parser/QueryParser.jj
index 58adcd9..a73e8bb 100644
--- a/solr/core/src/java/org/apache/solr/parser/QueryParser.jj
+++ b/solr/core/src/java/org/apache/solr/parser/QueryParser.jj
@@ -76,13 +76,13 @@ public class QueryParser extends SolrQueryParserBase {
 
   @Override
   protected Query newFieldQuery(Analyzer analyzer, String field, String queryText,
-                                boolean quoted, boolean fieldAutoGenPhraseQueries, boolean fieldEnableGraphQueries)
+                                boolean quoted, boolean fieldAutoGenPhraseQueries, boolean fieldEnableGraphQueries, SynonymQueryStyle synonymQueryStyle)
       throws SyntaxError {
     setAutoGenerateMultiTermSynonymsPhraseQuery(fieldAutoGenPhraseQueries || getAutoGeneratePhraseQueries());
     // Don't auto-quote graph-aware field queries 
     boolean treatAsQuoted = getSplitOnWhitespace()
         ? (quoted || fieldAutoGenPhraseQueries || getAutoGeneratePhraseQueries()) : quoted;
-    return super.newFieldQuery(analyzer, field, queryText, treatAsQuoted, false, fieldEnableGraphQueries);
+    return super.newFieldQuery(analyzer, field, queryText, treatAsQuoted, false, fieldEnableGraphQueries, synonymQueryStyle);
   }
 }