You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by re...@apache.org on 2018/10/09 16:36:54 UTC
svn commit: r1843309 [1/2] - in /tomcat/trunk: ./
java/org/apache/catalina/tribes/membership/cloud/
java/org/apache/tomcat/util/json/ res/checkstyle/ webapps/docs/
Author: remm
Date: Tue Oct 9 16:36:54 2018
New Revision: 1843309
URL: http://svn.apache.org/viewvc?rev=1843309&view=rev
Log:
Switch from Noggit to a javacc parser generated from a public domain json grammar.
Added:
tomcat/trunk/java/org/apache/tomcat/util/json/
tomcat/trunk/java/org/apache/tomcat/util/json/JSONParser.java (with props)
tomcat/trunk/java/org/apache/tomcat/util/json/JSONParser.jj (with props)
tomcat/trunk/java/org/apache/tomcat/util/json/JSONParserConstants.java (with props)
tomcat/trunk/java/org/apache/tomcat/util/json/JSONParserTokenManager.java (with props)
tomcat/trunk/java/org/apache/tomcat/util/json/JavaCharStream.java (with props)
tomcat/trunk/java/org/apache/tomcat/util/json/ParseException.java (with props)
tomcat/trunk/java/org/apache/tomcat/util/json/Token.java (with props)
tomcat/trunk/java/org/apache/tomcat/util/json/TokenMgrError.java (with props)
Modified:
tomcat/trunk/NOTICE
tomcat/trunk/build.properties.default
tomcat/trunk/build.xml
tomcat/trunk/java/org/apache/catalina/tribes/membership/cloud/KubernetesMembershipProvider.java
tomcat/trunk/res/checkstyle/org-import-control.xml
tomcat/trunk/webapps/docs/changelog.xml
Modified: tomcat/trunk/NOTICE
URL: http://svn.apache.org/viewvc/tomcat/trunk/NOTICE?rev=1843309&r1=1843308&r2=1843309&view=diff
==============================================================================
--- tomcat/trunk/NOTICE (original)
+++ tomcat/trunk/NOTICE Tue Oct 9 16:36:54 2018
@@ -24,6 +24,10 @@ JDT Core Batch Compiler component, which
The original software and related information is available at
https://www.eclipse.org/jdt/core/.
+org.apache.tomcat.util.json.JSONParser.jj is a public domain javacc grammar
+for JSON written by Robert Fischer.
+https://github.com/RobertFischer/json-parser
+
For portions of the Tomcat JNI OpenSSL API and the OpenSSL JSSE integration
The org.apache.tomcat.jni and the org.apache.tomcat.net.openssl packages
are derivative work originating from the Netty project and the finagle-native
Modified: tomcat/trunk/build.properties.default
URL: http://svn.apache.org/viewvc/tomcat/trunk/build.properties.default?rev=1843309&r1=1843308&r2=1843309&view=diff
==============================================================================
--- tomcat/trunk/build.properties.default (original)
+++ tomcat/trunk/build.properties.default Tue Oct 9 16:36:54 2018
@@ -283,15 +283,6 @@ saaj-api.home=${base.path}/saaj-api-${sa
saaj-api.jar=${saaj-api.home}/saaj-api-${saaj-api.version}.jar
saaj-api.loc=${base-maven.loc}/javax/xml/soap/saaj-api/${saaj-api.version}/saaj-api-${saaj-api.version}.jar
-# ----- Noggit, version 0.8 or later -----
-noggit.version=0.8
-noggit.checksum.enabled=true
-noggit.checksum.algorithm=MD5|SHA-1
-noggit.checksum.value=6856f2ceab2dd7128595e4659d22d581|ba4ad65a62d7dfcf97a8d42c82ae7d8824f9087f
-noggit.home=${base.path}/noggit-${noggit.version}
-noggit.jar=${noggit.home}/noggit-${noggit.version}.jar
-noggit.loc=${base-maven.loc}/org/noggit/noggit/${noggit.version}/noggit-${noggit.version}.jar
-
# ----- bnd & bndlib, version 4.0.0 or later -----
# ----- provides OSGI metadata for JARs -----
bnd.version=4.0.0
Modified: tomcat/trunk/build.xml
URL: http://svn.apache.org/viewvc/tomcat/trunk/build.xml?rev=1843309&r1=1843308&r2=1843309&view=diff
==============================================================================
--- tomcat/trunk/build.xml (original)
+++ tomcat/trunk/build.xml Tue Oct 9 16:36:54 2018
@@ -213,7 +213,6 @@
<path id="compile.classpath">
<pathelement location="${jdt.jar}"/>
<pathelement location="${saaj-api.jar}"/>
- <pathelement location="${noggit.jar}"/>
</path>
<path id="tomcat.classpath">
@@ -390,6 +389,7 @@
<include name="org/apache/tomcat/util/res/**" />
<include name="org/apache/tomcat/util/security/**" />
<include name="org/apache/tomcat/util/threads/**" />
+ <include name="org/apache/tomcat/util/json/**" />
<include name="org/apache/tomcat/util/*" />
<exclude name="org/apache/tomcat/util/bcel" />
<exclude name="org/apache/tomcat/util/descriptor" />
@@ -596,6 +596,7 @@
<exclude name="java/org/apache/**/parser/ParseException.java" />
<exclude name="java/org/apache/**/parser/SimpleCharStream.java" />
<exclude name="java/org/apache/**/parser/Token*.java" />
+ <exclude name="java/org/apache/tomcat/util/json/*.java" />
<!-- Exclude simple test files -->
<exclude name="test/webapp/bug53257/**/*.txt"/>
<exclude name="test/webapp/bug49nnn/bug49464*"/>
@@ -2718,16 +2719,6 @@ skip.installer property in build.propert
<param name="checksum.value" value="${saaj-api.checksum.value}"/>
</antcall>
- <!-- Download noggit -->
- <antcall target="downloadfile">
- <param name="sourcefile" value="${noggit.loc}"/>
- <param name="destfile" value="${noggit.jar}"/>
- <param name="destdir" value="${noggit.home}"/>
- <param name="checksum.enabled" value="${noggit.checksum.enabled}"/>
- <param name="checksum.algorithm" value="${noggit.checksum.algorithm}"/>
- <param name="checksum.value" value="${noggit.checksum.value}"/>
- </antcall>
-
</target>
<target name="download-test-compile"
Modified: tomcat/trunk/java/org/apache/catalina/tribes/membership/cloud/KubernetesMembershipProvider.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/tribes/membership/cloud/KubernetesMembershipProvider.java?rev=1843309&r1=1843308&r2=1843309&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/tribes/membership/cloud/KubernetesMembershipProvider.java (original)
+++ tomcat/trunk/java/org/apache/catalina/tribes/membership/cloud/KubernetesMembershipProvider.java Tue Oct 9 16:36:54 2018
@@ -27,6 +27,7 @@ import java.nio.file.Files;
import java.time.Duration;
import java.time.Instant;
import java.util.ArrayList;
+import java.util.LinkedHashMap;
import java.util.List;
import org.apache.catalina.tribes.Member;
@@ -35,7 +36,7 @@ import org.apache.catalina.tribes.member
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
import org.apache.tomcat.util.codec.binary.StringUtils;
-import org.noggit.JSONParser;
+import org.apache.tomcat.util.json.JSONParser;
public class KubernetesMembershipProvider extends CloudMembershipProvider {
@@ -141,170 +142,48 @@ public class KubernetesMembershipProvide
protected void parsePods(Reader reader, List<MemberImpl> members)
throws IOException{
-
- int event = 0;
JSONParser parser = new JSONParser(reader);
- boolean parseItems = false;
- for (;;) {
- event = parser.nextEvent();
- switch (event) {
- case JSONParser.STRING:
- String value = parser.getString();
- if (parser.wasKey()) {
- if ("items".equals(value) && parser.nextEvent() == JSONParser.ARRAY_START) {
- parseItems = true;
- }
- }
- break;
- case JSONParser.ARRAY_END:
- parseItems = false;
- break;
- case JSONParser.OBJECT_START:
- if (parseItems) {
- parseItem(parser, members);
- }
- break;
- default:
- break;
- }
-
- if (event == JSONParser.EOF)
- break;
- }
-
- }
-
- private void parseItem(JSONParser parser, List<MemberImpl> members)
- throws IOException {
- int event = 0;
- String podIP = null;
- // Name in first position, creation in second
- String[] nameAndCreationTimestamp = null;
- for (;;) {
- event = parser.nextEvent();
- switch (event) {
- case JSONParser.STRING:
- String value = parser.getString();
- if (parser.wasKey()) {
- if ("kind".equals(value)) {
- // Verify the item is a pod
- if (parser.nextEvent() != JSONParser.STRING && (!"Pod".equals(parser.getString()))) {
- throw new IllegalStateException();
- }
- } else if ("status".equals(value)) {
- // Verify the status is Running and return the podIP
- podIP = parseStatus(parser);
- } else if ("metadata".equals(value)) {
- nameAndCreationTimestamp = parseMetadata(parser);
- }
- }
- break;
- case JSONParser.OBJECT_END:
- // Done
- if (podIP == null || nameAndCreationTimestamp == null
- || nameAndCreationTimestamp[0] == null
- || nameAndCreationTimestamp[1] == null) {
- throw new IOException(sm.getString("kubernetesMembershipProvider.jsonError"));
- } else {
- // We found ourselves, ignore
- if (nameAndCreationTimestamp[0].equals(hostName))
- return;
-
- // id = md5(hostname)
- byte[] id = md5.digest(nameAndCreationTimestamp[0].getBytes());
- long aliveTime = Duration.between(Instant.parse(nameAndCreationTimestamp[1]), startTime).getSeconds() * 1000; // aliveTime is in ms
-
- MemberImpl member = null;
- try {
- member = new MemberImpl(podIP, port, aliveTime);
- } catch (IOException e) {
- // Shouldn't happen:
- // an exception is thrown if hostname can't be resolved to IP, but we already provide an IP
- log.error(sm.getString("kubernetesMembershipProvider.memberError"), e);
- continue;
- }
-
- member.setUniqueId(id);
- members.add(member);
- }
- return;
- default:
- break;
- }
-
- if (event == JSONParser.EOF)
- break;
- }
-
- }
-
- private String parseStatus(JSONParser parser)
- throws IOException {
- String result = null;
- int event = 0;
- for (;;) {
- event = parser.nextEvent();
- switch (event) {
- case JSONParser.STRING:
- String value = parser.getString();
- if (parser.wasKey()) {
- if ("phase".equals(value)) {
- // Verify the item is a pod
- if (parser.nextEvent() != JSONParser.STRING && (!"Running".equals(parser.getString()))) {
- return null;
- }
- } else if ("podIP".equals(value)) {
- if (parser.nextEvent() == JSONParser.STRING) {
- result = parser.getString();
- }
- }
+ try {
+ LinkedHashMap<String, Object> json = parser.object();
+ @SuppressWarnings("unchecked")
+ List<Object> items = (List<Object>) json.get("items");
+ for (Object podObject : items) {
+ @SuppressWarnings("unchecked")
+ LinkedHashMap<String, Object> pod = (LinkedHashMap<String, Object>) podObject;
+ if (!"Pod".equals(pod.get("kind"))) {
+ continue;
+ }
+ @SuppressWarnings("unchecked")
+ LinkedHashMap<String, Object> metadata = (LinkedHashMap<String, Object>) pod.get("metadata");
+ String name = metadata.get("name").toString();
+ String creationTimestamp = metadata.get("creationTimestamp").toString();
+ @SuppressWarnings("unchecked")
+ LinkedHashMap<String, Object> status = (LinkedHashMap<String, Object>) pod.get("status");
+ if (!"Running".equals(status.get("phase"))) {
+ continue;
+ }
+ String podIP = status.get("podIP").toString();
+
+ // id = md5(hostname)
+ byte[] id = md5.digest(name.getBytes());
+ long aliveTime = Duration.between(Instant.parse(creationTimestamp), startTime).getSeconds() * 1000; // aliveTime is in ms
+
+ MemberImpl member = null;
+ try {
+ member = new MemberImpl(podIP, port, aliveTime);
+ } catch (IOException e) {
+ // Shouldn't happen:
+ // an exception is thrown if hostname can't be resolved to IP, but we already provide an IP
+ log.error(sm.getString("kubernetesMembershipProvider.memberError"), e);
+ continue;
}
- break;
- case JSONParser.OBJECT_END:
- // Done
- return result;
- default:
- break;
- }
-
- if (event == JSONParser.EOF)
- break;
- }
- return result;
- }
- private String[] parseMetadata(JSONParser parser)
- throws IOException {
- String[] result = new String[2];
- int event = 0;
- for (;;) {
- event = parser.nextEvent();
- switch (event) {
- case JSONParser.STRING:
- String value = parser.getString();
- if (parser.wasKey()) {
- if ("name".equals(value)) {
- if (parser.nextEvent() == JSONParser.STRING) {
- result[0] = parser.getString();
- }
- } else if ("creationTimestamp".equals(value)) {
- if (parser.nextEvent() == JSONParser.STRING) {
- result[1] = parser.getString();
- }
- }
- }
- break;
- case JSONParser.OBJECT_END:
- // Done
- return result;
- default:
- break;
+ member.setUniqueId(id);
+ members.add(member);
}
-
- if (event == JSONParser.EOF)
- break;
+ } catch (Exception e) {
+ throw new IOException(sm.getString("kubernetesMembershipProvider.jsonError"), e);
}
- return result;
}
}
Added: tomcat/trunk/java/org/apache/tomcat/util/json/JSONParser.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/json/JSONParser.java?rev=1843309&view=auto
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/json/JSONParser.java (added)
+++ tomcat/trunk/java/org/apache/tomcat/util/json/JSONParser.java Tue Oct 9 16:36:54 2018
@@ -0,0 +1,616 @@
+/* JSONParser.java */
+/* Generated By:JavaCC: Do not edit this line. JSONParser.java */
+/*
+ * 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.
+ */
+
+package org.apache.tomcat.util.json;
+
+import java.io.*;
+import java.util.*;
+import java.math.*;
+
+/**
+* Basic JSON parser generated by JavaCC. It consumes the input provided through the constructor when
+* {@code parseObject()}, {@code parseList()}, or {@code parse()} are called, and there is no way to directly
+* reset the state.
+* Set the {@code fallbackToString} property if you want to enable
+* unparsable constructs (such as unquoted strings) to be handled as Strings: otherwise, they are a parse
+* error.
+*
+* <p />
+*
+* This class makes no pretenses towards being thread safe.
+*/
+public class JSONParser implements JSONParserConstants {
+
+ private boolean nativeNumbers = false;
+
+ public JSONParser(String input) {
+ this(new StringReader(input));
+ }
+
+ /**
+ * Parses a JSON object into a Java {@code Map}.
+ */
+ public LinkedHashMap<String,Object> parseObject() throws ParseException {
+ LinkedHashMap<String,Object> toReturn = object();
+ if(!ensureEOF()) throw new IllegalStateException("Expected EOF, but still had content to parse");
+ return toReturn;
+ }
+
+ /**
+ * Parses a JSON array into a Java {@code List}.
+ */
+ public ArrayList<Object> parseArray() throws ParseException {
+ ArrayList<Object> toReturn = list();
+ if(!ensureEOF()) throw new IllegalStateException("Expected EOF, but still had content to parse");
+ return toReturn;
+ }
+
+ /**
+ * Parses any JSON-parseable object, returning the value.
+ */
+ public Object parse() throws ParseException {
+ Object toReturn = anything();
+ if(!ensureEOF()) throw new IllegalStateException("Expected EOF, but still had content to parse");
+ return toReturn;
+ }
+
+ private static String substringBefore(String str, char delim) {
+ int pos = str.indexOf(delim);
+ if(pos == -1) return str;
+ return str.substring(0, pos);
+ }
+
+ public void setNativeNumbers(boolean value) {
+ this.nativeNumbers = value;
+ }
+
+ public boolean getNativeNumbers() {
+ return this.nativeNumbers;
+ }
+
+ final public boolean ensureEOF() throws ParseException {
+ jj_consume_token(0);
+{if ("" != null) return true;}
+ throw new Error("Missing return statement in function");
+}
+
+ final public Object anything() throws ParseException {Object x;
+ switch (jj_nt.kind) {
+ case BRACE_OPEN:{
+ x = object();
+ break;
+ }
+ case BRACKET_OPEN:{
+ x = list();
+ break;
+ }
+ case NUMBER_INTEGER:
+ case NUMBER_DECIMAL:
+ case TRUE:
+ case FALSE:
+ case NULL:
+ case STRING_SINGLE_EMPTY:
+ case STRING_DOUBLE_EMPTY:
+ case STRING_SINGLE_NONEMPTY:
+ case STRING_DOUBLE_NONEMPTY:
+ case RUBY_SYMBOL:{
+ x = value();
+ break;
+ }
+ default:
+ jj_la1[0] = jj_gen;
+ jj_consume_token(-1);
+ throw new ParseException();
+ }
+{if ("" != null) return x;}
+ throw new Error("Missing return statement in function");
+}
+
+ final public String objectKey() throws ParseException {Object o;
+ String key;
+ switch (jj_nt.kind) {
+ case STRING_SINGLE_EMPTY:
+ case STRING_DOUBLE_EMPTY:
+ case STRING_SINGLE_NONEMPTY:
+ case STRING_DOUBLE_NONEMPTY:
+ case RUBY_SYMBOL:{
+ key = string();
+ break;
+ }
+ case SYMBOL:{
+ key = symbol();
+ break;
+ }
+ case NULL:{
+ nullValue();
+key = null;
+ break;
+ }
+ case NUMBER_INTEGER:
+ case NUMBER_DECIMAL:
+ case TRUE:
+ case FALSE:{
+ switch (jj_nt.kind) {
+ case TRUE:
+ case FALSE:{
+ o = booleanValue();
+ break;
+ }
+ case NUMBER_INTEGER:
+ case NUMBER_DECIMAL:{
+ o = number();
+ break;
+ }
+ default:
+ jj_la1[1] = jj_gen;
+ jj_consume_token(-1);
+ throw new ParseException();
+ }
+key = o.toString();
+ break;
+ }
+ default:
+ jj_la1[2] = jj_gen;
+ jj_consume_token(-1);
+ throw new ParseException();
+ }
+{if ("" != null) return key;}
+ throw new Error("Missing return statement in function");
+}
+
+ final public LinkedHashMap<String,Object> object() throws ParseException {final LinkedHashMap<String,Object> map = new LinkedHashMap<String,Object>();
+ String key;
+ Object value;
+ jj_consume_token(BRACE_OPEN);
+ switch (jj_nt.kind) {
+ case NUMBER_INTEGER:
+ case NUMBER_DECIMAL:
+ case TRUE:
+ case FALSE:
+ case NULL:
+ case STRING_SINGLE_EMPTY:
+ case STRING_DOUBLE_EMPTY:
+ case STRING_SINGLE_NONEMPTY:
+ case STRING_DOUBLE_NONEMPTY:
+ case RUBY_SYMBOL:
+ case SYMBOL:{
+ key = objectKey();
+ jj_consume_token(COLON);
+ value = anything();
+map.put(key, value);
+key = null; value = null;
+ label_1:
+ while (true) {
+ switch (jj_nt.kind) {
+ case COMMA:{
+ ;
+ break;
+ }
+ default:
+ jj_la1[3] = jj_gen;
+ break label_1;
+ }
+ jj_consume_token(COMMA);
+ key = objectKey();
+ jj_consume_token(COLON);
+ value = anything();
+map.put(key, value);
+key = null; value = null;
+ }
+ break;
+ }
+ default:
+ jj_la1[4] = jj_gen;
+ ;
+ }
+ jj_consume_token(BRACE_CLOSE);
+{if ("" != null) return map;}
+ throw new Error("Missing return statement in function");
+}
+
+ final public ArrayList<Object> list() throws ParseException {final ArrayList<Object> list = new ArrayList<Object>();
+ Object value;
+ jj_consume_token(BRACKET_OPEN);
+ switch (jj_nt.kind) {
+ case BRACE_OPEN:
+ case BRACKET_OPEN:
+ case NUMBER_INTEGER:
+ case NUMBER_DECIMAL:
+ case TRUE:
+ case FALSE:
+ case NULL:
+ case STRING_SINGLE_EMPTY:
+ case STRING_DOUBLE_EMPTY:
+ case STRING_SINGLE_NONEMPTY:
+ case STRING_DOUBLE_NONEMPTY:
+ case RUBY_SYMBOL:{
+ value = anything();
+list.add(value);
+value = null;
+ label_2:
+ while (true) {
+ switch (jj_nt.kind) {
+ case COMMA:{
+ ;
+ break;
+ }
+ default:
+ jj_la1[5] = jj_gen;
+ break label_2;
+ }
+ jj_consume_token(COMMA);
+ value = anything();
+list.add(value);
+value = null;
+ }
+ break;
+ }
+ default:
+ jj_la1[6] = jj_gen;
+ ;
+ }
+ jj_consume_token(BRACKET_CLOSE);
+list.trimToSize();
+ {if ("" != null) return list;}
+ throw new Error("Missing return statement in function");
+}
+
+ final public Object value() throws ParseException {Object x;
+ switch (jj_nt.kind) {
+ case STRING_SINGLE_EMPTY:
+ case STRING_DOUBLE_EMPTY:
+ case STRING_SINGLE_NONEMPTY:
+ case STRING_DOUBLE_NONEMPTY:
+ case RUBY_SYMBOL:{
+ x = string();
+ break;
+ }
+ case NUMBER_INTEGER:
+ case NUMBER_DECIMAL:{
+ x = number();
+ break;
+ }
+ case TRUE:
+ case FALSE:{
+ x = booleanValue();
+ break;
+ }
+ case NULL:{
+ x = nullValue();
+ break;
+ }
+ default:
+ jj_la1[7] = jj_gen;
+ jj_consume_token(-1);
+ throw new ParseException();
+ }
+{if ("" != null) return x;}
+ throw new Error("Missing return statement in function");
+}
+
+ final public Object nullValue() throws ParseException {
+ jj_consume_token(NULL);
+{if ("" != null) return null;}
+ throw new Error("Missing return statement in function");
+}
+
+ final public Boolean booleanValue() throws ParseException {Boolean b;
+ switch (jj_nt.kind) {
+ case TRUE:{
+ jj_consume_token(TRUE);
+b = Boolean.TRUE;
+ break;
+ }
+ case FALSE:{
+ jj_consume_token(FALSE);
+b = Boolean.FALSE;
+ break;
+ }
+ default:
+ jj_la1[8] = jj_gen;
+ jj_consume_token(-1);
+ throw new ParseException();
+ }
+{if ("" != null) return b;}
+ throw new Error("Missing return statement in function");
+}
+
+ final public Number number() throws ParseException {Token t;
+ switch (jj_nt.kind) {
+ case NUMBER_DECIMAL:{
+ t = jj_consume_token(NUMBER_DECIMAL);
+if(nativeNumbers) {
+ {if ("" != null) return new Long(t.image);}
+ } else {
+ {if ("" != null) return new BigDecimal(t.image);}
+ }
+ break;
+ }
+ case NUMBER_INTEGER:{
+ t = jj_consume_token(NUMBER_INTEGER);
+if(nativeNumbers) {
+ {if ("" != null) return new Double(t.image);}
+ } else {
+ {if ("" != null) return new BigInteger(substringBefore(t.image, '.'));}
+ }
+ break;
+ }
+ default:
+ jj_la1[9] = jj_gen;
+ jj_consume_token(-1);
+ throw new ParseException();
+ }
+ throw new Error("Missing return statement in function");
+}
+
+ final public String string() throws ParseException {String s;
+ switch (jj_nt.kind) {
+ case STRING_DOUBLE_EMPTY:
+ case STRING_DOUBLE_NONEMPTY:{
+ s = doubleQuoteString();
+ break;
+ }
+ case STRING_SINGLE_EMPTY:
+ case STRING_SINGLE_NONEMPTY:{
+ s = singleQuoteString();
+ break;
+ }
+ case RUBY_SYMBOL:{
+ s = rubySymbol();
+ break;
+ }
+ default:
+ jj_la1[10] = jj_gen;
+ jj_consume_token(-1);
+ throw new ParseException();
+ }
+{if ("" != null) return s;}
+ throw new Error("Missing return statement in function");
+}
+
+ final public String rubySymbol() throws ParseException {
+ jj_consume_token(RUBY_SYMBOL);
+{if ("" != null) return token.image.substring(1);}
+ throw new Error("Missing return statement in function");
+}
+
+ final public String doubleQuoteString() throws ParseException {
+ switch (jj_nt.kind) {
+ case STRING_DOUBLE_EMPTY:{
+ jj_consume_token(STRING_DOUBLE_EMPTY);
+{if ("" != null) return "";}
+ break;
+ }
+ case STRING_DOUBLE_NONEMPTY:{
+ jj_consume_token(STRING_DOUBLE_NONEMPTY);
+String image = token.image;
+ {if ("" != null) return image.substring(1, image.length()-1);}
+ break;
+ }
+ default:
+ jj_la1[11] = jj_gen;
+ jj_consume_token(-1);
+ throw new ParseException();
+ }
+ throw new Error("Missing return statement in function");
+}
+
+ final public String singleQuoteString() throws ParseException {
+ switch (jj_nt.kind) {
+ case STRING_SINGLE_EMPTY:{
+ jj_consume_token(STRING_SINGLE_EMPTY);
+{if ("" != null) return "";}
+ break;
+ }
+ case STRING_SINGLE_NONEMPTY:{
+ jj_consume_token(STRING_SINGLE_NONEMPTY);
+String image = token.image;
+ {if ("" != null) return image.substring(1, image.length()-1);}
+ break;
+ }
+ default:
+ jj_la1[12] = jj_gen;
+ jj_consume_token(-1);
+ throw new ParseException();
+ }
+ throw new Error("Missing return statement in function");
+}
+
+ final public String symbol() throws ParseException {
+ jj_consume_token(SYMBOL);
+{if ("" != null) return token.image;}
+ throw new Error("Missing return statement in function");
+}
+
+ /** Generated Token Manager. */
+ public JSONParserTokenManager token_source;
+ JavaCharStream jj_input_stream;
+ /** Current token. */
+ public Token token;
+ /** Next token. */
+ public Token jj_nt;
+ private int jj_gen;
+ final private int[] jj_la1 = new int[13];
+ static private int[] jj_la1_0;
+ static {
+ jj_la1_init_0();
+ }
+ private static void jj_la1_init_0() {
+ jj_la1_0 = new int[] {0x1ccf8480,0x78000,0x3ccf8000,0x40,0x3ccf8000,0x40,0x1ccf8480,0x1ccf8000,0x60000,0x18000,0x1cc00000,0x8800000,0x4400000,};
+ }
+
+ /** Constructor with InputStream. */
+ public JSONParser(java.io.InputStream stream) {
+ this(stream, null);
+ }
+ /** Constructor with InputStream and supplied encoding */
+ public JSONParser(java.io.InputStream stream, String encoding) {
+ try { jj_input_stream = new JavaCharStream(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
+ token_source = new JSONParserTokenManager(jj_input_stream);
+ token = new Token();
+ token.next = jj_nt = token_source.getNextToken();
+ jj_gen = 0;
+ for (int i = 0; i < 13; i++) jj_la1[i] = -1;
+ }
+
+ /** Reinitialise. */
+ public void ReInit(java.io.InputStream stream) {
+ ReInit(stream, null);
+ }
+ /** Reinitialise. */
+ public void ReInit(java.io.InputStream stream, String encoding) {
+ try { jj_input_stream.ReInit(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
+ token_source.ReInit(jj_input_stream);
+ token = new Token();
+ token.next = jj_nt = token_source.getNextToken();
+ jj_gen = 0;
+ for (int i = 0; i < 13; i++) jj_la1[i] = -1;
+ }
+
+ /** Constructor. */
+ public JSONParser(java.io.Reader stream) {
+ jj_input_stream = new JavaCharStream(stream, 1, 1);
+ token_source = new JSONParserTokenManager(jj_input_stream);
+ token = new Token();
+ token.next = jj_nt = token_source.getNextToken();
+ jj_gen = 0;
+ for (int i = 0; i < 13; i++) jj_la1[i] = -1;
+ }
+
+ /** Reinitialise. */
+ public void ReInit(java.io.Reader stream) {
+ if (jj_input_stream == null) {
+ jj_input_stream = new JavaCharStream(stream, 1, 1);
+ } else {
+ jj_input_stream.ReInit(stream, 1, 1);
+ }
+ if (token_source == null) {
+ token_source = new JSONParserTokenManager(jj_input_stream);
+ }
+
+ token_source.ReInit(jj_input_stream);
+ token = new Token();
+ token.next = jj_nt = token_source.getNextToken();
+ jj_gen = 0;
+ for (int i = 0; i < 13; i++) jj_la1[i] = -1;
+ }
+
+ /** Constructor with generated Token Manager. */
+ public JSONParser(JSONParserTokenManager tm) {
+ token_source = tm;
+ token = new Token();
+ token.next = jj_nt = token_source.getNextToken();
+ jj_gen = 0;
+ for (int i = 0; i < 13; i++) jj_la1[i] = -1;
+ }
+
+ /** Reinitialise. */
+ public void ReInit(JSONParserTokenManager tm) {
+ token_source = tm;
+ token = new Token();
+ token.next = jj_nt = token_source.getNextToken();
+ jj_gen = 0;
+ for (int i = 0; i < 13; i++) jj_la1[i] = -1;
+ }
+
+ private Token jj_consume_token(int kind) throws ParseException {
+ Token oldToken = token;
+ if ((token = jj_nt).next != null) jj_nt = jj_nt.next;
+ else jj_nt = jj_nt.next = token_source.getNextToken();
+ if (token.kind == kind) {
+ jj_gen++;
+ return token;
+ }
+ jj_nt = token;
+ token = oldToken;
+ jj_kind = kind;
+ throw generateParseException();
+ }
+
+
+/** Get the next Token. */
+ final public Token getNextToken() {
+ if ((token = jj_nt).next != null) jj_nt = jj_nt.next;
+ else jj_nt = jj_nt.next = token_source.getNextToken();
+ jj_gen++;
+ return token;
+ }
+
+/** Get the specific Token. */
+ final public Token getToken(int index) {
+ Token t = token;
+ for (int i = 0; i < index; i++) {
+ if (t.next != null) t = t.next;
+ else t = t.next = token_source.getNextToken();
+ }
+ return t;
+ }
+
+ private java.util.List<int[]> jj_expentries = new java.util.ArrayList<int[]>();
+ private int[] jj_expentry;
+ private int jj_kind = -1;
+
+ /** Generate ParseException. */
+ public ParseException generateParseException() {
+ jj_expentries.clear();
+ boolean[] la1tokens = new boolean[30];
+ if (jj_kind >= 0) {
+ la1tokens[jj_kind] = true;
+ jj_kind = -1;
+ }
+ for (int i = 0; i < 13; i++) {
+ if (jj_la1[i] == jj_gen) {
+ for (int j = 0; j < 32; j++) {
+ if ((jj_la1_0[i] & (1<<j)) != 0) {
+ la1tokens[j] = true;
+ }
+ }
+ }
+ }
+ for (int i = 0; i < 30; i++) {
+ if (la1tokens[i]) {
+ jj_expentry = new int[1];
+ jj_expentry[0] = i;
+ jj_expentries.add(jj_expentry);
+ }
+ }
+ int[][] exptokseq = new int[jj_expentries.size()][];
+ for (int i = 0; i < jj_expentries.size(); i++) {
+ exptokseq[i] = jj_expentries.get(i);
+ }
+ return new ParseException(token, exptokseq, tokenImage);
+ }
+
+ private int trace_indent = 0;
+ private boolean trace_enabled;
+
+/** Trace enabled. */
+ final public boolean trace_enabled() {
+ return trace_enabled;
+ }
+
+ /** Enable tracing. */
+ final public void enable_tracing() {
+ }
+
+ /** Disable tracing. */
+ final public void disable_tracing() {
+ }
+
+}
Propchange: tomcat/trunk/java/org/apache/tomcat/util/json/JSONParser.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: tomcat/trunk/java/org/apache/tomcat/util/json/JSONParser.jj
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/json/JSONParser.jj?rev=1843309&view=auto
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/json/JSONParser.jj (added)
+++ tomcat/trunk/java/org/apache/tomcat/util/json/JSONParser.jj Tue Oct 9 16:36:54 2018
@@ -0,0 +1,394 @@
+/*
+ * 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.
+ */
+
+options {
+ CHOICE_AMBIGUITY_CHECK=3;
+ OTHER_AMBIGUITY_CHECK=2;
+ ERROR_REPORTING=true;
+ JAVA_UNICODE_ESCAPE=true;
+ UNICODE_INPUT=true;
+ IGNORE_CASE=true;
+ SUPPORT_CLASS_VISIBILITY_PUBLIC=true;
+ FORCE_LA_CHECK=true;
+ CACHE_TOKENS=true;
+ SANITY_CHECK = true;
+ STATIC=false;
+ //KEEP_LINE_COLUMN=true;
+}
+
+PARSER_BEGIN(JSONParser)
+
+/*
+ * 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.
+ */
+
+package org.apache.tomcat.util.json;
+
+import java.io.*;
+import java.util.*;
+import java.math.*;
+
+/**
+* Basic JSON parser generated by JavaCC. It consumes the input provided through the constructor when
+* {@code parseObject()}, {@code parseList()}, or {@code parse()} are called, and there is no way to directly
+* reset the state.
+* Set the {@code fallbackToString} property if you want to enable
+* unparsable constructs (such as unquoted strings) to be handled as Strings: otherwise, they are a parse
+* error.
+*
+* <p />
+*
+* This class makes no pretenses towards being thread safe.
+*/
+public class JSONParser {
+
+ private boolean nativeNumbers = false;
+
+ public JSONParser(String input) {
+ this(new StringReader(input));
+ }
+
+ /**
+ * Parses a JSON object into a Java {@code Map}.
+ */
+ public LinkedHashMap<String,Object> parseObject() throws ParseException {
+ LinkedHashMap<String,Object> toReturn = object();
+ if(!ensureEOF()) throw new IllegalStateException("Expected EOF, but still had content to parse");
+ return toReturn;
+ }
+
+ /**
+ * Parses a JSON array into a Java {@code List}.
+ */
+ public ArrayList<Object> parseArray() throws ParseException {
+ ArrayList<Object> toReturn = list();
+ if(!ensureEOF()) throw new IllegalStateException("Expected EOF, but still had content to parse");
+ return toReturn;
+ }
+
+ /**
+ * Parses any JSON-parseable object, returning the value.
+ */
+ public Object parse() throws ParseException {
+ Object toReturn = anything();
+ if(!ensureEOF()) throw new IllegalStateException("Expected EOF, but still had content to parse");
+ return toReturn;
+ }
+
+ private static String substringBefore(String str, char delim) {
+ int pos = str.indexOf(delim);
+ if(pos == -1) return str;
+ return str.substring(0, pos);
+ }
+
+ public void setNativeNumbers(boolean value) {
+ this.nativeNumbers = value;
+ }
+
+ public boolean getNativeNumbers() {
+ return this.nativeNumbers;
+ }
+
+}
+
+PARSER_END(JSONParser)
+
+// Ignore comments
+SKIP: {
+ <C_SINGLE_COMMENT: "//" (~["\n","\r","\f"])* <EOL>>
+| <C_MULTILINE_COMMENT: "/*" (~[])* "*/">
+| <SH_SINGLE_COMMENT: "#" (~["\n","\r","\f"])* <EOL>>
+| <WHITESPACE: " " | "\t">
+| <EOL: "\n" | "\r" | "\f">
+}
+
+// Common tokens
+TOKEN: {
+ <COMMA: ",">
+}
+
+// Object tokens
+TOKEN:{
+ <BRACE_OPEN: "{">
+| <BRACE_CLOSE: "}">
+| <COLON: ":">
+}
+
+// Array tokens
+TOKEN:{
+ <BRACKET_OPEN: "[">
+| <BRACKET_CLOSE: "]">
+}
+
+// Number token
+TOKEN:{
+ <#ZERO: "0">
+| <#DIGIT_NONZERO: ["1"-"9"]>
+| <#DIGIT: (<DIGIT_NONZERO> | <ZERO>) >
+| <NUMBER_INTEGER:
+ ("-")?
+ ( (<ZERO>)+ | ( <DIGIT_NONZERO> (<DIGIT>)* ) )
+ >
+| <NUMBER_DECIMAL:
+ ("-")?
+ ( (<ZERO>)+ | ( <DIGIT_NONZERO> (<DIGIT>)* ) )
+ ("."
+ (<DIGIT>)+
+ (
+ ["e","E"]
+ ("+" | "-")?
+ (<DIGIT>)+
+ )?
+ )
+ >
+}
+
+// Boolean tokens
+TOKEN:{
+ <TRUE: "true">
+| <FALSE: "false">
+}
+
+// Null token
+TOKEN:{
+ <NULL: "null">
+}
+
+// String tokens
+TOKEN:{
+ <#QUOTE_DOUBLE: "\"">
+| <#QUOTE_SINGLE: "'">
+| <STRING_SINGLE_EMPTY: "''">
+| <STRING_DOUBLE_EMPTY: "\"\"">
+| <#STRING_SINGLE_BODY: (
+ (~["'","\\","\r","\n","\f","\t"]) |
+ ( "\\" ( "r" | "n" | "f" | "\\" | "/" | "'" | "b" | "t" ) )
+ )+>
+| <#STRING_DOUBLE_BODY: (
+ (~["\"","\\","\r","\n","\f","\t"]) |
+ ( "\\" ( "r" | "n" | "f" | "\\" | "/" | "\"" | "b" | "t" ) )
+ )+>
+| <STRING_SINGLE_NONEMPTY: <QUOTE_SINGLE> <STRING_SINGLE_BODY> <QUOTE_SINGLE>>
+| <STRING_DOUBLE_NONEMPTY: <QUOTE_DOUBLE> <STRING_DOUBLE_BODY> <QUOTE_DOUBLE>>
+| <RUBY_SYMBOL: ":" (["a"-"z"] | ["A"-"Z"] | ["0"-"9"] | "_")+>
+}
+
+// Raw symbol tokens
+TOKEN:{
+ <SYMBOL: (["a"-"z", "A"-"Z", "0", "1"-"9"])+ >
+}
+
+
+boolean ensureEOF() : {}{
+ <EOF>
+ { return true; }
+}
+
+Object anything() : {
+ Object x;
+}{
+ ( x = object()
+ | x = list()
+ | x = value()
+ )
+ { return x; }
+}
+
+String objectKey() : {
+ Object o;
+ String key;
+} {
+ (
+ key = string()
+ | key = symbol()
+ | (
+ nullValue()
+ { key = null; }
+ )
+ | (
+ ( o = booleanValue() | o = number() )
+ { key = o.toString(); }
+ )
+ )
+ { return key; }
+}
+
+LinkedHashMap<String,Object> object() : {
+ final LinkedHashMap<String,Object> map = new LinkedHashMap<String,Object>();
+ String key;
+ Object value;
+}{
+ <BRACE_OPEN>
+ [
+ key = objectKey()
+ <COLON>
+ value = anything()
+ { map.put(key, value); }
+ { key = null; value = null; }
+ (
+ <COMMA>
+ key = objectKey()
+ <COLON>
+ value = anything()
+ { map.put(key, value); }
+ { key = null; value = null; }
+ )*
+ ]
+ <BRACE_CLOSE>
+ { return map; }
+}
+
+ArrayList<Object> list() : {
+ final ArrayList<Object> list = new ArrayList<Object>();
+ Object value;
+}{
+ <BRACKET_OPEN>
+ [
+ value = anything()
+ { list.add(value); }
+ { value = null; }
+ (
+ <COMMA>
+ value = anything()
+ { list.add(value); }
+ { value = null; }
+ )*
+ ]
+ <BRACKET_CLOSE>
+ {
+ list.trimToSize();
+ return list;
+ }
+}
+
+Object value() : {
+ Object x;
+}{
+ ( x = string()
+ | x = number()
+ | x = booleanValue()
+ | x = nullValue()
+ )
+ { return x; }
+}
+
+Object nullValue(): {}{
+ <NULL>
+ { return null; }
+}
+
+Boolean booleanValue(): {
+ Boolean b;
+}{
+ (
+ (
+ <TRUE>
+ { b = Boolean.TRUE; }
+ ) | (
+ <FALSE>
+ { b = Boolean.FALSE; }
+ )
+ )
+ { return b; }
+}
+
+Number number(): {
+ Token t;
+}{
+ (
+ t = <NUMBER_DECIMAL>
+ {
+ if(nativeNumbers) {
+ return new Long(t.image);
+ } else {
+ return new BigDecimal(t.image);
+ }
+ }
+ ) | (
+ t = <NUMBER_INTEGER>
+ {
+ if(nativeNumbers) {
+ return new Double(t.image);
+ } else {
+ return new BigInteger(substringBefore(t.image, '.'));
+ }
+ }
+ )
+}
+
+String string() : {
+ String s;
+}{
+ ( s = doubleQuoteString()
+ | s = singleQuoteString()
+ | s = rubySymbol()
+ )
+ { return s; }
+}
+
+String rubySymbol(): {
+}{
+ <RUBY_SYMBOL>
+ { return token.image.substring(1); }
+}
+
+String doubleQuoteString() : {
+}{
+ (
+ <STRING_DOUBLE_EMPTY>
+ { return ""; }
+ ) | (
+ <STRING_DOUBLE_NONEMPTY>
+ {
+ String image = token.image;
+ return image.substring(1, image.length()-1);
+ }
+ )
+}
+
+String singleQuoteString() : {
+}{
+ (
+ <STRING_SINGLE_EMPTY>
+ { return ""; }
+ ) | (
+ <STRING_SINGLE_NONEMPTY>
+ {
+ String image = token.image;
+ return image.substring(1, image.length()-1);
+ }
+ )
+}
+
+String symbol() : {
+}{
+ <SYMBOL>
+ { return token.image; }
+}
Propchange: tomcat/trunk/java/org/apache/tomcat/util/json/JSONParser.jj
------------------------------------------------------------------------------
svn:eol-style = native
Added: tomcat/trunk/java/org/apache/tomcat/util/json/JSONParserConstants.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/json/JSONParserConstants.java?rev=1843309&view=auto
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/json/JSONParserConstants.java (added)
+++ tomcat/trunk/java/org/apache/tomcat/util/json/JSONParserConstants.java Tue Oct 9 16:36:54 2018
@@ -0,0 +1,126 @@
+/* Generated By:JavaCC: Do not edit this line. JSONParserConstants.java */
+/*
+ * 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.
+ */
+
+package org.apache.tomcat.util.json;
+
+
+/**
+ * Token literal values and constants.
+ * Generated by org.javacc.parser.OtherFilesGen#start()
+ */
+public interface JSONParserConstants {
+
+ /** End of File. */
+ int EOF = 0;
+ /** RegularExpression Id. */
+ int C_SINGLE_COMMENT = 1;
+ /** RegularExpression Id. */
+ int C_MULTILINE_COMMENT = 2;
+ /** RegularExpression Id. */
+ int SH_SINGLE_COMMENT = 3;
+ /** RegularExpression Id. */
+ int WHITESPACE = 4;
+ /** RegularExpression Id. */
+ int EOL = 5;
+ /** RegularExpression Id. */
+ int COMMA = 6;
+ /** RegularExpression Id. */
+ int BRACE_OPEN = 7;
+ /** RegularExpression Id. */
+ int BRACE_CLOSE = 8;
+ /** RegularExpression Id. */
+ int COLON = 9;
+ /** RegularExpression Id. */
+ int BRACKET_OPEN = 10;
+ /** RegularExpression Id. */
+ int BRACKET_CLOSE = 11;
+ /** RegularExpression Id. */
+ int ZERO = 12;
+ /** RegularExpression Id. */
+ int DIGIT_NONZERO = 13;
+ /** RegularExpression Id. */
+ int DIGIT = 14;
+ /** RegularExpression Id. */
+ int NUMBER_INTEGER = 15;
+ /** RegularExpression Id. */
+ int NUMBER_DECIMAL = 16;
+ /** RegularExpression Id. */
+ int TRUE = 17;
+ /** RegularExpression Id. */
+ int FALSE = 18;
+ /** RegularExpression Id. */
+ int NULL = 19;
+ /** RegularExpression Id. */
+ int QUOTE_DOUBLE = 20;
+ /** RegularExpression Id. */
+ int QUOTE_SINGLE = 21;
+ /** RegularExpression Id. */
+ int STRING_SINGLE_EMPTY = 22;
+ /** RegularExpression Id. */
+ int STRING_DOUBLE_EMPTY = 23;
+ /** RegularExpression Id. */
+ int STRING_SINGLE_BODY = 24;
+ /** RegularExpression Id. */
+ int STRING_DOUBLE_BODY = 25;
+ /** RegularExpression Id. */
+ int STRING_SINGLE_NONEMPTY = 26;
+ /** RegularExpression Id. */
+ int STRING_DOUBLE_NONEMPTY = 27;
+ /** RegularExpression Id. */
+ int RUBY_SYMBOL = 28;
+ /** RegularExpression Id. */
+ int SYMBOL = 29;
+
+ /** Lexical state. */
+ int DEFAULT = 0;
+
+ /** Literal token values. */
+ String[] tokenImage = {
+ "<EOF>",
+ "<C_SINGLE_COMMENT>",
+ "<C_MULTILINE_COMMENT>",
+ "<SH_SINGLE_COMMENT>",
+ "<WHITESPACE>",
+ "<EOL>",
+ "\",\"",
+ "\"{\"",
+ "\"}\"",
+ "\":\"",
+ "\"[\"",
+ "\"]\"",
+ "\"0\"",
+ "<DIGIT_NONZERO>",
+ "<DIGIT>",
+ "<NUMBER_INTEGER>",
+ "<NUMBER_DECIMAL>",
+ "\"true\"",
+ "\"false\"",
+ "\"null\"",
+ "\"\\\"\"",
+ "\"\\\'\"",
+ "\"\\\'\\\'\"",
+ "\"\\\"\\\"\"",
+ "<STRING_SINGLE_BODY>",
+ "<STRING_DOUBLE_BODY>",
+ "<STRING_SINGLE_NONEMPTY>",
+ "<STRING_DOUBLE_NONEMPTY>",
+ "<RUBY_SYMBOL>",
+ "<SYMBOL>",
+ };
+
+}
Propchange: tomcat/trunk/java/org/apache/tomcat/util/json/JSONParserConstants.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: tomcat/trunk/java/org/apache/tomcat/util/json/JSONParserTokenManager.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/json/JSONParserTokenManager.java?rev=1843309&view=auto
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/json/JSONParserTokenManager.java (added)
+++ tomcat/trunk/java/org/apache/tomcat/util/json/JSONParserTokenManager.java Tue Oct 9 16:36:54 2018
@@ -0,0 +1,847 @@
+/* JSONParserTokenManager.java */
+/* Generated By:JavaCC: Do not edit this line. JSONParserTokenManager.java */
+/*
+ * 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.
+ */
+
+package org.apache.tomcat.util.json;
+import java.io.*;
+import java.util.*;
+import java.math.*;
+
+/** Token Manager. */
+public class JSONParserTokenManager implements JSONParserConstants {
+
+ /** Debug output. */
+ public java.io.PrintStream debugStream = System.out;
+ /** Set debug output. */
+ public void setDebugStream(java.io.PrintStream ds) { debugStream = ds; }
+private final int jjStopStringLiteralDfa_0(int pos, long active0){
+ switch (pos)
+ {
+ case 0:
+ if ((active0 & 0xe0000L) != 0L)
+ {
+ jjmatchedKind = 29;
+ return 17;
+ }
+ if ((active0 & 0x200L) != 0L)
+ return 16;
+ if ((active0 & 0x400000L) != 0L)
+ return 40;
+ if ((active0 & 0x800000L) != 0L)
+ return 41;
+ return -1;
+ case 1:
+ if ((active0 & 0xe0000L) != 0L)
+ {
+ jjmatchedKind = 29;
+ jjmatchedPos = 1;
+ return 17;
+ }
+ return -1;
+ case 2:
+ if ((active0 & 0xe0000L) != 0L)
+ {
+ jjmatchedKind = 29;
+ jjmatchedPos = 2;
+ return 17;
+ }
+ return -1;
+ case 3:
+ if ((active0 & 0x40000L) != 0L)
+ {
+ jjmatchedKind = 29;
+ jjmatchedPos = 3;
+ return 17;
+ }
+ if ((active0 & 0xa0000L) != 0L)
+ return 17;
+ return -1;
+ default :
+ return -1;
+ }
+}
+private final int jjStartNfa_0(int pos, long active0){
+ return jjMoveNfa_0(jjStopStringLiteralDfa_0(pos, active0), pos + 1);
+}
+private int jjStopAtPos(int pos, int kind)
+{
+ jjmatchedKind = kind;
+ jjmatchedPos = pos;
+ return pos + 1;
+}
+private int jjMoveStringLiteralDfa0_0(){
+ switch(curChar)
+ {
+ case 34:
+ return jjMoveStringLiteralDfa1_0(0x800000L);
+ case 39:
+ return jjMoveStringLiteralDfa1_0(0x400000L);
+ case 44:
+ return jjStopAtPos(0, 6);
+ case 58:
+ return jjStartNfaWithStates_0(0, 9, 16);
+ case 91:
+ return jjStopAtPos(0, 10);
+ case 93:
+ return jjStopAtPos(0, 11);
+ case 70:
+ case 102:
+ return jjMoveStringLiteralDfa1_0(0x40000L);
+ case 78:
+ case 110:
+ return jjMoveStringLiteralDfa1_0(0x80000L);
+ case 84:
+ case 116:
+ return jjMoveStringLiteralDfa1_0(0x20000L);
+ case 123:
+ return jjStopAtPos(0, 7);
+ case 125:
+ return jjStopAtPos(0, 8);
+ default :
+ return jjMoveNfa_0(0, 0);
+ }
+}
+private int jjMoveStringLiteralDfa1_0(long active0){
+ try { curChar = input_stream.readChar(); }
+ catch(java.io.IOException e) {
+ jjStopStringLiteralDfa_0(0, active0);
+ return 1;
+ }
+ switch(curChar)
+ {
+ case 34:
+ if ((active0 & 0x800000L) != 0L)
+ return jjStopAtPos(1, 23);
+ break;
+ case 39:
+ if ((active0 & 0x400000L) != 0L)
+ return jjStopAtPos(1, 22);
+ break;
+ case 65:
+ case 97:
+ return jjMoveStringLiteralDfa2_0(active0, 0x40000L);
+ case 82:
+ case 114:
+ return jjMoveStringLiteralDfa2_0(active0, 0x20000L);
+ case 85:
+ case 117:
+ return jjMoveStringLiteralDfa2_0(active0, 0x80000L);
+ default :
+ break;
+ }
+ return jjStartNfa_0(0, active0);
+}
+private int jjMoveStringLiteralDfa2_0(long old0, long active0){
+ if (((active0 &= old0)) == 0L)
+ return jjStartNfa_0(0, old0);
+ try { curChar = input_stream.readChar(); }
+ catch(java.io.IOException e) {
+ jjStopStringLiteralDfa_0(1, active0);
+ return 2;
+ }
+ switch(curChar)
+ {
+ case 76:
+ case 108:
+ return jjMoveStringLiteralDfa3_0(active0, 0xc0000L);
+ case 85:
+ case 117:
+ return jjMoveStringLiteralDfa3_0(active0, 0x20000L);
+ default :
+ break;
+ }
+ return jjStartNfa_0(1, active0);
+}
+private int jjMoveStringLiteralDfa3_0(long old0, long active0){
+ if (((active0 &= old0)) == 0L)
+ return jjStartNfa_0(1, old0);
+ try { curChar = input_stream.readChar(); }
+ catch(java.io.IOException e) {
+ jjStopStringLiteralDfa_0(2, active0);
+ return 3;
+ }
+ switch(curChar)
+ {
+ case 69:
+ case 101:
+ if ((active0 & 0x20000L) != 0L)
+ return jjStartNfaWithStates_0(3, 17, 17);
+ break;
+ case 76:
+ case 108:
+ if ((active0 & 0x80000L) != 0L)
+ return jjStartNfaWithStates_0(3, 19, 17);
+ break;
+ case 83:
+ case 115:
+ return jjMoveStringLiteralDfa4_0(active0, 0x40000L);
+ default :
+ break;
+ }
+ return jjStartNfa_0(2, active0);
+}
+private int jjMoveStringLiteralDfa4_0(long old0, long active0){
+ if (((active0 &= old0)) == 0L)
+ return jjStartNfa_0(2, old0);
+ try { curChar = input_stream.readChar(); }
+ catch(java.io.IOException e) {
+ jjStopStringLiteralDfa_0(3, active0);
+ return 4;
+ }
+ switch(curChar)
+ {
+ case 69:
+ case 101:
+ if ((active0 & 0x40000L) != 0L)
+ return jjStartNfaWithStates_0(4, 18, 17);
+ break;
+ default :
+ break;
+ }
+ return jjStartNfa_0(3, active0);
+}
+private int jjStartNfaWithStates_0(int pos, int kind, int state)
+{
+ jjmatchedKind = kind;
+ jjmatchedPos = pos;
+ try { curChar = input_stream.readChar(); }
+ catch(java.io.IOException e) { return pos + 1; }
+ return jjMoveNfa_0(state, pos + 1);
+}
+static final long[] jjbitVec0 = {
+ 0xfffffffffffffffeL, 0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL
+};
+static final long[] jjbitVec2 = {
+ 0x0L, 0x0L, 0xffffffffffffffffL, 0xffffffffffffffffL
+};
+private int jjMoveNfa_0(int startState, int curPos)
+{
+ int startsAt = 0;
+ jjnewStateCnt = 40;
+ int i = 1;
+ jjstateSet[0] = startState;
+ int kind = 0x7fffffff;
+ for (;;)
+ {
+ if (++jjround == 0x7fffffff)
+ ReInitRounds();
+ if (curChar < 64)
+ {
+ long l = 1L << curChar;
+ do
+ {
+ switch(jjstateSet[--i])
+ {
+ case 40:
+ case 6:
+ if ((0xffffff7fffffc9ffL & l) != 0L)
+ { jjCheckNAddStates(0, 2); }
+ break;
+ case 0:
+ if ((0x3ff000000000000L & l) != 0L)
+ {
+ if (kind > 29)
+ kind = 29;
+ { jjCheckNAdd(17); }
+ }
+ else if ((0x3400L & l) != 0L)
+ {
+ if (kind > 5)
+ kind = 5;
+ }
+ else if ((0x100000200L & l) != 0L)
+ {
+ if (kind > 4)
+ kind = 4;
+ }
+ else if (curChar == 45)
+ { jjCheckNAddStates(3, 6); }
+ else if (curChar == 47)
+ { jjAddStates(7, 8); }
+ else if (curChar == 58)
+ { jjCheckNAdd(16); }
+ else if (curChar == 34)
+ { jjCheckNAddTwoStates(11, 12); }
+ else if (curChar == 39)
+ { jjCheckNAddTwoStates(6, 7); }
+ else if (curChar == 35)
+ { jjCheckNAddTwoStates(1, 2); }
+ if ((0x3fe000000000000L & l) != 0L)
+ {
+ if (kind > 15)
+ kind = 15;
+ { jjCheckNAddStates(9, 11); }
+ }
+ else if (curChar == 48)
+ {
+ if (kind > 15)
+ kind = 15;
+ { jjCheckNAddStates(12, 14); }
+ }
+ break;
+ case 41:
+ case 11:
+ if ((0xfffffffbffffc9ffL & l) != 0L)
+ { jjCheckNAddStates(15, 17); }
+ break;
+ case 1:
+ if ((0xffffffffffffcbffL & l) != 0L)
+ { jjCheckNAddTwoStates(1, 2); }
+ break;
+ case 2:
+ if ((0x3400L & l) != 0L && kind > 3)
+ kind = 3;
+ break;
+ case 3:
+ if ((0x100000200L & l) != 0L && kind > 4)
+ kind = 4;
+ break;
+ case 4:
+ if ((0x3400L & l) != 0L && kind > 5)
+ kind = 5;
+ break;
+ case 5:
+ if (curChar == 39)
+ { jjCheckNAddTwoStates(6, 7); }
+ break;
+ case 8:
+ if ((0x808000000000L & l) != 0L)
+ { jjCheckNAddStates(0, 2); }
+ break;
+ case 9:
+ if (curChar == 39 && kind > 26)
+ kind = 26;
+ break;
+ case 10:
+ if (curChar == 34)
+ { jjCheckNAddTwoStates(11, 12); }
+ break;
+ case 13:
+ if ((0x800400000000L & l) != 0L)
+ { jjCheckNAddStates(15, 17); }
+ break;
+ case 14:
+ if (curChar == 34 && kind > 27)
+ kind = 27;
+ break;
+ case 15:
+ if (curChar == 58)
+ { jjCheckNAdd(16); }
+ break;
+ case 16:
+ if ((0x3ff000000000000L & l) == 0L)
+ break;
+ if (kind > 28)
+ kind = 28;
+ { jjCheckNAdd(16); }
+ break;
+ case 17:
+ if ((0x3ff000000000000L & l) == 0L)
+ break;
+ if (kind > 29)
+ kind = 29;
+ { jjCheckNAdd(17); }
+ break;
+ case 18:
+ if (curChar == 47)
+ { jjAddStates(7, 8); }
+ break;
+ case 19:
+ if (curChar == 47)
+ { jjCheckNAddTwoStates(20, 21); }
+ break;
+ case 20:
+ if ((0xffffffffffffcbffL & l) != 0L)
+ { jjCheckNAddTwoStates(20, 21); }
+ break;
+ case 21:
+ if ((0x3400L & l) != 0L && kind > 1)
+ kind = 1;
+ break;
+ case 22:
+ if (curChar == 42)
+ { jjCheckNAddTwoStates(23, 25); }
+ break;
+ case 23:
+ { jjCheckNAddTwoStates(23, 25); }
+ break;
+ case 24:
+ if (curChar == 47 && kind > 2)
+ kind = 2;
+ break;
+ case 25:
+ if (curChar == 42)
+ jjstateSet[jjnewStateCnt++] = 24;
+ break;
+ case 26:
+ if (curChar == 45)
+ { jjCheckNAddStates(3, 6); }
+ break;
+ case 27:
+ if (curChar != 48)
+ break;
+ if (kind > 15)
+ kind = 15;
+ { jjCheckNAdd(27); }
+ break;
+ case 28:
+ if ((0x3fe000000000000L & l) == 0L)
+ break;
+ if (kind > 15)
+ kind = 15;
+ { jjCheckNAdd(29); }
+ break;
+ case 29:
+ if ((0x3ff000000000000L & l) == 0L)
+ break;
+ if (kind > 15)
+ kind = 15;
+ { jjCheckNAdd(29); }
+ break;
+ case 30:
+ if (curChar == 48)
+ { jjCheckNAddTwoStates(30, 31); }
+ break;
+ case 31:
+ if (curChar == 46)
+ { jjCheckNAdd(32); }
+ break;
+ case 32:
+ if ((0x3ff000000000000L & l) == 0L)
+ break;
+ if (kind > 16)
+ kind = 16;
+ { jjCheckNAddTwoStates(32, 33); }
+ break;
+ case 34:
+ if ((0x280000000000L & l) != 0L)
+ { jjCheckNAdd(35); }
+ break;
+ case 35:
+ if ((0x3ff000000000000L & l) == 0L)
+ break;
+ if (kind > 16)
+ kind = 16;
+ { jjCheckNAdd(35); }
+ break;
+ case 36:
+ if ((0x3fe000000000000L & l) != 0L)
+ { jjCheckNAddTwoStates(37, 31); }
+ break;
+ case 37:
+ if ((0x3ff000000000000L & l) != 0L)
+ { jjCheckNAddTwoStates(37, 31); }
+ break;
+ case 38:
+ if (curChar != 48)
+ break;
+ if (kind > 15)
+ kind = 15;
+ { jjCheckNAddStates(12, 14); }
+ break;
+ case 39:
+ if ((0x3fe000000000000L & l) == 0L)
+ break;
+ if (kind > 15)
+ kind = 15;
+ { jjCheckNAddStates(9, 11); }
+ break;
+ default : break;
+ }
+ } while(i != startsAt);
+ }
+ else if (curChar < 128)
+ {
+ long l = 1L << (curChar & 077);
+ do
+ {
+ switch(jjstateSet[--i])
+ {
+ case 40:
+ if ((0xffffffffefffffffL & l) != 0L)
+ { jjCheckNAddStates(0, 2); }
+ else if (curChar == 92)
+ jjstateSet[jjnewStateCnt++] = 8;
+ break;
+ case 0:
+ case 17:
+ if ((0x7fffffe07fffffeL & l) == 0L)
+ break;
+ if (kind > 29)
+ kind = 29;
+ { jjCheckNAdd(17); }
+ break;
+ case 41:
+ if ((0xffffffffefffffffL & l) != 0L)
+ { jjCheckNAddStates(15, 17); }
+ else if (curChar == 92)
+ jjstateSet[jjnewStateCnt++] = 13;
+ break;
+ case 1:
+ { jjAddStates(18, 19); }
+ break;
+ case 6:
+ if ((0xffffffffefffffffL & l) != 0L)
+ { jjCheckNAddStates(0, 2); }
+ break;
+ case 7:
+ if (curChar == 92)
+ jjstateSet[jjnewStateCnt++] = 8;
+ break;
+ case 8:
+ if ((0x14404410144044L & l) != 0L)
+ { jjCheckNAddStates(0, 2); }
+ break;
+ case 11:
+ if ((0xffffffffefffffffL & l) != 0L)
+ { jjCheckNAddStates(15, 17); }
+ break;
+ case 12:
+ if (curChar == 92)
+ jjstateSet[jjnewStateCnt++] = 13;
+ break;
+ case 13:
+ if ((0x14404410144044L & l) != 0L)
+ { jjCheckNAddStates(15, 17); }
+ break;
+ case 16:
+ if ((0x7fffffe87fffffeL & l) == 0L)
+ break;
+ if (kind > 28)
+ kind = 28;
+ jjstateSet[jjnewStateCnt++] = 16;
+ break;
+ case 20:
+ { jjAddStates(20, 21); }
+ break;
+ case 23:
+ { jjAddStates(22, 23); }
+ break;
+ case 33:
+ if ((0x2000000020L & l) != 0L)
+ { jjAddStates(24, 25); }
+ break;
+ default : break;
+ }
+ } while(i != startsAt);
+ }
+ else
+ {
+ int hiByte = (curChar >> 8);
+ int i1 = hiByte >> 6;
+ long l1 = 1L << (hiByte & 077);
+ int i2 = (curChar & 0xff) >> 6;
+ long l2 = 1L << (curChar & 077);
+ do
+ {
+ switch(jjstateSet[--i])
+ {
+ case 40:
+ case 6:
+ if (jjCanMove_0(hiByte, i1, i2, l1, l2))
+ { jjCheckNAddStates(0, 2); }
+ break;
+ case 41:
+ case 11:
+ if (jjCanMove_0(hiByte, i1, i2, l1, l2))
+ { jjCheckNAddStates(15, 17); }
+ break;
+ case 1:
+ if (jjCanMove_0(hiByte, i1, i2, l1, l2))
+ { jjAddStates(18, 19); }
+ break;
+ case 20:
+ if (jjCanMove_0(hiByte, i1, i2, l1, l2))
+ { jjAddStates(20, 21); }
+ break;
+ case 23:
+ if (jjCanMove_0(hiByte, i1, i2, l1, l2))
+ { jjAddStates(22, 23); }
+ break;
+ default : if (i1 == 0 || l1 == 0 || i2 == 0 || l2 == 0) break; else break;
+ }
+ } while(i != startsAt);
+ }
+ if (kind != 0x7fffffff)
+ {
+ jjmatchedKind = kind;
+ jjmatchedPos = curPos;
+ kind = 0x7fffffff;
+ }
+ ++curPos;
+ if ((i = jjnewStateCnt) == (startsAt = 40 - (jjnewStateCnt = startsAt)))
+ return curPos;
+ try { curChar = input_stream.readChar(); }
+ catch(java.io.IOException e) { return curPos; }
+ }
+}
+
+/** Token literal values. */
+public static final String[] jjstrLiteralImages = {
+"", null, null, null, null, null, "\54", "\173", "\175", "\72", "\133",
+"\135", null, null, null, null, null, null, null, null, null, null, "\47\47",
+"\42\42", null, null, null, null, null, null, };
+protected Token jjFillToken()
+{
+ final Token t;
+ final String curTokenImage;
+ final int beginLine;
+ final int endLine;
+ final int beginColumn;
+ final int endColumn;
+ String im = jjstrLiteralImages[jjmatchedKind];
+ curTokenImage = (im == null) ? input_stream.GetImage() : im;
+ beginLine = input_stream.getBeginLine();
+ beginColumn = input_stream.getBeginColumn();
+ endLine = input_stream.getEndLine();
+ endColumn = input_stream.getEndColumn();
+ t = Token.newToken(jjmatchedKind);
+ t.kind = jjmatchedKind;
+ t.image = curTokenImage;
+
+ t.beginLine = beginLine;
+ t.endLine = endLine;
+ t.beginColumn = beginColumn;
+ t.endColumn = endColumn;
+
+ return t;
+}
+static final int[] jjnextStates = {
+ 6, 7, 9, 27, 28, 30, 36, 19, 22, 29, 37, 31, 27, 30, 31, 11,
+ 12, 14, 1, 2, 20, 21, 23, 25, 34, 35,
+};
+private static final boolean jjCanMove_0(int hiByte, int i1, int i2, long l1, long l2)
+{
+ switch(hiByte)
+ {
+ case 0:
+ return ((jjbitVec2[i2] & l2) != 0L);
+ default :
+ if ((jjbitVec0[i1] & l1) != 0L)
+ return true;
+ return false;
+ }
+}
+
+int curLexState = 0;
+int defaultLexState = 0;
+int jjnewStateCnt;
+int jjround;
+int jjmatchedPos;
+int jjmatchedKind;
+
+/** Get the next Token. */
+public Token getNextToken()
+{
+ Token matchedToken;
+ int curPos = 0;
+
+ EOFLoop :
+ for (;;)
+ {
+ try
+ {
+ curChar = input_stream.BeginToken();
+ }
+ catch(Exception e)
+ {
+ jjmatchedKind = 0;
+ jjmatchedPos = -1;
+ matchedToken = jjFillToken();
+ return matchedToken;
+ }
+
+ jjmatchedKind = 0x7fffffff;
+ jjmatchedPos = 0;
+ curPos = jjMoveStringLiteralDfa0_0();
+ if (jjmatchedKind != 0x7fffffff)
+ {
+ if (jjmatchedPos + 1 < curPos)
+ input_stream.backup(curPos - jjmatchedPos - 1);
+ if ((jjtoToken[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L)
+ {
+ matchedToken = jjFillToken();
+ return matchedToken;
+ }
+ else
+ {
+ continue EOFLoop;
+ }
+ }
+ int error_line = input_stream.getEndLine();
+ int error_column = input_stream.getEndColumn();
+ String error_after = null;
+ boolean EOFSeen = false;
+ try { input_stream.readChar(); input_stream.backup(1); }
+ catch (java.io.IOException e1) {
+ EOFSeen = true;
+ error_after = curPos <= 1 ? "" : input_stream.GetImage();
+ if (curChar == '\n' || curChar == '\r') {
+ error_line++;
+ error_column = 0;
+ }
+ else
+ error_column++;
+ }
+ if (!EOFSeen) {
+ input_stream.backup(1);
+ error_after = curPos <= 1 ? "" : input_stream.GetImage();
+ }
+ throw new TokenMgrError(EOFSeen, curLexState, error_line, error_column, error_after, curChar, TokenMgrError.LEXICAL_ERROR);
+ }
+}
+
+void SkipLexicalActions(Token matchedToken)
+{
+ switch(jjmatchedKind)
+ {
+ default :
+ break;
+ }
+}
+void MoreLexicalActions()
+{
+ jjimageLen += (lengthOfMatch = jjmatchedPos + 1);
+ switch(jjmatchedKind)
+ {
+ default :
+ break;
+ }
+}
+void TokenLexicalActions(Token matchedToken)
+{
+ switch(jjmatchedKind)
+ {
+ default :
+ break;
+ }
+}
+private void jjCheckNAdd(int state)
+{
+ if (jjrounds[state] != jjround)
+ {
+ jjstateSet[jjnewStateCnt++] = state;
+ jjrounds[state] = jjround;
+ }
+}
+private void jjAddStates(int start, int end)
+{
+ do {
+ jjstateSet[jjnewStateCnt++] = jjnextStates[start];
+ } while (start++ != end);
+}
+private void jjCheckNAddTwoStates(int state1, int state2)
+{
+ jjCheckNAdd(state1);
+ jjCheckNAdd(state2);
+}
+
+private void jjCheckNAddStates(int start, int end)
+{
+ do {
+ jjCheckNAdd(jjnextStates[start]);
+ } while (start++ != end);
+}
+
+ /** Constructor. */
+ public JSONParserTokenManager(JavaCharStream stream){
+
+ if (JavaCharStream.staticFlag)
+ throw new Error("ERROR: Cannot use a static CharStream class with a non-static lexical analyzer.");
+
+ input_stream = stream;
+ }
+
+ /** Constructor. */
+ public JSONParserTokenManager (JavaCharStream stream, int lexState){
+ ReInit(stream);
+ SwitchTo(lexState);
+ }
+
+ /** Reinitialise parser. */
+
+ public void ReInit(JavaCharStream stream)
+ {
+
+
+ jjmatchedPos =
+ jjnewStateCnt =
+ 0;
+ curLexState = defaultLexState;
+ input_stream = stream;
+ ReInitRounds();
+ }
+
+ private void ReInitRounds()
+ {
+ int i;
+ jjround = 0x80000001;
+ for (i = 40; i-- > 0;)
+ jjrounds[i] = 0x80000000;
+ }
+
+ /** Reinitialise parser. */
+ public void ReInit(JavaCharStream stream, int lexState)
+
+ {
+ ReInit(stream);
+ SwitchTo(lexState);
+ }
+
+ /** Switch to specified lex state. */
+ public void SwitchTo(int lexState)
+ {
+ if (lexState >= 1 || lexState < 0)
+ throw new TokenMgrError("Error: Ignoring invalid lexical state : " + lexState + ". State unchanged.", TokenMgrError.INVALID_LEXICAL_STATE);
+ else
+ curLexState = lexState;
+ }
+
+
+/** Lexer state names. */
+public static final String[] lexStateNames = {
+ "DEFAULT",
+};
+
+/** Lex State array. */
+public static final int[] jjnewLexState = {
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1,
+};
+static final long[] jjtoToken = {
+ 0x3ccf8fc1L,
+};
+static final long[] jjtoSkip = {
+ 0x3eL,
+};
+static final long[] jjtoSpecial = {
+ 0x0L,
+};
+static final long[] jjtoMore = {
+ 0x0L,
+};
+ protected JavaCharStream input_stream;
+
+ private final int[] jjrounds = new int[40];
+ private final int[] jjstateSet = new int[2 * 40];
+ private final StringBuilder jjimage = new StringBuilder();
+ private StringBuilder image = jjimage;
+ private int jjimageLen;
+ private int lengthOfMatch;
+ protected int curChar;
+}
Propchange: tomcat/trunk/java/org/apache/tomcat/util/json/JSONParserTokenManager.java
------------------------------------------------------------------------------
svn:eol-style = native
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org